*本文作者:cgf99,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
最近收到一个名为ACH-Payment.zip的压缩文档的附件,打开后发现内容其实为一个exe可执行文件。
如下图所示:
如果用户习惯对压缩文件直接右键解压缩释放到目录,则看上去的欺骗性会更强。因为其图标会变成excel图标,文件名也有变化。
解压缩后,打开ACH-Payment目录,发现其文件显示如下图所示。
如果用户的windows操作系统使用默认设置,即在文件夹查看设置中勾选“隐藏已知文件的扩展名”的话,则文件看上去如下图所示:
乍一看,确实很像excel表格文件,如果用户没有细看其类型是“应用程序”的话,真的会很容易当作excel文档直接打开。
很明显,攻击者把exe图标替换为excel图标,并结合运用了windows系统RLO文件名欺骗技术。通过欺骗windows系统下用户的视觉效果,进而诱使用户打开并执行恶意木马文件。这种攻击方法是目前社会工程学攻击的常见的典型手段之一,也曾被许多黑客组织包括APT组织运用于各种网络间谍活动。 众所周知,windows系统支持一种特殊的unicode字符RLO。如果一个字符串中包含RLO字符,那么在windows下显示时,就会把RLO字符右侧的字符串逆序显示出来。比如abc[RLO]edf,则显示的时候看到的是abcfde。因此,其实上面压缩文档内的文件名应该是:ACH Payment[RLO]xslx..exe。 此外,笔者感觉本次攻击者的RLO技术应用有点low或者不甚用心,比如上文第二幅图中显示的文件名看起来像是ACH Paymentexe..xlsx,文件名其中有两个..字符,而且Paymentexe这串字符串看起来也不像正常的英文单词。从而可能引起目标用户的警觉。其实可以坐如下改进,比如文件名命名为ACH Payment[RLO]xslx.exe即可,而且最好是RLO字符前面的单词和exe后缀或者scr或者com等可执行文件后缀扩展名能结合起来像一个真的英文单词,则文件名看起来会更逼真。
很显然,收到的这种形态的可执行文件肯定是有问题的,以下为具体的分析过程。
Vmware虚拟机环境、windows xp系统
大小 | MD5 | SHA1 |
---|---|---|
696,702 | d1e7d5ed139500f9d8e1286763e43727 | 76809228ac1f92d71b6cfa2455d662c795a98acc |
运行后,系统弹出窗口请求选择应用程序开启文档YZGZIG.lsx。如下图所示,晕,竟然没有默认的打开方式,而且.lsx扩展名是什么鬼?
由于测试系统中已安装了WPS,选择用WPS打开。打开后如下图所示,是一个空的表格文件。
从图中我们可以进一步确认,该攻击者确实比较粗心。首先,上图中打开的空的excel文档名字其实应该为YZGZIG.xls,而不是YZGZIG.lsx,应该是编程出现的笔误。其次,很明显我们收到的或者攻击者想让我们看起来以为的文档名字应该是:ACH Paymentexe..xlsx。也就说,正常情况下,打开给用户看到的应该是ACH Payment.xlsx,而且是excel2007以后的文件类型。因此,如果要符合正常逻辑的话,这里存在两个小问题,一是文件名不对,不能是YZGZIG.lsx,二是文档类型后缀名不对,应该是.xlsx后缀名结尾的表格文档。
通过WPS我们可以看到,实际打开的空文档放置在%temp%目录下。同时,恶意代码运行后,会启动一个名为wscript.exe的进程。而wscript.exe是windows系统自带的文件,用于运行脚本文件,我们看看脚本文件存放哪里?
发现在%temp%目录下有一个名为RBOUCN.vbs的脚本文件。其内容如下:
文件名 | RBOUCN.vbs |
---|---|
内容 | On error resume next Dim strComputer,strProcess,fileset strProcess = "ACH Payment?xslx..exe" fileset = """C:\ACH Payment?xslx..exe""" strComputer = "." Dim objShell Set objShell = CreateObject("WScript.Shell") Dim fso Set fso = CreateObject("Scripting.FileSystemObject") while 1 IF isProcessRunning(strComputer,strProcess) THEN ELSE objShell.Run fileset END IF Wend FUNCTION isProcessRunning(BYVAL strComputer,BYVAL strProcessName) DIM objWMIService, strWMIQuery strWMIQuery = "Select * from Win32_Process where name like '" > "system32.exe" AND @ScriptName > "svwin2.exe" AND @ScriptName > "svwin1.exe" Then FileInstall("C:\Users\SHOZAB HAXOR\Desktop\ACH Payment.xlsx", @TempDir 1 Then ContinueLoop TCPSend($r, $1666 > "" Then Local $begincv = TimerInit() EndIf |
12、控制指令与功能分析
控制指令 | 功能 |
---|---|
ONXMPDE | 读取%AppData%\Windata\mon\下的文件内容,发给服务器 |
wixfix98a | 执行命令netsh wlan show profiles获取无线wifi连接结果,发给服务器 |
pxfitsaaq | 读取无线密码,执行命令netsh wlan show profiles " & $daztssf[0] & " Key=Clear",发送给服务器。 |
i4a3e154ax | 删除注册表HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\下的值,对服务器没有回报消息 |
8t0xacssat | 枚举HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\下的值,发送给服务器 |
SPJSS445 | 根据参数设置HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\下的值,对服务器没有回报消息 |
X7AEE+ | 接收服务器发送过来的VBS脚本并执行,对服务器没有回报消息 |
USvwZqqp | 根据从服务器接收的两个参数(文件名),进行复制文件。对服务器没有回报消息 |
wachsayer | 查看%temp%\Pl2.exe文件是否存在,有则向服务器发送“HAWalikoum” |
Xhnazz | 执行命令cmd.exe " /c Pl2.exe -f " & $strs & "Pl2.txt" & $strs ,并会送结果文件%temp%\Pl2.txt |
IUY23cx | 删除%temp%\Pl2.exe文件 |
Cxltta3 | 根据参数,修改"\system32\Drivers\etc\hosts"文件下相应设置为“”。 |
RSPPAOUELBC | 查找hosts文件下特殊内容,改行包含"#8Blx"或"#8Rex",发送给服务器 |
BLXIS | 根据接收的参数,写入hosts文件 |
BLkeryt | 与“BLXIS”指令一样,写入hosts文件 |
kocalsr | 根据参数批量读取文件内容并回送 |
Sofxzitre | 如果是管理员权限,执行” netstat -n -b –o”命令,否则执行“netstat -n -o”命令, |
nescannez | 用ping命令解析本机IP,机器名,结果发送给服务器 |
GexthWin | 列举窗口情况 |
IFFAxtpa | 根据参数设置窗口的状态(隐藏、可见、最小化、最大化等) |
Ti8zaww | 返回窗口的标题 |
TX3zQp | 把参数写入%temp%\imtxt.txt,然后打开该文件 |
Verif8s | 读取注册表"HKCU\Software\Win32"下imgCli和img的键值 |
Revprox87 | 释放文件到%temp%\Proxy_Client.dll,调用该dll的proxyclient_start函数连接ip(torrentfreak.duckdns.org的地址)和端口(服务器发送的参数),完成后删除dll文件 |
Q0TAqp | 向剪切板写入内容 |
COXPIRE | 读取剪切板内容发送至服务器 |
FoCxPArs | 获取firefox登录信息。 如果存在%appdata%\Mozilla\Firefox\Profiles目录,则创建%Temp%\foxr目录,并拷贝Mozilla\Firefox\Profiles下的(logins.json、key3.db、cert8.db)到foxr目录,然后每个文件发送回服务器。 |
DixrImagxx | 批量枚举指定目录下的jpg/png/gif/bmp文件,转换成jpg格式后回传。 |
FKKKSTTTA08 | 命令回显,相当于ECHO |
MpS8x | 弹框提示指定的内容 |
Plifinstl | 判断键盘记录进程是否存在 |
MgPlugUp | 开启键盘记录。 写入注册表HKCU\Software\Win32创建keyx,值为字符串类型“1” 生成%temp%\tmpwstz2.ps1文件 调用powershell.exe -executionpolicy bypass –File %temp%\tmpwstz2.ps1 |
srtaapxx | 删除注册表HKCU\Software\Win32\keyx,停止键盘记录进程 |
Dexlu | 删除%appdata%\mon\目录下指定文件 |
ladix | 读取%appdata%\mon\目录指定文件内容 |
TeESX | 发送%appdata%\mon\目录下所有的文件名 |
DR0Rw | 写入注册表HKCU\Software\Win32\data |
mopasuixx | 给注册表HKCU\Software\Win32\imgCli赋值为字符串”1” |
roo7ass | 删除注册表HKCU\Software\Win32\imgCli |
Imstare | 给注册表HKCU\Software\Win32\imgCli赋值为字符串”1” |
Imfray | 删除注册表HKCU\Software\Win32\img |
dst8DEL | 删除注册表HKCU\Software\Win32\data |
Temp0 | 枚举%appdata%\mon\目录文件信息 |
DDRTs | 读取%appdata%\mon\目录指定文件内容并发送 |
DesLX | 根据参数删除%appdata%\mon\目录下文件和文件夹 |
lDx2 | 读取%appdata%\mon\目录指定文件内容并发送 |
Lxog0 | 枚举%appdata%\mon\下指定目录的文件信息 |
DoaxSE | 读取HKCU\Software\Win32\data值回传 |
Rena8x | 删除指定文件夹和文件 |
KRB0sxx | 命令回显,相当于ECHO |
XWB0DS | 发送{BACKSPACE},探测连接存活 |
Plug2 | 上传%temp%\p12.exe并执行,结果回传 |
QURAN | 在%TEMP%\q.lnk快捷方式,指向mms://live.mp3quran.net:9976/,并打开访问 |
kortos | 关闭wmplayer.exe进程 |
OnlineKey | 读取%Temp%\Klog.txt内容回传 |
OnlineKDel | 删除%Temp%\Klog.txt,中断socket |
Spexak | 调用系统扬声器读出指定内容 |
GetSize | 获取文件或文件夹大小 |
PowOf | 清理GDI+资源 |
PREsat | 清理GDI+资源 |
PLOfc | 清理GDI+资源 |
UpWWW8 | 上传文件 |
Unzipx | 解压缩文件 |
Comprx | 压缩文件 |
WallPx | 拷贝%appdata%\Microsoft\Windows\Themes\TranscodedWallpaper.jpg 替换壁纸 |
Execut | 执行指定命令 |
CpyxE| | 文件或文件夹拷贝 |
Deletxc | 删除文件或文件夹 |
AllDriver | 枚举分区信息 |
DeskDir | 枚举桌面目录信息 |
PictuXX | 枚举图片目录信息 |
UserPro | 枚举用户目录信息 |
Sk8xer | 枚举skype目录信息 |
USz9ap | 枚举keype目录下指定目录下的信息 |
SrtU8p | 枚举启动目录信息 |
ApDta | 枚举%appdata%目录 |
Romig | 枚举音乐目录信息 |
Refx| | 枚举指定目录信息 |
RAnSoun | 文件上传 |
UploX | 文件上传保存为%temp%目录下随机6个字节文件名,并执行 |
Soxexctuuous | 重写%TempDir%\Ransound.wav文件,并播放 |
Sound| | 关闭键盘记录进程,重新启动程序 |
Uninstall | 卸载退出 |
kill | 关闭进程 |
EA58AE | 鼠标拖曳操作 |
MouSxA | 鼠标左键点击 |
MouSxB | 鼠标右键点击 |
MoBlosxck | 恢复桌面墙纸 |
Unmoxb | 修改桌面墙纸设置 |
screen | 屏幕截屏 |
OpCD | 打开光驱 |
CloseCD | 关闭光驱 |
DowLDXss | 下载文件并执行 |
Chat | 交流 |
CxM0D1| | 调用控制台执行命令发送结果 |
WebCam | 摄像头拍摄照片 |
Open | 命令执行 |
CookiesAll | 读取chrome浏览器和Firefox浏览器cookie信息 |
CookFirefox | 读取Firefox浏览器cookie信息 |
CooChrome | 读取chrome浏览器cookie信息 |
Process | 枚举进程信息 |
PrKilx| | 关闭指定进程 |
由于该恶意程序在通信上并没有任何的安全机制,并且上文中我们已经分析清楚该恶意程序与服务器之间的通信指令。因此,我们可以在本地假设环境进行实际测试,从而验证我们上述分析。
利用nc.exe作为服务器端,监听端口1338,在hosts下修改torrentfreak.duckdns.org域名指向本机。
在本机直接运行nc.exe –l –p 1338,运行恶意程序后,木马上线并回报相关信息,如下图所示。
输入Process指令,让其枚举进程,结果如下图所示。
其他的命令可以一一进行操作并验证是否与分析一致。
通过上文分析,我们可以初步判断这是一起网络攻击事件。攻击者利用邮件实施攻击,不过技术实力有限,准备不足。
初步的结论如下:
1、该压缩文件内含一个恶意exe可执行文件,文件名采用windows系统RLO技术伪装成,并修改exe图标为excel文档图标,欺骗用户打开。
2、exe可执行文件利用AutoIt3脚本制作生成,可以对其进行格式转换,生成明文可见的au3脚本文档。
3、恶意功能模块太多了,佩服作者脚本能力和耐心。
4、该域名还存活,不过目前执行的IP和端口无法连接。
5、该exe恶意文件可能是特定有组织的,不是一般的自动化感染病毒。木马功能模块内含敏感操作(比如cookie信息获取、键盘记录、上传下载文件、文件压缩、文件搜索、截屏等功能)。
6、该作者不甚用心,在分析的时候发现了很多低级错误,见上文。同时,还表现在木马端和服务控制端之间没有认证校验、通信数据明文传输没有加密等。
*本文作者:cgf99,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。