0x00 前言准备
日常逛freebuf发现深信服发了一篇勒索病毒分析文章,名字非常炫酷“暗黑天使”降临,赶紧跟一下玩玩。
实验环境:win10
分析工具:die,IDA
0x01 样本基本信息
md5:
b4a07cdd640bbaef21cd0493b4d62675
样本VT下载
0x02 逆向分析
die静态信息查看
32位GUI程序
用ida打开,start处即为程序开始处代码
注意这个API,作用是设置当前调用进程的关闭参数。此函数设置相对于系统中其他进程的进程关闭顺序。设置的参数为0,意味着较其他进程关闭得最迟。
终止服务
跟进4750函数,这里是与服务相关的操作,为了确保在系统加密过程中不中断其加密过程,恶意软件会枚举和检索受害者机器上所有可用的服务,在加密系统之前尝试终止服务。
API调用序列大致如下:
OpenSCManagerA(打开服务控制管理器数据库) --> OpenServiceA(打开一个目标服务) --> QueryServiceStatusEx(检索当前服务状态) --> EnumDependentServicesA(检索依赖于指定服务的每个服务的名称和状态) --> ControlService(终止服务)
要终止的服务列表可以在 OpenServiceA的参数 lpServiceName跟踪到,如下:
终止进程
跟进4990,这里是与进程相关的操作
API调用序列:
CreateToolhelp32Snapshot(获取当前运行进程快照) --> Process32FirstW(获取第一个进程句柄) -->用lstrcmpW与lpString1列表中的进程进行比较,如果匹配 --> OpenProcess(打开指定进程句柄) --> TerminateProcess(终止进程) 并且 CloseHandle(关闭进程句柄) --> Process32NextW(继续下一个进程)
lpString1列表中的进程:
防止恢复
跟进46b0,这里最重要的是执行了一个cmd命令
cmd的作用是删除卷影
后面还有一个清空回收站的API,防止恢复已删除的文件
加密相关
下面有一个CreatThread创建线程的操作,我们跟进StartAddress,然后跟进a2b0
首先是和勒索信生成相关的操作,跟进buffer可以查看勒索信的内容
然后过滤不进行加密的目录以及文件,这个存在lpString2里
下面这里是过滤不加密的类型
如果文件扩展名是exe,dll,babyk则不进行加密
跟进9720,里面是核心的加密操作
核心加密过程
首先用SetFileAttributesW()参数是0x80取消文档的只读、隐藏、系统、存档权限。
然后用MoveFileExW给被加密的文件添加后缀.crypt
下面是打开要被加密文件然后开始加密,密钥首先调用CryptGenRandom生成随机的AES私钥,然后使用unk_4141B8中的 RSA 公钥对 AES 密钥进行加密。
加密过程首先加密0-64字节,然后是64-5242880,然后是5242880-20971520,最后加密20971520 之后的字符。
最大化执行加密操作
回到主程序逻辑,有一个判断参数是shares还是path的过程
如果是share,使用 NetShareEnum () API 检索有关服务器上每个共享资源的信息,检查 $ADMIN 共享并开始加密文件。
如果是path,勒索软件会调用 GetDriveTypeW() API 来找出连接到受感染机器的网络驱动器。一旦识别出网络驱动器,勒索软件就会开始加密文件。
如果两者都没有,勒索软件会递归遍历所有本地驱动器并加密所有目标文件。
首先创建一个DarkAngels的互斥体变量
然后遍历本地驱动器
最后的收尾工作又进行了一次删除卷影副本,至此执行结束
0x03 总结
整体来看这个勒索病毒分析起来结构比较清晰,也没有使用什么特殊的手段,很方便新手来进行分析跟踪了解勒索病毒常用的API,通过字符串和加密后缀很明显能看出来与Babuk 勒索软件有关系。
参考文献