Kimsuky组织某样本分析
字数 1410 2025-08-24 16:48:16

Kimsuky组织样本分析:CVE-2017-8291漏洞利用详解

0x00 前言

本文详细分析Kimsuky组织利用CVE-2017-8291漏洞的攻击样本。该漏洞存在于韩国Hancom公司开发的文字处理软件HWP中,利用了GhostScript开源组件(gbb.exe)的类型混淆漏洞。

HWP是韩国广泛使用的文字处理软件,类似于中国的WPS。样本利用了旧版本HWP中存在的GhostScript漏洞(CVE-2017-8291),最新版已移除该组件。

0x01 CVE-2017-8291漏洞分析

漏洞背景

这是一个GhostScript中的类型混淆漏洞,位于.eqproc操作实现中。攻击者可以通过精心构造的PostScript代码绕过SAFER限制,实现任意代码执行。

POC分析

关键PostScript代码结构

/buffersearchvars [0 0 0 0 0] def
/sdevice [0] def

buffers
(buffers) print
pop

enlarge array aload
(after aload) print

漏洞触发流程

  1. zaload函数:实现aload操作,位于/psi/zarray.c

    • asize > ostop - op时调用ref_stack_push重新分配栈空间
    • 向新分配的栈空间写入内容
  2. zeqproc函数:实现.eqproc操作,位于/psi/zmisc3.c

    • 漏洞点:未检查栈中元素数量和操作数类型
    • 任意两个操作数都可以进行比较
    • 与loop结合可导致栈指针上溢

漏洞修复

补丁增加了两项检查:

if (ref_stack_count(&o_stack) < 2)
    return_error(gs_error_stackunderflow);
if (!r_is_array(op - 1) || !r_is_array(op)) {
    return_error(gs_error_typecheck);
}

漏洞利用技术

  1. 通过buffersearchvars数组检索buffers[N]字符串后16位是否被修改
  2. 判断osp是否到达可控范围
  3. 修改currentdevice对象属性为string并保存至sdevice数组
  4. 覆盖LockSafetyParams属性,绕过SAFER限制
  5. 通过.putdeviceparams设置/OutputFile执行命令

0x02 样本分析

样本信息

  • 名称:(첨첨부2)20-0206_법인_운영상황_평가표_서식(법인작성용).hwp
  • MD5:8AD471517E7457EB6EEA5E3039A3334F

文档分析

  1. 文档中包含EPS脚本
  2. 解密ar变量后可见CVE-2017-8291利用部分
  3. 关键PostScript代码结构:
label13 label10 aload 
/label82 true def 
/label83 0 def 
{ 
    .eqproc 
    /label84 true def 
    /label69 0 def 
    label6                                      
    { 
        /label84 true def 
        /label3 label7 label69 get def            
        /label85 label3 length 16#20 sub def    
        label3 label85 get 
        {   
            label84 
            { /label84 false def } 
            { /label84 true def exit } 
            ifelse 
        } 
        repeat 
        label84 
            { /label82 false def exit } 
        if 
        /label69 label69 1 add def 
    } 
    repeat 
    label84 
        { /label82 false def exit } 
    if 
    /label83 label83 1 add def 
} 
loop 

恶意行为分析

  1. 进程注入

    • 调用VirtualProtect修改内存属性
    • 使用GetComputerName获取计算机名并添加计算值
    • 创建临时文件
    • 调用ZwQuerySystemInformation遍历系统句柄
    • 找到HimTrayIcon.exe进程并注入Shellcode
  2. Shellcode功能

    • 解密PE文件并写入内存
    • 获取系统文件夹路径
    • 创建进程并注入代码
    • 获取系统版本信息
    • 通过WriteProcessMemory写入PE内容
  3. userinit.exe分析

    • 创建互斥对象防止重复运行
    • 获取SeDebugPrivilege权限
    • 检测虚拟机环境
    • 创建%APPDATA%\Microsoft\Network目录
    • 收集主机信息并加密
    • 向C2服务器发送数据并下载下一阶段载荷

0x03 防御建议

  1. 更新HWP软件到最新版本
  2. 禁用或移除GhostScript组件
  3. 监控异常进程创建行为
  4. 限制文档宏和脚本执行
  5. 部署终端防护软件检测此类攻击

0x04 参考链接

  1. GhostScript官方参考文档
  2. CVE-2017-8291 POC
  3. GhostButt漏洞分析
  4. GhostScript 9.21下载
Kimsuky组织样本分析:CVE-2017-8291漏洞利用详解 0x00 前言 本文详细分析Kimsuky组织利用CVE-2017-8291漏洞的攻击样本。该漏洞存在于韩国Hancom公司开发的文字处理软件HWP中,利用了GhostScript开源组件(gbb.exe)的类型混淆漏洞。 HWP是韩国广泛使用的文字处理软件,类似于中国的WPS。样本利用了旧版本HWP中存在的GhostScript漏洞(CVE-2017-8291),最新版已移除该组件。 0x01 CVE-2017-8291漏洞分析 漏洞背景 这是一个GhostScript中的类型混淆漏洞,位于.eqproc操作实现中。攻击者可以通过精心构造的PostScript代码绕过SAFER限制,实现任意代码执行。 POC分析 关键PostScript代码结构 漏洞触发流程 zaload函数 :实现aload操作,位于 /psi/zarray.c 当 asize > ostop - op 时调用 ref_stack_push 重新分配栈空间 向新分配的栈空间写入内容 zeqproc函数 :实现.eqproc操作,位于 /psi/zmisc3.c 漏洞点:未检查栈中元素数量和操作数类型 任意两个操作数都可以进行比较 与loop结合可导致栈指针上溢 漏洞修复 补丁增加了两项检查: 漏洞利用技术 通过buffersearchvars数组检索buffers[ N ]字符串后16位是否被修改 判断osp是否到达可控范围 修改currentdevice对象属性为string并保存至sdevice数组 覆盖LockSafetyParams属性,绕过SAFER限制 通过.putdeviceparams设置/OutputFile执行命令 0x02 样本分析 样本信息 名称:(첨첨부2)20-0206_ 법인_ 운영상황_ 평가표_ 서식(법인작성용).hwp MD5:8AD471517E7457EB6EEA5E3039A3334F 文档分析 文档中包含EPS脚本 解密ar变量后可见CVE-2017-8291利用部分 关键PostScript代码结构: 恶意行为分析 进程注入 : 调用VirtualProtect修改内存属性 使用GetComputerName获取计算机名并添加计算值 创建临时文件 调用ZwQuerySystemInformation遍历系统句柄 找到HimTrayIcon.exe进程并注入Shellcode Shellcode功能 : 解密PE文件并写入内存 获取系统文件夹路径 创建进程并注入代码 获取系统版本信息 通过WriteProcessMemory写入PE内容 userinit.exe分析 : 创建互斥对象防止重复运行 获取SeDebugPrivilege权限 检测虚拟机环境 创建%APPDATA%\Microsoft\Network目录 收集主机信息并加密 向C2服务器发送数据并下载下一阶段载荷 0x03 防御建议 更新HWP软件到最新版本 禁用或移除GhostScript组件 监控异常进程创建行为 限制文档宏和脚本执行 部署终端防护软件检测此类攻击 0x04 参考链接 GhostScript官方参考文档 CVE-2017-8291 POC GhostButt漏洞分析 GhostScript 9.21下载