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

混淆文件或信息 (T1027)

一句话通俗理解

攻击者把恶意代码包装成普通文件的样子,就像把偷来的东西藏在玩具盒里,即使保安打开盒子也只看到玩具,看不到赃物。

30秒速查卡

维度你需要知道的
这是什么?使用编码、加密、加壳、隐写术等手段改变恶意代码的表现形式,逃避检测
为什么危险?99%的恶意软件都使用某种混淆,传统签名检测几乎完全失效
谁需要关心?病毒分析师、邮件安全工程师、EDR研发人员
你的第一步防御启用AMSI对脚本内容实时扫描,监控-EncodedCommand等可疑参数
如果只做一件事检测高熵值文件(加密/压缩特征),监控Office应用创建子进程的行为

难度等级

⭐⭐ 中级(需要一定基础)

技术描述

混淆文件或信息(T1027)是MITRE ATT&CK框架中隐蔽战术的一种技术,也是攻击链中使用最广泛的技术之一,几乎所有的恶意软件都会使用某种形式的混淆。

通俗解释: 想象你要寄一个危险品,但快递公司会检查包裹内容。你会怎么做?把危险品藏在玩具熊肚子里、用锡纸包裹防扫描、在包装上写“易碎品“让人不敢打开——这就是混淆。在网络安全中,攻击者用类似的方法:把恶意代码进行Base64编码(像用暗号写日记)、用加壳工具压缩(像真空打包)、隐藏在图片里(像隐写术),让安全软件“看到“的是一堆无害的乱码,而不是真正的恶意代码。

技术原理: 混淆的基本原理是改变数据的表现形式而不改变其本质。具体方法包括:

  1. 编码:用Base64、Hex等方式将二进制数据转换为文本格式,逃避基于内容的过滤
  2. 加密:使用XOR、AES等算法加密恶意负载,只有加载器才能解密执行
  3. 加壳:使用UPX、VMProtect等工具压缩和混淆可执行文件
  4. 隐写术:将恶意数据隐藏在图片、音频或其他媒体文件中
  5. 动态解析:在运行时才解析API函数地址,避免静态分析发现恶意API调用
  6. HTML走私:将恶意负载加密嵌入HTML中,在浏览器端解密组装

用途与影响: 混淆技术使基于签名检测的传统杀毒软件变得几乎无效。攻击者通过混淆可以:绕过邮件网关的附件扫描、逃避Web应用防火墙的检测、延缓安全分析人员的逆向工程。混淆是攻击者最常用的隐蔽手段之一,99%的恶意软件都使用了某种形式的混淆。

子技术列表

该技术共有 18 个子技术:

子技术ID中文名称通俗解释
T1027.001二进制填充在恶意文件末尾添加大量无用的垃圾数据,增大文件体积逃避检测
T1027.002软件加壳用压缩工具把恶意程序打包,像把衣服真空压缩节省空间
T1027.003隐写术把恶意代码藏在图片或音频的像素/声音数据中
T1027.004交付后编译发送源代码文件,在目标系统上编译执行(绕过可执行文件检测)
T1027.005工具中的指示器移除删除或修改恶意工具中的特征标识,隐藏其真实身份
T1027.006HTML走私在HTML中嵌入加密的恶意代码,通过浏览器解密执行
T1027.007动态API解析运行时才计算API地址,避免在导入表中留下痕迹
T1027.008基于混淆的载荷分段把恶意代码切成多段分别混淆,组合起来才是完整代码
T1027.009明文混淆的载荷使用简单的字符串操作(反转、替换)混淆命令
T1027.010命令混淆将命令通过变量替换、字符串拼接等方式打乱
T1027.011XOR使用XOR(异或)运算加密数据,简单但有效
T1027.012LZNT1使用Windows内置的LZNT1压缩算法压缩恶意负载
T1027.013加密/编码使用AES、RC4等标准加密算法保护恶意代码
T1027.014垃圾数据在代码中插入大量无用指令,混淆分析工具

攻击流程

典型攻击流程

编写恶意代码 --> 选择混淆方式 --> 生成混淆载荷 --> 分发执行 --> 运行时解码
graph TD
    A["攻击者编写恶意代码"] --> B["选择混淆技术"]
    B --> C["Base64/Hex编码"]
    B --> D["XOR/AES加密"]
    B --> E["UPX/VMProtect加壳"]
    B --> F["隐写术-藏入图片"]
    C --> G["生成混淆后的载荷文件"]
    D --> G
    E --> G
    F --> G
    G --> H["通过邮件/下载分发"]
    H --> I["受害者系统执行"]
    I --> J["加载器解码/解密/脱壳"]
    J --> K["执行原始恶意代码"]

步骤详解:

  1. 编写恶意代码

    • 通俗描述:攻击者先写好真正的恶意程序
    • 技术细节:编写DLL、可执行文件或Shellcode
    • 常用工具:Visual Studio、MSFvenom
  2. 选择混淆方式

    • 通俗描述:根据目标环境选择最合适的混淆方法
    • 技术细节:不同的混淆方式有不同的检测回避效果
    • 常用工具:混淆器、加壳器、加密库
  3. 生成并分发混淆载荷

    • 通俗描述:将混淆后的文件通过钓鱼邮件或下载链接发送给受害者
    • 技术细节:将混淆载荷附着在文档或邮件附件中
    • 常用工具:钓鱼工具包、恶意文档生成器
  4. 运行时解码执行

    • 通俗描述:受害者的电脑执行混淆文件时,加载器先解码再运行真正的恶意代码
    • 技术细节:加载器先调用解密函数还原原始代码,再在内存中执行
    • 常用工具:PowerShell反射加载、自定义加载器

真实案例

案例1:APT41 使用隐写术隐藏恶意负载(2019-2021)

  • 时间: 2019年-2021年
  • 目标: 全球科技公司、游戏行业
  • 攻击组织: APT41(Wicked Panda、Barium)
  • 手法: APT41使用隐写术(T1027.003)将恶意Shellcode嵌入BMP和PNG图片的像素数据中。他们通过自定义加载器从图片文件中提取并执行恶意代码,还使用交错排列技术将恶意代码分散到多张看似无害的图片中,使单张图片的分析无法发现完整恶意内容。该技术用于Bisonal和ShadowPad后门的部署过程。
  • 影响: 多家科技公司数据被窃取,攻击长期未被发现
  • 参考链接: MITRE - APT41

案例2:Lazarus 使用多层加壳和XOR混淆(2017-2022)

  • 时间: 2017年-2022年
  • 目标: 金融机构、加密货币交易所
  • 攻击组织: Lazarus
  • 手法: Lazarus广泛使用UPX、ASPack、VMProtect等加壳工具(T1027.002)多次压缩和混淆恶意二进制文件。在WannaCry攻击中,恶意软件经过多层加壳和XOR加密(T1027.011)。Lazarus还使用自定义XOR算法对C2通信加密,每次通信使用动态生成的密钥。
  • 影响: 大量金融数据被盗,全球范围造成巨大经济损失
  • 参考链接: MITRE - Lazarus

案例3:TA505 使用HTML走私分发恶意软件(2020-2023)

  • 时间: 2020年-2023年
  • 目标: 全球金融机构、医疗机构
  • 攻击组织: TA505(Clop和LockBit传播者)
  • 手法: TA505广泛使用HTML走私技术(T1027.006)分发FlawedAmmyy RAT、DanaBot等恶意软件。他们将加密的恶意负载嵌入HTML文件,通过JavaScript在浏览器端解密并组装成可执行文件。由于恶意负载在传输过程中是加密的,邮件网关和网络代理的文件扫描无法检测到恶意内容。
  • 影响: 全球数千家企业受到感染
  • 参考链接: MITRE - T1027.006

案例4:Black Basta 使用加密和混淆逃避检测(2024-2025)

  • 时间: 2024年-2025年
  • 目标: 全球企业和医疗机构
  • 攻击组织: Black Basta
  • 手法: Black Basta勒索软件团伙在2024-2025年的攻击中,采用了多层混淆技术来逃避EDR检测。他们使用定制的加密算法对勒索软件二进制文件进行加密,只有第一阶段加载器在内存中解密后才暴露出真正的恶意代码。同时,他们在PowerShell脚本中使用复杂的字符串拼接和变量替换混淆技术,使基于签名的检测规则完全失效。
  • 影响: 多家大型企业被加密,勒索金额高达数百万美元
  • 参考链接: BleepingComputer - Black Basta analysis

红队视角

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

实战技巧

  1. 分层混淆增加检测难度 组合使用编码+加密+加壳的多层混淆方式。例如:先用AES加密载荷,再用Base64编码,最后用UPX加壳。安全产品每破解一层都需要不同的技术。

  2. 使用动态API解析逃避导入表检测 在运行前不声明要调用的API函数地址,而是通过GetProcAddress动态获取。这样安全工具无法通过静态分析你的导入表来判断你要做什么。

  3. 根据目标选择混淆强度 针对高安全环境(如银行、政府),使用更强的混淆(如VMProtect + 自定义加密);针对普通用户,使用基础混淆即可。

常用工具

工具名称用途平台链接
UPX可执行文件加壳工具跨平台https://upx.github.io/
ConfuserEx.NET混淆器Windowshttps://github.com/mkaring/ConfuserEx
ShellterPE文件动态混淆Windowshttps://www.shellterproject.com/
Invoke-ObfuscationPowerShell混淆框架Windowshttps://github.com/danielbohannon/Invoke-Obfuscation

注意事项

  • 混淆不是万能的,行为分析EDR仍然可以检测运行时行为
  • 过度的混淆可能触发安全产品的“过度混淆“告警
  • 确保编码/加密后的载荷能正确解码,否则会导致攻击失败

蓝队视角

检测要点

  1. 检测异常的编码/加密操作

    • 日志来源:Sysmon进程创建、PowerShell日志
    • 关注字段:命令行中出现Base64长字符串、powershell -EncodedCommand
    • 异常特征:非交互式进程(如word.exe)调用PowerShell执行编码命令
  2. 检测加壳可执行文件

    • 日志来源:文件创建事件、PE解析日志
    • 关注字段:UPX、VMProtect等加壳工具的PE特征
    • 异常特征:文件熵值(随机性)过高,表示经过了加密或压缩
  3. 检测HTML走私

    • 日志来源:浏览器日志、进程创建、网络代理日志
    • 关注字段:浏览器创建可执行文件、JS解密操作
    • 异常特征:浏览器下载HTML后启动PowerShell或生成exe文件

监控建议

  • 启用AMSI(反恶意软件扫描接口)对所有脚本内容进行实时扫描
  • 配置攻面减少(ASR)规则阻止Office应用创建子进程
  • 监控PowerShell的ScriptBlock日志记录
  • 部署支持行为分析的EDR而非仅依赖签名检测

检测建议

用人话说: 混淆检测就像看一封用密码写的信。如果你发现邮件附件是Base64编码的一大串乱码,或者PowerShell命令里用了-EncodedCommand参数,那就很可疑。正常程序不会把自己藏起来,只有恶意代码才需要“化妆“。

网络层检测

检测方法: 监控网络流量中的高熵值内容(加密/压缩数据的特征)。

具体规则/命令示例:

# 检测base64编码的PowerShell下载命令
suricata规则示例:
alert http any any -> $HOME_NET any (msg:"可能的Base64编码恶意代码"; content:"|2f|e|2f|"; within:50; sid:1027001; rev:1;)

主机层检测

Windows事件ID:

  • 事件ID 4688:进程创建(关注powershell -EncodedCommand)
  • 事件ID 4104:PowerShell ScriptBlock日志
  • 事件ID 1 (Sysmon):进程创建,关注父进程为Office应用的脚本执行

具体命令示例:

# 检测高熵值文件(可能被加密或加壳)
# 使用PowerShell检测高熵文件
Get-ChildItem -Path C:\Users\ -Recurse -Filter *.exe | 
    Select-Object FullName, Length | 
    Where-Object {$_.Length -gt 500KB}

应用层检测

Sigma规则示例:

title: PowerShell 编码命令执行
status: experimental
description: 检测使用-EncodedCommand参数的PowerShell执行
logsource:
    category: process_creation
    product: windows
detection:
    selection:
        CommandLine|contains: '-EncodedCommand'
    condition: selection
level: medium
tags:
    - attack.t1027

缓解措施

优先级1:关键措施

措施名称: 启用AMSI和脚本内容扫描

具体实施步骤:

  1. 确保Windows Defender的AMSI功能已启用
  2. 配置组策略强制启用PowerShell ScriptBlock日志
  3. 启用攻面减少(ASR)规则

优先级2:重要措施

措施名称: 实施应用程序白名单

具体实施步骤:

  1. 配置Windows Defender Application Control(WDAC)
  2. 限制脚本解释器(PowerShell、WScript)的使用
  3. 禁用Office宏或仅允许签名的宏执行

优先级3:建议措施

措施名称: 网络层面内容过滤

具体实施步骤:

  1. 配置邮件网关对附件进行深度内容分析
  2. 部署网络代理对HTTPS流量进行解密检查
  3. 使用沙箱技术分析可疑文件

MITRE ATT&CK 缓解措施映射

缓解措施ID缓解措施名称适用性说明
M1040终端上防止感染适用AMSI实时扫描脚本内容,阻止混淆载荷执行
M1045软件限制策略适用AppLocker限制未授权脚本和可执行文件运行
M1021限制基于Web的内容部分适用邮件网关深度内容分析,检测附件混淆
M1037过滤网络流量部分适用网络代理对HTTPS流量解密检查

动手实验

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

实验环境准备

推荐靶场/实验平台:

平台名称类型难度链接
TryHackMe - Obfuscation PrinciplesCTF初级https://tryhackme.com/

所需工具:

  • Kali Linux虚拟机:攻击方
  • Windows虚拟机:目标方
  • CyberChef:编码/解码工具

实验1:Base64编码绕过基础检测(初级)

实验目标: 学习如何使用Base64编码混淆命令

实验步骤:

  1. 在Kali中执行 echo "恶意命令" | base64 编码一个命令
  2. 在Windows中使用PowerShell解码执行:powershell -EncodedCommand <base64字符串>
  3. 观察Process Monitor中该进程的创建事件

预期结果: 编码后的命令在命令行参数中显示为乱码,绕过基于关键词的检测

实验2:使用XOR加密解密恶意载荷(中级)

实验目标: 学习使用XOR加密保护载荷

实验步骤:

  1. 编写一个简单的C程序,对一条消息进行XOR加密
  2. 将加密后的数据保存为文件
  3. 编写加载器程序,运行时解密并执行
  4. 使用静态分析工具(如PE Studio)检查加密前后的差异

预期结果: 加密后的文件中没有明显的恶意字符串

术语解释

术语英文原名通俗解释
混淆Obfuscation故意把代码写得复杂难懂,就像用密码写日记,别人看不懂但你明白
加壳Packing把程序压缩打包,像把衣服真空压缩,需要解压后才能看到原貌
Base64Base64 Encoding一种将二进制数据转换为文本的编码方式,像把中文拼音转成英文字母
XORXOR Encryption一种简单的加密方法,用同一个密钥加密和解密,像用密码本加密信息
隐写术Steganography把秘密信息藏在普通文件中,像把密信用隐形墨水写在报纸上
熵值Entropy衡量数据随机程度的指标,加密/压缩过的数据熵值很高,像是“看起来很乱“的程度
AMSIAnti-Malware Scan InterfaceWindows的反恶意软件扫描接口,能在脚本执行前扫描内容
HTML走私HTML Smuggling在HTML中隐藏恶意代码,利用JavaScript在浏览器端解密执行

参考资料

官方文档

安全报告

工具与资源