吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9274|回复: 7
收起左侧

[PC样本分析] 永恒小马样本分析报告

[复制链接]
LShang 发表于 2013-2-9 15:55
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 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做分析。

该样本主要流程
1.png
永恒小马.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文件
2.png
将其拷贝到 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       ; 拷贝临时文件

3.png
然后感染和替换掉指定的系统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 如果移动到不同的卷,则复制文件后删除自身

4.png
[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)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

a13005746827 发表于 2013-2-9 16:01
那么详细...支持.

希望出个kiss.exe的病毒分析.不会手动修复啊.
笑容茹椛 发表于 2013-2-9 16:17
1354669803 发表于 2013-2-9 17:45
fndht 发表于 2013-2-10 13:20
太牛了 这个要好好学习一下
ruige8866 发表于 2013-7-8 18:40
顶一个~~~~~~~~~~
忘缘随缘 发表于 2013-8-9 15:06
太牛了 这个要好好学习一下
malcode 发表于 2016-1-3 23:28
看看这个小马
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-25 22:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表