一次面试过程中的样本分析

  1. 样本信息
样本名 SHA1
Impact of US and NATO Withdrawal from Afghanistan.doc ccc402845b46285d04d1d45db964f3c1a0df51d5

该样本使用 RTF 远程模板注入.

使用如下脚本解密后得到模板地址 hxxp://designerzebra.com/services/check1 ,该文件为使用CVE-2017-11882 漏洞的 RTF 文档.

s=r"\u-65432?\u-65420?\u-65420?\u-65424?\u-65478?\u-65489?\u-65489?\u-65436?\u-65435?\u-65421?\u-65431?\u-65433?\u-65426?\u-65435?\u-65422?\u-65414?\u-65435?\u-65438?\u-65422?\u-65439?\u-65490?\u-65437?\u-65425?\u-65427?\u-65489?\u-65421?\u-65435?\u-65422?\u-65418?\u-65431?\u-65437?\u-65435?\u-65421?\u-65489?\u-65437?\u-65432?\u-65435?\u-65437?\u-65429?\u-65487?"
l=list(s[3:-1].split(r"?\u-"))
url=""
for i in l:
    url+=chr(65536-int(i))
print(url)

为了方便调试shellcode,设置镜像劫持

打开该文档后会触发OD调试器,在漏洞触发点的地址0x411658下断然后运行

可以发现返回地址被覆盖成0x402114,

0x402114为retn指令,此时栈上返回地址为0x18f354,刚好为shellcode开始地址

shellcode会从 hxxp://designerzebra.com/update/sync1 下载另一段shellcode

异或解密sync1,直到匹配到0xEE2B4C5,

检测相关文件判断是否存在杀毒软件.

文件名 所属杀毒软件
kilf.sys Kaspersky
aswsp.sys avast
ehdrv.sys ESET NOD32
mfehidk.sys McAfee
360AvFlt.sys 360

hxxp://[designerzebra.com/confirm/file1下载文件保存到%AppData%\wingui.exe.

wingui.exe文件PE头被抹去,调用WriteFile往头部写入0x905a4d.

http://designerzebra.com/mscheck/hello.doc1下载诱饵文档

创建计划任务,每隔3分钟执行一次wingui.exe

schtasks.exe /create /tn MsUpdate /tr "C:\Users\Administrator\AppData\Roaming\wingui.exe" /f /sc minute /mo 3

结束word程序并打开诱饵文档迷惑用户.

wingui.exe分析

比较不同时间段前台窗口标题是否相同,如果相同则处于沙箱环境内。

检测snxhk.dll是否存在,如果存在则设置定时器每120秒执行一次并进入消息循环,当接收到的消息类型是WM_QUIT或者WM_TIMER则退出消息循环

hxxp://realworld.sytes.net/free/pics/hi-jump.jpg下载shellcode并创建线程执行.

该shellcode主要功能是解密core.dll文件 ,并执行dllmain函数.

core.dll分析

如果core.dllrundll32.dll启动,则将区段_code数据保存为%AppData%\\Driver\\opendriver64.dll,并创建快捷方式执行其导出函数IntRun.

如果由rundll32.dll启动,则执行MMCore后门功能

创建互斥量dacd53bbf745acbefaf254a6dd32aede,防止重复运行.

收集信息,保存为临时文件nnp[四位随机].tmp.

文件内容如下:

随后读取该文件并删除,在头部加入如下信息作为发送的数据.

与C2C服务器采用 multipart/form-data 请求格式

post数据使用base64加密

发送的数据

name 数据内容
m p1为上传数据操作,p2为执行指令操作
id 机器标识,内容为 机器名_用户名 的base64编码
data 要上传的数据

接收不同的指令进行不同的操作

c2c指令 功能
103 下载文件保存为%temp%/jv[4位随机数].tmp并调用cmd.exe /q /c start执行
105 下载shellcode映射到内存,调用CreateThread函数执行
115 执行任意cmd命令
117 删除OneDriveUpdate.lnk
120 下载文件执行,然后删除OneDriveUpdate.lnk

各个功能具体实现

  1. 103

  2. 105

  3. 117和120

  4. 115

文章目录
  1. 1. wingui.exe分析
  • core.dll分析
  • ,