Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

事件触发执行 (T1546)

一句话通俗理解

就像在家里装了一个“陷阱“——平时看起来什么都没有,但当你做某个特定动作(比如打开某个文件、屏幕保护启动、或者按下某个键)时,恶意代码就会自动执行。

难度等级

⭐⭐⭐ 较高(需要管理员权限或特定系统访问)

技术描述

攻击者可能利用系统机制来建立基于特定事件触发的持久性。与依赖在启动或用户登录时运行的程序不同,事件触发的持久性使用操作系统特性来监视并对特定条件做出反应。这些条件可能包括文件关联更改、屏幕保护程序激活、WMI事件订阅、shell配置更改、应用程序初始化或系统通知。

该技术特别强大,因为恶意代码不会持续运行。它在磁盘上保持休眠状态直到触发事件发生,减少了被运行时安全工具检测的机会。许多事件触发机制是操作系统内置的,被认为是合法行为,使得难以区分恶意使用和正常管理活动。

子技术列表

子技术ID名称说明难度
T1546.001更改默认文件关联修改文件类型打开方式⭐⭐ 中等
T1546.002屏幕保护程序替换屏幕保护程序为恶意程序⭐ 简单
T1546.003WMI事件订阅使用WMI创建事件触发器⭐⭐⭐ 较高
T1546.004Unix Shell配置修改修改.bashrc等shell配置文件⭐⭐ 中等
T1546.005Trap使用Unix trap命令捕获信号⭐⭐ 中等
T1546.006LC_LOAD_DYLIB添加macOS动态库注入⭐⭐⭐ 较高
T1546.007Netsh辅助DLL注册netsh辅助DLL⭐⭐ 中等
T1546.008辅助功能替换辅助功能二进制文件⭐⭐ 中等
T1546.009AppInit DLLs注册AppInit DLL⭐⭐ 中等
T1546.010AppCert DLLs注册AppCert DLL⭐⭐⭐ 较高
T1546.011应用程序兼容性垫片使用sdbinst安装垫片⭐⭐⭐ 较高
T1546.012映像文件执行选项使用IFEO调试器劫持⭐⭐ 中等
T1546.013PowerShell配置文件修改PowerShell启动脚本⭐ 简单
T1546.014电子邮件利用邮件规则触发代码⭐⭐ 中等
T1546.015更新编排器滥用Windows更新服务⭐⭐⭐ 较高

攻击流程

flowchart TD
    A[获取系统访问权限] --> B[选择触发机制]
    B --> C{WMI事件订阅 / 文件关联修改 / 辅助功能替换 / PowerShell配置文件}
    C --> D[配置触发条件和执行动作]
    D --> E[等待触发事件发生]
    E --> F[恶意代码自动执行]
1. 获取系统访问权限
    ↓
2. 选择触发机制:
   - WMI事件订阅(文件无痕)
   - 文件关联修改
   - 辅助功能替换
   - PowerShell配置文件
    ↓
3. 配置触发条件和执行动作
    ↓
4. 等待触发事件发生
    ↓
5. 恶意代码自动执行

真实案例

案例1:APT29 POSHSPY无文件WMI持久化

  • 时间: 2017-2018年
  • 目标: 美国智库、国防承包商和政府机构
  • 手法: APT29开发了POSHSPY后门,完全利用WMI事件订阅(T1546.003)实现文件级持久化。整个后门不写入任何文件到磁盘,代码完全存储在WMI仓库中,传统文件扫描无法检测。
  • 链接: https://cloud.google.com/blog/topics/threat-intelligence/dissecting-one-ofap

案例2:APT29利用辅助功能

  • 时间: 2020-2021年
  • 目标: 全球政府机构和关键基础设施
  • 手法: APT29在SolarWinds攻击中替换了Windows辅助功能二进制文件(T1546.008),特别是sethc.exe(Sticky Keys)。通过将sethc.exe替换为cmd.exe,攻击者可以在远程桌面登录屏幕上按下Shift键5次来获得SYSTEM权限的命令行访问。
  • 链接: https://www.cisa.gov/news-events/cybersecurity-advisories/aa24-057a

案例3:Emotet修改默认文件关联

  • 时间: 2019-2020年
  • 目标: 全球企业和政府机构
  • 手法: Emotet银行木马通过修改默认文件关联(T1546.001)来保持持久性。该恶意软件修改了.html.htm文件的默认处理程序,将文件打开操作重定向到其恶意payload。
  • 链接: https://attack.mitre.org/software/S0367/

案例4:Volt Typhoon利用WMI持久化

  • 时间: 2023-2024年
  • 目标: 美国关键基础设施
  • 手法: Volt Typhoon使用WMI事件订阅来维持持久性,利用这种完全无文件的技术来逃避安全检测。
  • 链接: https://www.cisa.gov/news-events/cybersecurity-advisories/aa24-038a

红队视角

⚠️ 免责声明:以下内容仅用于合法的安全测试、渗透测试和教育目的。未经授权对他人系统进行测试是违法行为。

攻击优势

  • 许多技术是无文件的,难以被检测
  • 恶意代码只在特定事件触发时执行
  • 利用操作系统合法机制,难以区分恶意和正常行为

常用技术

# WMI事件订阅
$filter = Set-WmiInstance -Namespace "root\subscription" -Class __EventFilter -Arguments @{
    Name = "MaliciousFilter"
    EventNameSpace = "root\cimv2"
    QueryLanguage = "WQL"
    Query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
}

$consumer = Set-WmiInstance -Namespace "root\subscription" -Class CommandLineEventConsumer -Arguments @{
    Name = "MaliciousConsumer"
    CommandLineTemplate = "powershell.exe -enc <base64payload>"
}

Set-WmiInstance -Namespace "root\subscription" -Class __FilterToConsumerBinding -Arguments @{
    Filter = $filter
    Consumer = $consumer
}

实战技巧

  • 优先使用WMI事件订阅(完全无文件)
  • 使用辅助功能替换(可在登录屏幕执行)
  • 配合T1547(自动启动)使用增加冗余

蓝队视角

防御重点

  • 监控WMI活动和事件订阅
  • 审计辅助功能二进制文件的完整性
  • 检查PowerShell配置文件

常见盲点

  • 只关注文件持久化,忽略无文件技术
  • 未监控WMI事件订阅的创建
  • 缺乏对辅助功能二进制文件的完整性检查

检测建议

网络层检测

检测方法: 监控由事件触发执行的进程产生的异常网络连接,检测WMI事件消费者、PowerShell回传等。

具体规则/命令示例:

# Snort规则检测WMI事件触发的PowerShell外连
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"WMI-Triggered PowerShell Beacon"; flow:to_server,established; content:"WindowsPowerShell"; http_user_agent; sid:1000215; rev:1;)

主机层检测

检测方法: 监控WMI事件订阅、文件关联修改、辅助功能二进制文件篡改和IFEO等事件触发机制。

Windows事件ID:

  • 事件ID 5861:WMI永久事件订阅创建
  • Sysmon事件ID 1:辅助功能二进制文件(sethc.exe、utilman.exe等)的进程创建
  • Sysmon事件ID 12/13:IFEO、AppInit_DLLs注册表修改
  • 事件ID 4688:应用程序兼容性垫片(sdbinst.exe)安装

Linux日志:

  • 日志文件:/var/log/auth.log~/.bash_history
  • 关键字段:shell配置文件(.bashrc、.profile、.zshrc)的修改
  • 关键字段:trap命令设置

具体命令示例:

# 列出WMI事件过滤器和消费者
Get-WmiObject -Namespace "root\subscription" -Class __EventFilter
Get-WmiObject -Namespace "root\subscription" -Class __EventConsumer
Get-WmiObject -Namespace "root\subscription" -Class __FilterToConsumerBinding

# 检查辅助功能二进制文件
certutil -hashfile C:\Windows\System32\sethc.exe SHA256
certutil -hashfile C:\Windows\System32\utilman.exe SHA256

# 检查PowerShell配置文件
Test-Path $PROFILE
Get-Content $PROFILE

应用层检测

Sigma规则示例:

title: WMI永久事件订阅检测
status: experimental
description: 检测创建WMI永久事件订阅的行为
logsource:
    category: wmi_event
    product: windows
detection:
    selection:
        EventID: 5861
        Message|contains: '__EventFilter'
    condition: selection
level: high
tags:
    - attack.t1546.003

缓解措施

优先级1:关键措施

措施名称: 事件触发机制禁用与权限控制

具体实施步骤:

  1. 在Windows 10+上禁用AppInit_DLLs功能(设置LoadAppInit_DLLs为0)
  2. 使用SBCP确保辅助功能二进制文件的完整性,配置Windows Defender System Guard运行时监测
  3. 限制WMI权限,只允许管理员创建永久事件订阅,配置WMI命名空间安全设置
  4. 通过组策略配置PowerShell执行策略为RestrictedAllSigned

优先级2:重要措施

措施名称: 事件触发器监控与审计

具体实施步骤:

  1. 启用WMI审计日志(事件ID 5861),监控永久事件过滤器和消费者的创建
  2. 使用Sysinternals Autoruns定期检查所有事件触发位置(IFEO、AppInit_DLLs、AppCertDLLs、启动文件夹等)
  3. 配置Sysmon监控sethc.exeutilman.exe等辅助功能二进制文件的进程创建事件
  4. 对关键系统实施文件完整性监控(FIM),检测PowerShell配置文件、shell配置文件(.bashrc等)和全局模板文件的变更

配置示例:

# 禁用AppInit_DLLs
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 0 /f

# 配置WMI命名空间安全(限制永久事件订阅)
# 使用WMI Control MMC管理单元设置

# 监控PowerShell配置文件变更
auditctl -w $HOME/.config/powershell/Microsoft.PowerShell_profile.ps1 -p wa -k ps_profile

动手实验

⚠️ 重要提示:所有实验必须在隔离的实验室环境中进行,禁止对未授权的真实系统进行测试。

实验1:WMI事件订阅

# 创建WMI事件订阅(需要管理员权限)
$filter = Set-WmiInstance -Namespace "root\subscription" -Class __EventFilter -Arguments @{
    Name = "TestFilter"
    EventNameSpace = "root\cimv2"
    QueryLanguage = "WQL"
    Query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
}

$consumer = Set-WmiInstance -Namespace "root\subscription" -Class CommandLineEventConsumer -Arguments @{
    Name = "TestConsumer"
    CommandLineTemplate = "cmd.exe /c echo triggered >> C:\temp\wmi_test.txt"
}

Set-WmiInstance -Namespace "root\subscription" -Class __FilterToConsumerBinding -Arguments @{
    Filter = $filter
    Consumer = $consumer
}

# 清理
Get-WmiObject -Namespace "root\subscription" -Class __EventFilter | Where-Object {$_.Name -eq "TestFilter"} | Remove-WmiObject
Get-WmiObject -Namespace "root\subscription" -Class CommandLineEventConsumer | Where-Object {$_.Name -eq "TestConsumer"} | Remove-WmiObject

实验2:辅助功能替换

REM 备份原始文件
copy C:\Windows\System32\sethc.exe C:\temp\sethc_backup.exe

REM 替换为cmd.exe(需要TrustedInstaller权限)
REM 实际攻击需要先获取所有权并修改权限

REM 清理 - 恢复原始文件

实验3:使用Atomic Red Team测试

# 执行T1546测试
Invoke-AtomicTest T1546

术语解释

术语英文原名通俗解释
WMIWindows Management InstrumentationWindows管理规范,一套用于管理系统信息的接口,就像系统的“神经中枢“
文件关联File Association文件类型与打开该类型文件的程序之间的关联,如.txt文件用记事本打开
辅助功能Accessibility Features为残障人士提供的系统功能,如粘滞键(Sticky Keys)、放大镜
AppInit DLLsAppInit DLLs在所有加载user32.dll的进程中自动加载的DLL,一种全局DLL注入机制
IFEOImage File Execution Options映像文件执行选项,Windows中用于调试程序的注册表配置
PowerShell配置文件PowerShell ProfilePowerShell启动时自动执行的脚本,就像shell的.bashrc

参考资料