統合タイムライン¶
super-timeline は解析済みアーティファクトを共通スキーマのイベントに変換します。デフォルトでは時系列に並べ替えません。ワーカーの完了順序に関係なく、検出された入力ファイルの順序と各パーサーが時刻を出力する順序を保ちます。時系列への並べ替えと重複統合を行うには --sort を指定してください。Prefetch の複数の実行時刻や、MFT の8つ以上のファイル時刻は、それぞれ意味を明記した別イベントになります。異なる証拠を比較する際も、各時刻が何を表すかを確認できます。
元の証拠ディレクトリではなく、auto-parse の解析結果を入力してください。
解析結果、マニフェスト、元の証拠は保管してください。タイムラインは分析用の表示であり、元のレコードを置き換えず、Plaso 形式のストレージも作成しません。
使用方法¶
# Native CSV (default)
juntei super-timeline -d parsed/ -o SuperTimeline.csv
# Chronological CSV with duplicate consolidation
juntei super-timeline -d parsed/ -o SortedTimeline.csv --sort
# Native JSON Lines
juntei super-timeline -d parsed/ -o SuperTimeline.jsonl -t jsonl
# Combine native records and an existing Hayabusa JSONL timeline
juntei super-timeline -f NativeRecords.jsonl --hayabusa Hayabusa.jsonl \
-o SuperTimeline.jsonl -t jsonl
# Timesketch import profile; also available with CSV
juntei super-timeline -d parsed/ -o Timesketch.jsonl -t jsonl --profile timesketch
# One standalone CSV needs an artifact identifier and, if unavailable, a computer name
juntei super-timeline -f MFT.csv --input-artifact mft --computer HOST01 \
-o Host01Timeline.csv
# Reduce the time range, memory used by sorting, or number of workers
juntei super-timeline -d parsed/ -o IncidentTimeline.jsonl -t jsonl \
--timeline-start "2026-10-20T06:00:00Z" --timeline-end "2026-10-20T14:00:00Z" \
--sort --memory-limit 64 -T 4 --temp-dir scratch/
--hayabusa FILE は単独でも複数回でも指定でき、Hayabusa を実行せずに既存のイベント/アラート時刻とルール情報を取り込みます。Details が文字列の情報レベルのイベントにも対応します。--artifact mft,prefetch で対象アーティファクトを限定できます。時間範囲は両端を含み、明示的な UTC オフセットまたは Z が必要です。
入力の選び方¶
| 入力 | 識別方法 |
|---|---|
-d DIR |
manifest.json から成功した主タスク、アーティファクトID、ホスト、出力ファイルを取得します。二重取り込みを避けるため、副タスクの auto-parse -j は除外します。 |
-f FILE |
ネイティブ JSON/JSONL は埋め込まれた Artifact と Comp を使います。識別情報のない出力には --input-artifact が必要で、単体の CSV では常に必須です。 |
--computer NAME |
レコードにホスト名がない場合の補完値です。不明な場合は明示的に Unknown と表示します。 |
--hayabusa FILE |
Hayabusa の時刻、ルール情報、ホスト名、利用可能な EvtxFile を持つ JSONL。 |
現行マニフェストでは、解析結果ディレクトリの移動に対応し、記録された絶対出力パスを移動先で解決します。シンボリックリンクの参照先も含め、入力はそのディレクトリ内にある必要があります。旧形式の Amcache、SRUM、Jump Lists 個別ディレクトリにも対応します。カテゴリ別ディレクトリでは明示的な OutputFiles が必要です。
出力先からの相対パスと、複数テーブルを平坦に配置した現行の出力形式に対応します。ブラウザー、WebCache、Outlook、UAL を含め、自動解析が処理対象にするすべてのアーティファクトを認識します。
マニフェストが VHDX または E01 イメージを示す場合、参照元にはイメージ名と内部パスを記録し、イベントの詳細にもイメージ名を保持します。解析結果を読む際に一時作業領域は必要ありません。
生のソースは、レコードまたは明確なマニフェスト コマンドから取得されます。 -d では、生のソース参照は証拠ディレクトリを基準とし、Details.ParsedFile は解析されたディレクトリを基準とします。 SRUM CSV テーブルは、ホストに一意に識別可能な収集された SRUDB.dat が 1 つある場合にのみデータベースに割り当てられます。それ以外の場合、SourceFile は解析されたファイルを指し、Details.RawSourceAvailable は false になります。
単体の入力はファイル名で参照します。同名の入力が複数ある場合は ./Inputs/<ID>/<filename> で区別します。証拠ルートが不明な絶対パスには ./Sources/<ID>/<filename> という識別子を使います。これにより、解析者の絶対ディレクトリ名を出力せずに異なる出典を区別できます。元のパスは ParsedFile と InputRecord を使ってネイティブレコードで確認してください。Windows の実行ファイルパスなど、証拠自体に記録されたパスは変更しません。
共通のイベントフィールド¶
| フィールド | 意味 |
|---|---|
Timestamp |
UTC の RFC 3339 形式です。安定した並べ替えのため小数点以下9桁で出力しますが、ゼロ埋めで精度が上がるわけではありません。 |
Comp |
入力レコードに対応するホスト。 |
Artifact |
mft、prefetch、srum、hayabusa などの安定したアーティファクト識別子。 |
TimestampType |
MFT SI Data modified など、その時刻が表す意味。 |
User |
アダプターが取得できたアカウント名または SID。空の場合もあります。 |
Path |
対象ファイル、レジストリキーなど、アーティファクト固有の対象。 |
Message |
タイムラインビューアー向けの短い説明。 |
SourceFile |
証拠ディレクトリからの相対参照。ルートが不明な場合は相対的な出典識別子を使い、出典を特定できない場合は前述の解析済みファイルの参照にします。 |
SourceField |
時刻を取得した実際のフィールド名または入れ子内の位置。 |
RecordID |
アーティファクト固有のレコード識別子。EVTX のレコード ID とは限りません。 |
Details |
元の時刻、精度、時刻の基準と役割、解析済みファイル、入力レコード/位置、取得できた復元・ルール情報を含む構造化データ。 |
CSV の Details は引用符付きの JSON セルで、JSONL ではオブジェクトです。Timesketch プロファイルでは Timestamp、TimestampType、Message をそれぞれ datetime、timestamp_desc、message に変更し、他の出典フィールドは保持します。これらは Timesketch の必須3フィールドです。
Details に入るのは選択した情報であり、全バイナリデータや全フィールドではありません。長い文字列・配列・オブジェクトは制限され、ProjectionOmitted が付きます。完全なレコードは Details.ParsedFile、InputRecord、Location で参照してください。CSV の番号はヘッダー後の CSV レコード番号であり、引用符付きセル内の物理行番号ではありません。JSONL では行番号、JSON では最上位ドキュメント番号と入れ子内の位置を表します。
各時刻の意味¶
タイムスタンプは記録された対象についての証拠であり、それだけで実行や攻撃を証明しません。アダプターは次の意味を区別します。
| アーティファクト | タイムラインでの解釈 |
|---|---|
| MFT | SI/FN の変更・アクセス・メタデータ変更・作成を分け、名前の異なる FN 属性も区別します。--sort 指定時は、ファイル名行で繰り返される SI を統合します。ADS 行の共有されたベースファイル時刻は、どちらのモードでも除外します。FILE レコードのスラックから復元した名前は、復元された FN の独立したイベントとして残します。 |
| I30 | 保存された FN/インデックスのメタデータと、利用可能なスラック・復元情報。ディレクトリインデックスへの書き込み時刻ではありません。 |
| USN ジャーナル | ジャーナルの記録時刻と更新理由。1レコードで複数の変更を表すことがあり、それぞれの正確な開始時刻とは限りません。 |
| LogFile | 保存された redo/undo の時刻スナップショットとファイル名情報を分けて保持します。LSN やファイルオフセットは識別子であり、日時に変換しません。 |
| Prefetch | 記録された実行時刻。--sort 指定時は、対応する Prefetch タイムライン出力と統合します。参照先ボリュームの作成時刻は別の意味として表示します。 |
| ブラウザーの SQLite データベース | 訪問、復元された最終訪問情報、ダウンロード開始/終了、Cookie の作成/アクセス/有効期限、フォームの初回/最終利用や削除記録。ダウンロード終了だけでは成功や実行を証明しません。Cookie の有効期限は設定値です。復元状態、信頼度、由来を保持します。 |
| Internet Explorer/旧 Edge の WebCache | 保存されたアクセス・作成・変更・有効期限・同期、ダウンロード開始、Cookie、コンテナーのアクセス・整理時刻。キャッシュの管理処理をユーザーのページ閲覧と断定しません。 |
| Outlook の PST、OST、MSG、OFT | メールの送信/配信、フォルダー・アイテム・添付の作成/変更、予定表・タスク・リマインダーの時刻、明示的に時刻型のプロパティ。予定時刻は会議の実施、通知の発火、プログラム実行を証明しません。配信時刻も既読の証拠ではありません。 |
| ユーザーアクセスログ(UAL) | 最初/最後のアクセスメタデータ、データベースの挿入/作成、最初/最後に表示され保存されたオペレーティングシステムの起動時間。ロール、アカウント、送信元アドレス、および日次カウンターはコンテキストのままです。毎日の日付/カウントは深夜のログオンで発明されたものではありません。アンタイム ID 行と DNS 行は、元の解析結果に残ります。 |
| Amcache | インベントリキーの最終書き込み、親ボリュームキーの情報、インストール日、PE リンク情報。登録の存在や LinkDate だけでは実行を証明しません。 |
| ShimCache | 保存されたファイル変更、キャッシュ更新、キーの最終書き込み。いずれも実行時刻とは断定できません。 |
| SRUM | プロバイダーの時刻/集計枠、接続開始、明示的な開始・終了、アプリ識別情報。バイト数、継続時間、カウンターを日時として扱いません。 |
| LNK | 対象の MAC 時刻、追跡識別子の作成、シェルアイテムの時刻。保存された対象情報であり、ショートカットを開いた時刻とは限りません。 |
| Jump Lists | エントリーの最終利用、追跡識別子の作成、埋め込まれた LNK の対象時刻。収集側のコンテナーファイル時刻は既定で除外します。 |
| Defender の隔離データ | エントリー時刻と保存されたリソースの作成・アクセス・書き込み時刻。抽出時刻は端末上の活動の証拠ではありません。 |
| BAM, UserAssist, FeatureUsage | 利用可能な活動時刻と、別の意味としてのキー最終書き込み。時刻のないカウンターからイベントは生成しません。 |
| RecentDocs、MRU、開く/保存の MRU、ShellBags、Office | 利用・信頼・シェルアイテムの時刻とキー情報。リストのキー時刻は、その全項目の個別の最終利用時刻ではありません。 |
| SAM と LSA シークレット | アカウントのログオン・パスワード・有効期限、シークレット設定、関連キーの時刻。認証イベントログの代わりにはなりません。 |
| サービス、TaskCache、レジストリの永続化、BCD | キー・設定情報と明示的に記録されたタスク時刻。サービスキーの書き込みだけではサービス実行を証明しません。 |
| ネットワークと USB | ネットワークプロファイル・リース、デバイスのインストール・接続・取り外しとキー情報。ネイティブ出力の USB ユーザーの MountPoints2 時刻には、対応するユーザーハイブの出典も保持します。 |
| システム情報、インストール済みプログラム、AppCompat、アプリ履歴 | 明示的なインストール・シャットダウン・インベントリ/活動・キー情報。ネイティブのシステム情報では、プロファイル・バージョン配列内の時刻も保持します。 |
| 監査ポリシー、セキュリティ設定、MuiCache、汎用レジストリ | 利用可能なキー最終書き込み。時刻のない値やカウンターはネイティブ入力に残します。 |
| Persistence Hunter | 根拠となるキー最終書き込みと関連変更時刻。検出結果そのものは、時刻付きのインストール記録や侵害の断定ではありません。 |
| Hayabusa | イベント/アラート時刻、ルール、レベル、チャネル、イベント ID、取得できた詳細。異なるルールや相関レコードは別に保持します。 |
デフォルトでは、繰り返し記録されたメタデータを含むすべての時刻イベントを保持し、全体のソートや重複統合を行いません。--sort を指定すると重複するイベントが統合されるため、同じ入力でも出力行数が少なくなる場合があります。同じ時刻でも、意味や証拠ソースが異なるイベントは、どちらのモードでも保持します。重複判定には、コンピューター、ソース、アーティファクト、レコード、時刻の意味、復元状態が含まれます。統合された行には DuplicateCount と、件数を制限した別パス・別ソースフィールドの情報が記録されます。パスや時刻が似ているだけで異なるソースを統合することはありません。元の証拠ソースを特定できない場合は、異なる収集データを誤って統合しないよう、入力レコードの識別情報を保持します。
精度、ローカル時刻、仮定¶
UTC と分かるフィールドや明示的なオフセット付き時刻は UTC に正規化します。100 ns の FILETIME を含め、元の値と精度を保持します。元のパーサーやビューアーで丸められた精度は復元できません。
シェルアイテム/FAT の一部は、パーサーが Z を付けてもローカル時刻を意味します。解析値と由来は保持しますが、不明な端末のタイムゾーンや以前の変換の正しさは復元・検証できません。精密なホスト間の相関には元の証拠と端末設定を確認してください。
アーティファクト定義のタイムゾーンを持たない単純なタイムスタンプは、UTC として黙って処理されるのではなく、未解決としてカウントされます。証拠がそれを正当化する場合は、符号付きの固定オフセットを指定します。
juntei super-timeline -f Amcache.jsonl --input-artifact amcache \
--assume-offset "+09:00" -o Timeline.csv
日付だけの値にもこの指定が必要です。午前0時は日単位の精度を持つ仮定であり、観測された午前0時のイベントではありません。タイムゾーン名や夏時間規則には対応しません。欠損・ゼロ・無効・範囲外の値からエポック時刻のイベントを作りません。明示的で有効な 1970 年の日付は保持します。
次の2種類は既定で除外します。
--include-collection-times: 収集・分析側のファイルシステムにある LNK/Jump List の元ファイルのメタデータです。collection_filesystemと表示して端末上の活動と区別します。--include-interpreted-times: 汎用レジストリの QWORD 値をリーダーが FILETIME と解釈したものです。実際にはカウンターの場合も多いため、interpreted_valueと表示します。
出力とスキップしたレコード¶
このコマンドが出力するのは、-o で指定した タイムラインファイルだけです。形式は -t で選択し、デフォルトは csv、もう一つの選択肢は jsonl です。時刻なしレコード、診断、サマリーの付属ファイルや、レコードごとの診断用一時ファイルは作成しません。以前の実行で作られた付属ファイルは、そのまま残します。
端末のサマリーには、タイムラインのイベント数と時刻なしレコード数を表示します。不正なタイムスタンプとタイムゾーンを特定できない時刻は、件数がゼロでない場合に別々に表示します。--sort を指定した場合は、統合した重複イベント数も表示します。タイムラインに含まれないレコードやアーティファクトの詳しい情報を確認できるよう、元の解析結果は保管してください。
根拠のあるタイムゾーンの指定を必要とする有効な日時は、不正なタイムスタンプではなく、タイムゾーンを特定できない時刻として数えます。時刻を推測して補うことはありません。使用できる時刻がないレコードを、1970年の合成イベントとしてタイムラインに追加することもありません。
有効な時刻が指定範囲の外にあるレコードは、時刻なしではなくフィルター対象として数えます。エクスポートの成功は、選択された解析済み入力を正常に処理できたことを示します。すべてのアーティファクトが収集されていることや、すべてのフィールドに時刻があること、すべての攻撃を検知できることを意味しません。
CSV ではシステムプロファイル、USB ユーザーのマウントポイント、シェルアイテムなどの入れ子情報が平坦化される場合があります。必要なら情報の豊富なネイティブ JSON/JSONL を使ってください。CSV で省略された情報は復元できません。未対応のアーティファクトIDや壊れた入力は、部分的な成功ではなくエラーにします。
性能と出力の保護¶
入力はストリームとして読み込み、並列に処理します。デフォルトでは、各ワーカーが出力形式に変換したイベントを一時ファイルに書き込み、それらを入力ファイルの順序で連結します。ソートやイベント構造の再読み込みは行いません。複数の入力を処理しても、CSV ヘッダーは一度だけ出力します。ワーカー数が変わっても出力順序は同じですが、その順序が時系列を表すわけではありません。
Input files は、選択された解析済み入力と Hayabusa タイムラインの合計サイズを表示します。Results saved は、保存したタイムラインファイルのサイズを表示します。どちらも auto-parse と同じ KiB/MiB/GiB 単位を使用します。
--sort を指定すると、バッファーを専用の一時ディレクトリに書き出し、同時に開くファイル数を制限したマージ処理で時系列順に並べます。ソートは整数の秒とナノ秒を使い、1970年より前の時刻にも対応します。同時刻の並び順は、ワーカー数やソート用メモリの設定を変えても同じです。進捗バーは、中間マージと最終マージで処理したイベント数に応じて進みます。複数回のマージでは、同じイベントの処理を各回で数えます。バーは端末上で表示し、出力をリダイレクトした場合は非表示になります。
--memory-limit は --sort の場合にだけ適用される、全ワーカー合計の ソートバッファー容量です。プロセス全体の RSS 上限ではありません。入力レコード、JSON のオブジェクトや文字列、CSV バッファー、マージ中のレコードには追加のメモリが必要です。ソート用メモリが少ない場合はワーカー数を減らします。--max-record-size は入力レコードの最大サイズで、デフォルトは 16 MiB です。整形された JSON 配列やレポート全体は一つの最上位ドキュメントとして扱います。大きい場合は上限を増やすか、できれば JSONL を使用してください。CSV パーサーの先読みによる使用量も、この上限に含まれます。
最終結果に加え、デフォルトでは出力形式に変換したイベントの一時ファイル、--sort では展開したソート用レコードとマージ結果を保存する空き容量が必要です。どちらのモードでも出力を一時保存し、入力の処理に失敗した場合は既存の結果を置き換えません。一つのレコードから多数のイベントが作られるため、タイムラインは入力より大きくなる場合があります。必要に応じて期間やアーティファクトを絞り、空き容量のある一時保存先を選んでください。
Ctrl+C は連携してキャンセルし、プライベート ソート/ステージング ディレクトリを削除し、コード 130 で終了します。 Linux および macOS では、これは SIGTERM および SIGHUP にも当てはまります。キャンセルは、公開が開始される前に、タイムラインの読み取り、正規化、マージ、および書き込み中にチェックされます。キャッチ不能な終了や停電が発生した場合でも、一時ファイルが残る可能性があります。
既存のタイムラインを置き換える場合は -C が必要です。入力ファイル、マニフェスト、参照先の証拠や保護された証拠ディレクトリへの上書きは拒否します。入力の読み込みやソートに失敗しても、既存のタイムラインはそのまま残します。完成したタイムラインを出力先と同じ場所の一時ファイルに保存し、完了後にアトミックに置き換えます。以前の結果も保管する場合は、実行ごとに異なる出力ファイル名を使ってください。
さらに詳しく¶
現在の Juntei 入力では、Comp、Filename、Args、Attr などの短縮ラベルが使用されます。 MFT CSV は、現在の File、SN、ParentEntryNum、ParentSN、Type、USN、LogfileSN も受け入れます。 HasADS ヘッダー。シーケンス番号の生成と DOS/ADS の区別はそのまま維持されます。エクスポートされた古いラベルは引き続き受け入れられ、SourceField は実際の入力のスペルを保持します。 Hayabusa 入力は、独自の Computer フィールドを保持します。イベント タイムスタンプのないブート セクターとセキュリティ記述子のメタデータは、元の解析結果に残ります。タイムライン イベントは作成されません。
新しい複数テーブル形式のパーサー¶
ネイティブ JSON/JSONL はテーブル名を持ちます。単体の CSV では、ブラウザー、WebCache、Outlook のアダプターが列構成からテーブルを識別するため、CSV の改名や自動解析の出典サフィックスで時刻の解釈は変わりません。UAL は明示的に対応した時刻フィールドを使い、カウンターや日付に似た無関係の文字列を日時と推測しません。
Outlook のプロパティは、宣言された型が単一時刻または複数時刻の場合だけ展開します。日付の文字列は文字列のままです。埋め込みメッセージのアイテムIDと親参照を保持し、添付の抽出時刻を保存済み時刻の代わりに使いません。時刻のないファイル、受信者、連絡先、プロパティもネイティブ出力と時刻なしレポートで追跡できます。
これらにも同じ CSV/JSONL 出力スキーマを使います。アーティファクトを追加しても CSV の列が何百も増えることはなく、固有情報は Details に入ります。