对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的代码,从而发起对其他系统的攻击。