拓冰建站拓冰建站
首页 / 资讯中心 / 正文

渗透痕迹清理:日志清理、操作痕迹消除、安全收尾

14-渗透痕迹清理日志清理、操作痕迹消除、安全收尾合规声明每次都讲绝不省略未经授权对他人计算机系统实施渗透测试属于违法行为在我国可依据《刑法》第 285 条非法侵入计算机信息系统罪、非法获取计算机信息系统数据罪与第 286 条破坏计算机信息系统罪追究刑事责任。本文所有技术演示仅在本地靶场VulnHub、Metasploitable、自建域环境或已签署书面授权的测试环境中进行请读者务必守住法律底线。一、先定调痕迹清理到底是个什么活写了前面三篇域渗透、工具栈、权限维持有读者在后台问我“佬攻击链讲完了是不是就该讲讲怎么’毁尸灭迹’了”打住。这个词用错了而且错得有点危险。我把话说在前面这一篇的内容定位是这样的在授权渗透测试中痕迹清理是收尾工作的一部分——你测试完毕把测试过程中产生的多余痕迹做基本说明和必要的还原让甲方环境回到干净状态这是职业素养。它同时是蓝队的必修课——你要理解攻击者会怎么藏才能知道该盯哪里。红蓝两边读同一篇文章收获完全不同。它不是隐身术——真实对抗中日志外发、EDR 上云、SIEM 集中采集早就让本机清日志变成掩耳盗铃。攻击者清得越狠在某些检测规则眼里反而越可疑。记住我这三句话再去学后面的技术方向就不会歪。技术是中性的你拿它在靶场里练手它就是技能拿它去真实环境清日志性质立刻变了——而且注意在真实入侵事件里删除日志本身就是破坏计算机信息系统的加重情节量刑时会被认定为主观故意和对抗侦查的证据。这条红线我在文末还会再敲一次。二、Windows 篇日志体系先摸清再谈清理很多新手一上来就问怎么删 Windows 日志这就好比还没学解剖就问怎么做手术。你得先知道日志长在哪、记什么、谁在记。2.1 三大关键日志Windows 事件日志由Windows 事件日志服务Event Log Service进程名svchost.exe承载的EventLog服务统一管理物理存储在C:\Windows\System32\winevt\Logs\目录下后缀为.evtx的就是日志文件本体。其中和我们攻防最相关的三个日志名称英文名记录内容红队关心的点应用程序日志Application应用程序报错、崩溃某些带日志功能的业务系统会写进来安全日志Security登录成功/失败、权限变更、进程创建若开了审核策略攻防主战场4624/4625/4720 全在这系统日志System服务安装、驱动加载、系统错误计划任务、服务后门留痕在靶场里先做观察练习打开eventvwr.msc事件查看器或者用 PowerShellGet-EventLog-LogName Security-Newest 20逐行解释Get-EventLog读取传统事件日志的 PowerShell 命令-LogName Security指定安全日志-Newest 20只取最近 20 条避免刷屏。你会看到大量4624登录成功、4634注销事件。渗透测试时一次 PtH 横向移动目标机器上就会产生一条4624 且登录类型为 3网络登录、认证包为 NTLM的记录——这就是第 11 篇讲的 PtH 在蓝队侧的倒影。攻击者和防守者看的是同一条日志只是一个想让它消失一个想让它尖叫。2.2 wevtutil官方自带的日志工具wevtutil.exe是 Windows 自带的事件日志命令行工具位于System32下不需要上传任何东西就能用——这也是它红蓝通吃的原因。常用三板斧第一板斧查日志列表和配置。wevtutil el逐行解释elenum-logs 的缩写列出系统中所有日志通道包括 Security、System、Application 以及大量应用自定义日志。先摸清有哪些账本才知道该翻哪本。wevtutil gl Securityglget-log 的缩写查看 Security 日志的配置信息包括最大文件尺寸、日志满了之后的策略覆盖旧事件还是停止记录。蓝队可以用它检查攻击者有没有篡改日志配置比如把上限改小让日志快速滚动覆盖。第二板斧查日志内容。wevtutil qe Security /f:text /c:10 /rd:true逐行解释qequery-events查询事件Security目标日志/f:text输出格式为纯文本方便命令行下阅读默认 XML机器友好但人看不下去/c:10只取 10 条/rd:truereverse direction最新的事件排在前面。配合筛选语法可以精确定位比如只看 4625登录失败爆破痕迹wevtutil qe Security /q:*[System[(EventID4625)]] /f:text /c:20/q:后面跟 XPath 查询语句*[System[(EventID4625)]]表示筛选 System 节点下 EventID 为 4625 的事件。这个语法蓝队写检测规则也天天用。第三板斧清日志。wevtutil cl Securityclclear-log清空 Security 日志。一敲回车安全日志瞬间归零。2.3 整本清和只清自己的本质区别上面那条cl命令是靶场里最常用的演示动作但我必须泼一盆冷水真实环境中整本清空日志约等于在甲方脸上写我来过。原因很简单清空操作本身会产生1102 事件安全日志被清除——这是一条写在系统设计里的元日志你把账本烧了但烧账本这个动作又被另一个账本记下来了1102 由事件日志服务自身记录Security 日志被清后新写入的第一批事件中就有它。蓝队规则里1102 出现 立即电话叫人是标配。日志量突变极不自然。正常服务器的安全日志每分钟稳定增长突然归零再从零开始爬任何 SIEM 的日志连续性检测都会当场爆炸。所以稍微专业一点的思路是只清自己的操作痕迹——把涉及自己 IP、自己创建的账户、自己触发的 EventID 的那些条目删掉让日志整体看起来连续正常。技术上有工具能做到按条件删 evtx 记录如靶场里常见的 evtx 探索类脚本但我这里刻意不展开具体工具和命令原因有二这类选择性删除技术在授权测试里几乎用不上甲方巴不得你把测试痕迹留全方便复盘它的实际价值场景 99% 落在真实入侵的对抗上那就不是本文该教的范畴。想练这块的蓝队读者方向反过来研究 evtx 文件格式、事件间隙的异常、日志时间戳跳跃这些验尸能力比毁尸能力值钱得多。2.4 除了 evtx还有这些地方留痕一个合格的收尾检查清单Windows 侧至少包括新建的本地账户你测试时加的test$隐藏账户第 13 篇讲过收尾必须删——net user test$ /delete并检查HKLM\SAM注册表中是否还有残留键值第 13 篇有完整排查法。计划任务与服务schtasks /query /fo LIST /v逐条核对自己创建的项sc query排查测试用的服务。对应安装动作会写 4698计划任务创建、7045服务安装事件清任务不清日志等于没清。预读文件与 Recent 文档C:\Windows\Prefetch\下的.pf文件会记录可执行文件最近运行痕迹你上传的工具跑过一次Prefetch 里就有它的一页档案。删除对应.pf文件即可但注意删除动作本身可被取证工具发现NTFS 的 USN 日志会记录文件删除这个一般场景不用管知道有这回事就行。$MFT 与 USN Journal文件系统的黑匣子删除文件后记录仍在。真取证场景这是重头戏红队常规清理覆盖不到蓝队读者可以专门研究MFTECmd一类取证工具——知己知彼。三、Linux 篇history、时间戳、日志三件套Linux 的留痕逻辑和 Windows 完全不同没有统一的事件服务一切皆文件。这既是好事简单透明也是坏事要清的地方多而散。3.1 history你敲过的每一条命令history列出当前会话的历史命令默认存于用户家目录~/.bash_history。演示一不记录后续命令。exportHISTFILE/dev/null逐行解释export设置环境变量HISTFILE/dev/null把历史文件指向黑洞设备/dev/null写入的内容全部丢弃。此后当前会话敲的命令不再落盘。注意它只影响当前及后续会话之前已经写进~/.bash_history的命令还在。演示二临时不记录某条命令。exportHISTCONTROLignorespace设置后以空格开头的命令不进历史。下次你敲whoami前面带个空格history 里查无此令。这是个老把戏蓝队反制方法也很简单审计规则盯ignorespace相关变量、或直接上进程审计后面讲。演示三清历史。history-cecho~/.bash_historyhistory-w逐行解释history -c清空当前内存中的历史列表echo ~/.bash_history用空输出重定向把历史文件截断为空echo输出一个空行写入覆盖原内容history -w把已清空的内存历史强制写回文件防止退出时 bash 自动history -a又把残余内容补写回去。三个动作要连着做、按这个顺序做少一步都可能出现内存里的历史在退出时又落盘的经典翻车。3.2 日志文件/var/log 巡礼Linux 的系统日志集中在/var/log/红蓝都该背下来的几个文件内容渗透相关的典型痕迹/var/log/auth.logDebian 系//var/log/secureRHEL 系认证日志SSH 登录成功/失败、sudo 提权、新增账户/var/log/syslog或/var/log/messages系统综合日志服务启停、定时任务执行记录/var/log/cron*计划任务日志你crontab里种的后门每次执行都会打卡/var/log/lastlog、wtmp、btmp二进制格式登录数据库last、lastb命令读的就是它们/var/log/audit/audit.logauditd 审计日志进程执行、文件访问的详细流水清空文本类日志最常见写法cat/dev/null/var/log/auth.log把空设备内容重定向进日志文件效果是清空但保留文件与原 inode。对比rm /var/log/auth.log删除后 rsyslog 仍握着原文件句柄继续写句柄指向已删除的 inode日志看起来停了实则写进了黑洞还造成日志中断告警——这是新手最容易踩的坑。所以清日志用截断、不用删除。二进制登录数据库对应工具echo/var/log/wtmp清空wtmp后last命令查不到历史登录。注意lastlog用的/var/log/lastlog是稀疏文件直接echo 会把它变成普通文件个别系统上会影响显示知道即可。3.3 touch给文件整一个体面的时间文件有三个主要时间戳atime访问、mtime内容修改、ctimeinode 元数据变化。你上传的后门文件mtime是今天凌晨 3 点旁边一群文件都是两年前的——这对蓝队就是天然的新文件排查线索。于是有个经典演示touch-r/etc/passwd /tmp/.backdoor逐行解释touch修改文件时间戳文件不存在则创建这里文件已存在-r /etc/passwdreference参照/etc/passwd的时间戳/tmp/.backdoor目标文件。执行后后门的 atime/mtime 变得和 passwd 一模一样淹没在老文件堆里。看似完美但攻防的有趣之处就在这ctime是 touch 修改不掉的它由内核维护记录 inode 变化时间你一改时间戳它反而更新所以取证角度看 mtime 早于 ctime 的文件就是时间被动过的信号。蓝队一条find就能筛出来find/-typef\(-newerctmtime 对应的时间\)2/dev/null思路比命令本身重要任何伪装都会引入新的不对称而不对称就是检测点。3.4 蓝队的终极答案进程审计蓝队读者看到这里应该已经着急了history 能清、文件时间能改那还能信什么答案是auditd。auditctl-e2-e 2启用不可关闭模式auditd 进入锁定状态root 也不能停掉审计需重启才解除防止攻击者拿到 root 后直接关审计。auditctl-w/etc/passwd-pwa-kidentity_change-w /etc/passwd给 passwd 文件加监视-p wa监视写w与属性变更a操作-k identity_change给规则打标签。任何账户改动都会带着这个标签进audit.log且审计日志的清空行为本身同样被记录。加上远程外发攻击者在本机的一切清理动作都会实时同步到日志中心——本机 rm 删得掉文件删不掉远端的 UDP 包。四、临时文件与工具清理一张收尾清单授权测试的收尾机械但重要。我给团队内部用的是这张清单直接抄走Windows 侧删除上传的所有工具、载荷、截图暂存目录C:\Users\Public\、C:\Windows\Temp\是最常被顺手用的落地点逐个核对删除测试账户、测试计划任务、测试服务、第 13 篇的所有持久化项逐项和net user、schtasks /query、sc query输出对账删除Prefetch中对应工具的.pf文件wevtutil cl清空靶场日志真实授权环境改为在报告中说明测试产生了哪些日志特征请甲方留存别清。Linux 侧删除/tmp、/dev/shm下的工具与临时产物history -c echo ~/.bash_history history -w删除 SSH 公钥~/.ssh/authorized_keys中测试时追加的那一行别整个文件删了误伤甲方自己的密钥删除 crontab 后门、SUID 后门并恢复原文件权限靶场环境截断/var/log/相关日志真实授权环境同样只说明不清除。通用项删除跳板/代理进程frp、chisel、portfwd 隧道netstat -ano/ss -antp确认无残留连接删除自己 Webshell 文件恢复被修改的 Web 配置与源码改过的源码一定要从备份恢复而不是手改回去手改回的代码 diff 出来一片红甲方代码审计会怀疑人生最后全面net user/ps aux/netstat走一遍确认环境回到测试前基线。这份清单的精髓是对账测试开始前拍一份环境基线快照账户列表、进程列表、监听端口、计划任务收尾时逐项 diff。有基线的清理叫收尾没基线的清理叫猜。五、渗透测试规范收尾流程比清理更重要的三步技术讲完了讲流程。一次授权测试的规范收尾顺序是恢复环境按上一节清单把环境拉回基线能恢复的恢复从备份还原源码该删除的删除工具、后门并向甲方说明哪些系统日志中会留有本次测试的合法登录记录保留证据链注意该留的一点不能少——渗透过程的完整记录时间、IP、操作、截图、PoC 请求响应是报告的证据支撑也是将来万一被误认为入侵时你唯一的自保证明。清理的是多余的杂物不是你的作业。我见过有工程师测试完把自己工作目录整个删了写报告时两眼一抹黑重测一遍也见过授权测试被甲方安全团队误报成入侵事件全靠带时间戳的操作记录自证清白。这两类事故一个丢效率一个丢自由。与甲方确认书面确认测试结束、出口关闭、后门清零双方签字。这份确认文件是整个项目闭环的最后一环——记住授权有开始就要有结束测试范围之外的任何顺手再看看都是越界。六、红蓝对抗视角清痕的攻防博弈现在把视角拔高一层看看真实对抗里这场猫鼠游戏的几个关键认知。认知一本机清日志已经过时。稍具规模的甲方都做了日志外发Windows 事件转发WEF、syslog 转发到 SIEM、EDR 遥测上云。攻击者在目标机上wevtutil cl删得再干净日志中心里那一份完好无损还会额外多一条日志源突然断流的高危告警。所以现代红队的痕迹对抗重心早就从删日志转向日志产生阶段就绕过——不触发审核策略、用合法进程与白名单工具、让流量混进正常业务。这是思路层面的东西值得品味但具体落地手法依然属于真实对抗范畴点到为止。认知二清痕行为本身就是告警。蓝队视角最有价值的检测规则之一就是盯清痕检测点事件/现象说明日志被清空1102 事件、SIEM 日志断流最经典出现即高危日志服务被停6005/6006 缺失、eventlog服务状态异常攻击者停服务避免新日志HISTFILE 被改登录脚本监控、auditd 环境变量规则针对无 history 技巧时间戳异常mtime ctime 的文件、系统时间跳变touch 伪装的倒影单文件被截断auditd 文件监视规则echo log式清理你看攻防就是这么对称攻击者的每一个消除动作本身就是一个产生动作。这是本篇我最想让你带走的一句话。认知三蓝队的底气来自架构不是终端。日志集中化、审计不可停auditctl -e 2、EDR 遥测外送、黄金镜像快速重建——蓝队真正的护城河是这些体系化建设而不是在每台终端上和攻击者比手速。攻击者单点突破再快也快不过全局日志的实时上传。七、检测与防御蓝队落地清单给防守方一份可直接执行的检查表日志外发Windows 事件订阅/Collector 部署或 NXLog/syslog 转发把 Security/System 日志实时送 SIEMLinux 全线 auditd rsyslog 远程转发。本机可删远端删不掉这一条覆盖 80% 的清痕攻击面盯 1102SIEM 中对安全日志清除事件配置立即电话级告警同时监控 104日志清空 system 侧、6005/6006事件日志服务启停日志连续性基线为每台主机的日志写入速率建基线速率归零或骤降即告警专治只清自己式的精细清理auditd 锁定auditctl -e 2配合监视/root/.bash_history、/home/*/.bash_history的截断与删除操作环境变量层面用登录 hook 检查HISTFILE是否被篡改文件时间戳审计定期用 mtime/ctime 不一致性扫描可执行文件与计划任务目录发现被 touch 整容的文件事件审核策略域环境批量下发高级审核策略确保登录事件4624/4625 带登录类型与源 IP、进程创建4688 命令行审计、服务安装7045、计划任务4698全量记录——没有记录就没有检测很多被无损攻破的环境回头看日志里一片空白不是攻击者清了是压根没开审核应急响应预案预设发现日志被清的处置剧本隔离主机、拉远端日志做时间线、比对基线快照别等真出事再临场发挥。八、合规重锤最后一遍敲响一点结尾我要把开篇的话再重复一遍并且加重分量真实环境删日志 加重情节。在真实的未授权入侵中攻击者清除日志的行为会被司法认定为主观明知与对抗侦查的表现在破坏计算机信息系统与相关量刑中属于不利情节。你以为你在抹掉证据实际上你在制造新的证据。授权环境里日志是你的作业本。别清、别改、如实记录。报告需要它复盘需要它出争议时你的职业声誉也需要它。本文的一切清理命令适用边界是自己的靶场环境、演练环境、以及甲方书面同意需要还原的测试环境。出了这个边界每个cl、每个echo 、每个touch -r都可能变成案卷里指向你的那一行。痕迹清理这一课技术含量其实不是这个系列里最高的但它是对红队职业素养要求最高的一课知道边界在哪、知道什么该做、知道什么打死不能碰。到这里从外网信息收集、漏洞利用、提权、内网横向、域渗透、权限维持到痕迹收尾整条攻击链在技术层面已经闭环。剩下最后一件事——把你做过的一切变成一份甲方看得懂、修复组用得上、领导拍板有依据的渗透测试报告。这是从会打到会交付的最后一公里也是下一篇的全部内容。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门