8-BitQuest
菜单
[威胁情报]

疑似Lazarus组织针对韩国的攻击活动分析

· 3 分钟阅读 · @admin

疑似Lazarus组织针对韩国的攻击活动分析 像素封面

Lazarus组织,又称HIDDEN COBRA、APT38、Zinc、Guardians of Peace等,是朝鲜半岛地区最活跃的APT组织之一。该组织的攻击目标涉及波兰、智利、美国、墨西哥、巴西等数十个国家,主要针对银行、比特币交易所等金融机构及个人实施定向攻击活动,以获取经济利益,堪称全球金融机构的最大威胁之一。

此外,该组织还针对航空航天、COVID-19疫苗技术、政府、媒体等关键领域的机构及企业进行渗透,窃取重要资料并实施破坏性勒索攻击。本文详细分析了Lazarus组织针对韩国的一次攻击活动,从诱饵文档到最终载荷的完整攻击链。

二、攻击链详细分析

2.1 诱饵文档分析

SaniTox是韩国Jiransecurity公司的一款反病毒程序,攻击者伪造SaniTox相关文档以骗取受害者信任,并诱导其启用宏功能执行恶意代码。

文档主题为“如何进入网络教室的操作手册”,利用社会工程学诱导受害者执行恶意宏:

该诱饵文档采用了远程模板注入技术。当受害者打开文档时,文档会自动加载远程模板文件,然后执行模板中的恶意宏代码,最终下载并执行IEUpdate.exe:

2.2 远程模板分析

远程模板包含恶意宏代码,主要功能是从远程服务器下载恶意文件并注入到WinWord进程中执行。

当远程模板被加载时,首先执行Auto_Open函数。该函数会检测文档是否在沙箱环境中打开,如果是则关闭文档;否则从远程服务器下载恶意文件并注入到WinWord进程。

如果注入失败,则弹出错误提示;注入成功则隐藏诱导启用宏的页面,显示“如何进入网络教室的操作手册”的正常内容以迷惑受害者:

此外,宏代码还实现了备用触发机制。当Auto_Open函数执行失败时,可通过WindowsMediaPlayer控件状态改变事件触发恶意代码,其主要逻辑与Auto_Open函数类似:

2.2.1 沙箱检测技术

恶意代码通过比较短时间内的Tick值来检测沙箱环境。如果差值小于50,则判定处于沙箱环境中并退出执行:

2.2.2 文件下载

根据系统架构(Win32/Win64)下载不同版本的恶意文件。下载的文件数据采用Base64编码,解码后将文件注入到WinWord进程中:

2.2.3 进程注入技术

宏代码实现了针对x86/x64进程的注入功能。与其他恶意软件类似,使用经典的进程挖空(Process Hollowing)技术:创建挂起状态的进程,将恶意代码写入目标进程内存,然后修改线程上下文将EIP/RIP指向注入代码的入口点。

注入过程中使用的关键API函数:

首先获取当前打开文档的WinWord进程路径,然后以该路径创建一个处于挂起状态的傀儡进程:

成功注入文件后,修改线程上下文的EIP/RIP为文件的入口点地址,当恢复线程时从入口点开始执行恶意代码:

注入的文件主要用于释放恶意程序IEUpdate.exe并执行,同时添加到注册表Run键实现持久化。由于下载链接已失效,未能获取到该阶段的有效样本进行深入分析。

2.3 IEUpdate下载器分析

该文件由注入到WinWord进程的Shellcode释放并执行,主要作为下载器从C&C服务器下载不同的恶意模块。

2.3.1 沙箱检测

检测Windows Defender虚拟引擎

判断自身模块名是否为“myapp.exe”,如果是则退出进程。这是Windows Defender虚拟机引擎在模拟执行恶意程序时使用的默认文件名:

Tick值检测

检测不同时间点的Tick值差是否小于50,如果小于则判定为沙箱环境并退出程序:

2.3.2 生成受害者标识符

恶意程序通过向系统硬盘设备发送IOCTL代码0x2D1400来获取设备序列号,并与字符串“VDEVICE”组合,然后使用自定义的CRC哈希算法计算哈希值。该哈希值与用户名一起作为受害者的唯一标识符:

自定义哈希算法实现:

2.3.3 权限检测

通过尝试在系统目录下创建目录来判断是否具有管理员权限:

2.3.4 检测韩国安全产品

获取进程快照,判断当前运行的进程中是否包含以下安全软件:

  • v3l4sp.exe:韩国AhnLab公司免费杀毒软件V3 Lite的组件
  • AYAgent.aye:韩国ESTsoft公司互联网安全套件ALYac的组件
  • IEUpdate.exe:检测自身进程

2.3.5 防止重复运行

检测路径“%LocalAppData%\Microsoft\PlayReady\IEUpdate.exe“的进程是否已经运行。如果已运行且PID与当前进程不同,则结束先前的进程实例:

2.3.6 命令行参数检测

(此部分在原样本中未实现具体功能)

2.3.7 添加Windows Defender白名单

如果恶意进程以管理员权限启动,则调用PowerShell命令将自身添加到Windows Defender白名单中,以规避杀毒软件检测:

2.3.8 获取C&C地址

从error.log文件中读取数据,与“dl.dropboxusercontent.com”拼接得到存放在Dropbox公共托管服务上的C&C地址文件URL,通过GET请求获取该URL以获得最终的C&C服务器地址:

2.3.9 发送上线包

将受害者的操作系统版本信息、是否存在安全软件、生成的标识符等信息作为上线包上传到C&C服务器的post2.php路径:

2.3.10 获取C&C指令

通过GET请求从拼接后的URL获取数据。读取数据中第三个’%’字符后的内容,以“\r“或”\n“作为结束符,解析其中的阿拉伯数字作为指令ID:

2.3.11 文件下载与执行

接收C&C服务器下发的指令,解析出指令ID和文件下载地址。使用GET请求下载文件,然后将其映射到内存并加载执行。根据指令ID调用导出函数“SEStart”或“SEEnd”:

2.4 hvncengine.dll模块分析

该模块由IEUpdate从C&C服务器下载。HVNC全称为“Hidden Virtual Network Connection”(隐藏虚拟网络连接),主要用于银行木马中实现隐蔽的远程控制。

VNC是一种常见的远程桌面管理软件,可远程控制目标计算机。然而,传统VNC在操作图形化界面时容易被受害者发现。对于金融相关业务,由于存在数字证书、双因素认证等安全机制,攻击者需要在受害者机器上直接操作才能绕过身份认证。因此,攻击者开发了HVNC技术,在隐藏桌面上执行操作,使受害者无法察觉。

2.4.1 样本描述

IEUpdate下载的恶意模块都包含SEStart和SEEnd两个导出函数:

  • SEStart:通过Socket实现HVNC功能
  • SEEnd:关闭Socket连接、结束管道句柄和后门逻辑线程

模块使用与IEUpdate相同的算法生成受害者标识符。

2.4.2 检测主逻辑线程

成功生成标识符后,恶意程序检测核心功能线程是否已在运行,避免重复创建线程。如果线程正在执行则不创建新线程;如果线程因异常未正常结束,则先结束该线程再创建新线程执行主要逻辑代码:

2.4.3 执行HVNC线程

每隔10分钟执行一次恶意代码,只有在主模块调用SEEnd函数后才会结束循环。在hvnc_thread线程函数内执行一系列与HVNC相关的功能:

2.4.4 执行HVNC功能

使用前面生成的标识符为名称创建一个新的隐藏桌面。在后续涉及桌面的操作时,使用SetThreadDesktop函数指定隐藏桌面,使相关操作在该隐藏桌面下执行,从而对受害者不可见。

在创建进程时,设置STARTUPINFO结构体的lpDesktop字段为隐藏桌面句柄,使进程在隐藏桌面下执行:

2.4.5 C&C通信

读取位于“%LOCALAPPDATA%/Microsoft/PlayReady“目录下的error.log文件,将数据与”dl.dropboxusercontent.com“拼接,得到存放于Dropbox托管服务中的实际C&C地址文件URL。通过GET请求该地址获取C&C服务器地址,然后通过Socket与其建立通信:

如果Socket成功连接,则发送上线数据包并等待C&C服务器下发指令。上线数据包构造如下:

用伪代码表示的数据包格式:

struct packet_format
{
    // 固定魔术头 ")(*&POIU:LKJ"
    uint8_t magic_start[0xc];

    // 存放加密的数据 "D9 C8 CC CB EB C9 D9 C8"
    // 解密后的值为 "00000000"
    uint8_t unknown[0x8];

    // 数据包类型,0表示上线包
    uint32_t type;

    // 标识符的大小
    uint32_t id_size;

    // 标识符字符串
    uint8_t id_str[id_size];

    // 固定魔术尾 "^%$#YTREHGFD"
    uint8_t magic_end[0xc];
};

当C&C服务器下发指令时,恶意程序首先读取12字节判断是否为magic_start字符串,如果是则继续读取指令剩余部分,否则继续等待接收:

C&C通信指令表:

指令ID 功能描述
0x01 持续发送截图数据
0x02 停止发送截图数据
0x03 执行下发的命令
0x05 模拟键盘操作
0x06 模拟鼠标操作
0x07 执行explorer.exe
0x08 执行Chrome浏览器

2.4.6 屏幕截图功能

恶意程序使用两个与屏幕截图相关的指令:

  • 指令0x01:持续对屏幕进行截图并发送到C&C服务器,每隔200ms截图一次。如果与服务器通信失败或screen_shot_flag值为0,则退出截图
  • 指令0x02:设置screen_shot_flag值为0,表示即将结束截图

截图过程:首先遍历所有桌面,找到受害者正在使用的桌面,然后针对该桌面创建BitBlt对象并转换成图像流数据,即对受害者使用的桌面进行截图。为了将截图数据上传到C&C服务器,从流中读取数据并保存:

截图完成后,构造发送给C&C的数据包,使用固定的包格式:

数据包格式定义:

struct packet_format {
    // 固定值 ")(*&POIU:LKJ"
    uint8_t magic[0xc];

    // 固定值 "00000000"
    uint8_t unknown;

    // 包类型,4表示截图数据
    uint8_t type;

    // 截图相关数据大小
    uint8_t img_info_size;

    // 截图信息结构体,大小为img_info_size
    struct {
        // 屏幕宽度
        uint32_t width;

        // 屏幕高度
        uint32_t height;

        // 屏幕截图数据的大小
        uint32_t img_data_size;

        // 屏幕截图数据
        uint8_t img_data[img_data_size];
    }

    // 固定值 "^%$#YTREHGFD"
    uint8_t magic_end[0xc];
};

2.4.7 执行任意命令

当接收到C&C指令ID为3时,执行任意命令。要执行的命令包含在C&C指令参数中,通过创建进程并将命令行参数设置为服务器下发的命令来执行。为了避免被受害者发现,将STARTUPINFO结构体的lpDesktop字段设置为隐藏桌面:

2.4.8 键盘模拟

当C&C指令ID为5时,模拟键盘操作。主要通过向目标窗口发送WM_KEYUP、WM_KEYDOWN和WM_CHAR消息来模拟所有按键操作。操作的窗口对象通过窗口位置获取,最后通过PostMessageA将消息发送到目标窗口:

2.4.9 模拟鼠标操作

攻击者使用HVNC功能操作桌面时,需要对桌面窗口进行各种操作。恶意程序通过向指定窗口发送窗口消息来实现操作,操作类型和所需参数由C&C服务器下发。恶意程序利用消息机制模拟了多种鼠标操作,包括拖拽窗口、单击、双击、滚轮滑动等。

模拟拖拽窗口

通过修改目标窗口对象的left、top、width和height四个值来实现窗口放大、缩小和移动功能:

模拟点击菜单项

恶意程序判断当前鼠标位置是否在任务栏的开始菜单范围内:

  • 如果在,则发送WM_CLICK消息模拟点击开始菜单
  • 如果不在,则判断鼠标是否在窗口类名为“#32768“的窗口控件中(该控件为菜单栏)。如果鼠标位置在菜单栏范围内,则模拟点击菜单项

具体实现:首先发送MN_GETHMENU消息获取菜单对象句柄,然后通过菜单句柄获取当前鼠标指向的菜单项对应的菜单资源ID,最后发送MN_SELECTITEM和WM_KEYDOWN消息模拟点击菜单项:

2.4.10 执行Explorer.exe

使用HVNC进行远程操作时,可能会出现界面不显示或其他异常。攻击者通过让目标机器执行explorer.exe程序来恢复正常状态。

首先设置注册表键TaskbarGlomLevel的值为2使任务栏使用“永不分组”模式,然后启动explorer进程。进程创建成功后,将任务栏设置为AlwaysOnTop,并恢复TaskbarGlomLevel为修改前的值:

2.4.11 执行Chrome浏览器

调用cmd程序执行Chrome浏览器,并关闭浏览器中比较消耗CPU性能的特性(如sandbox、GPU加速等),避免CPU使用率过高而被受害者发现。

启动浏览器时使用受害者默认的配置目录(User Data目录)。这样在访问需要账号登录的网站时,如果受害者设置了记住密码或保持登录状态,攻击者无需账号密码就能获取受害者的账号信息:

2.4.12 消息发送机制

在所有C&C指令中,只有键盘模拟和鼠标模拟需要发送窗口消息。恶意程序首先通过窗口位置获取对应的窗口对象,然后将参数转换为发送消息时对应的参数值,最后通过PostMessageA发送给目标窗口。

对于WM_CHAR消息,还需要将对应字符转换为Virtual Key值,同样使用PostMessageA发送给目标窗口对象:

三、ATT&CK映射矩阵

战术(Tactic) 技术ID 技术名称 描述
Resource Development T1583.006 Acquire Infrastructure: Web Services 利用Dropbox存放C&C地址
Initial Access T1566.001 Phishing: Spearphishing Attachment 通过鱼叉式钓鱼邮件投递恶意文档
Execution T1559 Inter-Process Communication 利用管道执行cmd命令
T1204 User Execution 通过诱饵文档诱导用户执行恶意宏
Persistence T1547 Boot or Logon Autostart Execution 设置注册表Run键实现自启动
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 查询注册表键值
Collection T1113 Screen Capture 收集屏幕截图
T1056 Input Capture 捕获键盘输入
Command and Control T1071 Application Layer Protocol 使用Socket协议进行C&C通信

四、总结

本次攻击活动展现了Lazarus组织高度成熟的攻击能力:

  1. 社会工程学:利用韩国本地化内容(网络教室操作手册、SaniTox安全软件)提高攻击成功率
  2. 多层免杀:结合远程模板注入、进程挖空、白名单添加等技术规避安全检测
  3. 针对性对抗:专门检测韩国主流安全产品(AhnLab V3 Lite、ALYac)
  4. 隐蔽性控制:使用HVNC技术在隐藏桌面执行操作,避免被受害者发现
  5. 基础设施:滥用Dropbox等合法云服务存储C&C地址,增加溯源难度

该攻击活动充分体现了APT组织针对特定地区、特定目标的精确打击能力,值得安全从业人员深入研究和防范。

更多文章