紅隊筆記之痕跡清理技術要點與實戰方法總結
痕跡清理技術要點說明
痕跡清理,是清理自己在目標機器上留下的所有操作痕跡。其主要目的是
- 避免溯源
- 隱藏攻擊方法
- 為下一步滲透拖延時間
每一項滲透動作都有其目的,我們都需要思考其是否真正的有必要,并不是每一次滲透均需要進行痕跡清理的動作。
痕跡清理的限制
- 痕跡清理這個動作本身也會產生痕跡,所以不存在完美的痕跡清理
- 如果目標已經配置,第三方的日志記錄平臺,本機的痕跡清理作用微乎其微,除非我們可以拿下日記系統的控制權限。
痕跡清理的技術要點
- 痕跡清理前需要先判斷是否有必要清理痕跡。
- 刪除文件盡量使用復寫方式,增加還原難度。
- 如有必要可以偽造部分痕跡,混淆防守隊溯源反向。
- 定向刪除優于全部刪除,關閉日志等方式,增加被識別難度。
- 如果痕跡清理的目的是為了下一步操作爭取時間,那么我們需要去評估防守隊的溯源時間,以安排后面的工作計劃,當然極端情況我們可以在防守方休息時間段開展滲透。
痕跡清理的步驟

1、清理的必要性主要區間與你的目的。
2、需要清理哪些內容需要根據你的攻擊路徑來判斷,也就是說你整個攻擊路徑中哪些會留下痕跡,我們需要清楚,我們的清理工作也真實針對這些痕跡進行操作。
3、痕跡清理相對主要簡單,在你明確了需要清理哪些痕跡后,只要尋找對應的清理方法即可,下文總結常用的痕跡清理方法。
Windows痕跡清理
Windows日志清理
一. Windows日志相關基礎知識
Windows的日志文件分為3類核心日志,分別是系統日志,程序日志,和安全日志
- 系統日志(SysEvent):記錄操作系統產生的事件,如設備驅動無法正常啟動或停止,系統進程崩潰等
# 默認位置: %SystemRoot%\System32\Winevt\Logs\System.evtx
- 程序日志(AppEvent):包含操作應用程序軟件相關的事件。事件包括了錯誤、警告及任何應用程序需要報告的信息。
# 默認位置: %SystemRoot%\System32\Winevt\Logs\Application.evtx
- **安全日志(SecEvent)?*包含安全性相關的事件。e.g.用戶權限變更,登錄及注銷,文件/文件夾訪問等信息。
# 默認位置: %SystemRoot%\System32\Winevt\Logs\Security.evtx
1、系統內置3個核心日志文件(System、Security、Application);默認大小均20MB,數據超過20MB,默認系統將優先覆蓋過期日志記錄。應用程序、服務日志默認最大1024KB,超過最大限制也優先覆蓋過期的日志記錄
2、其他系統服務的日志也都儲存在%SystemRoot%\System32\Winevt\Logs\下
操作系統日志記錄大致流程
1、svhost啟動EventLog開始記錄日志
2、EventLog將操作記錄先緩存為一段內存內容
3、Wevtutil將內存內容解析為xml并且通過gui界面可視化的展現給用戶
其中svhost,EventLog,Wevtutil具體功能說明如下;
svchost
svchost主要是用來實現服務進程數據共享,以此來減少系統資源消耗,很多系統程序和服務使用svchost運行。
windows系統進程分為獨立進程和共享進程兩種,“svchost.exe”文件存在于“%systemroot%system32”目錄下,它屬于共享進程。隨著windows系統服務不斷增多,為了節省系統資源,微軟把很多服務做成共享方式,交由svchost.exe進程來啟動。但svchost進程只作為服務宿主,并不能實現任何服務功能,即它只能提供條件讓其他服務在這里被啟動,而它自己卻不能給用戶提供任何服務。這些系統服務是以動態鏈接庫(dll)形式實現的,它們把可執行程序指向svchost,由svchost調用相應服務的動態鏈接庫來啟動服務。
Event Log
Event Log主要是管理windows管理事件和事件日志。它支持日志記錄事件、查詢事件、訂閱事件、歸檔事件日志以及管理事件元數據。它可以用 XML 和純文本兩種格式顯示事件。

EventLog的啟動需要依賴于svchost,啟動示例如下;
C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted -p
wevtutil
檢索有關事件日志和發布服務器的信息。此外,還可以使用此命令來安裝和卸載事件清單,運行查詢,以及導出、存檔和清除日志。詳細可以參考微軟官方介紹。
二. Windows日志清理方法
Windows日志清理主要分為全量清理和定向清理,全量清理其動作較大容易被發現,定向清理相對比較隱蔽
全量刪除方法
通過事件查看器刪除
開始→運?,輸? eventvwr 進?事件查看器,右邊欄選擇清除?志

這里需要注意日志清理因為本身也是系統事件所以也會被記錄,這也就是不存在完美的日志清理

通過PowerShell刪除
# 方法一
PowerShell -Command "& {Clear-Eventlog -Log 你要清理的日志(如Security)}"
# 方法二
Get-WinEvent -ListLog 你要清理的日志(如Security) -Force | % {Wevtutil.exe cl $_.Logname}
暴力刪除日志文件
1、停止Windows Event Log(EventLog) 服務
2、刪除對應的文件
%SystemRoot%\System32\Winevt\Logs\
3、永久停用方法
# 查詢要禁用的注冊表 reg query "HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Eventlog\" # 刪除對應的注冊表 reg delete "HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Eventlog\System" /f # 重啟Windows Event Log(EventLog) 服務

使用wevtutil命令行刪除
# 進入cmd # 查詢 wevtutil el所有系統日志(如要刪除的日志名字清楚可以忽略此步驟) # 刪除對應日志,以清空系統日志為例 wevtutil cl system
msf一鍵清理
進入meterpreter后直接執行clearev
定向清理方法
刪除最近數據
wevtutil qe 你要清理的日志(如Security) /f:text /rd:true /c:刪除行數(如10行)
刪除某指定單條記錄
# 1、刪除Security下的單條日志(EventRecordID=2222),并保存為tmp1.evtx wevtutil epl Security tmp1.evtx "/q:*[System [(EventRecordID!=2222)]]" # 2、結束日志進程(釋放日志文件句柄) # 3、替換原日志文件 # 4、重啟日志服務
刪除某指定多條記錄
# 1、刪除Security下的多條日志(EventRecordID為13030、13031和13032),結果保存為tmp2.evtx wevtutil epl Security tmp2.evtx "/q:*[System [(EventRecordID>13032) or (EventRecordID<13030)]]" # 2、結束日志進程(釋放日志文件句柄) # 3、替換原日志文件 # 4、重啟日志服務
按時間段刪除
# 1、刪除SystemTime為2021-12-10T03:20:00至2021-12-10T03:21:00之間的日志,結果保存為1.evtx wevtutil epl Security 1.evtx "/q:*[System [TimeCreated[@SystemTime >'2021-12-10T03:21:00' or @SystemTime <'2021-12-10T03:20:00']]]" # 2、結束日志進程(釋放日志文件句柄) # 3、替換原日志文件 # 4、重啟日志服務
更多wevtutil用法可以參考官方文檔
三. Windows遠程連接日志清理
當我們使用3389端口遠程一臺機器后會在對應機器上產生對應的記錄,其記錄只要有兩部分組成;
1、Default.rdp文件(系統隱藏文件)
2、注冊表記錄
所以清理痕跡主要是清理rdp文件以及注冊表中記錄
1、刪除Default.rdp方法
# 進入Default.rdp所在路徑 cd %userprofile%\documents\ # 使用attrib去掉Default.rdp文件的,系統文件屬性(S);隱藏文件屬性(H) attrib Default.rdp -s -h # 刪除 del Default.rdp
2、注冊表清理方法
# 查詢遠程連接在注冊表中的鍵值 reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" # 刪除對應的鍵值,如刪除MRU0 "/v MRU0" reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /f /v MRU0

3、如使用當前機器作為跳板的話需要使用同步驟清理Servers下的鍵值
# 查詢具體要刪除的鍵值文件夾 reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" # 確定要刪除的文件夾進行刪除 reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\192.168.84.128" /f

# reg delete 參數說明
reg delete [{/v Valuename | /ve | /va}] [/f]
指定要添加的子項或項的完整路徑。
/v 刪除子項下的特定項。如果未指定任何項,則將刪除子項下的所有項和子項。
/ve指定僅刪除沒有值的條目。
/va刪除指定子項下的所有條目。不會刪除指定子項下的子項。
/f刪除現有的注冊表子項或條目,而不要求確認。
/?在命令提示符下顯示幫助。
近期訪問記錄清理
1、用戶最近訪問過的文件和網頁記錄
C:\Users\Administrator\AppData\Local\Microsoft\Windows\History

2、近期訪問過的文件
C:\Users\Administrator\Recent
利用覆寫增大溯源難度
cipher /w:X # 其中X指盤符或文件具體位置
cipher會分三次寫入:第一次寫入0x00,第二次寫入0xff,最后一次寫入隨機數字
Linux痕跡清理
Linux的痕跡清理技術大致可以分為兩類;
1、清理登錄記錄以及Host記錄
2、清理日志文件
Linux清理登錄記錄以及Host記錄方法 隱藏遠程ssh登錄記錄 # 隱身登錄系統,不會被w、who、last等指令檢測到 ssh -T user@@host /bin/bash -i # 不記錄ssh公鑰在本地.ssh目錄中 ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash –i
History清理
History運行原理

1、當 Linux 系統啟動一個 Shell 時,Shell 會從 .bash_history 文件中,讀取歷史記錄,存儲在相應內存的緩沖區中。
2、我們平時所操作的 Linux 命令,都會記錄在緩沖區中。如果在shell運?過程中kill掉其進程,則緩存命令不會寫?history。
3、當我們退出 Shell時(如執行exit或Ctrl+D),Shell 進程會把歷史記錄緩沖區的內容,寫回到 .bash_history 文件中去。
全部刪除歷史記錄
# 清空當前歷史記錄(只是清空緩存中的歷史記錄,偽刪除) history -c # 將當前緩存中的歷史記錄寫入文件(緩存中的記錄是空的-用空的數據寫入文件,將文件內容刪除) history -w
當前shell終止history記錄
方法一:
# 設置當前shell內的命令不再記入日志中,命令會被記錄到歷史記錄中,可以嘗試在命令前添加空格讓記錄不被記錄 set +o history # 如果需要重新記入日志,可以設置-o參數 set -o history

方法二:
# 清除當前shell緩存命令記錄,當前session之后的命令不會再記錄,不會刪除history?件中的記錄。 unset HISTORY HISTFILE HISTSAVE HISTZONE HISTLOG
禁用History方法
方法1:
編輯/etc/profile并添加HISTSIZE=0
方法2:
在當前shell中直接輸?命令HISTSIZE=0 && HISTFILESIZE=0,這樣會將緩存的history記錄和~/.bash_history中的 記錄全部清空;
方法3:
在~/.bashrc初始化?件中添加命令:HISTSIZE=0 && HISTFILESIZE=0,這樣每次開啟shell都不會再記錄history命令。
刪除指定命令記錄方法 # 篩選要刪除的關鍵字 history | grep "keyword" # 根據編號進行刪除 history -d num # 或者進行批量刪除(只保留15行) sed -i '15,$d' .bash_history

Linux日志清理
由于Linux的設計采用萬物皆文件的思想,所以Linux系統的日志基本都是以文件的形式體現,所以相對Windows而言,Linux的日志清理和修改相對比較容易(雖然Windows也很簡單)

全部刪除
不留下任何痕跡,但是特征也很明顯,容易被察覺,?般不推薦使?。
# 將?志?件全部刪除即將空字符寫??志?件,需要root權限,以下命令均可以實現: cat /dev/null > filename : > filename > filename echo "" > filename echo > filename
針對性修改或刪除
針對性修改,動作較小,較難被發現
利用sed完成修改與刪除
修改
sed -i 's/要被取代的字符串/新的字符串/g' 目標文件
刪除
sed -i '/要刪除的內容/'d 目標文件
利用grep -v完成刪除
# 1、將目標文件中帶有關鍵字字樣的記錄刪除,并保存為一個文件 cat 目標文件| grep -v 關鍵字(帶有關鍵字的記錄刪除) > 篡改后文件 # 2、將偽造文件覆蓋到目標文件上 cat 篡改后文件 > 目標文件
利用覆寫增大溯源難度
在linux中使用share命令來完成文件的覆寫,以增大文件的回復難度
shred -f -u -z -v -n 6 目標文件 參數說明: -f, --force 必要時修改權限以使目標可寫 -n, --iterations=N 覆蓋N 次,而非使用默認的3 次 -u, --remove 覆蓋后截斷并刪除文件 -v, --verbose 顯示詳細信息 -z, --zero 最后一次使用0 進行覆蓋以隱藏覆蓋動作 本文只為技術交流。為了您和您家人的幸福,請不要利用文中技術在用戶未授權情況下開展滲透測試!!! 《中華人民共和國刑法》 第二百八十五條 違反國家規定,侵入國家事務、國防建設、尖端科學技術領域的計算機信息系統的,處三年以下有期徒刑或者拘役。 第二百八十六條 違反國家規定,對計算機信息系統功能進行刪除、修改、增加、干擾,造成計算機信息系統不能正常運行,后果嚴重的,處五年以下有期徒刑或者拘役;后果特別嚴重的,處五年以上有期徒刑。 違反國家規定,對計算機信息系統中存儲、處理或者傳輸的數據和應用程序進行刪除、修改、增加的操作,后果嚴重的,依照前款的規定處罰。 故意制作、傳播計算機病毒等破壞程序,影響計算機系統正常運行,后果嚴重的,依照第一款的規定處罰