跳转至

安全建设从1到10

你好,我是何为舟。

在上一节中,我们详细描述了作为一个安全从业者,在企业从0到1建设安全能力的时候,所需要重点关注的事项。今天,我们将进一步描述从1到10的过程。

什么是1,什么是10?

首先,我们来定义一下1和10分别是什么。我认为,1代表“够用”,10代表“平衡”。

在上一节中,我们描述的从0到1的过程,本质上是因为企业发展过程中安全缺位,老板被各种安全问题困扰,倒逼着去招聘一个安全团队,弥补安全上的短板。而当你通过各种短平快的方式将安全短板补齐之后,你会发现随着安全攻防的深入,既有的安全防御体系经不起深度的挑战,每个领域都会有大量的细节需要补充完善。

比较常见的一些场景有:

  • 假设企业的开发语言以Java为主,但仍然有10%的业务用PHP实现,那你是不是应该去扩充针对PHP的黑白盒扫描规则?
  • 假设企业的服务器都是Linux系统,但仍然有几十台主机是基于Windows运行的,那你是不是应该去扩充一套Windows上的IDS和RASP产品?

答案看起来是肯定的。视野内有安全短板,也可能成为攻击者突破的入口,当然要去弥补。但事实却未必如此。因为公司对安全水位的需求,是与公司发展阶段、行业属性等强挂钩的。最直观的,公司仍然挣扎于盈利边缘时,不可能花过多的成本去治理潜在的安全风险,就像我们不需要“用6位数的密码来保护2位数的余额”一样。

因此,在我看来,从1到10的10,其实代表着安全和业务取得了平衡,既保障了不出现严重的安全事件,也避免了公司需要无止境地增加安全投入成本。

平衡是什么样子的?

那么,什么情况下可以认为安全和业务取得了平衡呢?可以参照法律行业中,最经典的犯罪预防三角。

犯罪预防三角的理论认为,犯罪行为的三个关键要素:动机、目标和机会。当这三个条件都满足时(即拥有充足的动机、匹配的目标、合适的机会),才会发生犯罪。与之对应的,消减其中任何一个条件,都能够有效预防犯罪。对于网络安全同样如此,攻击者之所以会攻击你的公司,也是动机、目标和机会这三个要素得到了满足,他们不会愚蠢到要花费大力气去做没有收益的事情。

在从0到1的阶段,因为公司基本没有防御能力,机会成本足够低,所以仅需要很微弱的动机,如练手或者炫技,公司就可能成为攻击者的目标。但当你拥有了一定的防御水位之后,这类兴趣驱动的攻击者基本就销声匿迹了。而你就需要开始分析,你面临的新攻击者会有什么样的动机,他们会愿意付出多大成本来取得什么样的目的。

比如,游戏行业会面临同行之间的恶意竞争,他们往往会购买DDoS服务,来拖垮同行的服务,以赢得竞争,因此游戏行业可能需要投入更多的安全成本在抗D上;政企、金融单位会面临来自更大的勒索软件的威胁,就需要投入额外的成本用于备份机制上。

因此,根据公司所在行业和发展阶段,定义面临的攻击对手画像,制定相应的防御策略,是从1到10阶段最核心的建设思路

如何构建攻击画像?

那么,我们应该怎么去构建攻击对手画像呢?可以从情报、攻防、对标三个方向来入手。

情报

情报可以说是最低成本获取攻击者信息的方式了,它也能够为你带来最客观的论据来源。这应该比较好理解,就好比两军交战时,你在对面安插了一个高级间谍,开启了上帝视角,自然无往不利。

情报大体分为两种:事件和IOC。

事件一般是行业内发生的比较典型的数据泄漏、勒索、APT入侵等重大安全事件,通过分析这些安全事件,你可以了解业界的攻防趋势变更和迭代。比如,2020年的SolarWinds投毒事件,直接暴露了供应链风险可以产生的杀伤力;2023年的微软Storm-0558入侵事件,则更加强调公司内部密钥管理的重要性。

IOC,全称Indicators of Compromise,指在行业内已经被识别为攻击者特征的各种数据和信息,这些指标可以帮助我们检测和确认系统是否已经遭受了攻击或入侵。IOC包括多种类型的信息,常见的有:文件哈希、IP地址、域名、文件路径、注册表键、进程名称等。通过监测和分析这些指标,安全团队可以更早地发现和响应安全事件,保护系统和数据的安全。

情报收集的路径有很多种免费的渠道,一方面可以通过搜索引擎收集各个安全媒体的公开报道(在LLM流行的今天,通过一些好用的AI搜索工具,收集的难度大幅度降低);另一方面也可以关注一些情报社区,如微步在线、VirusTotal等。当然,你也可以尝试购买安全厂商的付费服务,让他们以更专业的视角来帮你进行收集、分析和总结。

攻防

攻防也叫做红蓝对抗,其实就是通过模拟攻击者的视角展开攻防演练,来尝试刻画攻击者的攻击路径。当真实安全事件发生的频次降低时,通过攻防演练的形式来获得额外的认知输入是非常有效的一种手段。既可以先于攻击者去挖掘并治理一些风险,在对抗过程中,也能够对安全防御体系的有效性进行验证。

那么,如何进行红蓝对抗呢?在这之前,我先对名词做一下澄清。简单来说,攻击队=蓝军(国内叫法)=红队=Red Teaming(国外叫法)。这里会存在一些国内外习惯叫法上的差异,所以“红”和“蓝”的定义产生了混淆,记住就好,不用在意原因。

进一步细分,攻防演练又会拆分为两种形态:传统的Red Teaming和新型的Purple Teaming。

传统的Red Teaming强调演练的真实性,扮演攻击方的成员会处于完全的外部视角,需要自行探索企业的资产,寻找薄弱点进行突破。尽管具备较高的真实性,但传统Red Teaming所需要付出的成本也很高,尤其当企业安全体系相对完善后,发现薄弱资产并不是一件容易的事情。

因此,很多公司开始尝试进行新型的Purple Teaming模式。Purple是Red和Blue的融合,即扮演攻击方的成员同时具备红蓝双方的视野,可以通过内部视角来分析防守方的薄弱点,然后针对性展开攻击,省去了前期的探索成本。

近两年,BAS(Breach and Attack Simulation)的概念也比较火热,它可以理解成进一步提升攻防演练效率的安全产品。核心思路是将攻击链路拆分成不同的环节(类似ATT&CK),每个环节通过模拟的方式产生包含攻击特征的日志(但不实际攻击),来验证其他安全产品是否能检测到这些攻击特征。在公司安全建设初期,这个方式还算比较有效,但随着对抗的深入,BAS中模拟日志的局限性会越来越高,目前来看还是存在一定的瓶颈。

对标

对标同样是一种非常高效的手段,通过了解和学习其他公司的安全体系设计,看看前辈们如何选取防御重心,并尝试推断他们刻画的攻击者和应对思路。然后依葫芦画瓢,既可以照搬经过验证的技术方案,避免踩坑,也可以参考整体思路来佐证自己的判断。

这里有一些比较经典的公开资料,如Google、Microsoft、Amazon都有自己的安全白皮书,里面详细阐述了它们的分层防御体系设计,我自己也常常拿出来反复研读,每次都能发现一些不一样的细节。另外,我们也可以通过安全大会和同行交流,了解国内其他公司的防御思路,进行参考。

值得一提的是,对标并不意味着照搬全抄。正如这篇文章的关键词“平衡”,你的公司和其他公司面临的攻击对手是不同的,应当付出的安全成本也是不同的。

比如Google为了保障内网的隔离和审计性,要求所有内网通信都使用统一的RPC替代;为了保障代码安全性,要求开发尽可能使用统一的基础库,尽量避免自己去实现认证、加密等安全特性。

这当然是非常理想的安全防御策略,开发规范越统一,安全就越好做。但开发规范统一对公司基建有极高的要求,大部分公司显然不具备这个实力,也不值得为了安全去做这种伤筋动骨的改造。这个时候,就需要你去参照这些头部厂商给出的标准答案,根据公司现状去进行取舍,来取得自己的平衡。

通过情报、攻防、对标三种方式,你应当已经收集到足够的素材了,接下来就是把这些素材进行拼凑整合的过程了。安全行业的专业术语可以参考“威胁建模”,包含STRIDE之类的理论框架。但我个人实操下来,这个过程实际上没有固定的模版,根据不同的安全视野、业务角度、风险偏好,甚至是汇报风格,都会产生迥然不同的效果。

大体会包含两个部分:风险全景图和安全加固列表。风险全景图通常是贴近于业务架构的层次结构图(部分威胁建模的理论会推荐使用数据流图,但对于复杂系统来说,数据流图很难画出来)。安全加固列表则是根据风险全景图,拆分出来的具体加固项目,并且每一项会包含:风险描述、风险等级、加固方案、所需资源投入、时间规划等。我们直接看两个示例。

例如,我们择取Google云架构白皮书的部分内容,其构建的完整攻击画像全景效果如下:

安全加固列表如下:

总结

今天的内容承接上一节的从0到1,延续描述了从1到10的过程。公司的业务发展通常讲究创新,讲究另辟蹊径,但安全的发展仅仅是从0到1的时候符合这种开疆拓土的风格。在从1到10的阶段,则更多是陪伴型的存在,跟随业务的潮起潮落,为其提供所需的安全服务和能力。

这个阶段的你,不要急于去引入各种各样新的安全能力,而是保持运营和关注,通过情报、攻防和对标,来持续判断当前的安全水位是否匹配业务的发展阶段,并做出及时的调整。“善战者无赫赫之功”,这或许是安全从业人员的最终宿命,也是一种超越表面成就的深层次智慧。

如果你有新的想法,欢迎在留言区一起和我分享和交流,我们下一节见。