building-super-timelines-with-plaso について
デジタルフォレンジックやインシデント対応の分析者向けに、Plasoでフォレンジックイメージやファイルシステムからイベントを抽出し、統合タイムラインを作成してTimesketchで分析する手順を示すガイドです。絞り込み出力、タイムゾーンの正規化、タイムスタンプ改ざんやログ消去の兆候の確認を扱います。
主な機能
- 01証拠からイベントを抽出して.plasoファイルを作成
- 02ストレージ内容と処理メタデータの確認
- 03CSVまたはJSONLタイムラインの絞り込みと出力
- 04psteal.pyによる抽出と出力の一括実行
- 05Timesketchへのタイムライン取り込みと共同分析
- 06タイムスタンプ改ざんやログ消去の確認
活用シーン
- 01侵害されたホストのイベント順序の再構成
- 02複数のフォレンジック証拠間の活動照合
- 03タイムスタンプ改ざんやログ消去の調査
- 04Timesketchでのタイムライン共同トリアージ
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill building-super-timelines-with-plasoインストール後、Claude Code で/building-super-timelines-with-plasoを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdstandards.mdscripts/agent.py詳細
Plasoでスーパータイムラインを作成する
許可された用途に限る: 分析を許可された証拠のみを使ってタイムラインを作成してください。フォレンジックイメージ/コピーを使用し、証拠保全の連鎖を維持してください。
概要
Plaso(Plaso Langar Að Safna Öllu)は、log2timelineを支えるオープンソースエンジンです。フォレンジック用のスーパータイムラインを作成する標準ツールであり、数百種類のアーティファクト(ファイルシステムのMACB時刻、レジストリ、EVTX、ブラウザー履歴、プリフェッチ、LNK、$UsnJrnl、syslogなど)を統合した、単一の正規化された時系列ビューを生成します。Plasoには、次の3つの主要なCLIツールがあります。
- log2timeline.py — 大規模なパーサー/プラグインセットを使用して、ソース(ディスクイメージ、マウントポイント、ディレクトリ、デバイス)からイベントを抽出し、
.plasoストレージファイルに保存します。 - pinfo.py —
.plasoファイルの内容と処理メタデータを報告します。 - psort.py — ストレージファイルを後処理し、フィルタリング、重複排除、タイムゾーン変換を行って、出力形式(CSV、JSON-line、Elasticsearch、Timesketchなど)にエクスポートします。
- psteal.py — 抽出とエクスポートを一度に実行する便利なラッパーです。
生成されるタイムラインは非常に大きいため、分析担当者はTimesketchを使ってトリアージします。Timesketchは、.plasoファイル(またはCSV/JSONL)を取り込める、共同作業向けのウェブベースのタイムライン分析プラットフォームです。フィルタリング、タグ付け、スター付け、保存済み検索、自動アナライザーに対応しています。
使用する場面
- インシデント対応中に、侵害されたホスト上で発生したイベントの全体的な順序を再構築する場合。
- 単一の正規化されたタイムライン上で、多数のアーティファクトソースにまたがるアクティビティを関連付ける場合。
- タイムスタンプの改ざんやログの消去など、MACBやジャーナルの証拠との不整合から判別できるアンチフォレンジック行為を調査する場合。
- 精選したタイムラインをTimesketchに取り込み、チームでトリアージする場合。
前提条件
- Plasoをインストールします(サポートされている再現可能な方法はDockerです):
Ubuntuでは、GIFT PPAを使ってインストールすることもできます:docker pull log2timeline/plaso # Run a tool, mounting your evidence/output directory docker run -v /cases:/data log2timeline/plaso log2timeline.py --versionsudo add-apt-repository ppa:gift/stable sudo apt-get update && sudo apt-get install -y plaso-tools - トリアージ用のTimesketchインスタンス(https://github.com/google/timesketch からdocker-composeでデプロイ)。
- フォレンジックイメージ(E01/raw)またはマウントされたファイルシステム。
目標
- イメージからイベントを抽出し、
.plasoストレージファイルに保存します。 - pinfoでストレージファイルを調査します。
- psortで対象を絞ったスーパータイムラインをフィルタリングし、エクスポートします。
- タイムラインをTimesketchにインポートしてトリアージします。
MITRE ATT&CKとの対応
| ID | 公式のテクニック名 | このスキルとの関連性 |
|---|---|---|
| T1070 | Indicator Removal | スーパータイムラインでは、MACBタイムスタンプ、USNジャーナル、イベントログ間の不整合を明らかにすることで、インジケーター削除行為(ログの消去、ファイルの削除、タイムスタンプの改ざん)を検出できます。 |
Plasoは防御側のフォレンジックエンジンです。この対応付けは、スーパータイムラインが検出に適したアンチフォレンジックな敵対者の行為を示しています。
ワークフロー
1. イベントをストレージファイルに抽出する
log2timeline.pyは、ソースから.plasoファイルを作成します。--storage-fileで出力先を指定します。ソースには.E01、rawイメージ、マウントポイント、ディレクトリを指定できます。
log2timeline.py --storage-file timeline.plaso /cases/greendale/image.E01
--parsersを使って、速度や関連性に応じてパーサーの範囲を絞り込みます(win7、webhistなどのプリセット、またはパーサー名を明示的に指定できます):
log2timeline.py --parsers "win7,!filestat" --storage-file timeline.plaso /cases/image.E01
2. ストレージファイルを調査する
pinfo.pyは、ソース、使用したパーサー、イベント数、警告の有無を報告します。
pinfo.py timeline.plaso
3. フィルタリングしたスーパータイムラインをエクスポートする(CSV)
psort.pyは-oで出力モジュールを選択し、-wで書き出し、--output-time-zoneでタイムゾーンを正規化します。また、イベントフィルター式を指定して日付範囲を絞り込めます。
psort.py --output-time-zone 'UTC' \
-o l2tcsv \
-w supertimeline.csv \
timeline.plaso \
"date > datetime('2026-01-01T00:00:00') AND date < datetime('2026-01-27T00:00:00')"
Timesketchで扱いやすいJSON行形式にするには、json_line出力モジュールを使用します:
psort.py --output-time-zone 'UTC' -o json_line -w supertimeline.jsonl timeline.plaso
4. pstealで抽出とエクスポートを一度に実行する
psteal.pyは、迅速なトリアージ向けに抽出とCSVエクスポートをまとめて実行します。
psteal.py --source /cases/greendale/image.E01 -o l2tcsv -w supertimeline.csv
5. Timesketchにインポートする
公式のtimesketch_importer CLIを使って、.plaso(またはCSV/JSONL)をスケッチにアップロードします。Timesketchはファイルを分割・再構成し、インデックスを作成します。
timesketch_importer \
--host http://127.0.0.1:5000 \
--username admin \
--timeline_name "greendale-host01" \
--sketch_id 1 \
timeline.plaso
6. Timesketch でのトリアージ
スケッチ UI で、次の操作を行います。
- 疑わしい期間または
data_type(例:windows:evtx:record、fs:stat)でフィルタリングします。 - 注目するイベントにスターやタグを付け、共同作業のためにコメントを追加します。
- 検索を保存し、タイムライン全体にアナライザー(例:ブラウザーの時間範囲、類似性、sigma)を実行します。
- アーティファクトのソースをまたいで裏付けとなるイベントから、ナラティブを構築します。
7. アンチフォレンジックの痕跡を探す
$UsnJrnl エントリと一致しない MACB タイムスタンプ(タイムスタンプ偽装)、空白期間や EventLog cleared(1102)レコード、削除後に再作成されたファイルを探します。これらはすべて、統合タイムラインで確認できます。
ツールとリソース
| リソース | 目的 | リンク |
|---|---|---|
| Plaso (log2timeline) | タイムラインエンジンとツール | https://github.com/log2timeline/plaso |
| Plaso documentation | ツールの使用方法とパーサー | https://plaso.readthedocs.io/ |
| Timesketch | タイムライン分析プラットフォーム | https://github.com/google/timesketch |
| Timesketch docs | デプロイ、インポーター、アナライザー | https://timesketch.org/ |
| Plaso Docker image | 再現可能な実行環境 | https://hub.docker.com/r/log2timeline/plaso |
主要なコマンド
| コマンド | 目的 |
|---|---|
log2timeline.py --storage-file out.plaso <source> | イベントを抽出 |
log2timeline.py --parsers <preset> ... | パーサーの対象範囲を設定 |
pinfo.py out.plaso | ストレージファイルを検査 |
psort.py -o l2tcsv -w out.csv out.plaso "<filter>" | フィルタリングして CSV にエクスポート |
psort.py -o json_line -w out.jsonl out.plaso | JSONL にエクスポート |
psteal.py --source <img> -o l2tcsv -w out.csv | 1 ステップで抽出してエクスポート |
timesketch_importer --host ... <file> | Timesketch にインポート |
検証基準
- ソースイメージから
.plasoストレージファイルを作成済み - pinfo で、想定されるパーサーが実行され、イベント数がゼロ以外であることを確認済み
- UTC に正規化し、対象範囲を絞ったフィルターを適用してスーパータイムラインをエクスポート済み
- タイムラインを Timesketch のスケッチにインポートし、インデックス化済み
- 疑わしい期間をタグ/スター/保存済み検索でトリアージ済み
- アンチフォレンジックの痕跡(タイムスタンプ偽装、ログ消去)を確認済み
- 複数のソースにまたがる裏付けイベントとともに、調査結果を記録済み