作者:nEINEI、vxjump
原文链接:http://www.vxjump.net/files/aptr/aptr.txt
APT(Advanced Persistent Threat)是当下网络安全防御面临最大的高级威胁之一。目前最被认可是多层立体的防护解决方案,继而人们又提出共享威胁情报等方式[1]。 这些方法倡导集中现有资源互联互通,增加攻击者成本的方式来整体对抗高级威胁。总之,这些是从应对问题的层面提出的防御方法。
本文将从挖掘APT本质的角度出发,归纳推理出一系列关于高级威胁的特性并以此做为安全研究,防御体系设计的指导原则。同时对攻击能力进行量化研究,形成有序数据,这将对预测APT的发生,了解防御能力的有效性方面给出扎实的实践基础。例如,从技术角度看火焰病毒Flame和造成乌克兰大面积断电的BlackEnergy哪一个攻击性更强?如何证明给客户看防御总是有效果的?攻击者在未来可能出现的技术走向等等难以明晰但迫切需要解决的问题。
首先,必须明确APT问题是人为定义的价值判断而不是事实判断。
捕获到攻击者利用的0Day漏洞算是APT吗?抓到特种木马算是APT吗?通过威胁情报“感知并跟踪”到敏感事件算不算是APT?诸如此类的混乱不清的根源就是价值判断缺失。这里的价值判断是说这个事物是否具有我们要求的某个客体的价值。APT的问题如果不拿到特定的语境中去讨论,其结果只能是陷入“到处都是APT”的混乱当中[2]。这里的特定语境就是人为认定的价值判断条件组合起来的语境。缺失,就是却少对这些条件的设定及约束,仅从简单事实开始,以此来推断事件可归类到APT当中的结论。
有能力的安全厂商可以自己去定义哪些情况下是APT事件,它已经越过了简单事实判断的阶段。这一点好转是从2014年开始的[3]。一些严肃的安全厂商在不能完全确信是APT的情况下开始使用Threat Actor或是Target Attack来代替。因为作为一次被发现的攻击行动,ThreatActor是个适合的称谓,这避免了关于能不能算得上是高级威胁的似是而非的判断,但本质是什么的问题就又像踢皮球一样回到了我们的面前。
很多这方面的技术人员觉得什么是APT根本是个不需要讨论的问题,因为大家理解我们网络空间所发生的APT指的是什么样的事情。
但实际上,关于这个问题,我们从来都没有得到一个严肃的缺少争议的概念上的认同[4],进而也得不到一个认清本质的机会。
为了使我们的问题清晰且可被描述我遵循以下原则的设想:
此时,你已经知道我所说的的APT是指什么样的安全事件了。
但在谈论到APT时,大众和技术人员仍然存在一种模糊的认识,似乎高级的漏洞利用技巧,强大的系统底层编程技术,领先的攻击思路运用,并被掌握在某些“神秘色彩”的组织手中的应用算得上是APT。如果有能力追踪并公布出这样的APT组织,那就是高人一筹的了。而对APT的防御则认为就是一种综合的体系对抗。这其实是过于乐观的估计了这一问题,无助于认清本质。其实不需要去解释什么是Advanced ,什么是Persistent,Threat,这就如同拿“字典”去查成语一样白费功夫。事实上,APT早已不是它所定义时的初始含义[5]。但我们必须要将此问题彻底透彻的解决,否则就不可能认识到我们所面临的真正问题。
在解决真正的本质问题前,我们有必要回顾一下业界的解决方案。
在防御APT的问题当中,FireEye是一个贡献很大,值得尊敬的企业。他们发现了很多APT攻击事件,他们强调0Day漏洞的捕获能力在APT产品防御中的重要性。这一思想引领了众多安全企业的产品开发思路,基于虚拟机的自动化行为分析系统随即成为行业的热点。 在2013到2015年全球出现40个ITW 0Day[6]攻击事件,FireEye发现了其中的25个ITW 0Day,遥遥领先其它巨头安全厂商。虽然25个0Day并不等于25个APT事件,但其影响远不是25个APT事件所能概括的。例如在2013年2月,作为最早发现CVE-2013-0640/0641的FireEye并没有确定及谈到与此漏洞有关的任何APT相关事件,但在其后2个月左右被发现该漏洞可能被MiniDuke APT组织所改进利用,同年4月份在中国台湾省地区也同样发现了利用CVE-2013-0640的APT样本。当非常多的ITW 0Day出现后,很自然的让人们相信解决0Day漏洞才是APT问题的第一要素。
紧接着windows8.1sp3发布,而后win10的安全特性持续改进,ITW 0Day的利用也出现减少的趋势。(对攻击者来说这需要一个适应窗口期去解决类似绕过MemGC,CFG,ACG,EPM等安全机制的问题,所以在2014,2015年风向转为攻击相对安全性较弱的AdobeReader/flash/office而不是去对抗IE11,Edge。)但实际上,被挖掘出来的新增APT事件却持续增多[7]。所以,0Day漏洞和APT问题并无直接强关联性,这是第一个层面。第二个层面0Day利用是和攻击者策略存在一定的关系。不可否认利用热点政治事件成为APT攻击中的一个策略[8],可以利用这样的事件做进一步钓鱼攻击。显然对攻击者来讲,何时使用0Day是策略问题,而非其唯一手段。因此0Day漏洞在APT问题中受限于2个层面,系统安全性层面,策略层面,前者越来越难于攻破[9],后者具有一定的不确定性,所以0Day漏洞的使用只是APT问题的突出表象之一,不具备用来定性APT问题的基础。当然,FireEye也意识到这个情况,从他收购Mandiant(2014年),iSHIGHT Partners(2016)时就开始更新了它的防御观念了。
另外的解决方案中以卡巴斯基,赛门铁克,McAfee,TrendMicro为代表的安全厂商发现了大量的APT事件[10]。这代表了以积累深厚安全检测经验为主要能力的厂商如何挖掘APT事件的技术方向。以卡巴斯基为例,强大引擎保证可以挖掘潜在高价值样本,合理的病毒命名体系保证了样本关联的一致性[11],使得其对样本关联挖掘,线索追踪方面具有得天独厚的优势。简单说,一条高质量的启发式特征可以扫描出潜在关联性样本。当利用启发式规则命名一个病毒样本后,更新这条规则后分布在全球的产品将立即告诉你还有哪些地区存在类似的感染情况。例如ProjectSauron APT(发现于2016)[12] ,我编写出针对导入表加节信息的启发式规则,对感染x86平台样本提取一个启发式规则(2009年的样本),同样也可以检测出x64平台下的ProjectSauron(2012年的样本)[13]。卡巴斯基使用反病毒模拟器技术检测该APT样本具有同样的效果,病毒名字是:HEUR:Trojan.Multi.Remsec.gen 。
传统厂商的优势是可以集中一流的研究人员去挖掘丰富的有效威胁资源,这是在近几年window ITW 0Day漏洞减少的情况下仍然保持一定速率曝光APT组织的原因之一。但偶然性和滞后性的问题也难以克服。震网Stuxnet被发现不是因为AV/IDS/IPS/FW等设备报警,而是在客户机器上的不断的BSOD引起了VBA32研究员的注意,至此才引发多个厂商的接力分析。同时,样本信息的缺失也将导致错过重要的APT事件,例如我分析Duqu遇到的问题[14]。目前,事后的分析能力和实时的报警能力是传统厂商最倚重的基础,即样本是APT事件的主要的推动力。2013年以前,绝大多数厂商奉行独特的高水平样本是APT的主要性质,目前开始接受低技术水平的样本也能体现出APT,例如Patchwork APT(发现2016) [15]。因此恶意样本所体现出的技术性是APT所浮现出来的外在表象之一,但不是本质属性。对我们来讲,不能认为高度定制化的恶意程序代表了APT。但挖掘这类利用工具及其相关性是挖掘APT问题的一个重要方面,即关于恶意样本具有高级威胁导向性的研究。
以CrowdStrike为代表的一类新兴安全公司,体现了贯彻Kill Chain的防御思路,但技术方面并不是它的主要特点。从一开始CrowdStrike就对地缘政治问题,经济活动,热点事件给予足够的关心。在命名EMISSARY PANDA APT(发现于2013)[16]时,技术圈开始还是略带嘲讽的态度看待,同Mandiant的APT1报告中详尽的技术细节相比,CrowdStrike的报告突出的是事件以及自身情报系统的作用。这一点在其之后的2014/2015年度安全报告中有了更具体的体现,也就说漏洞,样本都是处于从属地位的,事件背后的含义才是定性APT的关键因素。0Day或是N-day,高质量或是低质量的样本都不重要,发现这样的事件才是重要的,一切防御都围绕在这一个框架下进行。
这似乎比前2种情况有了更深一步的思考。但显然,对任何一个组织来说,事件的确认上是存在很大的差异的。受攻击者信息是否搜集完整,逆向分析程度是否足够深入,关联性是否可信,直接证据,间接证据是否充足,事件所持立场因素都会影响最后的结论判断。例如Gauss APT(发现于2012)[17]的发现,重要在于对Stuxnet,Duqu,Flame对持续跟踪,经过关联研究发现了Gauss APT,如果没有前面的研究,即便漏洞,样本都放在分析人员面前也未必可以完全确认是否属于高级威胁,而Gauss被发现前隐藏的很好,没有产生“任何事件”。因此,事件是活跃APT的表象之一,未活跃的是我们看不见的但仍然存在威胁。
总体上讲,这就是目前阶段针对APT防御的三种主要思考方式,另外还有从流量异常角度,云端虚拟机分析,大数据分析角度,情报分析角度,态势感知等角度的思考方法。但就目前的防御措施来看,以上的这些情况归纳起来就是对APT存在的各种表象问题进行识别的方法。
很多人会说“即便这些都是表象,但也代表了APT问题的事实,也是有意义的”。这样的判断并不完全错误,但如果忽略影响表象的内在动因的分析,将犯就事论事的错误。让我们先设想 一个熟悉的攻击场景,攻击者要完成下面7个步骤,
APT组织考虑到目标人物的安全意识很强,因此针对2,5,6点开发了最新的技术来绕过所有的已知的安全防护措施,整个任务实施时间约半年时间。这是你听到的最多的关于APT的故事,原型也是一个真实的APT案例[18]。
下面我们把APT组织从描述中抹去。替换为分布在互联网上擅长不同领域的程序开发人员,仅通过论坛交流技术,相互间并不十分熟识。他们共同认识的X某人组合了这人开发的技术要素,完成了上面7个步骤,成功的入侵了该企业核心人员的计算机。那么请问,这是否认属于APT呢? 似乎有些不容易回答。
我们再把文中提到的核心人员替换为实习人员。此时,我们已经很难肯定这和APT有什么关系了。虽然这一事件包括了一系列的外在表象,0Day漏洞,定制化样本,攻击事件的产生。但无具体目的的一群人攻击了毫无关系的一个人,把这样的事情和APT联系起来总是牵强。但是,这样的事情在网络空间里面层出不穷,显然失去了组织方与攻击的目标后再去谈论APT问题是缺乏理解的表现。把这样的设想当作例子虽然不够严谨,但实际情况是,我们总能看到这样缺少攻击目的不完整的话题被讨论来讨论去。混乱的原因就是表象的争论并不能代表其理解了本质进而做出合理的判断。
下面彻底来审视一下我们的问题。高级威胁的本质是什么,换句话说代表高级威胁的APT它的本质是什么。不妨将APT本质想象成一个黑盒子,它外在的表象是0Day漏洞,定制化样本,上游投毒,感染固件,网络攻击事件,信息窃取,断电攻击...等等层出不穷的事件表象。
+-----+---\ { 0Day 漏洞 }
| |--------> 表象 { 定制化样本 }
| APT本质 |--------> { 层出不穷的事件 }
| |... { ... }
+---------/
显然,这个本质里面要能演化出如此多的表象需要包括: {人,组织,目标, 决策,操作步骤,方法,浏览器研究/内核安全/邮件安全/移动安全/IoT研究,网络研究/固件/安全设备逆向,具体代码编写,模块测试,...}
且需要有强有力的组织的去调度协调这一系列步骤流程。
但归纳总结起来就只有两点:
1. 人,组织,目的,决策,操作步骤,方法,抽象起来就是攻击者意向的存在 。
2. 后面这些都是具体资源的合集,抽象起来就是攻击素材的存在。
只要攻击者意向存在,即便是潭死水也可以不断地创造出不同的表象来进攻网络空间。同时攻击素材越多攻击能力就会越强大,例如由Shadow Broker曝光的Equation APT组织用到的攻击模块数量,质量上远高于其它系列的APT组织[19]。其攻击能力明显处于金字塔尖上。
让我们再进一步思考,是否有必要强调APT攻击意向及APT素材的特殊性?其实这是区别于非APT攻击的一个最重要性质。没有APT攻击者意向就是缺乏明确的目的,没有攻击素材的特殊性(充足的“网络军火库弹药”)就不能达成APT的目的,二者缺一不可。再扩展一下,普通攻击其实也包括攻击意向和攻击素材。但这里的“个人的攻击意向”要远远弱于APT攻击意向,APT攻击意向是由强大的组织来决定的,且不以个人意志为转移,这是APT攻击具有长期性的一个体现。另外普通攻击素材也是良莠不齐,取决于攻击者群体及个人的知识技能储备情况。
至此,我们已经可以明确APT和普通攻击并无本质区别,都是由攻击意向和攻击素材决定的,APT是普通攻击的加强演化版本。所以就防御思想而言,并不存在一个我们苦苦追求,却仍然没有被发现的超一流APT检测方案存在。 我们丰富现有的资源,侦测更多的APT表象是最踏实的做法。
从对抗角度看,这种攻击者的APT意向是我们当前无法主动消除的,也就是说对方什么时候出拳不由我们决定,因此,防御的滞后性是先天决定的,它不是技术层面可以解决的,但APT意向可以被引导弱化或是加强。有人喜欢讨论杀毒软件特征码技术具有滞后性,因此认为动态行为分析,或者引入人工智能是解决APT的最佳方案,这也是看不到这个层面的问题所导致的片面认识。但应当指出,开发强大的防御体系具有威慑效果,它会使APT攻击者在决策时陷入困难并可能选择防御较弱的目标作为优先被攻击对象。
另外APT素材具有相当复杂的多样性,这是由防御者能力来激发的。被攻击目标的难易程度,攻击策略的选择都将导致APT素材的不断变化。需要仔细研究的案例就是BlackEnergy APT(2015被发现)[21],这起APT事件的幕后操纵者Sandworm团队技术能力出众[22],但整个攻击过程没有使用一个0Day漏洞(面对如此复杂的电力系统攻击场景,仅使用带宏的xls文档就撕开来一个进攻的口子。相比较Stuxnet v1.2携带6个漏洞5个0Day[23]的气势汹汹,势在必得而言,Sandworm Team这次攻击显得如此的闲庭信步,够用且不浪费,如此精准的控制细思极恐)可以肯定,前期准备的素材一定是非常多的。APT素材只会越来越多,也会继续出现在我们常规观念不易察觉的地方,不同类型厂商之间的协作分析越来越有必要。
现在,我们可以明晰APT这一高级威胁方面的术语所包含的真正进一步含义,即攻击组织在APT素材的协助下由意向转变为目的意图的过程就是APT事件,这个事件的发生过程是具有持续性的。
前面我们从定性的角度讨论的APT的本质,为了便于更细致的讨论,我将从定量的角度分析APT本质和攻击意向,攻击素材的关系。
攻击意向记作集合E E = {e | 元素e具有攻击意向属性} ---- 2.1
攻击素材记作集合M M = {m| 元素m具有攻击素材属性 } ----2.2
E和M一起确定了APT系统,记作A, A =
E = {e | e1 , e2 , e3 .... en} // e1~ n 代表了不同目标的攻击意向,针对电力的/能源的/金融的/政府的/制造政治事件...
M = {m | m1 , m2 , m3 ... mn} // m1 ~ n 代表了不同的攻击素材,针对浏览器/系统内核/移动/IoT研究/固件/代码逆向/代码开发 ....
APT所产生的表象记作集合
P = {p | 元素p是具有某种APT表象的属性} ----2.5
激活函数记作集合 F = {f | 元素f是具有触发具体APT事件的动力因素属性} ----2.6 例如,f1 = 政治事件,f2 = 经贸活动 ,f3 = 军事行动, f4 = 外交变化 ,f5 = 长期潜伏,f6 = 紧急行动,f7 = 经济利益 ...
同样,表象p和攻击意向e,攻击素材m在激活函数的f的作用下有如关系 p = f(e,m) ----2.7 1)在激活函数促进下攻击素材m可以转换产生为m‘,m’是m的扩展应用 ,m' ∈ M, 记作 m => m' ----2.4 2)在激活函数的促进下攻击意向e可以转换产生为e‘,e’是e的增强或是减弱 ,e' ∈ E, 记作 e => e' ----2.3
因此,表象P是APT本质集合的一个活动投影 A => a' ----2.8 // A的活动产生a' a' ∈ P ----2.9 // a'属于表象P集合
对比Stuxnet震网事件,2006年伊朗宣布恢复纳坦滋试验厂铀浓缩活动这一事件,对攻击者而言,起到了激活函数F的作用,进而由攻击意向e转化为e'(e'是e的加强,决定使用网络 武器攻击的意图)和攻击素材m(ORNL部门开始着手研究破坏离心机项目)的组合下由激活函数F产生了表象p 即{离心机被破坏,使用了5个0Day漏洞,攻击工控设备的样本...}。
在分析出APT本质后,我们可以看到,最终影响表象P的因素是:
激活函数F这一动力因素具有两个方面影响,一方面影响内部因素e,m,使其转化为e‘,m’(加强或减弱攻击意向,增加攻击素材),一方面激活f(e‘,m’)产生外部表象p。从防御角度看,激活函数这一因素最复杂,因为我们无法简单根据一个政策,事件,经济活动,外交变化,所持立场等角度判断出F是否对本质A产生确切的影响。这需要对F激活函数有具体的深入研究才能得出相应的一些推断。不妨简化一下这个问题,假设e,m是可以被得知且明确认定情况下,F产生了一个激活函数,例如 f = 外交变化,那么攻击者此时最想做的是什呢?站在攻击者对立场可以设想一下,具体哪些电力系统,航空系统,政府部门是否会受到攻击,潜伏的APT是否会因此被激活?可否做到提前预警?需要采取哪些措施?等等问题都是值得我们深入思考的事情。
从理论上讲,攻击意向E不可能被消除,但我们可以利用激活函数F产生一些伪造的动力因素f’,使得e => e' ;e'是弱化的e,使得其它激活函数不能激发f(e‘,m),这样可以暂时避免或减少目标系统遭受APT攻击的可能性。当下,尚未对激活函数有具体的研究结论时,这样的操作有相当大的难度,但在理论上存在这样的可能。
这里需要说明一下,为什么是攻击意向,而不是意图或是意志呢? 因为意图或意志是明确的具有不可转变的含义。意向的不断增强会转化为明确的意图或持续的坚强的意志。意向的减弱会转变为新的意图。换句话说,攻击意图或是意志是意向的最终表象,是我们进行APT事件分析、样本分析后,所最终肯定的那部分内容。但最本质的部分是攻击者的意向的存在,在攻击素材的配合下,所转化为确定的攻击意图和得手后所呈现的最后结果。
同样,攻击素材M也不可能被消除,M只会变的越来越多。M演化的速度与整体网络环境及目标系统的防御难度成正比关系。即网络环境越复杂,目标系统入侵难度越大,那么攻击素材M就会越多。显然,攻击者的强大优势体现在攻击素材的存量远远高于防御者掌握的表象即 M >>> P .也就是安全研究者提出的“上帝视角攻击”,可以对比看一下方程式/CIA被曝光的攻击包就是这个含义[24]。对此,我们可以伪造一些终端主机/服务器,并暴漏一些安全问题,诱使攻击者选择已有的攻击素材M,消减攻击者对目标系统更新攻击素材M的速度。
综上,从整体上来看各国之间网络战的条件已然形成[25]。因此,APT集合会不断产生表象P,我们未来面对的APT攻击只会越来越具有复杂指向性,不只是单纯的技术高级而是攻击者与被攻击者,目的与意图这些约束关系之间的组成变化。所以就防御而言,梳理各类事件信息形成激活函数模版并在特定场景下进行APT推测具有很深刻的理论意义,我们绝对不会真正知道未来情况如何变化,这堪比预测地震一样困难,确定激活函数是为了弄清其意义,评估接下来发生的可能性。同时对攻击素材方面要扩大认知层面,尽可能多的搜集和整理可实战的新的攻击思路和方法,对防守方来说囊括的攻击素材越多,未来检测出的表象P就会越多,效果就会越好,威慑能力也越强。客户对威胁情报的质量要求远远高于数量要求,厂商简单的积累过往的APT攻击素材对高一阶的APT攻击起不到任何威慑的作用。
从2010开始至今,APT问题层出不穷,不断刷新安全研究人员对其理解程度的认知。APT具有天然复杂性是其一,但根本原因在于缺少梳理归纳APT事件合理方法。我们只看到发现APT事件->曝光->更新产品数据->继续曝光->继续更新... 这样的循环模式。虽然在不断的实践中积累了宝贵经验。但这样的经验显然不能使我们自信的面对未来的威胁,因为这样的经验不能准确的,系统的刻画及表达出未来威胁的可能信息,对未来发生的情况我们所知甚少,惊叹甚多。2010年Stuxnet出现我们惊叹,2012年Flame出现我们惊叹,2015Equation出现我们还是惊叹。
在上一节的关于本质讨论中我们已经知道,目前我们能够干预激活函数的可能性很小,攻击意向也不可能消除,只剩下对攻击素材的研究了。换句话说能不能在激活函数F,攻击意志E一定的条件下,通过对表象信息的研究获得深入的知识,刻画当前,预测未来的可能威胁呢?也就是我们要寻找出归纳APT事件的方法,让APT事件变得有序,可在一定程度上可以被把握,被评估,被预测。
Stuxnet是APT事件中最佳的分析对象,它包含了最少争议的事实,明确的激活函数,明确的攻击意向,明确的攻击素材。为此我们需要仔细研究Stuxnt的方方面面,但在汗牛充栋的资料当中寻找我们需要的细节,没有其它的捷径可走,不断的调试和逆向分析是最可靠的知识来源,我选择从此入手,寻找我们能准确的刻画威胁信息的方法。
分析Stuxnet是非常困难的事情,在那几年当中,即便把所有精力投入,我也没有能力把Stuxnet完全的分析完毕,受知识领域限制尤其工业工控