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

伪装 (T1036)

攻击者通过修改恶意文件或进程的特征,让它看起来像合法程序——就像狼披着羊皮混进羊群,羊群和安全管理员都认不出来。

30秒速查卡

维度你需要知道的
这是什么?修改文件名、路径、签名等特征让恶意代码伪装成合法程序
为什么危险?混淆安全分析和调查,绕过基于名称的检测规则
谁需要关心?终端安全团队、SOC分析师、系统管理员
你的第一步防御监控进程路径与名称是否匹配,启用签名验证
如果只做一件事建立合法进程路径白名单,告警非标准路径的“系统进程“

难度等级

⭐⭐ 中级:需要了解操作系统进程管理、文件系统、数字签名基础

前置知识检查

阅读本文件前,你应该了解:

  • 进程是什么:正在运行的程序实例,有PID、名称、路径等属性
  • 数字签名:验证文件来源和完整性的机制
  • 系统进程:操作系统正常运行需要的进程(如svchost.exe、lsass.exe)
  • 文件扩展名:Windows用扩展名关联程序,可被欺骗
  • 进程树:父子进程关系,帮助识别异常启动链

技术描述

通俗解释

想象一个安保系统通过看工牌颜色识别员工。蓝色工牌是IT部门,红色工牌是保洁。攻击者想要混进机房,最简单的办法就是搞一块蓝色工牌戴上——这就是伪装。

具体手段包括:

  • 改名换姓:把恶意程序命名为svchost.exechrome.exe,管理员一看名字就放行
  • 搬家换址:把svchost.exeSystem32搬到Temp目录运行——地址不对劲
  • 换装变色:修改文件图标和扩展名,让.exe看起来像.pdf文档
  • 冒名顶替:给恶意程序打上合法公司的数字签名(盗用或伪造签名)

简单来说,程序运行时安全软件会检查它的“身份证“——文件名、路径、签名。攻击者把这些信息改成合法程序的样子,就能骗过基于规则的检测。

过渡段

上面用工牌类比。实际在Windows中,安全软件通常通过进程名(如svchost.exe)判断是否为系统进程。攻击者将恶意PE文件重命名为svchost.exe,如果安全软件只看名字不看完整路径,就会被骗。更高级的做法是将恶意文件放在非标准路径(如C:\Temp\svchost.exe),利用管理员疏忽。数字签名层面,攻击者可能盗用合法签名证书给恶意程序签名,或利用签名验证的时间差。

技术原理

  1. 匹配合法名称:将恶意可执行文件重命名为系统进程名(svchost.exe、lsass.exe、csrss.exe等)或常见软件名(chrome.exe、firefox.exe)
  2. 匹配合法位置:将恶意文件放在合法系统目录(System32)或模仿合法程序目录结构(C:\Program Files\)
  3. 代码签名:使用盗用的代码签名证书给恶意程序签名,或利用时间戳攻击(在签名撤销前运行)
  4. 扩展名欺骗:利用Windows的扩展名隐藏特性,将malware.exe命名为document.pdf.exe,显示为document.pdf
  5. 右键左进:利用RTL(从右到左)字符覆盖技术,反转文件名显示顺序
  6. 进程属性篡改:运行时修改进程的PEB(进程环境块)中的命令行和映像路径,欺骗读取PEB的工具

用途与影响

  • 绕过检测:基于名称或路径的检测规则失效
  • 混淆调查:安全分析师难以从进程列表中识别恶意进程
  • 社会工程辅助:让钓鱼附件看起来像正常文档
  • 权限提升:伪装成高权限系统服务进程

子技术列表

子技术ID名称说明
T1036.001Invalid Code Signature使用无效或伪造的代码签名
T1036.002Right-to-Left Override利用RTL字符覆盖技术
T1036.003Rename System Utilities重命名系统工具(如powershell改名为calc)
T1036.004Masquerade Task or Service伪装计划任务或服务
T1036.005Match Legitimate Name or Location匹配合法名称或位置
T1036.006Space after Filename文件名后加空格
T1036.007Double File Extension双重文件扩展名
T1036.008Masquerade File Type伪装文件类型
T1036.009Break Process Trees打断进程树关联
T1036.010Space in Filename文件名中加空格模仿合法程序

攻击流程

flowchart TD
    A[选择伪装目标] --> B{选择伪装方式}
    B -->|名称伪装| C[重命名为系统进程名]
    B -->|路径伪装| D[放置在系统目录]
    B -->|签名伪装| E[盗用或伪造签名]
    B -->|扩展名伪装| F[双扩展名欺骗]
    C --> G[运行恶意程序]
    D --> G
    E --> G
    F --> H[通过钓鱼发送]
    G --> I[安全软件放行]
    H --> I
    I --> J[执行恶意行为]
    J --> K[安全团队难以识别]

真实案例

案例1:APT29伪装svchost.exe绕过检测

  • 时间:2020-2021年
  • 目标:美国政府机构、科技公司
  • 攻击组织:APT29(Cozy Bear,俄罗斯SVR背景)
  • 手法:在SolarWinds供应链攻击的后续阶段,APT29将Cobalt Strike beacon重命名为svchost.exe并放置在临时目录运行。由于安全软件通常将svchost.exe列为系统进程白名单,该恶意程序成功绕过了基于名称的检测。进一步,攻击者修改了进程的PEB结构,使任务管理器和部分EDR工具显示的进程路径为C:\Windows\System32\svchost.exe而非实际路径。他们还使用合法的SolarWinds签名证书给恶意DLL签名,利用签名验证的时间差绕过检测
  • 影响:长期隐蔽运行Cobalt Strike beacon,横向移动到多个政府机构
  • 参考
    • 📰 Mandiant: SUNBURST Analysis
    • 📜 CISA: SolarWinds Compromise

案例2:Emotet木马使用双扩展名钓鱼

  • 时间:2019-2021年(持续活跃)
  • 目标:全球企业用户
  • 攻击组织:Emotet运营者(MUMMY SPIDER)
  • 手法:Emotet通过钓鱼邮件传播,附件使用双扩展名伪装技术。恶意可执行文件命名为发票文档.pdf.exe,Windows默认隐藏已知扩展名,用户看到的文件名是发票文档.pdf。文件图标设置为Adobe PDF图标,用户双击以为打开PDF文档,实际执行了恶意程序。Emotet还使用RTL覆盖技术,将文件名设为 invoices\u202Edoc.exe,显示为invoicesexe.doc。在2020年的一次大规模攻击中,Emotet利用此技术感染了超过10万台主机
  • 影响:大规模感染,作为其他恶意软件(如TrickBot、Ryuk)的投递载体
  • 参考
    • 📰 US-CERT: Emotet Malware Alert
    • 📰 Trend Micro: Emotet Evolution

案例3:LockBit勒索软件重命名系统工具

  • 时间:2022-2023年
  • 目标:全球企业
  • 攻击组织:LockBit勒索软件团伙
  • 手法:LockBit在攻击过程中重命名合法系统工具来逃避检测。他们将PsExec.exe重命名为svchost.exe,将procdump.exe重命名为notepad.exe,将这些工具放在C:\Windows\Temp目录运行。由于安全团队通常将svchost.exe和notepad.exe作为合法进程监控,这些工具的侦察和凭据转储行为未被及时检测。LockBit还使用rundll32.exe加载恶意DLL(重命名为version.dll),利用rundll32的合法签名绕过应用白名单。在部署勒索软件阶段,他们将加密器命名为lsass.exe运行
  • 影响:感染超过1000个组织,勒索赎金超过1亿美元
  • 参考
    • 📰 Cisco Talos: LockBit Analysis
    • 📜 FBI: LockBit Flash Report

红队视角

实战技巧

  1. 选择高频系统进程名:svchost.exe、chrome.exe等不会引起注意
  2. 路径要合理:System32下的svchost.exe比Temp下的更可信
  3. 签名优先:有签名的程序比无签名的更容易绕过
  4. 利用系统工具:rundll32.exe、regsvr32.exe本身是签名的

常用工具

工具用途平台
Resource Hacker修改文件图标和版本信息Windows
SigThief盗取/伪造签名Windows
Invoke-Phantom进程PEB篡改Windows
msfvenom生成自定义payload全平台

注意事项

  • 现代EDR基于行为分析而非仅名称
  • 签名证书被撤销后失效
  • 路径异常是重要告警指标

蓝队视角

检测要点

  1. 进程路径验证:系统进程必须在标准路径
  2. 签名验证:检查签名是否有效
  3. 进程树分析:谁启动了这个进程
  4. 文件哈希:同一名称不同哈希
  5. 网络行为:合法进程的异常外联

监控建议

  • 建立系统进程路径白名单
  • 监控可执行文件重命名事件
  • 启用Sysmon Event ID 1(进程创建)记录命令行
  • 配置文件完整性监控

避坑指南

  • 坑1:只看进程名不看路径——svchost.exe在Temp目录必有问题
  • 坑2:信任数字签名——签名可被盗用或撤销有时间差
  • 坑3:忽略父进程关系——svchost.exe由services.exe启动才正常
  • 坑4:文件扩展名显示设置——确保显示完整扩展名

检测建议

网络层

用人话说:网络层看的是“谁在上网“。如果svchost.exe突然连接外部IP,那就像保安发现保洁阿姨在用机密电话——职位和行为的匹配很重要。

# 检测系统进程的异常网络连接
# 用人话说:系统服务进程不该随便连外网
tshark -i any -Y "(process == svchost.exe || process == lsass.exe) && ip.dst not in {<内网段>}" -T fields -e ip.dst -e tcp.dst_port -e process

# 检测beacon通信模式
# 用人话说:定期心跳是C2标志
netstat -ano | findstr ESTABLISHED | sort /+30 | uniq -c -w30 | sort -rn

主机层

用人话说:主机层就是查户口——每个进程都要核对姓名、住址、出身(父进程)。Sysmon是核户口最好的工具。

关键事件ID

事件ID日志源说明
1Sysmon进程创建(含命令行和路径)
7SysmonDLL加载
11Sysmon文件创建
13Sysmon注册表值修改
4688Security进程创建(需启用命令行审计)
# 检测非标准路径的系统进程
# 用人话说:系统进程必须在系统目录,在别的地方就有鬼
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -FilterXPath "*[System[EventID=1] and (EventData[Data[@Name='Image'] = 'svchost.exe' or Data[@Name='Image'] = 'lsass.exe' or Data[@Name='Image'] = 'csrss.exe']) and EventData[Data[@Name='Image'] not contains 'System32' and Data[@Name='Image'] not contains 'SysWOW64']]" -MaxEvents 50

# 检测svchost.exe的异常父进程
# 用人话说:svchost只能由services.exe启动,别的都不对
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -FilterXPath "*[System[EventID=1] and EventData[Data[@Name='Image'] = 'svchost.exe'] and EventData[Data[@Name='ParentImage'] != 'services.exe']]" -MaxEvents 50

# 检测双扩展名文件
# 用人话说:文件名里有多个点的要警惕
Get-ChildItem C:\Users -Recurse -Include *.exe,*.scr,*.bat,*.vbs -ErrorAction SilentlyContinue | Where-Object {$_.BaseName -match '\.'} | Select-Object FullName

应用层

用人话说:应用层主要看签名和文件元数据。就像检查工牌有没有防伪标记。

# Sigma规则:检测非标准路径的svchost.exe
title: Suspicious svchost.exe from Non-Standard Path
status: experimental
description: 检测从非System32目录运行的svchost.exe
logsource:
    product: windows
    service: sysmon
detection:
    selection:
        EventID: 1
        Image|endswith: 'svchost.exe'
    filter:
        Image|startswith:
            - 'C:\Windows\System32\'
            - 'C:\Windows\SysWOW64\'
    condition: selection and not filter
level: critical
tags:
    - attack.defense_evasion
    - attack.t1036.005

# Sigma规则:检测双扩展名文件创建
title: Double Extension File Creation
status: experimental
description: 检测具有双重扩展名的可疑文件
logsource:
    product: windows
    service: sysmon
detection:
    selection:
        EventID: 11
        TargetFilename|re: '.*\.(pdf|doc|xls|txt|jpg)\.(exe|scr|bat|vbs|com|pif)$'
    condition: selection
level: high
tags:
    - attack.defense_evasion
    - attack.t1036.007

缓解措施

优先级1(必须立即实施)

措施说明MITRE映射
系统进程路径白名单限制系统进程只能在标准目录运行T1036.005 mitigation
禁用扩展名隐藏在文件夹选项中显示完整扩展名T1036.007 mitigation
代码签名验证策略启用WDAC验证签名T1036.001 mitigation

优先级2(1周内实施)

措施说明MITRE映射
进程父关系监控建立合法进程启动链基线T1036 mitigation
服务名称审计监控服务创建和名称变更T1036.004 mitigation
文件重命名告警监控系统目录文件重命名T1036.003 mitigation

优先级3(1月内实施)

措施说明MITRE映射
签名证书撤销检查配置实时证书撤销检查T1036.001 mitigation
RTL字符检测部署RTL字符检测规则T1036.002 mitigation
文件元数据分析分析文件版本信息和图标T1036.008 mitigation

动手实验

实验1:检测非标准路径的系统进程

环境:任意Windows系统

# 列出所有运行的svchost.exe路径
# 用人话说:查查有多少svchost在跑,都在哪里
Get-Process svchost -ErrorAction SilentlyContinue | Select-Object Id, Path

# 验证路径是否在System32
# 用人话说:正常的svchost都在系统目录
Get-Process svchost -ErrorAction SilentlyContinue | Where-Object {$_.Path -notlike "*\System32\*" -and $_.Path -notlike "*\SysWOW64\*"} | Select-Object Id, Path

预期输出:正常系统中所有svchost.exe路径都是C:\Windows\System32\svchost.exe

实验2:分析进程父关系

环境:任意Windows系统

# 查看svchost.exe的父进程
# 用人话说:svchost应该是services.exe的孩子
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -FilterXPath "*[System[EventID=1] and EventData[Data[@Name='Image'] = 'svchost.exe']]" -MaxEvents 100 | ForEach-Object {
    $xml = [xml]$_.ToXml()
    $image = ($xml.Event.EventData.Data | Where-Object {$_.Name -eq 'Image'}).'#text'
    $parent = ($xml.Event.EventData.Data | Where-Object {$_.Name -eq 'ParentImage'}).'#text'
    [PSCustomObject]@{
        Time = $_.TimeCreated
        Image = $image
        Parent = $parent
    }
} | Format-Table -AutoSize

预期输出:正常svchost.exe的ParentImage应为C:\Windows\System32\services.exe

实验3:检测双扩展名文件

环境:任意Windows系统

# 搜索用户目录下的双扩展名文件
# 用人话说:找找有没有名为xxx.pdf.exe的可疑文件
Get-ChildItem -Path C:\Users -Recurse -Include *.exe,*.scr,*.bat,*.vbs,*.com,*.pif -ErrorAction SilentlyContinue | Where-Object {$_.BaseName -match '\.(pdf|doc|xls|txt|jpg|png)$'} | Select-Object FullName, Length, LastWriteTime

预期输出:正常系统返回空列表,有恶意文件时返回文件路径

术语解释

术语解释
进程伪装修改进程特征使其看起来像合法进程
PEB进程环境块,存储进程信息的内存结构
代码签名验证文件来源和完整性的数字签名
双扩展名利用扩展名隐藏特性,如document.pdf.exe
RTL覆盖利用从右到左字符反转文件名显示
进程树父子进程的层次关系
svchost.exeWindows服务宿主进程,常被模仿
WDACWindows Defender Application Control
文件元数据文件属性信息(图标、版本、公司等)
签名撤销证书被吊销后,基于该签名的文件不再可信

参考资料

📚 深入了解

📰 真实攻击

🔧 动手试试

版本历史

版本日期变更
v3.12026-07-10初始版本,从T1654.002模板污染恢复
v1.0-MITRE ATT&CK原始定义