if (StrCheck(L"~WTR",Filename,4) == 0)return 0; for (i = 4;i < 8; i++){ chr = Filename[i]; if (chr<'0' || chr >'9')return 0; Mod =(chr - 0x30 + Mod) % 10; }; if (Mod == 0) return 1; else return 0; 6. 加载机制 驱动文件 mrxcls.sys 主要用来向用户空间注入代码,它是一项极为复杂的工程,包含 各种有效特性能完全绕过各种反病毒软件,尤其是基于行为分析的反病毒软件。它从注册表 键码"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MRxCls"获取需要的输入 参数,解密此键码数据后,得到如图3所示内容: ![]() 由图 3可知,此数据包含一些系统进程及系统文件名,即通知mrxcls.sys驱动, stuxnet 包含在这些系统文件中,并会选择这些进程作为寄宿对象。下面具体分析此数据的结构组织: 文件头: Header Signature = 0 (4 bytes) Pointer to The body (the end of Header) (4 bytes) Reserved (4 bytes) Number of Injections (4 bytes) 由于文件头部第4 项即感染注入进程数是动态变化的,故文件头大小也是个不定值。在 头部之后紧跟一个数组变量,数组元素即感染注入进程数。每个数组子项都包含了一个寄宿 进程名、被注入的DLL 文件、标志以及解密此病毒的密钥。其中,标志位字段占2bits,第 一位用来描述文件是否加密,第二位定义寄宿进程是否包含一个即将被加载的已解密 stuxnet文件。故,Stuxnet蠕虫会向驱动写入一个包含以下信息的数据结构: •services.exe: \SystemRoot\inf\oem7A.PNF (stuxnet main dll) and call to Export 1 •S7tgtopx.exe: \SystemRoot\inf\oem7A.PNF and call to Export 2 (SCADA infection) •CCProjectMgr.exe: SystemRoot\inf\oem7A.PNF and call to Export 2 •explorer.exe: \SystemRoot\inf\oem7m.PNF and call to Export 2 7. 结论 Stuxnet 蠕虫因其极大地复杂性引起了各大媒体的关注,在其背后隐藏着各种政治目的 等。它是迄今为止公开过的最为复杂的病毒,包含了4 个零日漏洞以及3个rootkits.更为 可怕地是它的攻击目标直指西门子公司的SIMATIC WinCC系统,相信Stuxnet的出现已经改 变了人们对恶意病毒的定义,也必将开辟出一个新的安全领域。 |