跳到主要内容

设定高目标

蚂蚁期间我第一次定安全团队的目标时,写了 30 多个 KPI——漏洞发现率、修复率、自动化率、合规率、SLA 达成率…… 看起来很完整,第二年回看:80% 的指标对实际风险控制没有帮助,团队花了大量时间在"达标"上,最关键的高级威胁防护反而是空白。目标设定错,越努力越偏离。

"先做正确的事,再正确地做事"——目标设定就是"做正确的事"的源头。目标错了,后续一切都错。 因此在目标设定上多花些时间想清楚是值得的——此时的慢是为了后续的快。

目标从哪里来

很多情况下我们面临的问题不明确,老板的要求不具体,需要我们自己寻找目标。 多数情况下,我们的目标来自于上级老板目标的拆解。要拆解老板的目标,首先得理解上级方向、目标和策略,找准自己团队的定位和独特价值。

与主管对焦其目标背后的意图——主管的目标背后的"为什么"往往没写在 OKR 里。也需要了解各个横向团队和上下游的规划——你的目标如果孤立于其他团队,最终会卡在跨部门协调上。

在确定目标之前,需要回归初心——你在团队中到底扮演了什么样的角色?是在为谁服务?能发挥什么价值?目标设定第一原则是从客户价值出发。 对于安全团队来说,脱离风险的目标设定是一切灾难的源头——我见过太多安全团队其实在自娱自乐,原因在于多数公司老板是不懂安全的,安全的事情基本上安全负责人说了算,导致如果愿景和目标没想清楚就会出现所做的事情对实际风险控制没有太大帮助,一旦遇到针对性的高级威胁所有的工作形同虚设。

怎么从"通用目标"推到"具体目标"

以应用安全团队为例,可以从风险角度出发——打开脑洞想一想我们期望将风险控制到什么程度。

问题一:没有漏洞? 没有漏洞不太可能,我们知道只要有人写代码就会产生漏洞。

问题二:有漏洞但不能被利用? 安全本质是对抗,任何防护都有可能被绕过。

问题三:有漏洞但都被我们发现了? 发现必然存在风险敞口。

问题四:有漏洞都被我们上线前发现了? 发现也意味着必然存在遗漏。

很多企业安全体系建设会有"重检测、快响应"的指导思想,这类做法有其优势——安全团队自行即可做好;但不足之处也非常明显——同样存在遗漏和风险敞口。检测必然存在遗漏,上线后面向的往往是全世界的攻击者,你和他们是同一起跑线,比谁更先挖出漏洞。

但如果能在上线前将整体风险敞口缩小到企业内,这对任何以结果为导向的企业来说都更可接受。

问题五:不断发现和修复好像也有问题? 我们需要让新写出来的漏洞不断减少——规避好于发现。这里提到的是"规避"而非"发现","发现"代表的是上线前工作的一部分,此外上线前还有诸如意识提升、安全防护组件等工作,"规避"更能体现这些工作期望达成的目标。

当通过上面一次次推敲后,会发现思路和路线逐渐清晰起来。此时可通过一句话直白地描述目标,这样大家就能一听就懂,并且能快速记住

所有的安全风险在上线前高效规避,零软件安全风险能被利用。

前半句是期望将风险规避在上线前,这和建设阶段相关,一旦风险上线后再去发现、感知、止血,就必然存在遗漏和风险敞口,这对于风险敏感型企业是不可承受的——这是在引导后续的安全建设,为后续的安全建设指明方向

后半句是当有风险遗漏后也无法利用成功,建设期间必然还是会有风险遗漏到线上,因此需要通过各种方法来解决这些遗漏风险被利用的可能。

这其实就是我们这个部门的愿景,也是指引我们长期建设的方向。 我们需要根据企业实际情况,围绕愿景确定短期目标。不同公司、不同阶段距离这个愿景的差距也不一样——也许还很遥远,也许已经快接近了。

这里将其定为两个 O

  • 多数安全风险在上线前高效规避
  • 极少软件安全风险可被利用

可以看到,这个目标很有挑战性,但也能激发大家的斗志,通过各种创新的方式去达成。但要注意,不能照搬上级的 O,或只是简单地对上级 O 进行数字拆解。 这个目标有几个特性:用一句话清晰明确地体现客户价值,有挑战,也有方向感,同时一层层拆解后的目标也有延续性。

用 OKR 描述目标

OKR(Objectives and Key Results)分为 O(Objectives,目标)和 KR(Key Results,关键结果)两步。O 是指我们期望达成什么样的状态。KR 是指哪些结果达成后能表明 O 完成了。

确定了目标后,需要进一步拆解当哪些情况达到了就说明目标完成了,也就是确定 KR。KR 最重要的点是看这些都达成了是否就能支撑 O 的完成,需要拆分到最细粒度且可衡量,但并非事无巨细的罗列,另外描述上要清晰易懂,有过程和结果,符合 SMART 原则。同时不宜过多,建议不超过 5 个。

O:多数安全风险上线前高效规避。

  • KR1:上线前高效发现绝大多数风险(上线前发现率、自动化发现率、公网接口评估率、已发现风险 0 遗漏上线)
  • KR2:重难点风险攻克(水平越权上线前遗漏、逻辑漏洞遗漏)
  • KR3:整体漏洞趋势向好(千行代码漏洞率)

既然希望多数的安全风险上线前高效规避,首先多数风险应该是上线前被发现解决的,因此上线前漏洞发现率要有一个指标。但如果只有这个指标就会导致大量的人肉渗透测试工作,因此上线前的漏洞发现也需要自动化比例的。在不同阶段将面对不同的风险类型,因此对于其中的重难点风险可以单拎出来专项跟进,比如水平越权。

O:极少软件安全风险能被利用。

  • KR1:绝大多数安全风险自主发现(自动化发现率、可造成入侵/数据泄漏/资金损失的漏洞数),按时修复漏洞(修复率、修复时效达成率)
  • KR2:高频持续推动外部机构检验(举办 SRC 高倍奖励众测、外部顶级厂商攻击、参加各类攻防比赛)
  • KR3:及时全面应急 Nday 漏洞(应急平均时间、应急遗漏次数)
  • KR4:增强高危 0day 漏洞防护(RASP 可信防护、禁外联、三方软件流量可信覆盖率、依赖包投毒遗漏、外采应用高危漏洞)

看完上线前,再看上线后的。理论上必然存在各种遗漏到上线的风险,因此如何能保证风险上线了也无法被利用呢?第一部分就是让多数风险都是自主发现并解决掉,也就是自主发现率。同时当漏洞比较多的时候,还应该设定遗漏漏洞的绝对值,对那些可造成入侵/数据泄漏/资金损失的漏洞要小于几个。自主发现率是依赖外部人员挖掘漏洞的,那就有可能外部人员刚好没挖指标就躺着达成了。因此需要高频持续推动外部机构进行检验。

除了我们自己写出的代码产生的漏洞外,我们所使用的各类软件、框架、组件依赖包等都会产生漏洞,其中一部分各类平台会有预警和分析,我们需要做的是确保及时的发现这类情报,并排查影响范围、止血以及推动修复等工作。但情报的覆盖范围是有限的,一些安装依赖包时触发后门这类高风险并没有可靠的情报源,针对此部分可通过设定相关指标来牵引安全建设。

最后一部分是 0day,这部分的防御确实很难,但始终要面对的。通过推动可信级的 RASP 覆盖所有应用来防止高危型的 0day,并针对所有应用禁止回联外网,来缓解 0day 的风险。最后对于一些采购的三方软件,无法覆盖 RASP,于是通过为其定制请求参数过滤,实现请求可信,来降低各类常见高危漏洞的防护,同时将这些外采应用都隔离起来,网络访问最小化,避免出现问题后影响范围扩大。

追求过程而不是追求结果

在制定 KR 时往往有一个误区——大家更多在追求结果指标,而非过程指标。 但实际情况时我们应该去定可以控制的指标,结果指标要少用。以上面提到的漏洞自主发现率为例,我们期望多数漏洞都是自己发现的,于是设定通过一个终极目标漏洞自主发现率作为 KR 来衡量安全漏洞发现工作的好坏。

如果单单以这个作为最终指标,就可能产生对于外部发现的漏洞被低估或给的奖励少,甚至不主动举办安全众测活动。会发现影响这个指标的因素很多,也许我们什么都不做,也没有外部白帽子挖到我们漏洞,那指标也达成了。

所以对于达成自主发现率那一定需要有支撑它的过程指标——我们会关注到底哪些 KR 可以支撑自主发现率,比如公网每一个接口是否都进行了渗透测试、各类扫描器对公网漏洞是否都能及时有效的发现、每一次 nday 排查是否覆盖了所有公网应用、是否有邀请外部各种白帽子、安全公司进行高强度检验来验证最终效果等。

我们应该关注驱动一件事情最核心的要素,而不是关注事情发生后的效果。

OKR 和 KPI 的区别

两者本质都是为了促进目标达成。其最大的区别在于是否为目标导向——在 KPI 的模式下,侧重的是对结果的考核,看最终的衡量指标是否达成了。这会导致一些问题:比如设置目标的时候要求没那么高、指标定的没那么合理,或是采取一些取巧的方式去达成,甚至使用一些损害用户价值的方式去实现。

OKR 则是以目标为出发点,并通过对关键结果的描述来判断最终目标是否达成——它能够让全员参与逐级从上到下分解,也可以从下到上对焦。举例来说,KPI 有点像运动裁判,他会拿着秒表关注你最终的成绩。OKR 有点像运动教练,也会关注你的成绩,但同时更加关注你的运动方式、运动强度、饮食作息等是否能支撑你拿到好的成绩。

听着好像是 OKR 比 KPI 要好,那为何之前阿里巴巴会使用 KPI 呢?大家都知道阿里的价值观,其中就有客户第一,以及对管理者的要求也会有客户价值优先的体现。也就是说在之前阿里依靠的是管理成熟度和文化价值观来驱动大家设立正确的 KPI,但随着新进的管理者比例提高,管理成熟度变低的同时公司文化传递效率也存在问题,所以逐步通过 OKR 这类工具来支撑。

有一点要说明,不同公司对于 OKR 的理解和实施都不太一样,阿里这边目前阶段更多的是通过 OKR 和 KPI 融合的方式。

上下左右对焦目标

定好 OKR 后,还需要去持续与上下左右对焦。我们的 OKR 是否能有效的支撑上级的 O。能影响我们 OKR 的相关方是否知道,需要谁的支持时我们 OKR 是否在对方 OKR 中。

这其中对于直接参与 OKR 的人员需要进行宣讲——听得懂目标,记得住目标,同时对目标的理解一致,让每个人都能找到自己的位置,知道自己的职责和价值,让参与的人员知道目标达成后对公司的价值,能让我们的安全达到一个新的水位。

对焦完之后需要跟进好 OKR,这就需要制定达成策略以及里程碑制定,确定一号位和各子域负责人,并持续跟踪。

一个关键的目标判断

目标设定中真正重要的真理是:好的目标不是"能达到的目标",是"看起来不太可能但必须努力的目标"。 设定"能达到"的目标,等于放弃了突破的可能;设定"完全不可能"的目标,等于浪费时间。

判断目标好坏的真正标准不是"它能不能达到",是"它让团队变成什么样"。 一个高目标会逼着团队建立新能力、打破惯性、形成新协作方式——即使没完全达到,团队的能力也升级了。一个低目标让团队轻松达到,但团队什么都没变。

目标设定 = 对未来下注。 你下注的目标决定了团队接下来一段时间投入的方向——下注错了,再努力也是浪费。所以目标设定的"慢"和"慎重"是值得的——这一小时想的清楚,胜过接下来三个月的"努力"。

一个更深层的洞察:很多时候目标达不成,不是执行问题,是目标本身错了。 目标错了,再好的执行也达不到;目标对了,执行的问题有更大的可解空间。所以每季度复盘时,最重要的问题是"这个目标还对吗",不是"我们执行到位了吗"——前者决定要不要换目标,后者决定要不要换人。