震网病毒结构与运行流程
震网病毒主要包含6个文件,4个快捷方式图标文件,利用LNK漏洞从U盘自动感染计算机,两个tmp文件,用于初始化和安装震网病毒。
震网病毒共利用了7个漏洞,其中4个0 Day漏洞:
CVE-2008-4250(MS-08-067)-Windows Server Service NetPathCanonicalize()
CVE-2010-2772 WinCC default password
CVE-2012-3015 Step 7 Insecure Library Loading
CVE-2010-2568(MS-10-046)-Windows Shell LNK Vulnerability (O day)
CVE-2010-2743(MS-10-073)-Win32K.sys Local Privilege Escalation (O day)
CVE-2010-3888(MS-10-092) Task Scheduler vulnerability (O day)
CVE-2010-2729(MS-10-061)-Windows Print Spooler Service Remote Code Execution (O day)
震网病毒隐藏在U盘中,当U盘插入到计算机上时,利用LNK漏洞会自动感染Windows系统,感染执行后,通过Ring3 Hook Ntdll实现在内存中加载~WTR4141.tmp文件,Ring3 Hook Kernel32、Ntdll实现*.tmp和*.lnk文件隐藏。进而通过内存LoadLibrary加载~WTR4132.tmp文件,提取出核心的Main.dll,在内存中加密、脱壳、加载Main.dll,初始化安装震网病毒,注入进程、注册服务,释放资源文件,最终震网病毒以服务运行。服务运行时,会攻击西门子WinCC工控系统软件,通过该软件最终攻击PLC,让离心机异常工作,导致离心机快速故障。
Call#15初始化安装Stuxnet
当Main.dll被加载的时候,导出表#15第一个被调用。#15主要负责检查Stuxnet是否运行在一个合适的系统中,检测当前系统是否已被感染,把当前进程权限提升到系统权限,检测系统中安装的杀毒软件版本,选择把DLL注入到哪个进程中;把DLL注入到选择的进程中,然后调用#16。
#15的第一个任务是检查配置数据(configuration data)是否是最新的。配置数据可以被存储到两个位置。Stuxnet检查最新的配置数据并且执行。然后Stuxnet检查是否运行在一个32位的系统中,如果运行在64位系统中则退出,同时也检查操作系统的版本,Stuxnet只能运行在以下版本的操作系统中:
Win2K
WinXP
Windows 2003
Vista
Windows Server 2008
Windows 7
Windows Server 2008 R2
接着检查当前进程是否具有Administrator权限,如果没有则会利用0-day漏洞提升运行权限。如果当前操作系统是Windows Vista、Windows 7、Windows Server 2008 R2,则利用Task Scheduler Escalation of Privilege来提升权限;如果操作系统是Windows XP、Win2K则利用Windows Win32k.sys Local Privilege Escalation(MS10-073)漏洞提升权限。
如果代码运行成功,如果利用win32k.sys漏洞,主DLL文件作为一个新进程运行,如利用Task Scheduler,主dll运行在csrss.exe进程中。
Win32k.sys漏洞利用的代码在资源文件#250中,
当导出表#15运行检查都通过后,#16运行。#16是Stuxnet的主安装程序。它检查日期和操作系统的版本,解密、创建并安装rootkit文件和注册表项;并把自己注入到services.exe中,以便感染移动存储设备;把自己注入到Step7的进程中感染所有的Step7工程;建立全局互斥量(mutexes)用于不同组件之间的通信;连接RPC服务器。