evtx 日誌描述#
evtx 日誌在 Windows 中的存放位置
%SystemRoot%\System32\Winevt\Logs\
主要的日誌包括應用程式、安全、系統日誌等,日誌的預設大小為 20484K(20M),超出部分將覆蓋過期的日誌。
可以使用 Windows 內建的事件檢視器來查看相應的日誌。
隨機點擊一個事件 ID 為 4624 的事件,大致內容如下,切換到 xml 視圖,可以查看 xml 格式的日誌。
evtx_dump#
使用工具來解析 evtx 日誌
A Fast (and safe) parser for the Windows XML Event Log (EVTX) format
下載相應版本:
https://github.com/omerbenamram/evtx/releases
evtx_dump <evtx_file> 以xml形式轉儲
evtx_dump -o json <evtx_file> 以json格式轉儲
evtx_dump -f <output_file> -o json <input_file> 輸出到指定文件
配合 fd(https://github.com/cha0ran/fd-zh)使用,便於批量處理
fd -e evtx -x evtx_dump -o jsonl 將所有以evtx為後綴的文件轉儲到單獨的json文件中
fd -e evtx -x evtx_dump '{}' -f '{.}.xml 創建一個與evtx對應的xml文件,然後將內容輸出到對應的xml文件中
fd -a -e evtx | xargs -I input sh -c "evtx_dump -o jsonl input | jq --arg path "input" '. + {path: \$path}'"
-e:文件後綴
-a:搜索隱藏文件或目錄
xargs -I input sh -c “command”:傳入input變量,並將其交給command執行
jq --arg path “input” ‘. + {path: \$path}’:將path變量追加至輸出的json文件中
提取#
從 evtx 文件中提取 EventID
evtx_dump temp_scheduled_task_4698_4699.evtx -o jsonl | jq '.Event.System.EventID'
對 EventID 進行排序並統計個數
evtx_dump Security.evtx -o jsonl | jq '.Event.System.EventID' | sort | uniq
通過查看事件 ID,可以了解當前日誌中大部分日誌的狀態。如上 5379 表示與 Microsoft Windows Defender 防病毒軟體相關的事件,該事件記錄了 Windows Defender 的相應策略信息,指示 Defender 定期掃描或更新情況。4625 表示登錄失敗,且只有一條日誌,那說明不存在登錄暴力破解的嘗試。4672 代表管理員登錄,同時以管理員身份進行操作的日誌也會記錄成 4672,類似於 Linux 下的 sudo,一次 sudo 記錄一條日誌。
可以對比事件 ID,判斷相關事件的影響。
提取多個字段
evtx_dump temp_scheduled_task_4698_4699.evtx -o jsonl | jq '.Event.System.EventID','.Event.System.Computer'
EvtxECmd#
EvtxECmd 是事件記錄文件(evtx)的解析工具(Windows 下),能夠生成符合標準的 CSV、XML 和 json 格式的輸出!它還支持自定義映射功能,能夠處理被鎖定的文件,以及提供更多其他功能!
用法#
將內容導出至 json 文件
EvtxECmd.exe -f C:\Users\lca\Desktop\Security.evtx --json .
如上圖所示,對 Security.evtx 進行解析,輸出的末尾還統計了事件 ID 的數量。
在當前目錄下生成了 json 文件,接下來就可以通過 jq 工具去解析 json 文件的內容了。
cat 20240813012115_EvtxECmd_Output.json | jq . -c | jq '. | select(.EventId==4624)'
# . -c : . 是一個jq過濾器,表示輸出輸入的全部內容。-c將內容壓縮為緊湊的 JSON 字符串格式。
# . | : . 代表前面傳入的整個 JSON 對象
提取指定字段,如下,假如從 4624 的日誌中提取 MapDescription 字段的內容
cat 20240813012115_EvtxECmd_Output.json | jq . -c | jq '. | select(.EventId==4624) | "\(.MapDescription)"'
# \(.MapDescription):表示從篩選出的JSON對象中提取MapDescription字段的值,並將其作為字符串輸出。
像這種 jq 過濾更多的是熟悉 jq 的語法。
事件 ID 參考:windows 應急響應手冊筆記記錄