学校打印店捕获的某 U 盘病毒的简单逆向分析

 

0x00 前言

最近高校迎来分手毕业季, 大批大四同学们的毕业论文都要去校内的打印店打印装订.

于是毫无意外的, 学校打印店无人管理的公共电脑成功地被 U 盘病毒感染了. (看来即使是在 985 高校, 你也永远不应该相信大学生的电脑使用水平)

不少同学用 U 盘拷贝文件的时候就中招了, 看群友的反馈描述, 这次传播的不是最经典的那种伪装成文件夹的 exe 病毒.

3202 年的我已经很久没有在现实环境中见过计算机病毒了, 于是出于好奇, 我亲自找了个 U 盘, 创建了几个没用的文件, 前往打印店去捕获病毒样本.

0x01 采样与简单观察

直接将 U 盘插入打印店电脑, 直接打开就发现多了一个 Removable Disk(57GB) 的快捷方式, 成功捕获到样本. 回来连接到 Linux 的电脑上观察一下情况.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
chronos@localhost ~/virus $ tree .
.
|-- RECYCLER.BIN
| |-- 1
| | |-- AvastAuth.dat
| | |-- CEFHelper.exe
| | `-- wsc.dll
| `-- desktop.ini
|-- Removable\ Disk(57GB).lnk
`-- \302\240
|-- 114514.txt
|-- desktop.ini
|-- test.pptx
|-- \343\200\212\346\257\225\344\270\232\350\256\272\346\226\207\343\200\213.docx
`-- \345\223\210\345\223\210

4 directories, 9 files

其中 RECYCLER.BIN\302\240 是两个隐藏文件夹, U 盘中我原本的文件已经被原样移动到 \302\240 这个隐藏文件夹下. (\302\240 其实就是 U+00A0, No-Break Space (NBSP), 所以文件夹名字会显示成空白.)

而唯一没有隐藏的就是一个快捷方式 Removable Disk(57GB).lnk, 图标显示为可移动磁盘的图标, 指向 RECYCLER.BIN\1\CEFHelper.exe 500 44, 诱导用户点击. 点击后能执行自身的同时打开 \302\240 显示用户原本的文件, 企图不引起用户的注意.

0x02 静态分析

病毒的主体部分为 RECYCLER.BIN\1 下的三个用途暂时不明的二进制文件.

分别使用 VirusTotal 对三个文件先进行扫描.

1
2
3
4
5
6
7
8
CEFHelper.exe  检出 0/71
https://www.virustotal.com/gui/file/85ca20eeec3400c68a62639a01928a5dab824d2eadf589e5cbfe5a2bc41d9654

wsc.dll 检出 54/70
https://www.virustotal.com/gui/file/e8f55d0f327fd1d5f26428b890ef7fe878e135d494acda24ef01c695a2e9136d

AvastAuth.dat 检出 26/59
https://www.virustotal.com/gui/file/432a07eb49473fa8c71d50ccaf2bc980b692d458ec4aaedd52d739cb377f3428

CEFHelper.exe 发现是有有效 Avast 数字签名的无害程序, 看起来是病毒试图用它作为加载入口, 作为逃避AV检查的手段.

先来使用 IDA Pro 来分析一下 exe 和 dll. (dat 暂时还不知道是个什么格式)

CEFHelper.exe

如同上面推测的, 是个非常非常简单的 Loader, 用于加载 wsc.dll 并传递参数. 简单到所有代码一张截图就能截下.

CEFHelperCEFHelper

wsc.dll

也没有多少实际的内容, 通过读取并 xor 解密 AvastAuth.dat 获得实际的代码并在内存中执行.

wsc.dll中的解密过程wsc.dll中的解密过程

所以其实病毒的逻辑都在 AvastAuth.dat 这个文件中.

要继续静态分析的话必须先解密 AvastAuth.dat 这个二进制. 最稳妥的解密方法是根据 IDA Pro 生成的伪代码自己编写个程序进行解密.

但纯粹使用静态分析的手段复现这个解密算法是相对比较痛苦的.(你永远不知道你会不会写错或者漏掉什么, 如果出了错也只能用瞪眼观察法 debug)

考虑到目前没有观察到任何反调试的代码, 我决定直接尝试在虚拟机里调试这个程序并得到解密的结果. (相对比较作死的行为)


在 IDA Pro 中设置好启动参数并开始本地调试, 断点打在最后的 return 并实际运行病毒代码之前. 成功断下, 根据栈上的指针地址找到目标内存区域, 再根据栈上的长度 dump 出内存段.

IDA Pro 调试解密IDA Pro 调试解密

其实从图中已经可以观察到明显的 PE 可执行文件的特征.

(其实第一次调试就不小心让代码跑飞了, 直接执行了病毒导致虚拟机被感染了, 所以动态调试病毒的时候要注意安全)

AvastAuth.dat (在 U 盘中启动的行为)

直接使用 IDA Pro 再次打开刚刚 dump 出的文件, 终于看到了病毒主体部分.

发现病毒使用数组赋值组成字符串和 GetProcAddress 进行系统调用的方法来试图逃避杀软的检查, 先简单整理并重命名一下字符串/函数. (重命名后 IDA Pro 很智能的识别了参数)

独特的系统调用方式独特的系统调用方式

程序会先调用 CommandLineToArgW 获取当前的参数个数, 然后根据参数个数选择后续执行的分支.

根据参数选择不同分支根据参数选择不同分支

在从 U 盘里误点快捷方式打开病毒时, 它会先试图把自己运行需要的三个文件 CEFHelper.exe wsc.dll AvastAuth.dat 复制到 %allusersprofile%\AvastSvc\ 下 (一般会展开成 C:\ProgramData\AvastSvc\), 如果复制失败会尝试 %userprofile%\AvastSvc.

然后 AvastSvc 这个文件夹会被设置为隐藏文件夹, CEFHelper.exe 在复制时会被改名为 AvastSvc.exe, 同时通过修改注册表 Software\Microsoft\Windows\CurrentVersion\Run 添加 AvastSvc.exe 的启动项, 同时程序也会立即启动 AvastSvc.exe.

感染并添加启动项感染并添加启动项

在持久化成为 AvastSvc.exe 再次运行之后会(因为接受了不同的参数)进入另一个分支.

AvastAuth.dat (持久化成 AvastSvc.exe 后的行为)

其首先搜索了几个文件名与 Adobe 相关的进程, 尝试提权并杀死相关进程, 删除相关文件,文件夹和注册表启动项. (具体动机未知, 推测是 Adobe 与该病毒冲突? 或是与其他伪装成 Adobe 的病毒变种冲突?)

被查找的 EXE被查找的 EXE

杀死相关的进程,删除相关文件和注册表杀死相关的进程,删除相关文件和注册表


USB 感染线程

随后其启动一个线程, 等待 U 盘插入, 一旦有 U 盘插入就会隐藏其中原有的文件, 复制自身, 创造虚假的快捷方式. 同时它还会修改本台电脑的注册表, 将 Explorer 的显示隐藏文件夹显示受保护的系统文件两个设置恢复为默认的不显示.

感染 U 盘感染 U 盘

对于新插入的 U 盘, 如果本机有连接到互联网, 还会将其中大小在一定范围内(小于300MB)的文档类型文件(.docx .pdf 等后缀)保存下来. (远程控制服务器可以主动获取)

盗取符合条件的文件盗取符合条件的文件


远程控制线程

继续分析发现, 病毒本体除了持久化和感染插入的 U 盘外, 在代码中没有进一步的主动入侵行动, 而是直接开始从 C&C 服务器获取指令.

其启动了一个线程, 发起了到 45.142.166.112:443 的 http 连接, 先上报了本机相关的一些信息, 接下来根据服务器的响应用一个巨大的 switch 分支选择对应的动作, 并将结果上报的服务器.

上报了计算机名,用户名,CPU信息,系统ID等信息上报了计算机名,用户名,CPU信息,系统ID等信息

根据服务器的响应不同, 其可以选择新建/移动/删除文件或文件夹, 或是获取更多系统信息, 添加新的启动项, 获取从 U 盘中窃取的文档等不同操作.

执行服务器的指令执行服务器的指令

使用 ipinfo.io 查询了一下 45.142.166.112 这个 ip 属于 Owl 这个日本的 VPS 提供商.

我直接在自己的虚拟机上执行病毒, 试图使用 Fiddler 捕获来自服务器的 Payload, 然而服务器在国内直接连接超时, 尝试换了多个代理节点也都是直接返回 502 Bad Gateway, 直接尝试境外的 Windows 主机也是同样的结果. 推测应该是对应的远控服务器已经跑路.

Fiddler抓包Fiddler抓包


至此, 该病毒的所有功能已经分析完毕.

(小插曲: 由于我用的是我 HomeLab 上的 Windows 虚拟机 (危险错误行为请勿模仿, 真遇到虚拟机逃逸就寄了), 磁盘镜像格式是 raw, 没有快照功能, 所以没直接回滚. 事后杀毒的时候发现 360 和火绒的快速查杀功能都不能发现该病毒的存在. 看来拿一个有数字签名的 Loader 确实有一定效果.)

0x03 沙盒动态分析

用了 AnyRun 这个交互式沙盒来测试这个病毒, 结果在这里.

沙盒分析的结果和上面静态分析的结果也几乎是一致的, 不再赘述了.

0x04 样本下载

样本+解密的病毒本体+IDA Pro数据库打包在 https://drive.google.com/file/d/16ew0bdX7dROw93Wl0Q3WJ0xjqf6X0F6m/view?usp=sharing. 下载实验时注意安全.

本文采用 CC BY-NC-SA 4.0 许可协议发布.

作者: lyc8503, 文章链接: https://blog.lyc8503.net/post/random-virus-reverse/
如果本文给你带来了帮助或让你觉得有趣, 可以考虑赞助我¬_¬