一、痕迹清理概述

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 EventsDNS 等服务的转入转出日志ForwardedEvents.evtx
应用及服务日志Microsoft200+ 微软内置日志分类(远程桌面、无线网络、设备安装等)详见目录
应用及服务日志Microsoft Office AlertsWord/Excel/PowerPoint 警告信息(含文件名、路径)OAerts.evtx
应用及服务日志Windows PowerShellPowerShell 操作日志Windows Powersh.evtx
应用及服务日志Internet ExplorerIE 浏览器日志(默认未启用)InternetExplorer.evtx
应用及服务日志OpenSSHSSH 连接日志对应文件
应用及服务日志Visual StudioVS 相关日志对应文件

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 日志清理方法对照表

方法命令 / 操作适用场景
手动事件查看器 → 右键日志 → 清除日志少量清理
CMDwevtutil cl system 等批量清理
PowerShellGet-WinEvent -ListLog ... | %{Wevtutil.exe cl $_.Logname}批量清理
MSFmeterpreter> 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)

powershell

Import-Module .\Invoke-Phantom.ps1
Invoke-Phantom
② EventCleaner(C++,强烈推荐)

cmd

EventCleaner.exe suspend   # 挂起日志线程,暂停记录
EventCleaner.exe normal    # 恢复正常记录

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全局,新会话生效
2HISTSIZE=0 && HISTFILESIZE=0当前 Shell 立即生效
3~/.bashrc 添加 HISTSIZE=0 和 HISTFILESIZE=0每次开启 Shell 生效

3.3 Linux 日志文件完整清单

文件路径记录内容查看命令
/var/log/lastlog每个用户最后一次登录信息lastlog
/var/log/utmp当前登录用户信息wwho
/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.logYum 软件包管理日志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 清理方法对比

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

4.2 推荐工具清单

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

4.3 核心原则与学习路径

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

  2. Windows 痕迹记录的机制

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

学习路径
  • 蓝队排查技术

  • 安全软件工作原理

  • Windows 文件系统(难度大)

  • Windows 事件机制(难度大)

实战注意事项(原文逐条)
  1. 能单条指定删除就优先使用
    为最大化隐蔽性,能单条删除就不批量清空。

  2. 文件的删除尽量使用覆写的方式
    传统删除短时间内可恢复,覆写减少被复原机会。

  3. 伪造痕迹也很重要
    在某些场景下,伪造时间戳或插入假日志比直接删除更可靠。

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

  5. 网络隧道也是隐藏痕迹的一种方法
    端口转发、内网穿透等本质上就是连接痕迹的隐藏方式。

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


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

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐