一、我想重新谈谈安全的本质
在之前我发在安在上的那篇《安全界的“黑天鹅”与“反脆弱”》中,有三个最主要的观点:
1)安全事件的本质是“黑天鹅”事件,安全行业需要面对和解决的是“不可预知的未来”。
2)依据事物三元结构理论,安全所做的一是通过强韧性举措来尽量抵销脆弱性带来的影响,二是通过反脆弱性举措实现从事件和系统脆弱性中持续获益。
3)反脆弱性的理念是拥抱脆弱性,通过在局部的、影响可控的环境中不断激发安全事件,运用循证现象学方法论,持续地实现整体层面的获益传递。
但是,仔细琢磨后,这三个观点实际上只是一种对安全外在表征的总结和看法,仍并未触及本质所在。
那么,安全的本质到底是什么?
这些年,安全行业对安全的本质较有共识的说法是信任感(也有说是不信任感)。在这里,我想从另外角度来看这个问题。
塔勒布《反脆弱》一书的前言中提到一组广义上的“混乱家族成员”,其中包括:熵、混沌、时间、机会、错误、压力、动荡、波动性、随机性、未知性、变化性、不确定性等。而其中“波动性”作为“混乱之王”,足以代表绝大部分其他成员。(唯一例外的可能是时间,但也与波动性极度相似)
借助这个观点,我更倾向于将安全的本质描述为混乱的对立面,即如何在波动性、时间等混乱元素的作用下,实现可持续的秩序。简而言之,就是“秩序”。
因此,在安全领域,对事物三元结构的理解还可以是这样:
脆弱性
一切企图将有序的系统归于无序的事物。
脆弱性是比较好理解的。我们熟悉的有:系统漏洞(对我们来说是错误,对攻击者来说是机会)、缺乏冗余的带宽(压力)、老旧的设备(波动性)、粗糙的业务逻辑(不确定性)、缺乏安全常识的用户(随机性),外部威胁(未知性)、安全事件(变化性和不确定性),以及一切秩序最大的敌人:时间。
强韧性
一切致力于在已知脆弱性基础上,帮助系统建立对应的“免疫”能力的事物。
这种“免疫”能力是一种“筑高墙,广积粮”的做法,代表着静态的“硬式”防御。从理想效果来说,强韧性赋予的“免疫”能力是希望做到无视各种无序因子的作用和影响。
最典型的就有老式的防火墙、网络设备的冗余、各种密码技术的产物(加密机、早期DLP类产品等)、snort模式的传统IDS,以及各种安全基线、制度和标准,等等。
可以说,强韧性是在无序化环境下构建秩序的一大方式。我称之为线性秩序化(后面会说明何为线性、何为非线性)。
然而,就像堤岸之于长江,或是柏林墙之于东西方世界,静态的“高墙”总有能力之限,技穷之时。
这时,我们会很尴尬地发现一个事实,原本我们认为万无一失的这些防御措施,却因先天上的设计理念之故,跟不上这个充满波动性的世界的变化,有的被突破,有的被超越,有的被淘汰,甚至有的转变成为脆弱性的帮凶和一份子。
例如各类加密算法,一旦被破解,那么对于那些用了它们的系统来说,它已经从一个安全设施变成了一个安全漏洞。而在勒索软件领域的另类“发扬光大”,则是它们在诞生之初所万万没想到的身份转变。
反脆弱性
一切正视无序因子的存在并致力于从中获益,帮助系统建立对应的“进化”能力的事物。
反脆弱性是个比较晦涩难明的概念。它与强韧性之间的区别很难直观描述,也经常被混为一谈(PS:有点类似现在的威胁情报和漏洞情报。很多时候,我们会把漏洞情报当做威胁情报来讲,而实际上,两者有着如此多的不同)。因此,我希望从两者赋予系统的能力来进行区分。
什么是系统的“进化”能力?
看过达尔文《进化论》和K.K《失控》的同学都知道,进化来源于突变。而突变并不能在完全有序的超稳定环境中诞生。为什么?因为完全有序的超稳定环境是线性化的,而突变是非线性的,这就消除了突变的可能性。因此,要突变,要进化,就必须将事物放置于无序的环境下,让事物接受刺激,让事物自身隐藏的反脆弱性在刺激下发挥根本性作用,推动事物的改变,从而达成进化的目标。
因此,这种“进化”能力是一种从无序化的内外环境中获益的能力,代表着“动态”的“柔式”防御。从理想效果来看,反脆弱性赋予系统的“进化”能力是希望系统在可控范围内接受各种无序因子的持续考验,并想办法从中获益,最终变得越来越能适应环境的发展。
反脆弱性是在无序化环境下构建秩序的另一大方式。由于其表现出的非线性特征,我称之为非线性秩序化。
需要注意的是,“进化”并非与“免疫”完全割裂的。事实上,在“进化”的同时,“免疫”也会跟着进化和提升,而没有基础的“免疫”能力。“进化”也很有可能成为“退化”,甚至是“消亡”。
因此,我所认为搞安全的核心理念就只有两种:
一是对无序的内外环境执行线性秩序化策略,构建强韧性防护体系,为系统提供“免疫”能力。
二是对无序的内外环境执行非线性秩序化策略,构建反脆弱性防护体系,为系统提供“进化”能力。
二、我们争论多年的三个问题
1)对于一个企业,一个系统而言,它的安全性该怎么描述?
2)怎样才算是安全的?
3)安全与不安全的界限在哪?
这三个问题估计是安全行业一直都在争论的,也是一直没争出个结果的经典问题。
存在争论的原因,在我看来是因为安全性本身是无法准确地描述和表达的。
线性直觉与非线性的安全
抵御多少次攻击算安全?多少比例的漏洞被修补算安全?还是上了多少防护措施算安全?这些统计和概率不是对安全性的直接描述,而是迎合人性天生的“可预测性错觉”和“线性直觉”的一种取巧方法。
这是因为人本身更容易接受的是更趋于线性的思维方式。
以安全为例,我们习惯于将安全划成不同的组成部分,再不断细分至每一个技术点。这使得直觉上我们对安全性的描述和考量会变成一个加减法运算。实现一个技术点,加一分,没实现,减一分。
这也是为什么很多时候,我们会觉得传统的风险评估和风险模型并不能真实反映实际的安全状况的原因。
然而,我们没有意识到的是,安全性这个东西本身是非线性的。试图用线性的思维去解释非线性的东西,本身就是一种错误。
因此,这三个问题的争论引出了一个现实:在当今国内,乃至全球,安全的理念仍旧是侧重构筑强韧性机制,以线性的硬度防御思维去试图覆盖呈波动性和非线性的脆弱性,这就是为何占据主导地位的传统安全公司屡被甲方和新兴安全公司所质疑“无法真正解决问题”的原因。
“双峰策略”
写到这里,我最怕大家误以为我是要吐槽传统安全公司,否定强韧性的作用,所以我要提醒大家,我们最怕从一个极端(不承认安全是非线性的)到另一个极端(认为线性防御完全无用)。在这里,我所推崇的是“双峰策略”。
“双峰策略”(又称为杠铃策略)就像杠铃的两端,简单来理解,就是两头押注,100万元家产,80万元用来存银行(强韧性举措),20万元用来搞投资。那么,我的损失至多20万底限,而受益却没有上限。
放在安全领域,“双峰策略”一方面必须持续投入建立基础性的强韧性防护体系,覆盖已知的大多数脆弱性。这个强韧性体系还能不断通过分析反脆弱性体系,来针对发现的新的脆弱性进行防护策略规则的落地。从落地属性上来看,强韧性的落地就是各种规则式防护,也是必不可少的组成部分。(这从防火墙令人意外地成为2015年增长最快的安全产品领域就可以看出,强韧性虽然传统却是必要。)
另一方面我们必须正视安全的非线性,认识到无法预测的安全事件或未知的脆弱性虽然被我们所厌恶,但是我们却可以通过循证现象学方法论、威胁情报、自动化响应等新兴安全手段,构建应激反应式的反脆弱性监测和响应体系,以支撑监测和响应准度和速度不断提高。只有这样,才能保证在强韧性的强度之外,可以以非线性的手段实现对脆弱性的发现和应对。
如果我们将脆弱性简单理解为“风险”的话,强韧性的最终目的是消除所有的风险,而反脆弱性的最终目的是及时发现所有的风险,并对风险做出高效处置,并支持强韧性体系的持续改进。两者缺一不可。
二、我想给你说说“涌现”和那些漂亮的曲线
怎么判断一个安全决策,或是一个安全机制是属于强韧性层面的,还是属于反脆弱性层面的?
涌现
我想借用K.K在《失控》一书开篇就提到的一个概念:涌现。(无论看这篇文章的你喜不喜欢这书,我个人觉得K.K用这个词和我的主题很有契合度。)
在我看来,“涌现”一词及其后面代表的数学含义,正是区分安全所对应的脆弱性、反脆弱性和强韧性的一种方法。
上一章节中,我们提到脆弱性的“无序”是波动性的,反脆弱性的“进化”也是波动性的,而强韧性的“免疫”则是非波动性的。
而涌现,代表的就是波动性。
那么,在数学上,我们就可以做一个简单的判断法则:
如果将某具体事物、机制对系统的影响看作一个函数,那么对其脆弱性、反脆弱性、强韧性的判断就可以对照着这个函数曲线来判断。
当函数曲线是非线性的,代表着这一事物、机制要么是对系统安全施加脆弱性影响,要么是施加反脆弱性影响,或是一种混合式影响。而这些函数曲线所落在的区间,则是区分脆弱性和反脆弱性的方法。
因此,具备涌现这一特质,会对系统施加正面波动性的质变影响的安全措施或机制,具备的是反脆弱性属性。
而具备涌现这一特质,会对系统施加负面波动性的质变影响的安全措施或机制,具备的是脆弱性属性。
而当函数曲线是线性时,实际并不具备涌现这一特质,对系统的影响是一种叠加式的量变,这种措施或机制,具备的是强韧性属性。
这样干说可能不好理解,我还是用些问题和例子来说一说。
脆弱性的那条“负面涌现曲线”
这里我们可以借助洛克希德-马丁的“杀伤链”(Kill Chain)概念来描述入侵攻击的过程。
我们都能理解,当七步“杀伤链”每完成一步,就代表着攻击者离成功入侵更进一步。这时,我们将系统的受损程度看做一种损失,以系统受损构建纵坐标,以杀伤链完成度构建横坐标。画出的图通常情况是下面这样的。
这是一条非线性的曲线。非线性的曲线代表着,当杀伤链完成度越高时,我们系统受损程度的对应函数是呈几何地增长。同样,系统防护能力也是呈几何地降低。这是一个经典的,体现脆弱性的“负面涌现曲线”(也可视为一个波动曲线,体现对波动性的负面影响,负面涌现这个词是我生造的,欢迎给予建议。另外,不太会画图,凑活着看吧)。
再比如DDOS攻击对系统的影响。
同样,如果不考虑系统的防DDOS措施和已有的带宽大小因素等冗余时,DDOS攻击对系统的受损影响也是一个非线性的“负面涌现曲线”。
强韧性的那条直线
强调强韧性的静态防御体系在面对攻击时的表现如何?比如DDOS攻击。这里我们同样将系统受损程度的对应函数作为纵坐标。
可以看到,以冗余换取强韧性的抗D机制在面对DDOS攻击时,当攻击流量达到抗D的临界点前,其表现是线性的,不存在任何波动。然而,一旦达到临界点后,抗D的强韧性机制被瓦解,随着流量的逐步增大,对系统响应能力会呈几何式的负面影响,开始呈现脆弱性的“负面涌现曲线”,开始受到波动性的负面影响。
同样,从这个图可以看到,强韧性的线性表现实际是个覆盖的效果。用线性的防护能力边界去覆盖可能的脆弱性。这种覆盖是有限度的。
反脆弱性的那条“正面涌现曲线”
来看典型的反脆弱性机制(这里我打算用威胁情报来举例)的表现。
反脆弱性安全机制的图我一直在构思怎么画。实际就像我所说的双峰策略一样,反脆弱性机制必须和强韧性机制联动才能发挥足够的作用。
因此,我打算用一个系统收益(安全程度)成本(受损程度)对比图来说明。我们将系统收益(安全程度)作为正向纵坐标,系统成本(受损程度)作为反向纵坐标。同时,我们将外部威胁和攻击行为数量作为横坐标。
那么,不考虑各类安全机制,这个曲线图是这样的。
我们将威胁情报所采集到的针对系统的威胁数量作为横轴(威胁数量越多,可以认为代表的攻击越多),那么威胁情报直接或间接对系统的安全性影响应该正是一条经典的,体现反脆弱性的“正面涌现曲线”(同样是一条波动曲线,体现对波动性的正面影响)。
当然,上述都只是简单的例子和简单的划线。实际情况中,我们还要考虑到时间、随机性等其他至关重要的因素,因此这些曲线在许多细节上(如果按不同的细粒度来观察)会呈现一种波动的状态,但整体趋势可认为大致如此。
三者的相互作用:被抵消的波动性与对波动的覆盖
而用最简单的加减法来看,我们提供正向安全能力的威胁情报涌现曲线,与威胁和攻击带来的负向涌现曲线,可以进行两两抵消。最终再通过强韧性去覆盖抵消后的波动曲线。即可以达到我们所希望的,对脆弱性和风险的全面把控。
这就是我们最终所期望看到的,也是安全最终想达到的效果。用反脆弱性机制给系统带来的具有正向涌现效果的波动性,去尽量抵消脆弱性元素带来的负面涌现效果的波动性,使其波峰和波谷被限制在我们通过一定的强韧性安全机制即可覆盖的区间内。这时,我们才可以自信地说,我们的系统足够安全了。
威胁情报可以看作是反脆弱性中的一个基本措施了吗?
威胁情报并不是一个基本措施,而更像是一个增强措施。反脆弱性的基本措施应该是一套自适应网络。这个可以参考美国的综合自适应网络安全防护框架(IACD)。自适应的逻辑很适合反脆弱性的定义。