ARTICLE · 1018755
蓝队防御实战体系·第20篇|Office宏与脚本威胁防御
系列引言
上一篇我们给PowerShell这把“双刃剑”装上了刀鞘,但PowerShell在攻击链中通常扮演“第二阶段载荷”的角色。攻击者真正敲开大门的“第一脚”,往往是伪装成发票、简历、合同的Office文档或脚本文件。钓鱼邮件附带一个带宏的Word,或一个双击即执行的HTA/JS/VBS文件,是初始访问的经典路径。今天,我们把这条链路从头到尾加固。
学习目标
通过本篇,你将理解Office宏攻击的完整生命周期,掌握WScript(VBS/JS)、HTA、CHM、LNK等脚本型攻击手法,了解红队如何通过社会工程诱导用户“启用内容”以及利用远程模板注入绕过静态检测,并掌握宏与脚本威胁的检测焦点:进程链异常、网络下载、文件落地、注册表持久化。
核心内容讲解
1. Office宏攻击的完整生命周期
| 投递 | ||
| 诱导 | ||
| 启用宏 | ||
| 宏执行 | AutoOpenDocument_Open事件触发 | |
| 下载载荷 | URLDownloadToFile、WinHttp | |
| 持久化 | Startup文件夹、注册表Run键 | |
| C2通信 |
红队典型宏代码逻辑(仅供授权测试学习):
Vba ' AutoOpen宏:文档打开时自动执行 Sub AutoOpen() Dim str As String ' 构造远程下载命令 str = "powershell -NoP -NonI -W Hidden -Exec Bypass -Command ""..." ' 通过Shell执行 Shell "cmd /c " & str, vbHide End Sub
2. 远程模板注入(Remote Template Injection)
这是绕过静态宏检测的经典技术。攻击者将宏保存在远程模板(.dotm)中,受害者文档本身不含恶意代码。
攻击流程:
攻击者创建一个正常的Word文档。 修改文档的 settings.xml.rels,将模板指向远程地址。受害者打开文档时,Word自动下载远程模板,加载其中的宏。 宏执行,下载第二阶段载荷。
攻击迹象:
Word进程发出网络请求下载 .dotm或.dot文件。winword.exe进程创建 cmd.exe或powershell.exe子进程。
检测方法:
Powershell # 使用Sysmon Event ID 22(DNS查询)和Event ID 3(网络连接) Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" | Where-Object {$_.Id -eq 22 -and $_.Message -match "winword.exe" -and $_.Message -match "\.dotm"}
3. 脚本宿主攻击:WScript、HTA、CHM、LNK
除了Office宏,攻击者还大量使用Windows脚本宿主和LOLBins。
| VBScript | wscript.execscript.exe | ||
| JScript | wscript.exe | ||
| HTA | mshta.exe | ||
| CHM | hh.exe | ||
| LNK | |||
| WSF | wscript.exe | ||
| XLL |
红队HTA攻击示例逻辑(仅供授权测试学习):

攻击迹象:
mshta.exe进程创建了 powershell.exe或cmd.exe子进程。wscript.exe创建了网络连接。 explorer.exe创建了 mshta.exe(用户双击了HTA文件)。
4. 核心防御:Mark of the Web(MOTW)与受保护视图
MOTW是Windows给从Internet下载的文件添加的隐藏标记(ADS流:Zone.Identifier)。
查看MOTW:
Powershell Get-Item"C:\Users\User\Downloads\invoice.docx" -Stream * # 输出:Stream "Zone.Identifier",内容:"ZoneId=3"(3表示Internet)
受保护视图:Office检测到MOTW后,自动在受保护视图中打开文档——宏被禁用、ActiveX被禁用、编辑被禁止。
绕过MOTW的攻击手法:
压缩包(.zip、.iso)内的文件可能不继承MOTW。 通过WebDAV或SMB共享投递文件(无ZoneId=3)。 使用 Unblock-File移除标记。
蓝队对策:
Powershell # 强制所有Office文档在受保护视图中打开 reg add "HKCU\Software\Microsoft\Office\16.0\Word\Security\ProtectedView" /v DisableInternetFilesInPV /t REG_DWORD /d 0 /f reg add "HKCU\Software\Microsoft\Office\16.0\Word\Security\ProtectedView" /v DisableUnsafeLocationsInPV /t REG_DWORD /d 0 /f
5. 最强防线:ASR(Attack Surface Reduction)规则
Windows Defender的ASR规则能从根本上阻断Office和脚本的恶意行为。
关键ASR规则:
Block all Office applications from creating child processes | ||
Block Office applications from creating executable content | ||
Block Office applications from injecting code into other processes | ||
Block Win32 API calls from Office macros | ||
Block execution of potentially obfuscated scripts | ||
Block JavaScript or VBScript from launching downloaded executable content |
配置方式:
Powershell # 使用PowerShell启用ASR规则 Add-MpPreference -AttackSurfaceReductionRules_Ids BE9BA2D9-53EA-4CDC-84E5-9B1EEEE46550 -AttackSurfaceReductionRules_Actions Enabled # 查看当前规则 Get-MpPreference | Select-Object AttackSurfaceReductionRules_Ids, AttackSurfaceReductionRules_Actions
验证:在实验机上创建带宏的文档,尝试创建子进程,观察是否被阻断。
6. Office宏日志与审计
Office本身产生宏执行日志,是重要的检测数据源。
Sysmon配合检测规则:
Yaml title: Office宏创建子进程 logsource: product: windows service: sysmon detection: selection_parent: EventID: 1 ParentImage|endswith: - '\WINWORD.EXE' - '\EXCEL.EXE' - '\POWERPNT.EXE' - '\OUTLOOK.EXE' selection_child: Image|endswith: - '\cmd.exe' - '\powershell.exe' - '\wscript.exe' - '\cscript.exe' - '\mshta.exe' - '\rundll32.exe' - '\regsvr32.exe' condition: selection_parent and selection_child level: critical
Yaml title: 脚本宿主启动下载行为 logsource: product: windows service: sysmon detection: selection: EventID: 1 Image|endswith: - '\wscript.exe' - '\cscript.exe' - '\mshta.exe' CommandLine|contains: - 'http://' - 'https://' - 'DownloadFile' - 'DownloadString' condition: selection level: high
7. 深度对抗:EvilClippy混淆 + 远程模板注入 + 宏下载载荷
红队攻击手法(T1137.001, T1221, T1566.001):
- 攻击步骤
: 攻击者使用宏混淆工具修改Word文档的VBA项目,破坏静态解析并隐藏VBA项目。 修改 settings.xml.rels,将模板指向远程地址。发送钓鱼邮件,附件为 invoice.doc。用户打开文档,Word自动下载远程模板并加载其宏。 宏执行PowerShell下载器,在内存中加载远程控制码。 载荷使用HTTPS回连C2,无文件落地。
- 攻击迹象
: Word文档打开后发出网络请求下载 .dotm文件。winword.exe创建了 powershell.exe子进程。PowerShell命令行包含 IEX、DownloadString、FromBase64String。进程与未知IP建立HTTPS连接。
- 攻击步骤
蓝队检测与防御方案:
- 检测
: - 网络层
:使用Suricata检测HTTP流量中的 .dotm、.dot、.xlsm文件下载:Text alert http $HOME_NET any -> $EXTERNAL_NET any ( msg:"疑似远程模板下载"; flow:established,to_server; http.uri; content:".dotm"; nocase; sid:1000010; rev:1; ) - Sysmon事件ID 1
:检测 winword.exe创建子进程。 - Sysmon事件ID 22+3
:检测Word的网络活动。 - YARA扫描
:扫描 %TEMP%、%APPDATA%下新创建的.dll、.exe文件。
- 网络层
- 阻断
: - ASR规则
:启用 Block all Office applications from creating child processes。 - 组策略禁用宏
: 用户配置 → Microsoft Word 2016 → Word选项 → 安全 → 宏设置→禁用所有宏,并发出通知。 - 受保护视图
:强制所有来自Internet的文件在受保护视图中打开。 - 网络层阻断
:使用Web代理拦截对 .dotm、.dot等扩展名的下载。 - WDAC
:阻止 mshta.exe、wscript.exe、cscript.exe的网络访问。 - 邮件网关
:过滤包含宏的Office附件。
- ASR规则
- 检测
8. 防御与检测视角(必须)
检测点1:Office进程异常子进程创建
- 监控点
:Sysmon Event ID 1,关注 WINWORD.EXE、EXCEL.EXE、POWERPNT.EXE、OUTLOOK.EXE创建cmd.exe、powershell.exe、mshta.exe等子进程。 - 规则思路
: ParentImage ENDSWITH (WINWORD.EXE OR EXCEL.EXE) AND Image ENDSWITH (cmd.exe OR powershell.exe OR mshta.exe)→ 严重告警,正常Office不应创建这些子进程,立即隔离文档并采集完整进程树。
- 监控点
检测点2:远程模板下载行为
- 监控点
:Sysmon Event ID 22(DNS查询)与Event ID 3(网络连接),关注 winword.exe、excel.exe发起的对.dotm、.dot、.xlsm的下载请求。 - 规则思路
: Image ENDSWITH winword.exe AND QueryName CONTAINS .dotm→ 高告警,结合HTTP URI字段判断是否为远程模板注入。
- 监控点
检测点3:脚本宿主异常网络行为
- 监控点
:Sysmon Event ID 1与3,关注 wscript.exe、cscript.exe、mshta.exe的命令行含URL、创建网络连接或子进程。 - 规则思路
: Image ENDSWITH (wscript.exe OR mshta.exe) AND (CommandLine CONTAINS http OR NetworkConnect TO external_ip)→ 高告警,脚本宿主主动外连是明确的恶意特征,立即阻断并取证。
- 监控点
全文总结与下篇预告
今天,我们封堵了初始访问的第一道门。你理解了Office宏攻击的完整生命周期(投递→诱导→启用→执行→下载载荷→C2),掌握了远程模板注入这一绕过静态检测的经典手法,认识了WScript、HTA、CHM、LNK等脚本型攻击载体。在防御侧,你学会了MOTW+受保护视图的第一道防线、ASR规则的“核武器”级阻断,以及进程链监控+网络下载检测的日志分析思路。更重要的是,你看到了红队宏混淆+远程模板注入+载荷下载的完整攻击链与蓝队的多层封堵策略。
从软件到脚本,我们加固了操作系统的“软”层面。但攻击者最底层的目标,是固件和硬件——BIOS、UEFI、TPM、Bootloader。一旦固件被植入后门,重装系统也无法清除。下一篇《固件与硬件安全:UEFI、Bootkit防御》将深入这个“最底层”的攻防战场。