1. 概述
Lazarus组织,又称为HIDDEN COBRA、APT38、Zinc、Guardians of Peace等,是半岛地区最活跃的APT组织之一。该组织的攻击目标涉及波兰、智利、美国、墨西哥、巴西等数十个国家,针对银行、比特币交易所等金融机构及个人实施定向攻击活动,以获取经济利益,堪称全球金融机构的最大威胁之一。
此外,该组织还针对航空航天、COVID-19疫苗技术、政府、媒体等机构及企业进行渗透,以窃取重要资料并进行破坏勒索。
2. 详细分析
1.诱饵文档
SaniTox是韩国Jiransecurity的一款反病毒程序, 诱饵文档伪冒SaniTox骗取受害者信任并诱导其启用宏功能以便执行恶意宏代码。
文档主题为如何进入网络教室的操作手册,如下图:
该诱饵文档包括远程模板注入,当受害者打开文档时加载远程模板, 然后执行模板文件的恶意宏代码并下载IEUpdate.exe分析。
2. 远程模板
远程模板包含恶意宏代码,主要从服务器下载恶意文件并注入到WinWord进程中执行。
当远程模板被加载时, 首先执行函数Auto_Open, 首先检测文档是否在沙箱被打开,如果是则关闭文档。否则就从远程服务器中下载恶意文件并注入到WinWord进程内。
如果注入进程失败,则弹出错误提示。注入成功则将最开始显示的诱导启动宏功能的页面隐藏,显示主题为 如何进入网络教室的操作手册的内容。
当Auto_Open函数执行失败, 宏代码中还实现一种当WindowsMediaPlyer控件状态改变时被触发。主要代码与Auto_Open函数类似。
1.沙箱检测
检测沙箱环境通过比较短时间内的Tick值来判断, 如果值小于50则处于沙箱环境中。
2.下载文件
从远程下载服务器, 对于Win32和Win64系统使用不同的文件, 下载的文件数据使用Base64编码,解码后将文件注入到WinWord进程中。
2.注入进程
宏代码中实现了对x86/x64进程的注入, 与其他恶意软件一样,使用创建远程线程将文件写入目标进程中,然后修改远程线程上下文将EIP地址设置为注入到目标进程的文件的入口点。如下是在注入过程中使用的函数。
获取当前打开文档的WinWord进程路径, 然后以该路径创建一个处于挂起状态的进程用于创建傀儡进程。
在将文件注入到进程成功后, 修改线程上下文的EIP为文件的入口点地址, 当恢复线程时从入口点开始执行代码。
注入的文件主要用于释放恶意程序IEUpdate.exe并执行,添加到注册表RUN中实现持久化。由于文件下载连接已经失效, 不能获取到有效样本并分析。
3.IEUpdate分析
该文件由注入到进程WinWord的文件释放并执行, 主要作为下载器从C&C服务器中下载不同的恶意程序。
1.沙箱检测
判断自身模块名是否是”myapp.exe”,如果是则退出进程。该文件名为_Windows_ Defender的虚拟机引擎在模拟执行恶意程序锁使用的默认文件名。
检测不同时间内的Tick值差值是否小于50,如果小于则退出程序。
2.生成标识符
恶意程序 通过向系统硬盘设备发送0x2D1400的IOCTL来获取设备序列号并与字符串”VDEVICE”, 然后使用自定义的CRC哈希算法计算哈希值,并将该值与用户名一起作为标识符。
恶意程序使用的自定义哈希算法如下:
3.判断管理员权限
通过进程是否能在系统目录下创建目录来判断是否由管理员权限。
4.检测反病毒产品
获取进程快照, 并判断当前所有运行的进程中是否包含”v3l4sp.exe”、”AYAgent.aye”、”IEUpdate.exe”。其中“v3l4sp.exe”为韩国AhnLab公司免费杀毒软件V3 Lite的组件,“AYAgent.aye”为韩国公司ESTsoft的互联网安全套件ALYac的组件。
5.检测自身是否已经运行
检测路径为”%LocalAppData%\Microsoft\PlayReady\IEUpdate.exe”的进程是否已经运行, 如果已经运行并且与当前进程的PID不一样则结束前者进程。
6.检测命令行参数
7.添加Windows Defender白名单
如果该恶意进程是以管理员的权限启动, 则调用powershell命令将自身加入Windows Defender的白名单中。
8.获取C&C地址
从error.log文件中获取数据并与dl.dropboxusercontent.com进行拼接得到包含C&C地址的文件下载地址, 然后通过GET请求获取该地址拿到最终的C&C地址。
9.发送上线包
将受害者的操作系统版本信息、是否存在安全软件和生成的标识符作为上线包上传到C&C服务器, 路径为post2.php。
10.获取指令
通过Get请求从拼接后的连接获取数据, 读取数据中第三个’%’后的内容,并以”\r”、”\n”作为结束符。读取数据中的阿拉伯数字作为指令ID。
11.文件下载并执行
接收到从C&C服务器下发的指令并从中解析出指令ID和文件下载地址。使用GET请求下载文件然后将其映射到内存并加载。通过指令ID来判断调用导出函数”SEStart”或”SEEnd”。
4.hvncengine.dll分析
该程序为恶意程序IEUpdate从C&C服务器下载的模块, hvnc全名
为”Hidden Virtual Network Connection” ,主要用于银行盗号木马中,vnc原本是一种远程桌面管理软件,在远程可以通过VNC对受控电脑进行控制。而对于恶意程序来说,在对受控电脑进行控制时,会不择手段将自身隐藏,但是使用VNC控制受控电脑时, 当执行的操作为图形化界面时,很难不被受害者发现。
在国内很多金融相关的业务在用户登录账号时,都需要用户安装数字证书或者其他验证工具,若用户从其他机器登录账号时, 会需要用户进行身份认证,因此攻击者为了盗窃受害者的银行账户的钱款或者其他需要身份认证的资产时,攻击者研发出了hvnc来解决使用VNC共享桌面时会被受害者发现的问题。
1.样本描述
由恶意程序IEUpdate下载的恶意模块都包含SEStart和SEEnd两个导出函数,
SEStart主要通过socket来实现hvnc的功能,SEEnd用于关闭socket链接、结束管道句柄和结束执行主要后门逻辑的线程。其中生成标识符的算法与恶意程序IEUpdate一样。
3.检测主逻辑线程
在标识符成功生成后, 恶意程序检测核心功能线程是否已经在启动中避免线程被重复创建, 如果线程仍然在执行中或者则不再创建新的线程。如果线程由于某种原因出现异常但是线程没有被结束则首先结束线程然后再创建新的线程来执行主要逻辑代码。
4.执行hvnc线程
每隔10分钟执行一次恶意代码, 只有在主模块调用SEEnd函数后才会结束循环。在线程函数hvnc_thread内执行一系列与hvnc相关的功能。
5.执行hvnc功能
使用前面生成的标识符为名创建一个新的隐藏桌面,在后续涉及到桌面的操作时使用函数SetThreadDesktop来指定隐藏桌面让相关操作在该桌面下被执行。
在创建进程时设置STARTUP_INFO结构体的字段lpDesktopInfo为hDesktop,可使进程在隐藏桌面下执行进程。
6. C&C通信
读取位于目录”%LOCALAPPDATA%/Microsoft/PlayReady”处的error.log文件的数据并与”dl.dropboxusercontext.com”拼接得到存放于公共托管服务网站dropbox中保存实际C&C地址的文件地址。通过GET请求该地址得到C&C地址,然后尝试通过socket与其进行通信。
如果使用socket能够成功连接上目标地址,则尝试发送上线数据包并等待C&C服务器下发指令。上线数据包构造如下图:
用伪代码表示如下:
1 | struct packet_format |
C&C服务器下发指令时, 恶意程序首先读取12字节判断是否是magic_start字符串,如果是则继续读取C&C指令剩余部分,否则继续从C&C服务器接收指令。
与C&C通信中使用的指令ID如下表,
指令ID | 描述 |
0x01 | 持续发送截图数据 |
0x02 | 停止发送截图数据 |
0x03 | 执行下发的命令 |
0x05 | 模拟键盘操作 |
0x06 | 模拟鼠标操作 |
0x07 | 执行程序explorer.exe |
0x08 | 执行chrome浏览器 |
6.屏幕截图
恶意程序使用了两个与屏幕截图相关的指令ID: 0x01和0x02, 0x01为持续不断的对屏幕进行截图并发送到C&C服务器中。
每隔200ms对屏幕进行一次截图并上传到C&C服务器中, 如果与服务器通信失败或者sceen_shot_flag值为0, 则退出截图。0x02设置sceen_shot_flag值为0表示即将结束截图, 在屏幕截图过程中,会判断该标志的值来决定是否结束屏幕截图。
首先遍历所有桌面, 找到受害者使用的桌面,然后针对该桌面创建BitBit对象并将其转换成image流数据, 也就是说对受害者使用的桌面进行截图。
为了能够将截图后的数据上传到C&C服务器, 从流中读取数据并保存。
截图完成后,构造发送给C&C的数据包, 数据包使用固定的包格式。
使用的数据包格式如下:
1 | Struct packet_format{ |
7.执行命令
当接收到的C&C指令ID为3时为执行任意命令, 要执行的命令在C&C指令参数中, 通过创建进程将命令行参数设置为由服务器下发的要执行的命令行的方式来执行命令。为了避免被受害者发现, 将STARTUP_INFO结构体的字段lpDesktop设置为隐藏桌面。
8.键盘模拟
当C&C指令ID为5时模拟键盘操作,主要通过对目标窗口对象发送WM_KEYUP、WM_KEYDOWN和WM_CHAR来模拟所有的按键操作。要操作的窗口对象则是 通过窗口位置来获取, 最后通过PostMessageA将消息发送到目标窗口。
9.模拟鼠标操作
攻击者在使用hvnc功能操作桌面时,不可避免要对桌面的窗口进行操作, 恶意程序通过向指定的窗口发送窗口消息来对窗口进行操作,其中进行的操作和操作时需要的参数由C&C服务器下发,参数一般是发送窗口消息时需要的wparam值。
恶意程序利用消息机制模拟了多种鼠标的操作,比如使用鼠标拖曳窗口、鼠标单击双击和滑动鼠标滚轮等等。
l 模拟拖曳窗口
通过修改目标窗口对象的left、top、width和height四个值来实现窗口放大、缩小和移动等功能,
l 模拟点击菜单项
恶意程序判断当前鼠标位置是否属于任务栏的开始菜单范围内,如果在则发送WM_CLICK消息模拟鼠标单击来模拟鼠标点击开始菜单的事件;如果不在则判断鼠标所在位置是否在窗口类名为”#32768”的窗口控件中,该窗口控件实际上就是菜单栏,如果鼠标位置在菜单栏范围内, 则模拟鼠标点击某个菜单项。
首先发送消息MN_GETHMENU获取菜单对象句柄,然后通过菜单句柄获取当前鼠标指向的菜单项对应的菜单资源ID, 最后发送两个消息MN_SELECITEM和WM_KEYDOWN模拟鼠标点击菜单项。
10.执行Explorer.exe程序
有时候使用hvnc进行远程操作时,可能会出现界面不显示或者其他异常,攻击者通过让目标机器执行explorer程序来恢复。
设置注册表键TaskbarGlomLevel的值为2使任务栏使用永不分组模式,然后启动进程explorer,进程创建成功后将任务栏设置为AlwayInTop,并恢复TaskbarGlomLevel为修改前的值。
11.执行chrome程序
调用cmd程序执行chrome程序, 并关闭浏览器中比较消耗CPU性能的特性, 比如sanbox、gpu等等, 避免CPU使用率过高而被受害者发现。
启动浏览器时使用受害者默认的配置目录,在访问一些需要账号登录的网站可能因为受害者设置了记住密码或者设置保持登录状态时攻击者不需要账号密码就能够获取受害者的账号信息。
12.消息发送
在所有的C&C指令中,只有键盘模拟和鼠标模拟才需要发送消息。恶意程序首先通过窗口位置获取对应的窗口对象,然后将参数转换程序发送消息时对应参数值,最后通过PostMessageA发送给目标窗口。
对应WM_CHAR消息,还需要将对应的字符转换成对应VKEY值,同样是使用PostMessageA发送给目标窗口对象。
3. ATT&CK矩阵
Tactic | ID | Name | Description |
Resource Development | T1583.006 | Acquire Infrastructure: Web Services |
DropBox存放C2地址 |
Initial Access | T1566.001 | Phishing:Spearphishing Attachment | 通过鱼叉式网络钓鱼 |
Execution | T1559 | Inter-Process Communication | 利用管道执行cmd命令 |
T1204 | User Execution | 通过诱导文档诱导执行 | |
Persistence | T1547 | Boot or Logon Autostart Execution | 设置自启动注册表 |
Privilege Escalation | T1055 | Process Injection | 将进程注入到进程中WinWord |
Defense Evasion | T1497 | Virtualization/Sandbox Evasion | 检测自身是否处于沙箱环境 |
T1221 | Template Injection | 使用远程模板注入 | |
T1562 | Impair Defenses | 将自身加入Windows Defender的白名单中 | |
Discovery | T1010 | Application Window Discovery | 查找窗口,便于使用hvnc远程控制 |
T1083 | File and Directory Discovery | 收集文件信息 | |
T1057 | Process Discovery | 检测是否包含安全软件 | |
T1012 | Query Registry | 查询TaskbarGlomLevel的值 | |
Collection | T1113 | Screen Capture | 收集屏幕截图信息 |
T1056 | Input Capture | 获取键盘按键 | |
Command and Control | T1071 | Application Layer Protocol | 使用socket协议进程C&C通信 |
最后更新: 2023年10月17日 15:06:52
本文链接: http://shxi.cc/post/46cb6af1.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!