尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

恶意文档分析实战:从DirtyDocBin.rar到威胁检测规则

恶意文档分析实战:从DirtyDocBin.rar到威胁检测规则 简介一套基于 Unet 的文档二值化工程包面向深度学习、图像处理及 OCR 开发者提供将含污渍、光照不均等复杂背景的文档图像自动转为黑白图的完整方案。压缩包共 432 个文件核心代码包括 C 源文件cpp/hpp与 C 头文件h并附带 opencv_world450.dll、onnx 模型及 Visual Studio 项目文件sln/vcxproj便于直接编译运行或二次开发整体体积约 56.14MB。内容预览可见 Unet 推理主程序DirtyDocUnet.cpp、main.cpp和大量 Vulkan/OpenCV 依赖头文件说明工程已具备较完整的运行环境。已有 645 人学习下载适合希望在真实代码层面理解 Unet 如何完成像素级语义分割与文档二值化的研究者、学生或工程人员。通过这份资源读者可以快速搭建实验环境掌握 Unet 在图像分割中的落地技巧并针对低质量扫描件调优二值化效果。1. DirtyDocBin.rar 不是一枚普通压缩包在邮件网关或沙箱目录里看到 DirtyDocBin.rar 时第一反应不应该是解压后双击里面的文档而是先把它当成一个复合型样本看待。这个命名通常不是某个安全厂商的正式家族名更像是收集器对“带宏文档内嵌二进制载荷”这类附件的落盘约定DirtyDoc 提示文档层被污染Bin 提示后续会拆出可执行体。真正重要的不是 rar 本身而是解压后出现的文件类型、宏入口和载荷存放位置。下面的步骤适合安全运营、应急响应和恶意文档分析人员目的是用最小的成本把威胁指标提取出来而不是真的打开一份文档去看内容。2. 先拆外壳DirtyDocBin.rar 的解压与预分类要处理这种交付物第一步是让外壳和内容分开。我在本地不做任何双击操作直接开一个 Linux 虚拟机把原始 RAR 文件复制进去给磁盘做了快照只在一个临时目录里操作。这样的好处是 RAR 注释、文件属性和哈希都能在不受恶意逻辑影响的情况下保留下来。常见做法是用7z或unrar开包两者都能处理常规 RAR 和 RAR5差别主要在密码参数和加密算法兼容性上。2.1 在隔离 Linux 环境里用 7z 完成最小解包先建立以案例编号命名的目录再执行解包。我会用这种命令mkdir -p DIAG/case_001 cd DIAG/case_001 7z x -pinfected -y ../../DirtyDocBin.rar -ocase_001_out find case_001_out -type f -printf %f\t%s bytes\n | sort -k2 -n-pinfected是手动指定的常见样本密码能省掉交互输入如果你手里没有密码先用一张字典里的基础密码表去试顺序通常是infected、malware、pass、123456、samples。-y表示遇到覆盖确认自动回答 yes在快照环境里安全-ocase_001_out指定输出目录避免解压物散落到当前目录。find里按大小排序是为了最快看到体积差异明显的文件通常大文件才是真正的载荷。2.2 用文件签名而不是扩展名判断真实类型扩展名是最容易做手脚的地方。DirtyDocBin.rar 解压后可能看到一个invoice.doc但它实际是 RTF 或 OOXML 文档也可能看到.doc是个 OLE 复合文档。这里先用file和xxd看文件头。file case_001_out/* for f in case_001_out/*; do echo $f xxd -l 16 $f donefile会输出真实类型xxd -l 16看前 16 字节。组合起来能快速分辨OLE 复合文档以D0 CF 11 E0 A1 B1 1A E1开头OOXML 以50 4B 03 04开头RTF 以7B 5C 72 74 66开头如果看到一个.doc文件实际是 RTF重点分析方向就变了RTF 的利用链和 OLE 的宏分析路径不一样。扩展名文件头前 8 字节真实类型主要风险点.docD0 CF 11 E0 A1 B1 1A E1OLE 复合文档VBA 宏、OLE 对象、嵌入可执行体.docx50 4B 03 04 14 00 06 00ZIP/OOXML外部关系、嵌入 OLE 对象.rtf7B 5C 72 74 66 31RTF 富文本\objdata、\objautlink、OLE 对象.pdf25 50 44 46 2D 31 2EPDFJavaScript、/OpenAction、嵌入文件2.3 记录 RAR 元数据和文件哈希再进入宏层接着执行一次unrar l确认压缩包注释、加密头和文件路径。unrar l DirtyDocBin.rar sha256sum DirtyDocBin.rar case_001_out/*unrar l会列出压缩包内文件、原始大小、压缩后大小和 CRC。重点看两个字段如果文件路径带有../或绝对路径说明解压路径可能做过处理如果同一个文档在 RAR 里出现多个副本并且大小只差几个字节多半是宏版本迭代留下的痕迹。sha256sum的结果会写进后续报告作为 YARA 规则或威胁情报平台去重的依据。做完这些才允许进入到宏层检查。3. 宏层检查DirtyDocBin.rar 内嵌文档的 VBA 与载荷定位外壳拆掉之后真正需要花时间的是文档内部的宏代码。这里不直接用 Word 打开而是用 oletools 把 VBA 源码和嵌入对象直接抽出来看。静态分析做不到百分之百还原执行逻辑但能把可疑入口、模块和待释放文件定位到足够细的程度。3.1 先用 olevba 拿到宏入口、模块和可疑 API我一般会在 Remnux 环境里配置好oletools然后对解压出的文档跑两个命令先oleid看结论再用olevba展开宏代码。cd DIAG/case_001 oleid case_001_out/invoice.doc olevba -a --decode --reveal case_001_out/invoice.doc olevba_report.txt grep -nE Auto_Open|Document_Open|Workbook_Open|VBA stomping|Suspicious olevba_report.txt | head -40oleid只返回宏、外部关系、加密标志等摘要olevba -a会分析所有可疑 API--decode对混淆字符串做还原--reveal尽量显示被隐藏的代码。输出里要找的是Auto_Open、Document_Open、Workbook_Open这类自动启动入口以及WScript.Shell、CreateObject、ShellExecute、Environment这类能拉起子进程或写入文件的调用。如果 grep 结果里没有任何入口先不要急着判定干净。很多文档把入口放在ThisDocument.cls而不是普通模块里olevba默认也会覆盖真正需要警惕的是入口存在但源码内容显示为一行Call Shell(cmd /c ...)这种通常是投递前最后一步前面还有大量解密逻辑没有直接显示。3.2 确认 VBA stomping源代码和 P-code 不一致的情况Office 文档里的 VBA 项目同时保存“压缩源码”和“P-code”两份内容。正常打开时 Office 优先执行 P-code只有在开发者工具里编辑代码才会重新编译生成 P-code。恶意文档作者可以利用这个差异把源码替换成无害代码让 P-code 保留真正恶意逻辑这样安全工具看到的源码是干净的。olevba会在分析结果里给VBA stomping提示。如果它显示“source and p-code do not match”说明文档存在 P-code 与源码不一致的迹象。这时需要换一个视角验证不要只信代码文本。常见做法是用pcode2code尝试重建 P-code 的伪代码或者把文件放进 Office 环境里打开一次用行为日志反推实际执行内容。假如 olevba 只报告“有宏”但没有任何可疑 API同时文档时间戳异常我就会把它标记为“低置信度但需动态确认”而不是直接放行。3.3 扫描嵌入载荷隐藏的 DLL、EXE 和脚本字符串宏本身往往不是最终载荷它负责释放并执行一个 PE 文件。可以在静态阶段先用字符串扫描找投递命令常见关键字包括powershell、mshta、rundll32、regsvr32、bitsadmin、certutil。注意宏代码通常使用 Unicode 字符串所以strings要加-el参数。strings -el case_001_out/invoice.doc | grep -iE powershell|mshta|rundll32|regsvr32|bitsadmin|certutil | sort -u xxd -p case_001_out/invoice.doc | tr -d \n doc.hex grep -b 4d5a doc.hex | head -5第一行找脚本命令第二行把整个文档转成十六进制文本第三行搜索4d5a也就是 MZ 文件头。如果找到一个或多个 MZ 偏移需要用dd按偏移切出 PE再单独做 PE 分析。这里有个容易踩坑的点OLE 文档内部会做扇区重排直接按文件偏移切片不一定能切出完整 PE更好的做法是用oleobj提取嵌入对象或者用binwalk按文件签名自动分离。静态阶段找不到 PE 也很正常很多宏在运行时才解密释放这种情况直接把分析重心挪到行为环境。4. 行为确认DirtyDocBin.rar 里的文档在虚拟机里打开之后静态分析能给出方向但最终确认必须看实际执行。对 DirtyDocBin.rar 这种复合样本我会把最完整的行为观察放到一个隔离的 Windows 虚拟机里。关键是先做快照再布置监控最后才打开文档顺序不能反。4.1 快照、还原点和监控工具选型在 Windows 10 虚拟机里我会安装 Sysmon、Procmon、Wireshark 和 Regshot全部配置成开机自动记录。Sysmon 记录进程创建和网络连接Procmon 补足注册表和文件系统细节Wireshark 留存完整流量Regshot 在打开文档前打一次注册表快照执行后再打一次。这套组合足够覆盖大部分 Office 宏行为。工具采集对象关键产出Sysmon进程创建、网络连接、文件创建Event ID 1 / 3 / 11Procmon注册表、文件系统、进程操作PML 工单Wireshark本机网络流量pcapRegshot注册表差异前后快照对比我一般不用 Comodo 或 Sandboxie 这类自动沙箱原因是宏对进程名和窗口环境很敏感自动沙箱里缺失 Office 组件会导致样本自毁无法观察到释放行为。4.2 打开文档并导出 Sysmon 事件先复制样本到固定路径再用Start-Process启动 Word并在 60 秒后导出 Sysmon 事件。时间窗按样本复杂度调整第一次先用 60 秒如果没看到子进程就延长到 5 分钟。cmd /c copy /Y C:\samples\invoice.doc C:\Users\admin\Desktop\invoice.doc Start-Process -FilePath WINWORD.EXE -ArgumentList C:\Users\admin\Desktop\invoice.doc -PassThru Start-Sleep -Seconds 60 wevtutil qe Microsoft-Windows-Sysmon/Operational /q:*[System[(EventID1 or EventID3 or EventID11)]] /f:text /c:2000 C:\samples\sysmon_out.txtStart-Process -PassThru返回 Word 进程对象方便确认它是否还活着wevtutil的 XPath 过滤器只拉 Event ID 1、3、11分别对应进程创建、网络连接、文件创建。/c:2000限制最多 2000 条避免日志量过大导致导出失败。执行时注意看 Word 是否弹出“安全警告”如果禁用宏被触发样本可能不执行需要修改 Office 信任中心设置后重跑。4.3 关注进程链、释放文件和回连地址打开文档后的头 5 分钟里最需要盯住的是一个正常情况下不会出现的进程链WINWORD.EXE创建cmd.exe再创建powershell.exe或rundll32.exe。宏释放的文件通常落在%TEMP%、%APPDATA%或用户桌面目录扩展名伪装成.tmp或.dat。行为静态分析对应点监控证据Word 创建 PowerShell 子进程WScript.Shell.RunSysmon Event ID 1释放文件到%APPDATA%OpenWrite调用Sysmon Event ID 11访问远程 HTTP 服务URLDownloadToFile或 XMLHTTPSysmon Event ID 3修改注册表自启动项RegWriteProcmon / Regshot网络行为不一定要开 Wireshark 才能看Sysmon 的 Event ID 3 已经包含目的 IP、端口和协议。需要额外确认请求内容时再看 pcap 里的 HTTP 响应。整个过程不要手工点开可疑文件所有样本操作都通过脚本触发便于事后还原时间线。5. 固化检测从 DirtyDocBin.rar 分析到 YARA 与 Sysmon 规则拿到宏入口、释放文件和回连地址后不能只停留在“这个样本有问题”的结论上。我会顺手生成两条规则一条 YARA 规则复现 RAR 里文档的静态特征一条 Sysmon 规则捕捉进程创建链。这两条规则不追求覆盖所有恶意文档只覆盖 DirtyDocBin.rar 这一类带宏、带载荷、自动释放的执行方式。5.1 用最小 YARA 规则覆盖同类变体YARA 规则的可移植性来自文件头和字符串的组合而不是文件名。对一个带自动宏和 PE 载荷的 OLE 文档可以写成下面这样rule DirtyDocBin_OLE_Macro_Dropper { meta: author soc description Detect OLE doc with auto-open macro and embedded MZ payload strings: $mz { 4D 5A } $doc_auto Document_Open ascii $ps powershell nocase ascii $sus WScript.Shell ascii condition: uint16be(0) 0xD0CF and $mz and $doc_auto and (#ps 1 or $sus) }条件里的uint16be(0) 0xD0CF限定了 OLE 复合文档避免把其它格式的文件带进来#ps 1表示powershell字符串至少出现两次用来过滤单次提到但不执行的场景。实际部署时可以把这段规则放到 Cuckoo 或自建扫描入口RAR 先解包再扫描命中后自动回调溯源。5.2 通过 Sysmon 配置捕捉 Word 到 PowerShell 的进程链Sysmon 的配置颗粒度比 YARA 更偏行为层我一般只挑真正异常的父子关系做 include 规则避免把系统里正常启动 PowerShell 的事件全部拉进来。Sysmon schemaversion4.50 EventFiltering ProcessCreate onmatchinclude ParentImage conditionisC:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE/ParentImage Image conditioncontainspowershell/Image /ProcessCreate /EventFiltering /Sysmon这条规则只保留WINWORD.EXE直接创建powershell的事件。如果样本里 Office 路径不是默认位置可以改成ParentImage conditioncontainsWINWORD.EXE。配置部署后联合 YARA 规则形成双保险静态扫描负责拦截已知样本Sysmon 负责捕捉同族变体在终端上的异常行为。最后再做一个收尾动作把原始 RAR、解压文档、宏报告、Sysmon 导出、pcap 放在同一个案例目录下并在文件名前统一加 SHA256 前缀后续威胁情报不管是查重、扩线还是复盘都能在一分钟内找到全部原始证据。本文还有配套的精品资源点击获取
返回列表