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

启动或登录自动执行 (T1547)

一句话通俗理解

就像在你家的“自动播放列表“里偷偷加了一首歌——每次你打开音乐播放器(开机/登录),恶意代码就会自动运行,根本不需要你手动操作。

难度等级

⭐⭐ 中等(需要管理员权限或用户级访问)

技术描述

攻击者可能配置系统设置,使其在系统启动或用户登录时自动执行程序,以维持持久性或在受损系统上获得更高权限。操作系统可能具有在系统启动或账户登录时自动运行程序的机制。这些机制可能包括自动执行放置在特别指定目录中的程序,或引用存储配置信息的存储库,如Windows注册表。

攻击者可能通过修改或扩展内核的功能来实现相同的目标。

由于某些启动或登录自动启动程序以更高权限运行,攻击者可能利用这些来提升权限。

子技术列表

子技术ID名称说明难度
T1547.001注册表Run键/启动文件夹最常见的自动启动位置⭐ 简单
T1547.002认证包加载到LSASS进程中的DLL⭐⭐⭐ 较高
T1547.003时间提供者系统时间同步相关的DLL⭐⭐⭐ 较高
T1547.004Winlogon辅助DLL用户登录时加载的DLL⭐⭐ 中等
T1547.005安全支持提供者认证相关的安全DLL⭐⭐⭐ 较高
T1547.006内核模块和扩展Linux内核模块(.ko文件)⭐⭐⭐⭐ 高
T1547.007重新打开的应用程序macOS应用恢复功能⭐ 简单
T1547.008LSASS驱动程序LSASS进程加载的驱动⭐⭐⭐⭐ 高
T1547.009快捷方式修改修改桌面快捷方式指向恶意程序⭐ 简单
T1547.010端口监视器打印相关的系统DLL⭐⭐⭐ 较高
T1547.012打印处理器打印处理相关的DLL⭐⭐⭐ 较高
T1547.013XDG自动启动条目Linux桌面环境自动启动⭐⭐ 中等
T1547.014Active SetupWindows组件自动安装机制⭐⭐ 中等
T1547.015登录项macOS登录时自动启动的应用⭐ 简单

攻击流程

flowchart TD
    A[获取系统访问权限] --> B[选择自动启动位置]
    B --> C{注册表Run键 / 启动文件夹 / 服务配置 / 认证DLL}
    C --> D[将恶意程序或引用添加到选定位置]
    D --> E[等待系统重启或用户登录]
    E --> F[恶意代码自动以高权限执行]
1. 获取对系统的访问权限(通常需要管理员/root权限)
    ↓
2. 选择自动启动位置:
   - 注册表Run/RunOnce键
   - 启动文件夹
   - 服务配置
   - 认证相关DLL
    ↓
3. 将恶意程序或引用添加到选定位置
    ↓
4. 等待系统重启或用户登录
    ↓
5. 恶意代码自动以高权限执行

真实案例

案例1:APT29 SolarWinds 攻击中的注册表持久化

  • 时间: 2020年
  • 目标: 全球政府机构、科技公司和关键基础设施
  • 手法: APT29在SolarWinds Orion软件中植入SUNBURST后门,通过修改Windows注册表中的Run键(T1547.001)实现持久性。在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run下添加了指向恶意DLL的条目,确保每次系统启动时自动执行。
  • 链接: https://www.cisa.gov/news-events/cybersecurity-advisories/aa24-057a

案例2:Conti勒索软件使用多种自动启动机制

  • 时间: 2020-2021年
  • 目标: 全球企业、医院和政府机构
  • 手法: Conti勒索软件使用注册表Run键(T1547.001)和启动文件夹来确保持久性。在加密完成前,恶意软件会修改注册表以在每次系统启动时重新加载自身,即使用户尝试删除主程序文件。
  • 链接: https://attack.mitre.org/software/S0575/

案例3:Lazarus Group利用端口监视器和打印处理器

  • 时间: 2022年
  • 目标: 全球银行和金融机构
  • 手法: Lazarus Group使用较少见的子技术——端口监视器(T1547.010)和打印处理器(T1547.012)来逃避检测。这些位置很少被安全工具监控,提供了隐蔽的持久化机制。
  • 链接: https://attack.mitre.org/groups/G0032/

案例4:BlackCat勒索软件的启动持久化

  • 时间: 2023-2024年
  • 目标: 全球企业网络
  • 手法: BlackCat(ALPHV)勒索软件使用注册表Run键和启动文件夹来维持持久性。攻击者在加密过程中创建多个持久化点,确保即使部分被清除,勒索软件仍能重新启动。
  • 链接: https://www.cisa.gov/news-events/cybersecurity-advisories/aa23-353a

红队视角

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

攻击优势

  • 注册表Run键是最经典的持久化方式,兼容性好
  • 启动文件夹简单直观,适合快速部署
  • 认证包和SSP等高级技术难以被常规安全工具检测

常用工具

REM 注册表Run键
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /v "Windows Update" /d "C:\temp\malware.exe" /f

REM 启动文件夹
copy malware.exe "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\"

REM 使用Sysinternals Autoruns查看所有自动启动位置
autoruns.exe

实战技巧

  • 使用看似合法的名称(如“Windows Update“、“Security Health”)
  • 优先选择不常见的自动启动位置(如端口监视器、打印处理器)
  • 配合T1546(事件触发执行)使用,增加冗余

蓝队视角

防御重点

  • 监控注册表Run/RunOnce键的修改
  • 审计启动文件夹中的新增文件
  • 使用Autoruns等工具定期扫描自动启动位置

常见盲点

  • 只关注Run键,忽略认证包、SSP等高级位置
  • 未监控用户级启动文件夹(HKCU)
  • 缺乏对Linux/macOS自动启动位置的监控

检测建议

网络层检测

检测方法: 监控自动启动程序(如Run键启动的进程)的异常出站网络连接,检测后门回连。

具体规则/命令示例:

# Suricata规则检测启动项进程外连
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"Autostart Program Beaconing"; flow:to_server,established; detection_filter:track by_src, count 5, seconds 3600; sid:1000216; rev:1;)

主机层检测

检测方法: 监控Windows注册表Run键、启动文件夹以及Linux/macOS自动启动配置的修改。

Windows事件ID:

  • Sysmon事件ID 12/13:注册表Run/RunOnce键修改
  • Sysmon事件ID 11:文件创建(监控启动文件夹新文件)
  • 事件ID 4657:注册表值修改(认证包、SSP注册)
  • Sysmon事件ID 1:启动文件夹中的程序执行

Linux日志:

  • 日志文件:/etc/init.d//etc/systemd/system/目录文件变更
  • 关键字段:XDG自动启动配置文件(~/.config/autostart/)修改
  • 关键字段:macOS LaunchAgent和LaunchDaemon plist文件创建

具体命令示例:

# 列出所有Registro Run键条目
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"

# 检查启动文件夹
dir "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup"
dir "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"

# 检查Linux XDG自动启动
ls -la ~/.config/autostart/

# 检查macOS自动启动
ls -la /Library/LaunchAgents/
ls -la /Library/LaunchDaemons/

应用层检测

Sigma规则示例:

title: 注册表Run键添加检测
status: experimental
description: 检测在HKLM Run键中添加新条目的事件
logsource:
    category: registry_event
    product: windows
detection:
    selection:
        TargetObject|startswith: 'HKLM\Software\Microsoft\Windows\CurrentVersion\Run'
    condition: selection
level: high
tags:
    - attack.t1547.001

缓解措施

优先级1:关键措施

措施名称: 自动启动位置访问控制

具体实施步骤:

  1. 使用应用程序控制策略(WDAC/AppLocker)限制自动启动位置的可执行文件执行
  2. 限制用户对系统级自动启动位置(HKLM Run键、系统启动文件夹)的写入权限
  3. 对认证包(Authentication Packages)和SSP注册实施严格的变更控制
  4. 在Linux系统上限制XDG自动启动目录(/etc/xdg/autostart/)的写入权限

优先级2:重要措施

措施名称: 自动启动审计与基线管理

具体实施步骤:

  1. 使用Sysinternals Autoruns定期扫描所有自动启动位置(包括Run键、启动文件夹、服务、驱动程序、计划任务等)
  2. 建立企业级自动启动白名单,监控所有未在白名单中的自动启动条目
  3. 配置Sysmon监控注册表Run/RunOnce键的修改和启动文件夹的新增文件
  4. 在Linux/macOS系统上监控systemd服务、LaunchDaemons和XDG自动启动配置的创建

配置示例:

# 使用Autoruns生成自动启动报告
autoruns.exe /accepteula /a * /c /h /s /o autoruns_report.csv

# 监控启动文件夹变更
auditctl -w "/home/%USER%/.config/autostart/" -p wa -k xdg_autostart

# PowerShell监控Run键变更
Register-WmiEvent -Query "SELECT * FROM RegistryKeyChangeEvent WHERE Hive='HKLM' AND KeyPath='Software\\Microsoft\\Windows\\CurrentVersion\\Run'" -Action { Write-EventLog ... }

动手实验

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

实验1:注册表Run键持久化

REM 添加Run键(需要管理员权限)
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /v "TestPersistence" /d "C:\Windows\System32\cmd.exe /c echo Persistence Test > C:\temp\test.txt" /f

REM 验证添加
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"

REM 清理
reg delete "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /v "TestPersistence" /f

实验2:启动文件夹持久化

REM 复制脚本到启动文件夹
echo echo Persistence Test > "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\test.bat"

REM 验证
dir "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\"

REM 清理
del "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\test.bat"

实验3:使用Autoruns检测

REM 下载并运行Autoruns
autoruns.exe /accepteula /a * /c > autoruns_output.csv

REM 检查输出中的可疑条目

术语解释

术语英文原名通俗解释
注册表Run键Registry Run KeyWindows注册表中用于自动启动程序的键值,就像系统的“自动播放列表“
LSASSLocal Security Authority Subsystem Service本地安全机构子系统服务,Windows中负责认证的核心进程
SSPSecurity Support Provider安全支持提供者,Windows中处理不同认证协议的模块
WinlogonWindows LogonWindows登录进程,负责处理用户登录和退出
内核模块Kernel ModuleLinux内核中可加载的代码模块(.ko文件),可以动态扩展内核功能
LaunchAgentLaunch AgentmacOS用户级自动启动代理,用户登录时自动运行
XDGX Desktop GroupLinux桌面环境标准,定义了应用程序的自动启动规范

参考资料