对Stuxnet蠕虫的后续分析报告
时间 : 2010年10月11日 来源: 安天实验室安全研究与应急处理中心
1.概述
本报告是对安天实验室发布的《对Stuxnet蠕虫攻击工业控制系统事件的综合报告》的补充说明。
在后续的分析工作中,我们发现Stuxnet蠕虫向两个URL地址发送主机信息,包括IP地址、操作系统信息和软件版本等,并通过这两个地址实现自身的更新,从而使攻击者能细粒度的控制攻击范围、对象和方法。
Stuxnet通过U盘的传播由一些配置数据来决定,它尝试连接因特网来判断自己是否在内部网络中,然后决定是否通过U盘传播。
此外,除了Stuxnet还通过开启RPC服务、共享服务和远程访问WinCC系统数据库,来实现在局域网中的传播与更新。
最后,Stuxnet通过劫持DLL来攻击西门子系统的PLC(可编程逻辑控制器),它注入的PLC代码只有在某种具体的硬件设备中才能正常发挥作用,这进一步表明它的针对性极强。然而,因为蠕虫本身有更新的能力,所以它完全可以被攻击者用来实现对另一目标的攻击。
2.配置数据
Stuxnet运行后,在本地磁盘衍生两个驱动文件和四个.PNF文件。其中,%Windir%\inf\ mdmcpq3.PNF保存了运行时的配置数据和主机信息。
该文件的前1860字节为配置数据,包括:
• Stuxnet升级服务器的URL地址
• Stuxnet的版本
• 激活时间和失效时间
• 决定传播行为的标记
• 其他
这1860字节加密后保存在原始文件中,加密算法是逐字节异或0xff。在Stuxnet运行过程中,会将其解密到内存中,并根据其中内容决定如何攻击。
3.版本更新
在Stuxnet的配置数据中,有4个URL:
• www.windowsupdate.com
• www.msn.com
• www.mypremierfutbol.com
• www.todaysfutbol.com
其中,前面两个用于判断主机是否连接Internet,后两个是Stuxnet的更新服务器。Stuxnet搜集本地主机的下列信息:
• IP地址和网卡信息
• 操作系统版本、用户名等信息
• WinCC系统和Step7软件的版本
将其加密后,附着到配置文件mdmcpq3.PNF的尾部。
接下来,它试图与前两个URL建立连接。一旦成功,就将这些信息以参数形式通过HTTP GET请求发送到后两个更新服务器。后者根据信息,返回相应的数据。
返回数据中包含一个完整的最新版本病毒体,其中就包括了更具体的配置数据。Stuxnet收到数据后,就将其作为新的执行模块,载入内存并跳转到其中开始执行,从而即时地做到攻击代码的更新。另一方面,Stuxnet也将其中的配置数据读取到内存中的主功能DLL模块里,并重新计算DLL的校验和,从而实现配置的实时切换。
如果连接失败,Stuxnet也会根据本地的文件开始执行。即:是否连接Internet,并不影响它的继续运行,但有可能影响一些具体细节。
此外,Stuxnet蠕虫本身就实现了RPC服务的功能,它会在局域网中被感染主机之间形成P2P网络,互相共享各自的版本信息,并即时更新到能获取的最新版。因此,即便主机没有直接连接Internet,其中的Stuxnet蠕虫也有可能更新。
我们认为Stuxnet的更新具有以下可能:
• 攻击者可以根据收到的信息(IP地址、操作系统版本等)来判断主机的地理位置,从而决定是否发起下一步攻击,实现攻击的精准性;
• 攻击者可以根据返回的工业控制系统信息,决定使用哪种技术,或发起不同类型的攻击,从而实现攻击的针对性和多样性。
4.通过U盘的传播
为了渗透到与外界隔离的工业专用网,Stuxnet通过U盘进行传播。为了激活和投放,使用了微软快捷方式文件解析漏洞(MS10-046)。据赛门铁克公司的报告,在早期变种中,还曾使用传统的autorun.inf文件激活病毒。
Stuxnet是否感染到U盘,取决于配置数据中的多个域,包括:
• 偏移0x6c、0x70、0xc8处的标记位;
• 偏移0x78、0x7c处的时间戳;
• 偏移0x80、0x84处的数值。
只有当每个域对应的条件都满足时,才会感染U盘。其中,偏移0xc8处的位默认设置为不感染。
Stuxnet不会主动修改配置数据,配置的更新通过版本更新来完成。因此,我们认为它是尝试连接因特网来判断自己是否在内部网络中。如果是,就只通过其他途径传播;只有通过连接服务器或其他被感染主机更新之后,才感染U盘。
当Stuxnet感染U盘时,拷贝多个.lnk快捷方式文件和两个.tmp文件到根目录。这两个.tmp文件,一个是用于隐藏它们自身的驱动程序,带有数字签名;另一个是病毒体本身以及一个投放器,配置信息已经存在于病毒体中。
5.其他传播方式
除了使用RPC实现P2P的相互更新,Stuxnet还使用了下列方式实现在内网的传播:
• 局域网共享服务的弱口令访问
• MS10-061打印服务0-day漏洞
• MS08-067服务器服务漏洞
• 通过WinCC数据库的硬编码口令传播
其中,最后一种方式是之前。它使用一个硬编码的默认账号,远程连接安装了WinCC系统的主机的数据库系统,向其中写入一段二进制代码,然后转储为文件并执行。
6.对PLC的攻击
因为对WinCC系统的攻击涉及具体工业环境,我们未能成功建立模拟环境,本部分内容整理自赛门铁克公司的相关报告。
Stuxnet通过替换WinCC系统中的一个DLL文件,实现对Step 7工程文件运行时依赖的库函数的注入。Step7控制软件运行于普通PC平台,用于控制PLC(可编程逻辑控制器)设备。Stuxnet在DLL文件中加入了几种特定型号PLC(具体而言,是西门子6ES7-315-2和6ES7-417两个系列)上的可执行代码,从而实现攻击。
这些被硬编码的攻击代码在不同系列PLC之间并不通用,由此进一步可以证明此次攻击的目标之精准。
但是,我们也不能因此而掉以轻心。Stuxnet实现了互联网和局域网两套更新升级机制,完全可以通过更新,将这部分代码替换为其他系列PLC的代码,从而发起对其他系统的攻击。