最近在上 Hackthebox 的 CDSA,上到 windows 取證的章節的時候,深覺要收的東西好多好雜,於是就在想有沒有什麼工具是可以自動幫我收我已知跟我未知的 artifacts
然後又能在一個平台上統一查詢跟看的
首先第一個當然就是收集證據的 script
這邊列出我考量的幾個點
- 有 GUI
- 有簽章
- 背後有知名組織或公司
- 免費
※更,實際部屬後發現 AI 功能無法幫助人員判斷,因為檔案的 metadata 都能被修改,如果AI判讀錯誤的 metadata 給出錯誤的反饋反而會造成誤導與困擾,因此思考後捨棄 AI 功能,只是寫得當下有考量進去就還是列出來了
這邊列出三套工具的優劣提供參考
| 工具 | 平台限制 | GUI | 程式簽章 | 客製化能力 | 授權 / 成本 | 主要優點 | 主要缺點 | 適合情境 |
|---|---|---|---|---|---|---|---|---|
| KAPE | 僅 Windows | 有 | 有 | 高(模組化 Artifact / Target) | 公司內部免費 | 成熟穩定、模組化彈性高、有 SANS 背書、取證流程標準化 | 僅支援 Windows、非完全開源、偏企業導向 | 企業 IR、DFIR 團隊、SOP 化的事件回應 |
| CDIR | 僅 Windows | 無 | 有 | 低(固定撈取項目) | 免費(GPL 2.0) | 輕量、簡單、可信任簽章、適合快速蒐證 | 客製化能力不足、無 GUI、平台受限 | 快速初步蒐證、既定取證清單環境 |
| CyLR | Windows / Linux / macOS | 無 | 無 | 高(自訂撈取檔案) | 免費(GPL 3.0) | 跨平台、彈性高、適合進階使用者與研究用途 | 無簽章、專案維護風險、信任度較低 | 跨平台事件、研究測試、客製化取證需求 |
接著尋找分析平台,可以讓我做綜觀的事件分析
這邊列出考量要點
- 免費
- 介面直觀
- 支援 SSO
- 架構可擴充
- 可匯入 Sigma 等規則
- 有 AI 輔助功能
下面是選擇的三款事件分析平台
- ELK
- Timesketch
- Velociraptor
| 平台 | 背景 / 定位 | 主要特性 | LLM / AI 支援 | 備註 / 相關連結 |
|---|---|---|---|---|
| ELK Stack | Elastic 生態系,成熟的搜尋與分析平台 |
• 支援 SSO • Search pattern 成熟 • 學習成本相對低 |
支援 LLM | Elastic LLM Connector 文件 |
| Timesketch | Google 開發,專注 DFIR 時間軸分析 |
• 專注時間軸分析 • 介面簡潔 • 適合事件重建 |
支援 LLM | Timesketch LLM 功能說明 |
| Velociraptor | Rapid7 支援的開源 DFIR 專案 |
• DFIR 開源專案 • 功能強但介面不友善 • 偏工程導向 |
非原生(可串接 Tool) |
Rapid7 收購說明
Velociraptor mcp tool |
當我用 KAPE 撈完 artifacts,準備匯入 Timesketch 的時候發現了一個問題─怎麼匯入?
按照官方的文件
https://timesketch.org/guides/user/import-from-json-csv/
不管是 json 或是 csv 都需轉成他指定的格式才能匯入,最省事的辦法是轉成 plaso檔案
https://github.com/log2timeline/plaso
但遇到另一個問題─我如果把全部的 artifacts 轉成單一 plaso 匯入 timesketch 會太久
因此透過 GPT 幫我寫了一跳能自動爬取資料夾,把單一資料夾內的 artifacts 轉成一個 plaso
這樣可以分散式匯入加快時間
流程是這樣
- KAPE 先做一次蒐集
- 用以下腳本針對 KAPE 產出的資料夾再跑一次 (這邊用 KapeTriage 為範例),需要更改的地方你可以搜尋
please change it,如果你用 CDIR 的話就沒有這個問題,他當幫忙分類到對應資料夾了
1 | @echo off |

- 然後再用下面的 sh 檔案呼叫 plaso 將一個個的資料夾內的 artifacts 轉成 plaso 檔,記得
<HOST_INPUT> <HOST_OUTPUT>都要是絕對路徑1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# === Usage ===
# ./run_plaso.sh <host_input_folder> <host_output_folder>
#
# Example:
# ./run_plaso.sh /home/user/IR/ /tmp/IR/plaso
#
# === Parse arguments ===
if [ "$#" -ne 2 ]; then
echo "❌ 錯誤:缺少參數"
echo "使用方式:"
echo " $0 <HOST_INPUT> <HOST_OUTPUT>"
echo ""
echo "例子:"
echo " $0 /home/user/IR/ /tmp/IR/plaso"
exit 1
fi
HOST_INPUT="$1"
HOST_OUTPUT="$2"
# plaso version
IMG="log2timeline/plaso:20250918"
# === Validate Input Path ===
if [ ! -d "$HOST_INPUT" ]; then
echo "❌ 錯誤:輸入資料夾不存在:$HOST_INPUT"
exit 1
fi
mkdir -p "$HOST_OUTPUT"
echo "📁 Host Input: $HOST_INPUT"
echo "📁 Host Output: $HOST_OUTPUT"
echo "🐳 Docker Image: $IMG"
echo ""
# === Process Each Subfolder Inside Input ===
for category in "$HOST_INPUT"/*; do
[ -d "$category" ] || continue
folder_name=$(basename "$category")
echo "➡️ 產生 $folder_name.plaso (來源: $category)"
docker run --rm \
-v "$HOST_INPUT":/input \
-v "$HOST_OUTPUT":/output \
"$IMG" \
log2timeline.py \
--storage_file "/output/${folder_name}.plaso" \
"/input/${folder_name}"
echo "✔ 完成:$folder_name.plaso"
echo ""
done
echo
因為我 plaso 都用 docker 跑,所以才會用這種方式
timesketch 比較普通,照官方的方式 build
https://timesketch.org/guides/admin/install/
接著可以透過 CLI 達成自動匯入&自動上色的效果
https://timesketch.org/guides/user/cli-client/
