Skip to content

Latest commit

 

History

History
1580 lines (1175 loc) · 100 KB

README-Japanese.md

File metadata and controls

1580 lines (1175 loc) · 100 KB

Hayabusa Logo

[English] | [日本語]

Hayabusa について

Hayabusaは、日本のYamato Securityグループによって作られたWindowsイベントログのファストフォレンジックタイムライン作成および脅威ハンティングツールです。 Hayabusaは日本語で「ハヤブサ」を意味し、ハヤブサが世界で最も速く、狩猟(hunting)に優れ、とても訓練しやすい動物であることから選ばれました。Rust で開発され、マルチスレッドに対応し、可能な限り高速に動作するよう配慮されています。SigmaルールをHayabusaルール形式に変換するツールも提供しています。Hayabusaの検知ルールもSigmaと同様にYML形式であり、カスタマイズ性や拡張性に優れます。稼働中のシステムで実行してライブ調査することも、複数のシステムからログを収集してオフライン調査することも可能です。また、 VelociraptorHayabusa artifactを用いることで企業向けの広範囲なスレットハンティングとインシデントレスポンスにも活用できます。出力は一つのCSVタイムラインにまとめられ、LibreOfficeTimeline ExplorerElastic StackTimesketch等で簡単に分析できるようになります。

関連プロジェクト

  • EnableWindowsLogSettings - Sigmaベースの脅威ハンティングと、Windowsイベントログのファストフォレンジックタイムライン生成ツール。
  • Hayabusa Rules - Hayabusaのための検知ルール。
  • Hayabusa Sample EVTXs - Hayabusa/Sigma検出ルールをテストするためのサンプルevtxファイル。
  • Takajo - Hayabusa結果の解析ツール。
  • WELA (Windows Event Log Analyzer) - PowerShellで書かれたWindowsイベントログの解析ツール。

目次

主な目的

スレット(脅威)ハンティングと企業向けの広範囲なDFIR

Hayabusaには現在、2300以上のSigmaルールと150以上のHayabusa検知ルールがあり、定期的にルールが追加されています。 VelociraptorHayabusa artifactを用いることで企業向けの広範囲なスレットハンティングだけでなくDFIR(デジタルフォレンジックとインシデントレスポンス)にも無料で利用することが可能です。 この2つのオープンソースを組み合わせることで、SIEMが設定されていない環境でも実質的に遡及してSIEMを再現することができます。 具体的な方法はEric Capuanoこちらの動画で学ぶことができます。

フォレンジックタイムラインの高速生成

Windowsのイベントログは、1)解析が困難なデータ形式であること、2)データの大半がノイズであり調査に有用でないことから、従来は非常に長い時間と手間がかかる解析作業となっていました。 Hayabusaは、有用なデータのみを抽出し、専門的なトレーニングを受けた分析者だけでなく、Windowsのシステム管理者であれば誰でも利用できる読みやすい形式で提示することを主な目的としています。 Hayabusaは従来のWindowsイベントログ分析解析と比較して、分析者が20%の時間で80%の作業を行えるようにすることを目指しています。

DFIR Timeline

スクリーンショット

起動

Hayabusa 起動画面

DFIRタイムラインのターミナル出力

Hayabusa ターミナル出力画面

キーワード検索結果

Hayabusa search results

検知頻度タイムライン出力 (-Tオプション)

Hayabusa 検知頻度タイムライン出力画面

結果サマリ (Results Summary)

Hayabusa 結果サマリ画面

HTMLの結果サマリ (-Hオプション)

Hayabusa results summary

Hayabusa results summary

Hayabusa results summary

LibreOfficeでのDFIRタイムライン解析 (-M マルチライン出力)

Hayabusa analysis in LibreOffice

Timeline ExplorerでのDFIRタイムライン解析

Hayabusa Timeline Explorerでの解析

Criticalアラートのフィルタリングとコンピュータごとのグルーピング

Timeline ExplorerでCriticalアラートのフィルタリングとコンピュータグルーピング

Elastic Stackダッシュボードでの解析

Elastic Stack Dashboard 1

Elastic Stack Dashboard 2

Timesketchでの解析

Timesketch

タイムライン結果のインポートと解析について

CSVのタイムラインをExcelやTimeline Explorerで分析する方法はこちらで紹介しています。

CSVのタイムラインをElastic Stackにインポートする方法はこちらで紹介しています。

CSVのタイムラインをTimesketchにインポートする方法はこちらで紹介しています。

jqによるJSON形式の結果の解析

JSON形式の結果をjqで解析する方法については、こちらを参照してください。

特徴&機能

  • クロスプラットフォーム対応: Windows, Linux, macOS。
  • Rustで開発され、メモリセーフでハヤブサよりも高速です!
  • マルチスレッド対応により、最大5倍のスピードアップを実現。
  • フォレンジック調査やインシデントレスポンスのために、分析しやすいCSVタイムラインを作成します。
  • 読みやすい/作成/編集可能なYMLベースのHayabusaルールで作成されたIoCシグネチャに基づくスレット。
  • SigmaルールをHayabusaルールに変換するためのSigmaルールのサポートがされています。
  • 現在、他の類似ツールに比べ最も多くのSigmaルールをサポートしており、カウントルール、新しい機能の|equalsfield|endswithfield等にも対応しています。
  • コンピュータ名の統計。(イベントの多い特定のコンピュータをフィルタリングするのに便利です。)
  • イベントログの統計。(どのような種類のイベントがあるのかを把握し、ログ設定のチューニングに有効です。)
  • 不良ルールやノイズの多いルールを除外するルールチューニング設定が可能です。
  • MITRE ATT&CKとのマッピング (CSVの出力ファイルのみ)。
  • ルールレベルのチューニング。
  • イベントログから不審なユーザやファイルを素早く特定するためのピボットキーワードの一覧作成。
  • 詳細な調査のために全フィールド情報の出力。
  • 成功と失敗したユーザログオンの要約。
  • Velociraptorと組み合わせた企業向けの広範囲なすべてのエンドポイントに対するスレットハンティングとDFIR。
  • CSV、JSON、JSONL形式とHTML結果サマリの出力。
  • 毎日のSigmaルール更新。
  • JSON形式のログ入力にも対応。
  • ログフィールドの正規化
  • IPアドレスにGeoIP(ASN、都市、国)情報を付加することによるログエンリッチメント。
  • キーワードや正規表現で全イベントの検索。
  • フィールドデータのマッピング (例: 0xc0000234 -> ACCOUNT LOCKED)
  • 空領域からのEvtxレコードカービング。
  • 出力時のイベント重複排除。(レコード復元が有効になっている場合や、バックアップされたevtxファイル、VSSから抽出されたevtxファイルなどが含まれている場合に便利。)

ダウンロード

ReleasesページからHayabusaの安定したバージョンでコンパイルされたバイナリが含まれている最新版もしくはソースコードをダウンロードできます。

Gitクローン

以下のgit cloneコマンドでレポジトリをダウンロードし、ソースコードからコンパイルして使用することも可能です:

git clone https://github.com/Yamato-Security/hayabusa.git --recursive

注意: mainブランチは開発中のバージョンです。まだ正式にリリースされていない新機能が使えるかもしれないが、バグがある可能性もあるので、テスト版だと思って下さい。

--recursiveをつけ忘れた場合、サブモジュールとして管理されているrulesフォルダ内のファイルはダウンロードされません。

git pull --recurse-submodulesコマンド、もしくは以下のコマンドでrulesフォルダを同期し、Hayabusaの最新のルールを更新することができます:

hayabusa.exe update-rules

アップデートが失敗した場合は、rulesフォルダの名前を変更してから、もう一回アップデートしてみて下さい。

注意: アップデートを実行する際に rules フォルダは hayabusa-rules レポジトリの最新のルールとコンフィグファイルに置き換えられます 既存ファイルへの修正はすべて上書きされますので、アップデート実行前に編集したファイルのバックアップをおすすめします。 もし、level-tuning を行っているのであれば、アップデート後にルールファイルの再調整をしてください rulesフォルダ内に新しく追加したルールは、アップデート時に上書きもしくは削除は行われません。

アドバンス: ソースコードからのコンパイル(任意)

Rustがインストールされている場合、以下のコマンドでソースコードからコンパイルすることができます:

注意: hayabusaをコンパイルするためにはRust(rustc)が最新版であることが必要です。

cargo build --release

最新のunstable版はmainブランチから、最新の安定版はReleasesページからダウンロードできます。

以下のコマンドで定期的にRustをアップデートしてください:

rustup update stable

コンパイルされたバイナリはtarget/releaseフォルダ配下で作成されます。

Rustパッケージの更新

コンパイル前に最新のRust crateにアップデートすることで、最新のライブラリを利用することができます:

cargo update

アップデート後、何か不具合がありましたらお知らせください。

32ビットWindowsバイナリのクロスコンパイル

以下のコマンドで64ビットのWindows端末で32ビットのバイナリをクロスコンパイルできます:

rustup install stable-i686-pc-windows-msvc
rustup target add i686-pc-windows-msvc
rustup run stable-i686-pc-windows-msvc cargo build --release

注意: Rust の新しい安定版が出たときには必ずrustup install stable-i686-pc-windows-msvcを実行してください。rustup update stable はクロスコンパイル用のコンパイラを更新しないので、ビルドエラーが発生することがあります。

macOSでのコンパイルの注意点

opensslについてのコンパイルエラーが表示される場合は、Homebrewをインストールしてから、以下のパッケージをインストールする必要があります:

brew install pkg-config
brew install openssl

Linuxでのコンパイルの注意点

opensslについてのコンパイルエラーが表示される場合は、以下のパッケージをインストールする必要があります。

Ubuntu系のディストロ:

sudo apt install libssl-dev

Fedora系のディストロ:

sudo yum install openssl-devel

LinuxのMUSLバイナリのクロスコンパイル

まず、Linux OSでターゲットをインストールします。

rustup install stable-x86_64-unknown-linux-musl
rustup target add x86_64-unknown-linux-musl

以下のようにコンパイルします:

cargo build --release --target=x86_64-unknown-linux-musl

注意: Rust の新しい安定版が出たときには必ずrustup install stable-x86_64-unknown-linux-muslを実行してください。rustup update stable はクロスコンパイル用のコンパイラを更新しないので、ビルドエラーが発生することがあります。

MUSLバイナリは./target/x86_64-unknown-linux-musl/release/ディレクトリ配下に作成されます。 MUSLバイナリはGNUバイナリより約15%遅いですが、より多くのLinuxバージョンとディストロで実行できます。

Hayabusaの実行

注意: アンチウィルス/EDRの誤検知と遅い初回実行

Hayabusa実行する際や、.ymlルールのダウンロードや実行時にルール内でdetectionに不審なPowerShellコマンドやmimikatzのようなキーワードが書かれている際に、アンチウィルスやEDRにブロックされる可能性があります。 誤検知のため、セキュリティ対策の製品がHayabusaを許可するように設定する必要があります。 マルウェア感染が心配であれば、ソースコードを確認した上で、自分でバイナリをコンパイルして下さい。

Windows PC起動後の初回実行時に時間がかかる場合があります。 これはWindows Defenderのリアルタイムスキャンが行われていることが原因です。 リアルタイムスキャンを無効にするかHayabusaのディレクトリをアンチウィルススキャンから除外することでこの現象は解消しますが、設定を変える前にセキュリティリスクを十分ご考慮ください。

Windows

コマンドプロンプトやWindows Terminalから32ビットもしくは64ビットのWindowsバイナリをHayabusaのルートディレクトリから実行します。

パスにスペースが含まれるファイルまたはディレクトリをスキャンしようとするとエラーが発生した場合

Windowsに組み込まれているコマンドプロンプトまたはPowerShellプロンプトを使用する場合、ファイルまたはディレクトリのパスに空白があると、.evtxファイルをロードできないというエラーが表示されることがあります。 .evtxファイルを正しくロードするために、以下のことを行ってください:

  1. ファイルまたはディレクトリのパスをダブルクォートで囲む。
  2. ディレクトリパスの場合は、最後の文字にバックスラッシュを入れない。

Linux

まず、バイナリに実行権限を与える必要があります。

chmod +x ./hayabusa

次に、Hayabusaのルートディレクトリから実行します:

./hayabusa

macOS

まず、ターミナルやiTerm2からバイナリに実行権限を与える必要があります。

chmod +x ./hayabusa

次に、Hayabusaのルートディレクトリから実行してみてください:

./hayabusa

macOSの最新版では、以下のセキュリティ警告が出る可能性があります:

Mac Error 1 JP

macOSの環境設定から「セキュリティとプライバシー」を開き、「一般」タブから「このまま許可」ボタンをクリックしてください。

Mac Error 2 JP

その後、ターミナルからもう一回実行してみてください:

./hayabusa

以下の警告が出るので、「開く」をクリックしてください。

Mac Error 3 JP

これで実行できるようになります。

コマンド一覧

分析コマンド:

  • computer-metrics: コンピュータ名に基づくイベントの合計を出力する。
  • eid-metrics: イベントIDに基づくイベントの合計と割合の集計を出力する。
  • logon-summary: ログオンイベントのサマリを出力する。
  • pivot-keywords-list: ピボットする不審なキーワードのリストを作成する。
  • search: キーワードや正規表現で全イベントの検索。

DFIRタイムライン作成のコマンド:

  • csv-timeline: CSV形式のタイムラインを出力する。
  • json-timeline: JSON/JSONL形式のタイムラインを出力する。
  • level-tuning: アラートlevelのカスタムチューニング。
  • list-profiles: 出力プロファイルの一覧表示。
  • set-default-profile: デフォルトプロファイルを変更する。
  • update-rules: GitHubのhayabusa-rulesリポジトリにある最新のルールに同期させる。

汎用コマンド:

  • help: このメッセージまたは指定されたコマンドのヘルプを表示する。
  • list-contributors: コントリビュータ一覧の表示

コマンド使用方法

分析コマンド

computer-metricsコマンド

computer-metricsコマンドを使用すると、イベントIDの総数や割合をチャンネルごとに分けて表示することができます。

Usage: computer-metrics <INPUT> [OPTIONS]

Input:
  -d, --directory <DIR>        .evtxファイルを持つディレクトリのパス
  -f, --file <FILE>            1つの.evtxファイルに対して解析を行う
  -l, --live-analysis          ローカル端末のC:\Windows\System32\winevt\Logsフォルダを解析する
  -J, --JSON-input             .evtxファイルの代わりにJSON形式のログファイル(.jsonまたは.jsonl)をスキャンする
  -x, --recover-records        空ページからevtxレコードをカービングする (デフォルト: 無効)

Filtering:
      --timeline-offset <OFFSET>  オフセットに基づく最近のイベントのスキャン (例: 1y, 3M, 30d, 24h, 30m)

Output:
  -o, --output <FILE>       イベントIDに基づくイベントの合計と割合の集計を出力する (例: computer-metrics.csv)

Display Settings:
      --no-color       カラーで出力しない
  -q, --quiet          Quietモード: 起動バナーを表示しない
  -v, --verbose        詳細な情報を出力する

General Options:
  -C, --clobber                          結果ファイルを上書きする
  -Q, --quiet-errors                     Quiet errorsモード: エラーログを保存しない
  -c, --rules-config <DIR>               ルールフォルダのコンフィグディレクトリ (デフォルト: ./rules/config)
      --target-file-ext <FILE-EXT...>  evtx以外の拡張子を解析対象に追加する。 (例1: evtx_data 例2: evtx1,evtx2)
  -t, --threads <NUMBER>                 スレッド数 (デフォルト: パフォーマンスに最適な数値)

computer-metricsコマンドの使用例

  • ディレクトリに対してイベントIDの統計情報を出力する: hayabusa.exe computer-metrics -d ../logs
  • 結果をCSVファイルに保存する: hayabusa.exe computer-metrics -d ../logs -o computer-metrics.csv

eid-metricsコマンド

eid-metricsコマンドを使用すると、イベントIDの総数や割合をチャンネルごとに分けて表示することができます。

Usage: eid-metrics <INPUT> [OPTIONS]

Input:
  -d, --directory <DIR>        .evtxファイルを持つディレクトリのパス
  -f, --file <FILE>            1つの.evtxファイルに対して解析を行う
  -l, --live-analysis          ローカル端末のC:\Windows\System32\winevt\Logsフォルダを解析する
  -J, --JSON-input             .evtxファイルの代わりにJSON形式のログファイル(.jsonまたは.jsonl)をスキャンする
  -x, --recover-records        空ページからevtxレコードをカービングする (デフォルト: 無効)

Filtering:
      --exclude-computer <COMPUTER...>  特定のコンピュータ名をスキャンしない (例: ComputerA) (例: ComputerA,ComputerB)
      --include-computer <COMPUTER...>  特定のコンピュータ名のみをスキャンする (例: ComputerA) (例: ComputerA,ComputerB)
      --timeline-offset <OFFSET>        オフセットに基づく最近のイベントのスキャン (例: 1y, 3M, 30d, 24h, 30m)

Output:
  -o, --output <FILE>       イベントIDに基づくイベントの合計と割合の集計を出力する (例: eid-metrics.csv)

Display Settings:
      --no-color       カラーで出力しない
  -q, --quiet          Quietモード: 起動バナーを表示しない
  -v, --verbose        詳細な情報を出力する

General Options:
  -C, --clobber                          結果ファイルを上書きする
  -Q, --quiet-errors                     Quiet errorsモード: エラーログを保存しない
  -c, --rules-config <DIR>               ルールフォルダのコンフィグディレクトリ (デフォルト: ./rules/config)
      --target-file-ext <FILE-EXT...>    evtx以外の拡張子を解析対象に追加する。 (例1: evtx_data 例2: evtx1,evtx2)
  -t, --threads <NUMBER>                 スレッド数 (デフォルト: パフォーマンスに最適な数値)

Time Format:
      --European-time     ヨーロッパ形式で日付と時刻を出力する (例: 22-02-2022 22:00:00.123 +02:00)
      --ISO-8601          ISO-8601形式で日付と時刻を出力する (例: 2022-02-22T10:10:10.1234567Z) (UTC時刻)
      --RFC-2822          RFC 2822形式で日付と時刻を出力する (例: Fri, 22 Feb 2022 22:00:00 -0600)
      --RFC-3339          RFC 3339形式で日付と時刻を出力する (例: 2022-02-22 22:00:00.123456-06:00)
      --US-military-time  24時間制(ミリタリータイム)のアメリカ形式で日付と時刻を出力する (例: 02-22-2022 22:00:00.123 -06:00)
      --US-time           アメリカ形式で日付と時刻を出力する (例: 02-22-2022 10:00:00.123 PM -06:00)
  -U, --UTC               UTC形式で日付と時刻を出力する (デフォルト: 現地時間)

eid-metricsコマンドの使用例

  • 一つのファイルに対してイベントIDの統計情報を出力する: hayabusa.exe eid-metrics -f Security.evtx
  • ディレクトリに対してイベントIDの統計情報を出力する: hayabusa.exe eid-metrics -d ../logs
  • 結果をCSVファイルに保存する: hayabusa.exe eid-metrics -f Security.evtx -o eid-metrics.csv

eid-metricsコマンドの設定ファイル

チャンネル名、イベントID、イベントのタイトルは、rules/config/channel_eid_info.txtで定義されています。

例:

Channel,EventID,EventTitle
Microsoft-Windows-Sysmon/Operational,1,Process Creation.
Microsoft-Windows-Sysmon/Operational,2,File Creation Timestamp Changed. (Possible Timestomping)
Microsoft-Windows-Sysmon/Operational,3,Network Connection.
Microsoft-Windows-Sysmon/Operational,4,Sysmon Service State Changed.

logon-summaryコマンド

logon-summaryコマンドを使うことでログオン情報の要約(ユーザ名、ログイン成功数、ログイン失敗数)の画面出力ができます。 単体のevtxファイルを解析したい場合は-fオプションを利用してください。複数のevtxファイルを対象としたい場合は-dオプションを合わせて使うことでevtxファイルごとのログイン情報の要約を出力できます。

Usage: logon-summary <INPUT> [OPTIONS]

Input:
  -d, --directory <DIR>        .evtxファイルを持つディレクトリのパス
  -f, --file <FILE>            1つの.evtxファイルに対して解析を行う
  -l, --live-analysis          ローカル端末のC:\Windows\System32\winevt\Logsフォルダを解析する
  -J, --JSON-input             .evtxファイルの代わりにJSON形式のログファイル(.jsonまたは.jsonl)をスキャンする
  -x, --recover-records        空ページからevtxレコードをカービングする (デフォルト: 無効)

Filtering:
      --exclude-computer <COMPUTER...>  特定のコンピュータ名をスキャンしない (例: ComputerA) (例: ComputerA,ComputerB)
      --include-computer <COMPUTER...>  特定のコンピュータ名のみをスキャンする (例: ComputerA) (例: ComputerA,ComputerB)
      --timeline-end <DATE>             解析対象とするイベントログの終了時刻 (例: "2022-02-22 23:59:59 +09:00")
      --timeline-offset <OFFSET>        オフセットに基づく最近のイベントのスキャン (例: 1y, 3M, 30d, 24h, 30m)
      --timeline-start <DATE>           解析対象とするイベントログの開始時刻 (例: "2020-02-22 00:00:00 +09:00")

Output:
  -o, --output <FILENAME-PREFIX>  ログオンサマリをCSV形式で2つのファイルに保存する (例: -o logon-summary.csv)

Display Settings:
      --no-color            カラーで出力しない
  -q, --quiet               Quietモード: 起動バナーを表示しない
  -v, --verbose             詳細な情報を出力する

General Options:
  -C, --clobber                          結果ファイルを上書きする
  -Q, --quiet-errors                     Quiet errorsモード: エラーログを保存しない
  -c, --rules-config <DIR>               ルールフォルダのコンフィグディレクトリ (デフォルト: ./rules/config)
      --target-file-ext <FILE-EXT...>    evtx以外の拡張子を解析対象に追加する (例1: evtx_data 例2:evtx1,evtx2)
  -t, --threads <NUMBER>                 スレッド数 (デフォルト: パフォーマンスに最適な数値)

Time Format:
      --European-time     ヨーロッパ形式で日付と時刻を出力する (例: 22-02-2022 22:00:00.123 +02:00)
      --ISO-8601          ISO-8601形式で日付と時刻を出力する (例: 2022-02-22T10:10:10.1234567Z) (UTC時刻)
      --RFC-2822          RFC 2822形式で日付と時刻を出力する (例: Fri, 22 Feb 2022 22:00:00 -0600)
      --RFC-3339          RFC 3339形式で日付と時刻を出力する (例: 2022-02-22 22:00:00.123456-06:00)
      --US-military-time  24時間制(ミリタリータイム)のアメリカ形式で日付と時刻を出力する (例: 02-22-2022 22:00:00.123 -06:00)
      --US-time           アメリカ形式で日付と時刻を出力する (例: 02-22-2022 10:00:00.123 PM -06:00)
  -U, --UTC               UTC形式で日付と時刻を出力する (デフォルト: 現地時間)

logon-summaryコマンドの使用例

  • ログオンサマリの出力: hayabusa.exe logon-summary -f Security.evtx
  • ログオンサマリ結果を保存する: hayabusa.exe logon-summary -d ../logs -o logon-summary.csv

pivot-keywords-listコマンド

pivot-keywords-listコマンドを使用すると、異常なユーザ、ホスト名、プロセスなどを迅速に特定し、イベントを関連付けるための固有のピボットキーワードのリストを作成することができます。

重要:デフォルトでは、Hayabusaはすべてのイベント(informationalおよびそれ以上)から結果を返すので、pivot-keywords-listコマンドと-m, --min-levelオプションを組み合わせることを強くお勧めします。 例えば、まず-m criticalcriticalアラートのみのキーワードを作成し、次に-m high-m medium等々と続けていきます。 検索結果には、多くの通常のイベントと一致する共通のキーワードが含まれている可能性が高いので、検索結果を手動でチェックし、固有のキーワードのリストを1つのファイルに作成した後、grep -f keywords.txt timeline.csvといったコマンドで疑わしい活動のタイムラインを絞り込み作成することが可能です。

Usage: pivot-keywords-list <INPUT> [OPTIONS]

Input:
  -d, --directory <DIR>        .evtxファイルを持つディレクトリのパス
  -f, --file <FILE>            1つの.evtxファイルに対して解析を行う
  -l, --live-analysis          ローカル端末のC:\Windows\System32\winevt\Logsフォルダを解析する
  -J, --JSON-input             .evtxファイルの代わりにJSON形式のログファイル(.jsonまたは.jsonl)をスキャンする
  -x, --recover-records        空ページからevtxレコードをカービングする (デフォルト: 無効)

Filtering:
  -E, --EID-filter                      速度を上げるため主なEIDだけスキャンする (コンフィグファイル: ./rules/config/target_event_IDs.txt)
  -D, --enable-deprecated-rules         ステータスがdeprecatedのルールを有効にする
  -n, --enable-noisy-rules              Noisyルールを有効にする
  -u, --enable-unsupported-rules        ステータスがunsupportedのルールを有効にする
  -e, --exact-level <LEVEL>             特定のレベルだけスキャンする (informational, low, medium, high, critical)
      --exclude-computer <COMPUTER...>  特定のコンピュータ名をスキャンしない (例: ComputerA) (例: ComputerA,ComputerB)
      --exclude-eid <EID...>            高速化のために特定のEIDをスキャンしない (例: 1) (例: 1,4688)
      --exclude-status <STATUS...>      読み込み対象外とするルール内でのステータス (例1: experimental) (例2: stable,test)
      --include-computer <COMPUTER...>  特定のコンピュータ名のみをスキャンする (例: ComputerA) (例: ComputerA,ComputerB)
      --include-eid <EID...>            指定したEIDのみをスキャンして高速化する (例 1) (例: 1,4688)
  -m, --min-level <LEVEL>               結果出力をするルールの最低レベル (デフォルト: informational)
      --timeline-end <DATE>             解析対象とするイベントログの終了時刻 (例: "2022-02-22 23:59:59 +09:00")
      --timeline-offset <OFFSET>        オフセットに基づく最近のイベントのスキャン (例: 1y, 3M, 30d, 24h, 30m)
      --timeline-start <DATE>           解析対象とするイベントログの開始時刻 (例: "2020-02-22 00:00:00 +09:00")

Output:
  -o, --output <FILE>       ピボットキーワードの一覧を複数ファイルに出力する (例: pivot-keywords.txt)

Display Settings:
      --no-color       カラーで出力しない
  -q, --quiet          Quietモード: 起動バナーを表示しない
  -v, --verbose        詳細な情報を出力する

General Options:
  -C, --clobber                          結果ファイルを上書きする
  -Q, --quiet-errors                     Quiet errorsモード: エラーログを保存しない
  -c, --rules-config <DIR>               ルールフォルダのコンフィグディレクトリ (デフォルト: ./rules/config)
      --target-file-ext <FILE-EXT...>    evtx以外の拡張子を解析対象に追加する。 (例1: evtx_data 例2: evtx1,evtx2)
  -t, --threads <NUMBER>                 スレッド数 (デフォルト: パフォーマンスに最適な数値)

pivot-keywords-listコマンドの使用例

  • ピボットキーワードを画面に出力します: hayabusa.exe pivot-keywords-list -d ../logs -m critical
  • 重要なアラートからピボットキーワードのリストを作成し、その結果を保存します。(結果は、keywords-Ip Addresses.txtkeywords-Users.txt等に保存されます):
hayabusa.exe pivot-keywords-list -d ../logs -m critical -o keywords

pivot-keywords-listの設定ファイル

検索キーワードは、./rules/config/pivot_keywords.txtを編集することでカスタマイズすることができます。 デフォルト設定はこちらのページです。

フォーマットは、キーワード名.フィールド名です。例えば、Usersのリストを作成する場合、Hayabusaは、SubjectUserNameTargetUserNameUserフィールドにあるすべての値をリストアップします。

searchコマンド

searchコマンドは、すべてのイベントのキーワード検索が可能です。 (※Hayabusaの検知結果だけではありません。) Hayabusaの検知ルールでなにかの痕跡を検知できなくても、検索機能で検知できる可能性があるので、便利です。

Usage: hayabusa.exe search <INPUT> <--keywords "<KEYWORDS>" OR --regex "<REGEX>"> [OPTIONS]

Display Settings:
      --no-color  カラーで出力しない
  -q, --quiet     Quietモード: 起動バナーを表示しない
  -v, --verbose   詳細な情報を出力する

Input:
  -d, --directory <DIR>        .evtxファイルを持つディレクトリのパス
  -f, --file <FILE>            1つの.evtxファイルに対して解析を行う
  -l, --live-analysis          ローカル端末のC:\Windows\System32\winevt\Logsフォルダを解析する
  -x, --recover-records        空ページからevtxレコードをカービングする (デフォルト: 無効)

Filtering:
  -a, --and-logic                    ANDロジックでキーワード検索を行う (デフォルト: OR)
  -F, --filter <FILTER...>           特定のフィールドでフィルタする
  -i, --ignore-case                  大文字と小文字を区別しない
  -k, --keywords <KEYWORD...>        キーワードでの検索
  -r, --regex <REGEX>                正規表現での検索
      --timeline-offset <OFFSET>     オフセットに基づく最近のイベントのスキャン (例: 1y, 3M, 30d, 24h, 30m)

Output:
  -J, --JSON-output    JSON形式で検索結果を保存する (例: -J -o results.json)
  -L, --JSONL-output   JSONL形式で検索結果を保存 (例: -L -o results.jsonl)
  -M, --multiline      イベントフィールド情報を複数の行に出力する
  -o, --output <FILE>  ログオンサマリをCSV形式で保存する (例: search.csv)

General Options:
  -C, --clobber                          結果ファイルを上書きする
  -Q, --quiet-errors                     Quiet errorsモード: エラーログを保存しない
  -c, --rules-config <DIR>               ルールフォルダのコンフィグディレクトリ (デフォルト: ./rules/config)
      --target-file-ext <FILE-EXT...>    evtx以外の拡張子を解析対象に追加する (例1: evtx_data 例2:evtx1,evtx2)
  -t, --threads <NUMBER>                 スレッド数 (デフォルト: パフォーマンスに最適な数値)

Time Format:
      --European-time     ヨーロッパ形式で日付と時刻を出力する (例: 22-02-2022 22:00:00.123 +02:00)
      --ISO-8601          ISO-8601形式で日付と時刻を出力する (例: 2022-02-22T10:10:10.1234567Z) (UTC時刻)
      --RFC-2822          RFC 2822形式で日付と時刻を出力する (例: Fri, 22 Feb 2022 22:00:00 -0600)
      --RFC-3339          RFC 3339形式で日付と時刻を出力する (例: 2022-02-22 22:00:00.123456-06:00)
      --US-military-time  24時間制(ミリタリータイム)のアメリカ形式で日付と時刻を出力する (例: 02-22-2022 22:00:00.123 -06:00)
      --US-time           アメリカ形式で日付と時刻を出力する (例: 02-22-2022 10:00:00.123 PM -06:00)
  -U, --UTC               UTC形式で日付と時刻を出力する (デフォルト: 現地時間)

searchコマンドの使用例

  • ../hayabusa-sample-evtxディレクトリでmimikatzのキーワードを検索する:
hayabusa.exe search -d ../hayabusa-sample-evtx -k "mimikatz"

注意: mimikatzのキーワードがデータ内のどこかに存在する場合にマッチする。完全一致しなくても良い。

  • ../hayabusa-sample-evtxディレクトリでmimikatzまたはkaliのキーワードを検索する:
hayabusa.exe search -d ../hayabusa-sample-evtx -k "mimikatz" -k "kali"
  • ../hayabusa-sample-evtxディレクトリで大文字小文字を区別せずにmimikatzのキーワードを検索する:
hayabusa.exe search -d ../hayabusa-sample-evtx -k "mimikatz" -i
  • ../hayabusa-sample-evtxディレクトリで正規表現を使用し、IPアドレスを検索する:
hayabusa.exe search -d ../hayabusa-sample-evtx -r "(?:[0-9]{1,3}\.){3}[0-9]{1,3}"
  • ../hayabusa-sample-evtxディレクトリでWorkstationNameフィールドがkaliの条件で、全イベントを表示する:
hayabusa.exe search -d ../hayabusa-sample-evtx -r ".*" -F WorkstationName:"kali"

.*の正規表現を使用すると、すべてのイベントが表示される。

searchの設定ファイル

./rules/config/channel_abbreviations.txt: チャンネル名とその略称のマッピング。

DFIRタイムラインコマンド

csv-timelineコマンド

csv-timelineコマンドはイベントのフォレンジックタイムラインをCSV形式で作成します。

Usage: csv-timeline <INPUT> [OPTIONS]

Input:
  -d, --directory <DIR>    .evtxファイルを持つディレクトリのパス
  -f, --file <FILE>        1つの.evtxファイルに対して解析を行う
  -l, --live-analysis      ローカル端末のC:\Windows\System32\winevt\Logsフォルダを解析する
  -J, --JSON-input         .evtxファイルの代わりにJSON形式のログファイル(.jsonまたは.jsonl)をスキャンする
  -x, --recover-records    空ページからevtxレコードをカービングする (デフォルト: 無効)

Filtering:
  -E, --EID-filter                      速度を上げるため主なEIDだけスキャンする (コンフィグファイル: ./rules/config/target_event_IDs.txt)
  -D, --enable-deprecated-rules         ステータスがdeprecatedのルールを有効にする
  -n, --enable-noisy-rules              Noisyルールを有効にする
  -u, --enable-unsupported-rules        ステータスがunsupportedのルールを有効にする
  -e, --exact-level <LEVEL>             特定のレベルだけスキャンする (informational, low, medium, high, critical)
      --exclude-category <CATEGORY...>  特定のlogsourceカテゴリを持つルールをロードしない (例: process_creation,pipe_created)
      --exclude-computer <COMPUTER...>  特定のコンピュータ名をスキャンしない (例: ComputerA) (例: ComputerA,ComputerB)
      --exclude-eid <EID...>            高速化のために特定のEIDをスキャンしない (例: 1) (例: 1,4688)
      --exclude-status <STATUS...>      読み込み対象外とするルール内でのステータス (例1: experimental) (例2: stable,test)
      --exclude-tag <TAG...>            特定のタグを持つルールをロードしない (例: sysmon)
      --include-category <CATEGORY...>  特定のlogsourceカテゴリを持つルールのみをロードする (例: process_creation,pipe_created)
      --include-computer <COMPUTER...>  特定のコンピュータ名のみをスキャンする (例: ComputerA) (例: ComputerA,ComputerB)
      --include-eid <EID...>            指定したEIDのみをスキャンして高速化する (例: 1) (例: 1,4688)
      --include-tag <TAG...>            特定のタグを持つルールのみをロードする (例1: attack.execution,attack.discovery) (例2: wmi)
  -m, --min-level <LEVEL>               結果出力をするルールの最低レベル (デフォルト: informational)
  -P, --proven-rules                    実績のあるルールだけでスキャンし、高速化する (./rules/config/proven_rules.txt)
      --timeline-end <DATE>             解析対象とするイベントログの終了時刻 (例: "2022-02-22 23:59:59 +09:00")
      --timeline-offset <OFFSET>        オフセットに基づく最近のイベントのスキャン (例: 1y, 3M, 30d, 24h, 30m)
      --timeline-start <DATE>           解析対象とするイベントログの開始時刻 (例: "2020-02-22 00:00:00 +09:00")

Output:
  -G, --GeoIP <MAXMIND-DB-DIR>       IPアドレスのGeoIP(ASN、都市、国)情報を追加する
  -H, --HTML-report <FILE>           HTML形式で詳細な結果を出力する (例: results.html)
  -M, --multiline                    イベントフィールド情報を複数の行に出力する
  -F, --no-field-data-mapping        フィールドデータのマッピングを無効にする
  -o, --output <FILE>                タイムラインを保存する (例: results.csv)
  -p, --profile <PROFILE>            利用する出力プロファイル名を指定する
  -R, --remove-duplicate-data        重複したフィールドデータは「DUP」に置き換えられる (ファイルサイズが約10〜15%削減される)
  -X, --remove-duplicate-detections  重複した検知項目を削除する (デフォルト: 無効)

Display Settings:
      --no-color            カラーで出力しない
  -N, --no-summary          結果概要を出力しない (多少速くなる)
  -q, --quiet               Quietモード: 起動バナーを表示しない
  -v, --verbose             詳細な情報を出力する
  -T, --visualize-timeline  検知頻度タイムラインを出力する(ターミナルはUnicodeに対応する必要がある)

General Options:
  -C, --clobber                          結果ファイルを上書きする
  -Q, --quiet-errors                     Quiet errorsモード: エラーログを保存しない
  -r, --rules <DIR/FILE>                 ルールファイルまたはルールファイルを持つディレクトリ (デフォルト: ./rules)
  -c, --rules-config <DIR>               ルールフォルダのコンフィグディレクトリ (デフォルト: ./rules/config)
      --target-file-ext <FILE-EXT...>    evtx以外の拡張子を解析対象に追加する。 (例1: evtx_data 例2: evtx1,evtx2)
  -t, --threads <NUMBER>                 スレッド数 (デフォルト: パフォーマンスに最適な数値)

Time Format:
      --European-time     ヨーロッパ形式で日付と時刻を出力する (例: 22-02-2022 22:00:00.123 +02:00)
      --ISO-8601          ISO-8601形式で日付と時刻を出力する (例: 2022-02-22T10:10:10.1234567Z) (UTC時刻)
      --RFC-2822          RFC 2822形式で日付と時刻を出力する (例: Fri, 22 Feb 2022 22:00:00 -0600)
      --RFC-3339          RFC 3339形式で日付と時刻を出力する (例: 2022-02-22 22:00:00.123456-06:00)
      --US-military-time  24時間制(ミリタリータイム)のアメリカ形式で日付と時刻を出力する (例: 02-22-2022 22:00:00.123 -06:00)
      --US-time           アメリカ形式で日付と時刻を出力する (例: 02-22-2022 10:00:00.123 PM -06:00)
  -U, --UTC               UTC形式で日付と時刻を出力する (デフォルト: 現地時間)

csv-timelineコマンドの使用例

  • デフォルトのstandardプロファイルで1つのWindowsイベントログファイルに対してHayabusaを実行する:
hayabusa.exe csv-timeline -f eventlog.evtx
  • verboseプロファイルで複数のWindowsイベントログファイルのあるsample-evtxディレクトリに対して、Hayabusaを実行する:
hayabusa.exe csv-timeline -d .\hayabusa-sample-evtx -p verbose
  • 全てのフィールド情報も含めて1つのCSVファイルにエクスポートして、LibreOffice、Timeline Explorer、Elastic Stack等でさらに分析することができる(注意: super-verboseプロファイルを使すると、出力するファイルのサイズがとても大きくなる!):
hayabusa.exe csv-timeline -d .\hayabusa-sample-evtx -o results.csv -p super-verbose
  • EID(イベントID)フィルタを有効にし、タイムラインをJSON形式で保存する:

注意: EIDフィルタを有効にすると、私達のテストでは処理時間が約10〜15%速くなりますが、アラートを見逃す可能性があります。

hayabusa.exe csv-timeline -E -d .\hayabusa-sample-evtx -o results.csv
  • Hayabusaルールのみを実行する(デフォルトでは-r .\rulesにあるすべてのルールが利用される):
hayabusa.exe csv-timeline -d .\hayabusa-sample-evtx -r .\rules\hayabusa -o results.csv
  • Windowsでデフォルトで有効になっているログに対してのみ、Hayabusaルールを実行する:
hayabusa.exe csv-timeline -d .\hayabusa-sample-evtx -r .\rules\hayabusa\builtin -o results.csv
  • Sysmonログに対してのみHayabusaルールを実行する:
hayabusa.exe csv-timeline -d .\hayabusa-sample-evtx -r .\rules\hayabusa\sysmon -o results.csv
  • Sigmaルールのみを実行する:
hayabusa.exe csv-timeline -d .\hayabusa-sample-evtx -r .\rules\sigma -o results.csv
  • 廃棄(deprecated)されたルール(statusdeprecatedになっているルール)とノイジールール(.\rules\config\noisy_rules.txtにルールIDが書かれているルール)を有効にする:

注意: 最近、廃止されたルールはSigmaリポジトリで別のディレクトリに置かれるようになり、Hayabusaではもうデフォルトでは含まれないようになりました。 従って、廃止されたルールを有効にする必要はないでしょう。

hayabusa.exe csv-timeline -d .\hayabusa-sample-evtx --enable-noisy-rules --enable-deprecated-rules -o results.csv
  • ログオン情報を分析するルールのみを実行し、UTCタイムゾーンで出力する:
hayabusa.exe csv-timeline -d .\hayabusa-sample-evtx -r .\rules\hayabusa\builtin\Security\LogonLogoff\Logon -U -o results.csv
  • 起動中のWindows端末上で実行し(Administrator権限が必要)、アラート(悪意のある可能性のある動作)のみを検知する:
hayabusa.exe csv-timeline -l -m low
  • 詳細なメッセージを出力する(処理に時間がかかるファイル、パースエラー等を特定するのに便利):
hayabusa.exe csv-timeline -d .\hayabusa-sample-evtx -v
  • Verbose出力の例:

ルールファイルの読み込み:

Loaded rule: rules/sigma/builtin/deprecated/proc_creation_win_susp_run_folder.yml
Loaded rule: rules/sigma/builtin/deprecated/proc_creation_win_execution_mssql_xp_cmdshell_stored_procedure.yml
Loaded rule: rules/sigma/builtin/deprecated/proc_creation_win_susp_squirrel_lolbin.yml
Loaded rule: rules/sigma/builtin/win_alert_mimikatz_keywords.yml

スキャン中のエラー:

[ERROR] Failed to parse event file.
EventFile: ../logs/Microsoft-Rdms-UI%4Operational.evtx
Error: Failed to parse record number 58471

[ERROR] Failed to parse event file.
EventFile: ../logs/Microsoft-Rdms-UI%4Operational.evtx
Error: Failed to parse record number 58470

[ERROR] Failed to parse event file.
EventFile: ../logs/Microsoft-Windows-AppxPackaging%4Operational.evtx
Error: An error occurred while trying to serialize binary xml to output.
  • 結果をTimesketchにインポートできるCSV形式に保存する:
hayabusa.exe csv-timeline -d ../hayabusa-sample-evtx --RFC-3339 -o timesketch-import.csv -p timesketch -U
  • エラーログの出力をさせないようにする: デフォルトでは、Hayabusaはエラーメッセージをエラーログに保存します。 エラーメッセージを保存したくない場合は、-Qを追加してください。

アドバンス - GeoIPのログエンリッチメント

無償のGeoLite2のジオロケーションデータで、SrcIP(ソースIPアドレス)フィールドとTgtIP(ターゲットIPアドレス)フィールドにGeoIP(ASN組織、都市、国)情報を追加することができます。

手順:

  1. まずMaxMindのアカウントをこちらで登録してください。
  2. ダウンロードページから3つの.mmdbファイルをダウンロードし、ディレクトリに保存してください。ファイル名は、GeoLite2-ASN.mmdbGeoLite2-City.mmdbGeoLite2-Country.mmdbであることをご確認ください。
  3. csv-timelineまたはjson-timelineコマンドを実行する際には、-Gオプションの後にMaxMindデータベースのあるディレクトリを追加してください。
  • csv-timelineを使用すると、次の6つのカラムが追加で出力されます: SrcASNSrcCitySrcCountryTgtASNTgtCityTgtCountry

  • json-timelineを使用すると、同じSrcASNSrcCitySrcCountryTgtASNTgtCityTgtCountryフィールドがDetailsオブジェクトに追加されますが、情報を含む場合のみとなります。

  • SrcIPまたはTgtIPがlocalhost (127.0.0.1::1等々)の場合、SrcASNまたはTgtASNは、Localとして出力されます。

  • SrcIPまたはTgtIPがプライベートIPアドレス (10.0.0.0/8fe80::/10等々)の場合、SrcASNまたはTgtASNは、Privateとして出力されます。

GeoIPの設定ファイル

GeoIPデータベースで検索される送信元と送信先のIPアドレスを含むフィールド名は、rules/config/geoip_field_mapping.yamlで定義されています。 必要であれば、このリストに追加することができます。 また、このファイルには、どのイベントからIPアドレス情報を抽出するかを決定するフィルタセクションもあります。

GeoIPデータベースの自動アップデート

MaxMind GeoIP データベースは、2 週間ごとに更新されます。 これらのデータベースを自動的に更新するために、こちらからMaxMindのgeoipupdateのツールをインストールすることができます。

macOSでの手順:

  1. brew install geoipupdate
  2. /usr/local/etc/GeoIP.confを編集する: MaxMindのウェブサイトにログインした後に作成したAccountIDLicenseKeyを入れる。EditionIDsの行に、EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Countryとあることを確認する。
  3. geoipupdateを実行する。
  4. GeoIP情報を追加する場合は、-G /usr/local/var/GeoIPを追加する。

Windowsでの手順:

  1. ReleasesページからWindowsバイナリの最新版(例: geoipupdate_4.10.0_windows_amd64.zip)をダウンロードする。
  2. \ProgramData\MaxMind/GeoIPUpdate\GeoIP.confを編集する: MaxMindのウェブサイトにログインした後に作成したAccountIDLicenseKeyを入れる。EditionIDsの行に、EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Countryとあることを確認する。
  3. geoipupdateを実行する。

csv-timelineコマンドの設定ファイル

./rules/config/channel_abbreviations.txt: チャンネル名とその略称のマッピング。

./rules/config/default_details.txt: ルールにdetails:行が指定されていない場合に、どのようなデフォルトのフィールド情報 (%Details%フィールド)を出力するかを設定するファイルです。 プロバイダー名とイベントIDを元に作成されます。

./rules/config/eventkey_alias.txt: このファイルには、フィールドの短い名前のエイリアスと、元の長いフィールド名のマッピングがあります。

例:

InstanceID,Event.UserData.UMDFHostDeviceArrivalBegin.InstanceId
IntegrityLevel,Event.EventData.IntegrityLevel
IpAddress,Event.EventData.IpAddress

ここでフィールドが定義されていない場合、Hayabusaは自動的にEvent.EventDataにあるフィールドを使用してみます。

./rules/config/exclude_rules.txt: このファイルには、使用から除外されるルールIDのリストがあります。 通常は、あるルールが別のルールに置き換わったか、そもそもそのルールが使用できないことが原因です。 ファイアウォールやIDSと同様に、シグネチャベースのツールは、自身の環境に合わせてチューニングする必要があるため、特定のルールを恒久的または一時的に除外する必要があるかもしれません。 ./rules/config/exclude_rules.txtにルールID (例:4fe151c2-ecf9-4fae-95ae-b88ec9c2fca6)を追加すると、不要なルールや使用できないルールを無視できます。

./rules/config/noisy_rules.txt: このファイルには、デフォルトでは無効になっているルールのIDが入っています。-n, --enable-noisy-rulesオプションでノイジールールを有効にできます。 これらのルールは通常、性質上ノイズが多いか、誤検出があるためです。

./rules/config/target_event_IDs.txt: EIDフィルターが有効な場合、このファイルで指定されたイベントIDのみがスキャンされます。 デフォルトでは、Hayabusaはすべてのイベントをスキャンしますが、パフォーマンスを向上させたい場合は、-E, --EID-filterオプションを使用してください。 これにより、通常10〜25%の速度向上があります。

json-timelineコマンド

json-timelineコマンドは、JSONまたはJSONL形式でイベントのフォレンジックタイムラインを作成します。 JSONLへの出力は、JSONよりも高速でファイルサイズも小さいので、結果をElastic Stack等の他のツールにインポートするだけなら、JSONLが理想です。 テキストエディタで手動で解析する場合は、JSONの方が良いでしょう。 CSV出力は小さいタイムライン(通常2GB以下)をLibreOfficeやTimeline Explorerのようなツールにインポートするのに適しています。 JSONは、jq等のツールでデータ(大きな結果ファイルを含む)をより詳細に分析する場合に最適です。Detailsフィールドが分離されているので、分析が容易になるからです。 (CSV出力では、すべてのイベントログのフィールドが1つの大きなDetailsカラムに入っており、データのソートなどが難しくなっています。)

Usage: json-timeline <INPUT> [OPTIONS]

Input:
  -d, --directory <DIR>    .evtxファイルを持つディレクトリのパス
  -f, --file <FILE>        1つの.evtxファイルに対して解析を行う
  -l, --live-analysis      ローカル端末のC:\Windows\System32\winevt\Logsフォルダを解析する
  -J, --JSON-input         .evtxファイルの代わりにJSON形式のログファイル(.jsonまたは.jsonl)をスキャンする
  -x, --recover-records    空ページからevtxレコードをカービングする (デフォルト: 無効)

Filtering:
  -E, --EID-filter                      速度を上げるため主なEIDだけスキャンする (コンフィグファイル: ./rules/config/target_event_IDs.txt)
  -D, --enable-deprecated-rules         ステータスがdeprecatedのルールを有効にする
  -n, --enable-noisy-rules              Noisyルールを有効にする
  -u, --enable-unsupported-rules        ステータスがunsupportedのルールを有効にする
  -e, --exact-level <LEVEL>             特定のレベルだけスキャンする (informational, low, medium, high, critical)
      --exclude-category <CATEGORY...>  特定のlogsourceカテゴリを持つルールをロードしない (例: process_creation,pipe_created)
      --exclude-computer <COMPUTER...>  特定のコンピュータ名をスキャンしない (例: ComputerA) (例: ComputerA,ComputerB)
      --exclude-eid <EID...>            高速化のために特定のEIDをスキャンしない (例: 1) (例: 1,4688)
      --exclude-status <STATUS...>      読み込み対象外とするルール内でのステータス (例1: experimental) (例2: stable,test)
      --exclude-tag <TAG...>            特定のタグを持つルールをロードしない (例: sysmon)
      --include-category <CATEGORY...>  特定のlogsourceカテゴリを持つルールのみをロードする (例: process_creation,pipe_created)
      --include-computer <COMPUTER...>  特定のコンピュータ名のみをスキャンする (例: ComputerA) (例: ComputerA,ComputerB)
      --include-eid <EID...>            指定したEIDのみをスキャンして高速化する (例: 1) (例: 1,4688)
      --include-tag <TAG...>            特定のタグを持つルールのみをロードする (例1: attack.execution,attack.discovery) (例2: wmi)
  -m, --min-level <LEVEL>               結果出力をするルールの最低レベル (デフォルト: informational)
  -P, --proven-rules                    実績のあるルールだけでスキャンし、高速化する (./rules/config/proven_rules.txt)
      --timeline-end <DATE>             解析対象とするイベントログの終了時刻 (例: "2022-02-22 23:59:59 +09:00")
      --timeline-offset <OFFSET>        オフセットに基づく最近のイベントのスキャン (例: 1y, 3M, 30d, 24h, 30m)
      --timeline-start <DATE>           解析対象とするイベントログの開始時刻 (例: "2020-02-22 00:00:00 +09:00")

Output:
  -G, --GeoIP <MAXMIND-DB-DIR>       IPアドレスのGeoIP(ASN、都市、国)情報を追加する
  -H, --HTML-report <FILE>           HTML形式で詳細な結果を出力する (例: results.html)
  -L, --JSONL-output                 タイムラインをJSONL形式で保存する (例: -L -o results.jsonl)
  -F, --no-field-data-mapping        フィールドデータのマッピングを無効にする
  -o, --output <FILE>                タイムラインを保存する (例: results.csv)
  -p, --profile <PROFILE>            利用する出力プロファイル名を指定する
  -R, --remove-duplicate-data        重複したフィールドデータは「DUP」に置き換えられる (ファイルサイズが約10〜15%削減される)
  -X, --remove-duplicate-detections  重複した検知項目を削除する (デフォルト: 無効)

Display Settings:
      --no-color            カラーで出力しない
  -N, --no-summary          結果概要を出力しない (多少速くなる)
  -q, --quiet               Quietモード: 起動バナーを表示しない
  -v, --verbose             詳細な情報を出力する
  -T, --visualize-timeline  検知頻度タイムラインを出力する(ターミナルはUnicodeに対応する必要がある)

General Options:
  -C, --clobber                          結果ファイルを上書きする
  -Q, --quiet-errors                     Quiet errorsモード: エラーログを保存しない
  -r, --rules <DIR/FILE>                 ルールファイルまたはルールファイルを持つディレクトリ (デフォルト: ./rules)
  -c, --rules-config <DIR>               ルールフォルダのコンフィグディレクトリ (デフォルト: ./rules/config)
      --target-file-ext <FILE-EXT...>    evtx以外の拡張子を解析対象に追加する。 (例1: evtx_data 例2:evtx1,evtx2)
  -t, --threads <NUMBER>                 スレッド数 (デフォルト: パフォーマンスに最適な数値)

Time Format:
      --European-time     ヨーロッパ形式で日付と時刻を出力する (例: 22-02-2022 22:00:00.123 +02:00)
      --ISO-8601          ISO-8601形式で日付と時刻を出力する (例: 2022-02-22T10:10:10.1234567Z) (UTC時刻)
      --RFC-2822          RFC 2822形式で日付と時刻を出力する (例: Fri, 22 Feb 2022 22:00:00 -0600)
      --RFC-3339          RFC 3339形式で日付と時刻を出力する (例: 2022-02-22 22:00:00.123456-06:00)
      --US-military-time  24時間制(ミリタリータイム)のアメリカ形式で日付と時刻を出力する (例: 02-22-2022 22:00:00.123 -06:00)
      --US-time           アメリカ形式で日付と時刻を出力する (例: 02-22-2022 10:00:00.123 PM -06:00)
  -U, --UTC               UTC形式で日付と時刻を出力する (デフォルト: 現地時間)

json-timelineコマンドの使用例と設定ファイル

json-timelineのオプションと設定ファイルは、csv-timelineと同じですが、JSONL形式で出力するための-L, --JSONL-outputオプションが1つ追加されています。

level-tuningコマンド

level-tuningコマンドを使用すると、環境に応じてリスクレベルを上げたり下げたりして、ルールのアラートレベルを調整できます。

Usage: level-tuning [OPTIONS]

Display Settings:
      --no-color      カラーで出力しない
  -q, --quiet         Quietモード: 起動バナーを表示しない

General Options:
  -f, --file <FILE>   ルールlevelのチューニング (デフォルト: ./rules/config/level_tuning.txt)

level-tuningコマンドの使用例

  • 通常使用: hayabusa.exe level-tuning
  • カスタム設定ファイルに基づくルールのアラートレベルの調整: hayabusa.exe level-tuning -f my_level_tuning.txt

level-tuningの設定ファイル

HayabubsaとSigmaのルール作成者は、アラートのリスクレベルを判定してルールを作成します。 しかし、実際のリスクレベルは環境に応じて異なる場合があります。 ./rules/config/level_tuning.txtにルールを追加して hayabusa.exe level-tuningを実行すると、ルールファイル内のlevel行が更新され、リスクレベルを調整することができます。 ルールファイルが直接更新されますので、ご注意ください。

注意: update-rulesを実行するたびに、アラートレベルが元の設定に上書きされるので、レベルを変更したい場合は、update-rulesを実行した後に、level-tuningコマンドも実行する必要があります。

./rules/config/level_tuning.txtの一例:

id,new_level
00000000-0000-0000-0000-000000000000,informational # レベルチューニングのサンプル

この場合、ルールディレクトリ内のid00000000-0000-0000000000のルールのアラートlevelが、informationalに書き換えられます。 設定可能なレベルは、criticalhighmediumlowinformationalです。

list-profilesコマンド

Usage: list-profiles [OPTIONS]

Display Settings:
      --no-color   カラーで出力しない
  -q, --quiet      Quietモード: 起動バナーを表示しない

set-default-profileコマンド

Usage: set-default-profile [OPTIONS]

Display Settings:
      --no-color           カラーで出力しない
  -q, --quiet              Quietモード: 起動バナーを表示しない

General Options:
  -p, --profile <PROFILE>  利用する出力プロファイル名を指定する

set-default-profileコマンドの使用例

  • デフォルトプロファイルをminimalに設定する: hayabusa.exe set-default-profile minimal
  • デフォルトプロファイルをsuper-verboseに設定する: hayabusa.exe set-default-profile super-verbose

update-rulesコマンド

update-rulesコマンドは、rulesフォルダをHayabusaルールのGitHubリポジトリと同期し、ルールと設定ファイルを更新します。

Usage: update-rules [OPTIONS]

Display Settings:
      --no-color  カラーで出力しない
  -q, --quiet     Quietモード: 起動バナーを表示しない

General Options:
  -r, --rules <DIR/FILE>  ルールファイルまたはルールファイルを持つディレクトリ (デフォルト: ./rules)

update-rulesコマンドの使用例

普段は次のように実行します: hayabusa.exe update-rules

タイムライン出力

出力プロファイル

Hayabusaのconfig/profiles.yaml設定ファイルでは、5つのプロファイルが定義されています:

  1. minimal
  2. standard (デフォルト)
  3. verbose
  4. all-field-info
  5. all-field-info-verbose
  6. super-verbose
  7. timesketch-minimal
  8. timesketch-verbose

このファイルを編集することで、簡単に独自のプロファイルをカスタマイズしたり、追加したりすることができます。 set-default-profile --profile <profile>コマンドでデフォルトのプロファイルを変更することもできます。 利用可能なプロファイルとそのフィールド情報を表示するには、list-profilesコマンドを使用してください。

1. minimalプロファイルの出力

%Timestamp%, %Computer%, %Channel%, %EventID%, %Level%, %RecordID%, %RuleTitle%, %Details%

2. standardプロファイルの出力

%Timestamp%, %Computer%, %Channel%, %EventID%, %Level%, %RecordID%, %RuleTitle%, %Details%, %ExtraFieldInfo%

3. verboseプロファイルの出力

%Timestamp%, %Computer%, %Channel%, %EventID%, %Level%, %MitreTactics%, %MitreTags%, %OtherTags%, %RecordID%, %RuleTitle%, %Details%, %ExtraFieldInfo%, %RuleFile%, %EvtxFile%

4. all-field-infoプロファイルの出力

最小限のdetails情報を出力する代わりに、イベントにあるすべてのEventDataフィールド情報(%AllFieldInfo%)が出力されます。フィールド名は元々のフィールド名になります。

%Timestamp%, %Computer%, %Channel%, %EventID%, %Level%, %RecordID%, %RuleTitle%, %AllFieldInfo%, %RuleFile%, %EvtxFile%

5. all-field-info-verboseプロファイルの出力

%Timestamp%, %Computer%, %Channel%, %EventID%, %Level%, %MitreTactics%, %MitreTags%, %OtherTags%, %RecordID%, %RuleTitle%, %AllFieldInfo%, %RuleFile%, %EvtxFile%

6. super-verboseプロファイルの出力

%Timestamp%, %Computer%, %Channel%, %EventID%, %Level%, %RuleTitle%, %RuleAuthor%, %RuleModifiedDate%, %Status%, %RecordID%, %Details%, %ExtraFieldInfo%, %MitreTactics%, %MitreTags%, %OtherTags%, %Provider%, %RuleCreationDate%, %RuleFile%, %EvtxFile%

7. timesketch-minimalプロファイルの出力

Timesketchにインポートできるプロファイル。

%Timestamp%, hayabusa, %RuleTitle%, %Computer%, %Channel%, %EventID%, %Level%, %MitreTactics%, %MitreTags%, %OtherTags%, %RecordID%, %Details%, %RuleFile%, %EvtxFile%

8. timesketch-verboseプロファイルの出力

%Timestamp%, hayabusa, %RuleTitle%, %Computer%, %Channel%, %EventID%, %Level%, %MitreTactics%, %MitreTags%, %OtherTags%, %RecordID%, %Details%, %ExtraFieldInfo%, %RuleFile%, %EvtxFile%

プロファイルの比較

以下のベンチマークは、2018年製のLenovo P51 (CPU: Xeon 4コア / メモリ: 64GB)上で3GBのEVTXデータに対して3891件のルールを有効にして実施されました。(2023/06/01)

プロファイル 処理時間 結果のファイルサイズ ファイルサイズ増加
minimal 8分50秒 770 MB -30%
standard (デフォルト) 9分00秒 1.1 GB 無し
verbose 9分10秒 1.3 GB +20%
all-field-info 9分3秒 1.2 GB +10%
all-field-info-verbose 9分10秒 1.3 GB +20%
super-verbose 9分12秒 1.5 GB +35%

プロファイルのフィールドエイリアス

ビルトインの出力プロファイルで出力できる情報は以下の通り:

エイリアス名 Hayabusaの出力情報
%AllFieldInfo% すべてのフィールド情報。
%Channel% ログ名。イベントログの<Event><System><EventID>フィールド。
%Computer% イベントログの<Event><System><Computer>フィールド。
%Details% YML検知ルールのdetailsフィールドから来ていますが、このフィールドはHayabusaルールにしかありません。このフィールドはアラートとイベントに関する追加情報を提供し、ログのフィールドから有用なデータを抽出することができます。イベントキーのマッピングが間違っている場合、もしくはフィールドが存在しない場合で抽出ができなかった箇所はn/a (not available)と記載されます。YML検知ルールにdetailsフィールドが存在しない時のdetailsのメッセージを./rules/config/default_details.txtで設定できます。default_details.txtではProvider NameEventIDdetailsの組み合わせで設定することができます。default_details.txt`やYML検知ルールに対応するルールが記載されていない場合はすべてのフィールド情報を出力します。
%ExtraFieldInfo% %Details%で出力されなかったフィールドデータを出力する。
%EventID% イベントログの<Event><System><EventID>フィールド。
%EvtxFile% アラートまたはイベントを起こしたevtxファイルへのパス。
%Level% YML検知ルールのlevelフィールド。(例:informationallowmediumhighcritical)
%MitreTactics% MITRE ATT&CKの戦術 (例: Initial Access、Lateral Movement等々)
%MitreTags% MITRE ATT&CKの戦術以外の情報。attack.g(グループ)、attack.t(技術)、attack.s(ソフトウェア)の情報を出力する。
%OtherTags% YML検知ルールのtagsフィールドからMitreTacticsMitreTags以外のキーワードを出力する。
%Provider% <Event><System><Provider> フィールド内のName属性。
%RecordID% <Event><System><EventRecordID>フィールドのイベントレコードID。
%RuleAuthor% YML検知ルールの author フィールド。
%RuleCreationDate% YML検知ルールの date フィールド。
%RuleFile% アラートまたはイベントを生成した検知ルールのファイル名。
%RuleModifiedDate% YML検知ルールの modified フィールド。
%RuleTitle% YML検知ルールのtitleフィールド。
%Status% YML検知ルールの status フィールド。
%Timestamp% デフォルトではYYYY-MM-DD HH:mm:ss.sss +hh:mm形式になっている。イベントログの<Event><System><TimeCreated SystemTime>フィールドから来ている。デフォルトのタイムゾーンはローカルのタイムゾーンになるが、--UTCオプションでUTCに変更することができる。

その他のプロファイルのフィールドエイリアス

必要であれば、これらのエイリアスを出力プロファイルに追加することもできます:

エイリアス名 Hayabusaの出力情報
%RenderedMessage% WEC機能で転送されたイベントログの<Event><RenderingInfo><Message>フィールド。
%RuleID% YML検知ルールのidフィールド。

注意: これらはビルトインプロファイルには含まれていないので、手動でconfig/default_profile.yamlファイルを編集し、以下の行を追加する必要があります:

Message: "%RenderedMessage%"
RuleID: "%RuleID%"

また、イベントキーエイリアスを定義し、出力することもできます。

Levelの省略

簡潔に出力するためにlevelを以下のように省略し出力しています。

  • crit: critical
  • high: high
  • med : medium
  • low : low
  • info: informational

MITRE ATT&CK戦術の省略

簡潔に出力するためにMITRE ATT&CKの戦術を以下のように省略しています。 ./config/mitre_tactics.txtの設定ファイルで自由に編集できます。

  • Recon : Reconnaissance (偵察)
  • ResDev : Resource Development (リソース開発)
  • InitAccess : Initial Access (初期アクセス)
  • Exec : Execution (実行)
  • Persis : Persistence (永続化)
  • PrivEsc : Privilege Escalation (権限昇格)
  • Evas : Defense Evasion (防御回避)
  • CredAccess : Credential Access (認証情報アクセス)
  • Disc : Discovery (探索)
  • LatMov : Lateral Movement (横展開)
  • Collect : Collection (収集)
  • C2 : Command and Control (遠隔操作)
  • Exfil : Exfiltration (持ち出し)
  • Impact : Impact (影響)

Channel情報の省略

簡潔に出力するためにChannelの表示を以下のように省略しています。 ./rules/config/channel_abbreviations.txtの設定ファイルで自由に編集できます。

  • App : Application
  • AppLocker : Microsoft-Windows-AppLocker/*
  • BitsCli : Microsoft-Windows-Bits-Client/Operational
  • CodeInteg : Microsoft-Windows-CodeIntegrity/Operational
  • Defender : Microsoft-Windows-Windows Defender/Operational
  • DHCP-Svr : Microsoft-Windows-DHCP-Server/Operational
  • DNS-Svr : DNS Server
  • DvrFmwk : Microsoft-Windows-DriverFrameworks-UserMode/Operational
  • Exchange : MSExchange Management
  • Firewall : Microsoft-Windows-Windows Firewall With Advanced Security/Firewall
  • KeyMgtSvc : Key Management Service
  • LDAP-Cli : Microsoft-Windows-LDAP-Client/Debug
  • NTLM Microsoft-Windows-NTLM/Operational
  • OpenSSH : OpenSSH/Operational
  • PrintAdm : Microsoft-Windows-PrintService/Admin
  • PrintOp : Microsoft-Windows-PrintService/Operational
  • PwSh : Microsoft-Windows-PowerShell/Operational
  • PwShClassic : Windows PowerShell
  • RDP-Client : Microsoft-Windows-TerminalServices-RDPClient/Operational
  • Sec : Security
  • SecMitig : Microsoft-Windows-Security-Mitigations/*
  • SmbCliSec : Microsoft-Windows-SmbClient/Security
  • SvcBusCli : Microsoft-ServiceBus-Client
  • Sys : System
  • Sysmon : Microsoft-Windows-Sysmon/Operational
  • TaskSch : Microsoft-Windows-TaskScheduler/Operational
  • WinRM : Microsoft-Windows-WinRM/Operational
  • WMI : Microsoft-Windows-WMI-Activity/Operational

その他の省略

できるだけ簡潔にするために、以下の略語を使用しています:

  • Acct -> Account
  • Addr -> Address
  • Auth -> Authentication
  • Cli -> Client
  • Chan -> Channel
  • Cmd -> Command
  • Cnt -> Count
  • Comp -> Computer
  • Conn -> Connection/Connected
  • Creds -> Credentials
  • Crit -> Critical
  • Disconn -> Disconnection/Disconnected
  • Dir -> Directory
  • Drv -> Driver
  • Dst -> Destination
  • EID -> Event ID
  • Err -> Error
  • Exec -> Execution
  • FW -> Firewall
  • Grp -> Group
  • Img -> Image
  • Inj -> Injection
  • Krb -> Kerberos
  • LID -> Logon ID
  • Med -> Medium
  • Net -> Network
  • Obj -> Object
  • Op -> Operational/Operation
  • Proto -> Protocol
  • PW -> Password
  • Reconn -> Reconnection
  • Req -> Request
  • Rsp -> Response
  • Sess -> Session
  • Sig -> Signature
  • Susp -> Suspicious
  • Src -> Source
  • Svc -> Service
  • Svr -> Server
  • Temp -> Temporary
  • Term -> Termination/Terminated
  • Tkt -> Ticket
  • Tgt -> Target
  • Unkwn -> Unknown
  • Usr -> User
  • Perm -> Permament
  • Pkg -> Package
  • Priv -> Privilege
  • Proc -> Process
  • PID -> Process ID
  • PGUID -> Process GUID (Global Unique ID)
  • Ver -> Version

プログレスバー

プログレス・バーは、複数のevtxファイルに対してのみ機能します。 解析したevtxファイルの数と割合をリアルタイムで表示します。

カラー出力

Hayabusaの結果はlevel毎に文字色が変わります。 ./config/level_color.txtの値を変更することで文字色を変えることができます。形式はlevel名,(6桁のRGBのカラーhex)です。 カラー出力をしないようにしたい場合は--no-colorオプションをご利用ください。

結果のサマリ (Results Summary)

元々のイベント数、検知したイベント数、データ削減の統計、検知数情報、最多検知日、最多検知端末名、最多アラート等の情報がスキャン後に出力されます。

検知頻度タイムライン

-T, --visualize-timelineオプションを使うことで、検知したイベントの数が5以上の時、頻度のタイムライン(スパークライン)を画面に出力します。 マーカーの数は最大10個です。デフォルトのCommand PromptとPowerShell Promptでは文字化けがでるので、Windows TerminalやiTerm2等のターミナルをご利用ください。

Hayabusaルール

Hayabusa検知ルールはSigmaのようなYML形式で記述され、rulesディレクトリに入っています。 https://github.com/Yamato-Security/hayabusa-rulesのレポジトリで管理しているので、ルールのissueやpull requestはhayabusaのレポジトリではなく、ルールレポジトリへお願いします。

ルールの作成方法については、hayabusa-rulesレポジトリのREADME をお読みください。

hayabusa-rulesレポジトリにあるすべてのルールは、rulesフォルダに配置する必要があります。 levelがinformationのルールはイベントとみなされ、low以上はアラートとみなされます。

Hayabusaルールのディレクトリ構造は、2つのディレクトリに分かれています:

  • builtin: Windowsの組み込み機能で生成できるログ。
  • sysmon: sysmonによって生成されるログ。

ルールはさらにログタイプ(例:Security、Systemなど)によってディレクトリに分けられ、次の形式で名前が付けられます。

現在のルールをご確認いただき、新規作成時のテンプレートとして、また検知ロジックの確認用としてご利用ください。

Sigma v.s. Hayabusa(ビルトインSigmaとの互換性のある)ルール

Hayabusaは、logsourceフィールドを内部で処理することを唯一の例外として、Sigmaルールをネイティブにサポートしています。 過検知を減らすため、コンバータで変換した方が良いです。変換のやり方はここで説明されています。 これにより、適切なChannelEventIDが追加され、process_creationのような特定のカテゴリに対してフィールドマッピングが行われます。

殆どのルールはSigmaルールと互換性があるので、Sigmaルールのようにその他のSIEM形式に変換できます。 Hayabusaルールは、Windowsのイベントログ解析専用に設計されており、以下のような利点があります:

  1. ログの有用なフィールドのみから抽出された追加情報を表示するためのdetailsフィールドを追加しています。
  2. Hayabusaルールはすべてサンプルログに対してテストされ、検知することが確認されています。
  3. Sigmaルール仕様にない集計式(例:|equalsfield|endswithfield)の利用。

私たちの知る限り、HayabusaはオープンソースのWindowsイベントログ解析ツールの中でSigmaルールを最も多くサポートしています。

その他のWindowsイベントログ解析ツールおよび関連リソース

Windowsイベントログ設定のススメ

Windows機での悪性な活動を検知する為には、デフォルトのログ設定を改善することが必要です。 どのようなログ設定を有効にする必要があるのか、また、自動的に適切な設定を有効にするためのスクリプトを、別のプロジェクトとして作成しました: https://github.com/Yamato-Security/EnableWindowsLogSettings

以下のサイトを閲覧することもおすすめします。:

Sysmon関係のプロジェクト

フォレンジックに有用な証拠を作り、高い精度で検知をさせるためには、sysmonをインストールする必要があります。以下のサイトを参考に設定することをおすすめします。:

コミュニティによるドキュメンテーション

英語

日本語

貢献

どのような形でも構いませんので、ご協力をお願いします。 プルリクエスト、ルール作成、evtxログのサンプルなどがベストですが、機能リクエスト、バグの通知なども大歓迎です。

少なくとも、私たちのツールを気に入っていただけたなら、GitHubで星を付けて、あなたのサポートを表明してください。

バグの報告

見つけたバグをこちらでご連絡ください。 報告されたバグを喜んで修正します!

Hayabusaルールの問題点(誤検出、バグ等々)を発見された方は、hayabusa-rulesのGitHubのIssuesページにご報告ください。

Sigmaルールの問題点(誤検出、バグ等々)を発見された方は、上流のSigmaHQ GitHubのIssuesページにご報告ください。

ライセンス

HayabusaはGPLv3で公開され、すべてのルールはDetection Rule License (DRL) 1.1で公開されています。

Hayabusaは、MaxMind社が作成したGeoLite2データを使用しており、https://www.maxmind.comから入手可能です。

Twitter

@SecurityYamatoでHayabusa、ルール更新、その他の大和セキュリティツール等々について情報を提供しています。