0x00 前言
最近高校迎来分手毕业季, 大批大四同学们的毕业论文都要去校内的打印店打印装订.
于是毫无意外的, 学校打印店无人管理的公共电脑成功地被 U 盘病毒感染了. (看来即使是在 985 高校, 你也永远不应该相信大学生的电脑使用水平)
不少同学用 U 盘拷贝文件的时候就中招了, 看群友的反馈描述, 这次传播的不是最经典的那种伪装成文件夹的 exe 病毒.
3202 年的我已经很久没有在现实环境中见过计算机病毒了, 于是出于好奇, 我亲自找了个 U 盘, 创建了几个没用的文件, 前往打印店去捕获病毒样本.
0x01 采样与简单观察
直接将 U 盘插入打印店电脑, 直接打开就发现多了一个 Removable Disk(57GB)
的快捷方式, 成功捕获到样本. 回来连接到 Linux 的电脑上观察一下情况.
1 | chronos@localhost ~/virus $ tree . |
其中 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 | CEFHelper.exe 检出 0/71 |
CEFHelper.exe 发现是有有效 Avast 数字签名的无害程序, 看起来是病毒试图用它作为加载入口, 作为逃避AV检查的手段.
先来使用 IDA Pro 来分析一下 exe 和 dll. (dat 暂时还不知道是个什么格式)
CEFHelper.exe
如同上面推测的, 是个非常非常简单的 Loader, 用于加载 wsc.dll 并传递参数. 简单到所有代码一张截图就能截下.
wsc.dll
也没有多少实际的内容, 通过读取并 xor 解密 AvastAuth.dat
获得实际的代码并在内存中执行.
所以其实病毒的逻辑都在 AvastAuth.dat
这个文件中.
要继续静态分析的话必须先解密 AvastAuth.dat
这个二进制. 最稳妥的解密方法是根据 IDA Pro 生成的伪代码自己编写个程序进行解密.
但纯粹使用静态分析的手段复现这个解密算法是相对比较痛苦的.(你永远不知道你会不会写错或者漏掉什么, 如果出了错也只能用瞪眼观察法 debug)
考虑到目前没有观察到任何反调试的代码, 我决定直接尝试在虚拟机里调试这个程序并得到解密的结果. (相对比较作死的行为)
在 IDA Pro 中设置好启动参数并开始本地调试, 断点打在最后的 return
并实际运行病毒代码之前. 成功断下, 根据栈上的指针地址找到目标内存区域, 再根据栈上的长度 dump 出内存段.
其实从图中已经可以观察到明显的 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 的病毒变种冲突?)
USB 感染线程
随后其启动一个线程, 等待 U 盘插入, 一旦有 U 盘插入就会隐藏其中原有的文件, 复制自身, 创造虚假的快捷方式. 同时它还会修改本台电脑的注册表, 将 Explorer 的显示隐藏文件夹
和显示受保护的系统文件
两个设置恢复为默认的不显示.
对于新插入的 U 盘, 如果本机有连接到互联网, 还会将其中大小在一定范围内(小于300MB)的文档类型文件(.docx .pdf 等后缀)保存下来. (远程控制服务器可以主动获取)
远程控制线程
继续分析发现, 病毒本体除了持久化和感染插入的 U 盘外, 在代码中没有进一步的主动入侵行动, 而是直接开始从 C&C 服务器获取指令.
其启动了一个线程, 发起了到 45.142.166.112:443
的 http 连接, 先上报了本机相关的一些信息, 接下来根据服务器的响应用一个巨大的 switch 分支选择对应的动作, 并将结果上报的服务器.
根据服务器的响应不同, 其可以选择新建/移动/删除文件或文件夹, 或是获取更多系统信息, 添加新的启动项, 获取从 U 盘中窃取的文档等不同操作.
使用 ipinfo.io 查询了一下 45.142.166.112
这个 ip 属于 Owl 这个日本的 VPS 提供商.
我直接在自己的虚拟机上执行病毒, 试图使用 Fiddler 捕获来自服务器的 Payload, 然而服务器在国内直接连接超时, 尝试换了多个代理节点也都是直接返回 502 Bad Gateway
, 直接尝试境外的 Windows 主机也是同样的结果. 推测应该是对应的远控服务器已经跑路.
至此, 该病毒的所有功能已经分析完毕.
(小插曲: 由于我用的是我 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/
如果本文给你带来了帮助或让你觉得有趣, 可以考虑赞助我¬_¬