再聊聊纵深防御和一点思考

永远要从解决风险的角度出发来思考防御。 纵深防御是通过在系统的各个组件中设置多层安全控制来增强安全性。这种方法确保如果一个安全层防御失败,其他措施仍然可以在后面持续保护系统安全。 这个概念最早来源于军事,在军事中使用纵深防御的目的是延缓敌人进攻,而非完全阻止。 说纵深防御这种很经典的安全理念时候,我

永远要从解决风险的角度出发来思考防御。

纵深防御是通过在系统的各个组件中设置多层安全控制来增强安全性。这种方法确保如果一个安全层防御失败,其他措施仍然可以在后面持续保护系统安全。

这个概念最早来源于军事,在军事中使用纵深防御的目的是延缓敌人进攻,而非完全阻止

说纵深防御这种很经典的安全理念时候,我们必须站在更高角度来看整体安全视角,常见的点是:

  1. 针对同一条攻击路径,有多个防御能力就算是纵深防御吗?

  2. 针对同一攻击手法多层设防?

  3. 是事前、事中、事后防御覆盖吗?

  4. 还是说多层级?例如在应用层、网络层等来做防御?

这是个开放性问题,我认为以上都对,我们要知道,纵深防御是为了解决单点防御能力失效导致被突破的风险,因此在落地时,我们首先需要明确:

纵深防御不要做成了无脑的多层堆砌,导致多层变单层。

例子:

  1. 全套设备都选用一个供应商,要知道,几乎全部软件公司(不止乙方安全)都会为了降低开发成本选择复用代码,这就可能导致你的多层防御会面临被一个漏洞杀穿的风险。

  2. 规则集方面,假设你的边界防火墙、入侵检测、内网安全策略、EDR等使用的规则集是同质化的,那这些规则会对同样的攻击模式有盲点。

  3. 内网安全域的划分也一样,虽然内网通过VLAN分割了,但VLAN之间的访问控制仍依赖同一个防火墙和同样的过滤规则,还是多层变一层...

如何解决呢?

第一个例子简单,就尽量多样化安全解决方案供应商呗;第二个例子,有点难度,首先要尽量不完全依赖供应商给的规则,其次,同一个规则你可以换不同的写法,在不同的层分别部署,例如:

我们知道,在入侵过程中,通常有通过漏洞对自身拥有的权限进行提升,简称提权。常见的提权手法是,发现系统存在的漏洞,执行漏洞利用程序,exp利用漏洞获取一个高权限的shell对吧。那此时我们会发现一个提权攻击中的特点,就是exploit工具自身在执行时是低权限,而得到的shell是高权限,因此检测逻辑也就很清楚了:某个高权限(system? uid=0? )进程(bash? cmd.exe? )的父进程为低权限,则告警。你把这个模式换几种规则的写法,这是一种方案,但换汤不换药;第二种方案就是再做一层纵深,根据行为、系统调用、文件目录监控、审计、进程启动历史等继续做监测。

第三个例子,那就分层多级防火墙再加做好NIDS咯。

落地纵深防御的时候,还需要注意第二个点 - 联动。

什么意思呢?你多层防御一定是互相影响的啊,例如处理误报或者误杀时,排查后发现是WAF导致的,修改策略放行之后,发现还是有误杀,再一查发现是IPS拦截的,又得再调整IPS的策略,再一查发现RASP策略也给拦截了...

在实际应用中,联动做不好出现上文中的现象是常事儿了...特别是内部系统,经常出现对一个操作进行无穷多审批的现象...

所以在实际落地纵深防御时,不仅仅是堆砌各个维度的防御能力这么简单,要尽可能谨慎的做每一层的联动,假设你觉得暂时没能力这样搞,简单的做法就是给出一份文档,告诉操作者或者运营、运维团队修改一个策略的完整流程。

再说回落地,从我的经验看,基于风险角度来落地纵深防御大概有以下几步:

  1. 梳理风险场景,我就用内部风险举例了,抗钓鱼、堡垒机权限乱飞、运维管理和控制等等,需要重点梳理各个场景的路径。这一步应尽可能全,最后聚合;因为很多情况下看起来不同的风险,只是其表现形式不同而已;

  2. 集中起来处理,建设纵深按照应用层、网络层、基础设施层等划分,我更喜欢这样做。因为这样做的优点是有条理,避免遗漏,不会东一下西一下的乱作,做安全切忌没规划,一直救火只能说明安全团队没什么大的规划;其次是这样分层容易把一些建设周期较长的安全设施单独剥离开,越靠近底层的安全建设时间成本就越高,而底层的安全能力建设纯看运气和机会,可以优先把容易建设的上层能力先搞定;

  3. 大家都知道,如果说你的业务全都很重要,那就等于全都不重要...所以做完第二步基础的纵深之后,还是要继续针对重点业务来深挖。例如针对研发和HR团队的终端管控策略完全是不一致的,那相对而言研发的终端管控就需要做的更重点;再例如对敏感系统就算是内部也要做好MFA;

  4. 假设以上步骤全做完了,我们可以说:“已知”风险点都已得到了妥善的加固,未知的安全风险怎么办?对于小规模的团队,做好前三步基本算是“高枕无忧”,但如果企业规模越发膨胀,那就一定需要红蓝对抗来验证安全措施的有效性;另一方面要考虑是不是可以搞零信任了?本文不讲零信任,这里就不细说了

思考

加大纵深,要么是提升覆盖的维度,要么是提升单点的纵深数量,还是点和面之间的取舍。我的经验来看,很多时候针对单点纵深只需要快速增加一些策略、或者投入一部分研发几天就能开发出一个feature解决问题,提升单点的纵深性价比是很高的。

其实大部分公司都是有一点纵深的,无论是网络分割还是应用层身份验证之类,只不过大家的成熟度有所区别,所以你说一个企业完全没安全能力我是不信的...

到底怎么做纵深实际上是一个开放性问题,每家公司的情况不同,没有统一的答案。具体怎么做,还是要根据企业本身状况来思考,本文权当抛砖引玉咯,给大家讲讲我的思路。

LICENSED UNDER CC BY-NC-SA 4.0
Comment