安天提出了震网与毒曲(Duqu)同源的猜测,并先后发表了两篇验证性报告,并启动了对火焰(Flame)恶意代码的马拉松式的模块分析。在工作推进中,安天逐步认识到震网、毒曲、高斯(Gauss)、火焰,这些高度复杂的恶意代码间存在着同样的背景联系。这些研究工作对安天后续展开对方程式组织(Equation)的深度分析起到了非常重要的作用。
2.为什么是震网
在信息技术发展历史上,出现过大量典型的安全事件,但为什么“震网”被视为具有威胁里程碑意义?震网被认为是第一个以现实世界中的关键工业基础设施为目标的恶意代码,并达到了预设的攻击目标,或者说,这是第一个“网络空间”意义上的重大攻击事件,而非传统的网络攻击事件。尽管此前也存在着一些通过信息攻击手段影响工业设施的传闻,但基本都缺乏技术层面的实证支撑。
从安天此前提出的观点来看,震网的里程碑意义并不是在于其相对其他简单的网络攻击的复杂性和高级性,而在于其证实了通过网络空间手段进行攻击,可以达成与传统物理空间攻击(甚至是火力打击)的等效性。在2016年的报告中,安天研究人员将上世纪70、80年代的“凋谢利刃与巴比伦行动”(在1977年~1981年间发生的以、美联合,在两伊战争期间针对伊拉克核反应堆进行军事打击的事件)与震网事件进行对比分析看出,通过大量复杂的军事情报和成本投入才能达成的物理攻击效果仅通过网络空间作业就可以达成,而且成本也大大降低。正如美国陆军参谋长前高级顾问MarenLeed所讲的——网络武器可以有许多适应环境的属性,从生命周期的成本角度看,它们比其他的武器系统更为优越[4]。
震网系列攻击也全面昭示了工业基础设施可能被全面入侵渗透乃至完成战场预制的风险,震网的成功是建立在火焰、毒曲恶意代码的长期运行、信息采集的基础上。在攻击伊朗铀离心设施之前,攻击方已经入侵渗透了伊朗的多家主要国防工业和基础工业厂商,包括设备生产商、供应商、软件开发商等,表2-2是多个企业遭遇入侵的事件。
表2-2伊朗基础工业体系遭遇渗透的情况
3.震网整体结构和运行逻辑
震网的结构非常复杂。其中又经历了从0.5到1.x的版本更迭,其破坏机理从以干扰离心机阀门、造成超压导致离心机批量损坏调整为修改离心机转数。同时其开发框架也发生了变化。我们以流行更为广泛的1.x版本为对象,进行整体结构和运行逻辑梳理。震网的核心是仅在内存中解密存在的DLL文件(以下简称主DLL文件)。DLL文件包含32种不同的导出函数以及15种不同的资源,每一个导出函数都有不同的控制功能,其中主要涉及导出函数15(初始入口点)、导出函数16(安装)、导出函数32(感染连接的移动设备,启动RPC服务)、导出函数2(钩挂API以感染Step7工程文件)等;每个资源也分别执行不同的功能,主要涉及资源250、资源201、资源242等;导出函数正是利用这些不同功能的资源来控制震网执行不同的分支操作。
StuxnetDropper的资源在安装执行过程中会释放载荷,震网落地文件如表3-2所示。
图3-1PE类型资源版本迭代
安天CERT基于对震网样本集及已有数据的分析,绘制了震网整体运行框架,它包含传播和安装执行。
图3-2震网整体运行框架图
震网的传播主要包括两种方式,一种是移动设备感染,利用LNK漏洞或者通过autorun.inf文件进行传播;另一种是网络传播,涉及WinCC数据库感染、网络共享传播、打印机后台处理程序漏洞传播、Windows服务器漏洞传播等多种方式。这两种传播方式虽然不同,但最终都会释放主DLL文件,进行后续的安装和执行操作。震网感染目标系统后,会启动RPC服务器监听网络,将网络上其他感染计算机都连接到RPC服务器,并查询远程计算机安装的震网版本,以执行对等通信和更新,如果远程计算机上的震网版本较新,则本地计算机就会请求新版本并自我更新,如果远程机器上的震网版本较旧,则本地计算机上的震网就将自身副本发送给远程机器。这样,震网可以在任何感染机器上更新并最终传播到所有机器。
在安装执行中,传播释放的主DLL文件首次加载时调用导出函数15执行一系列检查工作,包括检查配置数据是否为最新、检查操作系统是否为64位、检查操作系统版本是否匹配,如果不符合其安装执行要求,则退出;此外,检查目标系统是否具备管理员权限,如果不具备,则利用资源250中两个当时的零日漏洞进行提权以获取最高权限;之后,检查目标系统安装了哪些反病毒软件以及哪个进程适合注入;导出函数15完成上述规定的检查后,震网就会调用导出函数16。
4.威胁框架视角下的震网解读
能够研发类似震网的复杂高级的恶意代码,是源自高级网空威胁行为体具有充足资源和成本支撑能力。其作业过程具有庞大的工程体系和人员团队为支撑条件,是一系列复杂的动作组合。与此同时,复杂的过程并不必然全部由“高级”攻击手段和“高级”装备支撑。防御方的一些低级配置错误和未及时修补的漏洞会成为威胁行为体攻击的入口;高级网空威胁行为体也会劫持和利用低级网空威胁行为体所掌控的僵尸网络等资源,这些都使局面更为复杂。
解读复杂的攻击行动,并驱动防御的改善,需要有更理想的结构化方法。杀伤链等模型用于解构震网式的复杂攻击,依然显得不足,需要进一步改善。威胁框架作为一种对攻击过程更为结构化和数据化的描述方法,开始成为改善防御能力的威胁认知基础。当前较为流行的威胁框架主要有MITRE提出的ATT&CK,和NSA提出的《NSA/CSS技术网空威胁框架》(NSA/CSSTechnicalCyberThreatFramework)。后者对前者做了一定的借鉴工作。鉴于NSA/CSS技术网空威胁框架,更具有情报机构的背景,因此更适合推演类似震网级别的A2PT攻击。
将震网事件涉及到的威胁行为映射到威胁框架的类别与动作,如图4-1所示。
图4-1震网事件映射到威胁框架
在震网行动中共涉及21个目标中的83种行为,其中包括推测的和确定执行的行为。
表4-1震网事件中涉及的类别与动作
5.震网的USB摆渡与传播“失控”的原因
图5-1样本的多种传播方式
整体的传播思路是:染毒U盘利用快捷方式文件解析漏洞,传播到内部网络;在内网中,通过快捷方式解析漏洞、RPC远程执行漏洞、打印机后台程序服务漏洞,实现联网主机之间的传播;最后抵达安装了WinCC软件的主机,展开攻击。在这一过程中,亦存在染毒主机对插入的U盘进行感染的过程,但经过安天分析这一动作并非是无条件的。
图5-2U盘感染过程中配置文件解析
感染震网的计算机会监控接入的设备,一旦发现U盘插入且满足条件即开始写入U盘摆渡文件,具体条件如下:
●根据配置标记(不是默认设置)来感染磁盘,如果默认配置不感染,那么感染的发生取决于日期;
●感染当前计算机少于21天;
●U盘至少有5MB的剩余空间;
●U盘至少有3个文件。
USB文件和加载攻击逻辑如图5-3所示,含4个适用于不同Windows版本的LNK快捷方式漏洞(CVE-2010-2568)文件和2个TMP文件(~WTR4141.tmp是USBLoader,~WTR4132.tmp是Dropper,均为DLL格式,文件属性为隐藏、系统),震网通过rootkit隐藏这6个文件,因此被震网感染的计算机上并不能看到U盘里的这些文件。
图5-3USB文件和加载攻击逻辑示意图
Stuxnet是否感染到U盘,取决于加密配置文件mdmcpq3.pnf中的多个值,包括:
●偏移0x6c、0x70、0xc8处的标记位;
●偏移0x80、0x84处的数值。
只有当每个值对应的条件都满足时,才会感染U盘。其中,偏移0xc8处的位默认设置为不感染。
Stuxnet不会主动修改配置数据,配置的更新通过版本更新来完成。因此,我们认为它是尝试连接因特网来判断自己是否在内部网络中。如果是,就只通过其他途径传播;只有通过连接服务器或其他被感染主机更新之后,才感染U盘。
当Stuxnet感染U盘时,拷贝多个.lnk快捷方式文件和两个.tmp文件到根目录。这两个.tmp文件,一个是用于隐藏它们自身的驱动程序,带有数字签名;另一个是病毒体本身以及一个投放器,配置信息已经存在于病毒体中。
根据赛门铁克在2010年7月-10月监测的震网攻击数据,全球155个国家的计算机被感染,其中约60%的受害主机位于伊朗境内[8]。对于一次被认为是应具有高度定向性质的作业行动,却呈现出发散性传播效果的原因,目前各分析方给出了多种不同猜测:
⊕第一种猜测是,各种原因导致了传播失控。
⊕第二种猜测是,这是作业方为获取更多信息有意为之。
⊕第三种猜测是作业方为了掩盖定向攻击意图,以感染范围的扩大提升取证溯源的难度。
包括干扰对真实攻击目标更准确的判断和定位。
⊕第四种猜测是攻击方展示能力,达成对他国恐吓甚至讹诈的需要。
震网的发散性传播到底是一种“失控”,还是攻击方有意所为,或者两者因素都存在。最终的效果可能并非是某个单一原因,而是多个因素的组合。
6.震网为何有数千个样本?
作为一种目标高度定向的攻击行动,一个曾令人费解的事实是,震网并不具备感染其他宿主文件的属性,但却有大量的样本存在。
安天捕获的震网样本集合是数以千计的,但这些样本可以分成几个不同的标识维度,基于U盘摆渡的原始载荷形态、在主机上落地的文件、不落地的模块(需要静态拆离或动态Dump)等等。一类是从其中拆解出的最终攻击载荷(在实际的攻击中多数是不落地的)和一些辅助的驱动等。从磁盘介质提取的实体文件数量较多的主要分为三种:攻击载荷释放器Dropper(原始文件名为~WTR4132.tmp)、移动介质载荷加载器USBLoader(~WTR4141.tmp)和LNK漏洞利用文件,其中Dropper样本数量呈现发散态,从安天所掌握的数量来看,在千数量级别。而最终的攻击功能模块载荷和辅助驱动在百数量级,总数呈现收敛态。
震网样本集的分类情况如图6-1所示。
图6-1震网样本集分类
安天CERT分析发现,造成震网样本集基数较大的原因是:
1.Dropper样本在落地时写入目标配置导致文件变化
图6-2Dropper导入表统计
stub段作为主DLL存放的位置,其布局解析如表6-1所示。
解密主DLL的函数如下:
图6-3主DLL函数解密
部分解密后的配置信息如下:
图6-4部分解密后的配置信息
表6-2部分配置内容解析
Dropper的配置文件校验函数:
图6-5Dropper的配置文件校验函数
2.分析提取工作导致的
将震网的各个功能载荷从主DLL中剥离出来,是震网分析中的重要工作,这带来了一种新的样本统计上需要考虑的因素,即何为原始样本,何为处理中的过程数据。震网主DLL文件在Dropper中采用UPX压缩的方式进行存储,防止样本大小过大,减少传播机会。在实际感染过程中主DLL不会落地,在样本集中有UPX加壳的主DLL文件,在实际样本集中存在,因Dump导致的不同版本,未脱壳版本,不同脱壳方式生成的版本等情况。
图6-8未完全脱壳文件
3.干扰数据
在震网的USBLoader样本集中,有数以百计的样本文件签名损坏,且大量该类文件的尾部还追加了其他的LNK文件和某种反病毒产品的报警日志,从目前分析来看,这是某款反病毒产品的产品Bug导致的,其某版本在扫描样本时,会错误的样本后面追加数据,从而引入数百被破坏的样本。
图6-9USBLoader尾部追加LNK文件
7.恶意代码框架与多起A2PT的事件关联
在震网事件曝光前后,包括毒曲、高斯、火焰等高级恶意代码被陆续曝光,由于这些恶意代码都空前复杂,且往往多在中东国家被发现,因此怀疑其相互间存在某种意义的关联,也成为了一种比较自然的猜想。
安天CERT在2011初提出了震网和毒曲可能存在某种关联关系的猜测,但直到次年初,才完成比较系统的验证。发布了《探索Duqu木马的身世之谜》[10]、《从Duqu病毒与Stuxnet蠕虫的同源性看工业控制系统安全》[11]两篇文献,分别从模块结构相似性分析、编译器架构相似性分析、关键功能实现相似性分析、密钥与其他关键数据相似性分析、编码心理特点分析、相同的程序Bug分析等角度,证实了两者存在同源关联关系。
图7-1毒曲病毒与震网蠕虫的代码片断比较
图7-2毒曲病毒与震网蠕虫使用相同密钥
图7-3震网和毒曲、火焰、高斯、Fanny、Flowershop关系图
7.1Flamer框架
火焰的两个主要版本为Flame1.0和Flame2.0,两个版本均由依赖于嵌入式LuaVM的主协调器指示的多个子模块组成。火焰和高斯之间包含一些相同代码,同时共享MiniFlame恶意软件插件。
7.2Tilded框架
震网和毒曲是基于Tilded框架开发的。Tilded框架感染方式一般可以归纳为利用驱动程序文件,加载一个设计为加密库的主模块。同时,整个恶意复合体有一个单独的配置文件,系统注册表中有一个加密块,用于定义正在加载的模块的位置和注入过程的名称。
震网已知的版本包括Stuxnet0.5、Stuxnet1.001和Stuxnet1.100。Stuxnet0.5是震网的早期版本,但是后被发现曝光,该变种在2009年7月4日停止了对计算机的攻击。Stuxnet0.5与Stuxnet1.x版本的主要区别包括:Stuxnet1.x版本显著增加了传播和漏洞利用能力;Stuxnet0.5是部分基于Flamer框架的,而Stuxnet1.x版本主要基于Tilded框架;Stuxnet0.5采用导致超压的方式,大规模破坏离心机,而Stuxnet1.x版本采取了新的攻击策略,从铀浓缩阀破坏变成对离心机速度的修改。
表7-1震网0.5与1.x版本技术细节全面对比
毒曲的主要版本包括Duqu1.0、Duqu1.5和Duqu2.0。Duqu与Duqu2.0之间使用统一算法以及复用大量相同代码,Duqu1.0和Duqu2.0之间攻击目标有很多重合,Duqu1.5和Duqu2.0之间均使用了PipeBackdoor插件。
震网和毒曲之间在模块结构、编译器结构、关键功能、数据结构、病毒作者心理等方面具有同源性[14],此外,震网和Duqu1.0、Duqu2.0均采用窃取自中国台湾IT厂商的数字证书。
7.3震网与Fanny、Flowershop的关联
从图7-3中能够看出,震网除了与毒曲、火焰具有一定关联之外,其与Fanny、Flowershop也具有一定的关联。
Stuxshop是震网的早期组件,用于管理早期C2。Stuxshop与Flowershop(活跃于2002年至2013年的恶意软件平台)之间存在代码重叠或共享。
方程式早期组件Fanny,其使用了两个震网的0day漏洞,即LNK漏洞(CVE-2010-2568)以及嵌入在“Resource207”中的提权漏洞。此外,震网和方程式开发者之间共享编码风格,或者使用同样的开发规范手册。
8.直面检测引擎与威胁情报面临的挑战
在安天此前的分析报告中,针对A2PT带来的防御挑战,进行过一些论述和探讨,而针对震网的复盘,我们希望聚焦一个具体的问题,高级恶意代码对检测引擎和威胁情报的挑战。
作为攻击载荷的恶意代码是网空攻击的“战斗部”,几乎绝大多数的网空攻击事件中都会出现恶意代码的身影,在高能力网空威胁行为体的攻击活动中更是如此。从威胁框架的视角来看,高能力网空威胁行为体要针对目标完成接触目标与进攻突防、持久化驻留潜伏、全程持续支撑作业,并进一步达成各种致效能力运用,在整个过程中,既需要针对业务场景达成作业意图,又要绕开体系化的防护,达成深度持久化和隐蔽通讯等动作,其必然要完成高度复杂的逻辑功能执行。这导致了APT攻击对恶意代码的依赖程度在不断加深,高级恶意代码呈现出框架日趋庞大、模块众多和指令体系原子化等趋势。
在这种对抗中,传统的反病毒引擎和威胁情报成为两个具有互补作用的机制,前者针对海量的恶意代码的检测、辨识能力,并且通过深度预处理、虚拟执行等机制来应对恶意代码的变种、变换,因此在载荷检测方面,有无以伦比的识别与解析深度,而且对海量载荷对象提供了精准的判定机制。但传统病毒引擎在威胁对抗中的短板也很明显,其是最容易被攻击方获得的安全资源,绝大多数反病毒软件都可以公开的下载或低成本的购买、同时Virustotal等公开的多引擎扫描机制也会成为攻击方的测试资源。因此反病毒引擎面对自动化构造的免杀测试等方法,有被绕过的必然性。同时其本地检测定期升级库的机制,或者是云引擎对远程的依赖,对内网用户也都带来了一定的部署成本。另一个问题是,传统反病毒引擎的工作视角是基于样本检出率为核心指标的,其信息输出缺少从威胁对抗方面更明确的指向性。这些短板都需要威胁情报进行弥补。在威胁情报金字塔中,HASH、IP、域名等“狭义情报”被列入底层,即获取难度低、应用成本低。较为容易的被分析防御方提取为攻击指示器(信标),同时可以与多种安全设备、管理设备、防护软件等现有扩展接口实现对接。
图8-1威胁情报金字塔模型
尽管与传统的反病毒检测引擎相比,HASH检测机制毫无鲁棒性可言,但由于HASH的唯一性,其在可靠的知识运营支撑的情况下,可以建立起对攻击组织的精准的指向性。例如两个不同的攻击组织,分别定制了同一个版本的商用木马,在文件尾部附着了各自的C2配置。对于反病毒引擎来说,这是同一种样本,而对于HASH情报在分析支撑下输出,反而能将其区别出来。但HASH情报其可用前提也很明显,那就是存在着二进制形态不变的样本复用。对IP和域名规则也是如此,当情报供给方能将恶意活动指向某个确定的通讯基础设施(C2),来完成心跳、控制、升级、回传等操作,并将这个恶意活动指向某个攻击组织时,那么相应的网络IoC就可以命中在其他攻击活动中的行为,从而建立起攻击行为和组织的关联。这种低层次的攻击指向器,尽管效用机理比反病毒引擎和流量检测引擎都要简单,但基于其可以快速发布,广泛扩展,精准定义,一定程度上带了一种快速的、更为普适的监测和普查能力。因此传统检测引擎+IoC情报可以形成一定的互补组合的效果。这种组合模式也是过去数年安天所推动的模式。
安天基于传统检测引擎在威胁对抗中,是攻击方重点绕过环节的特点,自2016年起开始研发下一代威胁检测引擎。安天下一代引擎延续并深化了安天传统引擎格式识别、深度解析等特点,继承对海量恶意代码精准的分类到变种的识别能力。同时,以没有可信的格式和对象为前提,形成对检测对象全格式识别,对更多重点格式形成深度解析能力。不止为调用环节输出判定结果,同时也可以将检测对象的向量拆解结果结构化输出,形成支撑产品场景和态势感知场景研判分析、关联与追溯的数据资源。