
macnoise v0.5.0
拡張可能なMacOSシステムテレメトリジェネレータ。
MacNoise
MacNoise は実際の macOS テレメトリを生成します: ネットワーク接続、ファイル書き込み、プロセス生成、plist の変更、TCC プローブなど。EDR、SIEM、またはファイアウォールスタックを実行しているマシンに対して実行し、実際に何が発火するかを確認できます - ベンダーのデータシートが発火すると主張するものではなく。
動機と設計の背景については、リリースブログ記事を参照してください。
クイックスタート
# Build (add build-amd64 / build-arm64 to cross-compile for Darwin, or release for both)
make build
# List available modules
./macnoise list
# Run a single module
./macnoise run net_connect --param target=127.0.0.1 --param port=8080
# Preview without executing
./macnoise run svc_launch_agent --dry-run
# Run all network modules
./macnoise run --category network
# Run a scenario
./macnoise scenario configs/scenarios/edr_validation.yaml
# Emit structured JSONL output
./macnoise run --category file --format jsonl --output /tmp/events.jsonl
テレメトリカテゴリ
| カテゴリ | 説明 | モジュール |
|---|---|---|
network | アウトバウンド接続、DNS、ビーコニング、リスナー、リバースシェル、TLS、データ持ち出し | net_connect, net_listen, net_beacon, net_revshell, net_dns, net_dns_exfil, net_tls, net_exfil |
process | プロセス生成、シグナル送信、dylib インジェクション、ディスカバリ、Gatekeeper バイパス、osascript | proc_spawn, proc_signal, proc_inject, proc_discovery, proc_gatekeeper, proc_osascript |
file | ファイル作成、変更、認証情報ファイルとキーチェーンの読み取り、アーカイブ、隠蔽 | file_create, file_modify, file_browser_creds, file_cred_files, file_keychain_copy, file_archive, file_hide |
tcc | TCC 権限プローブ (FDA、連絡先、キーチェーン、アクセシビリティ、画面収録) | tcc_fda, tcc_contacts, tcc_keychain, tcc_accessibility, tcc_screen_recording |
endpoint_security | ES フレームワークイベントトリガー (.dmg マウントとペイロード実行を含む) | es_file, es_process, es_mount |
service | LaunchAgent/Daemon 永続化、cron、シェルプロファイル、ログイン項目 | svc_launch_agent, svc_launch_daemon, svc_cron, svc_shell_profile, svc_login_item |
plist | Plist の作成と変更 | plist_create, plist_modify |
xpc | XPC サービス列挙 | xpc_enumerate |
evasion | 防御回避: ログ消去、タイムストンピング、履歴削除 | evade_log_clear |
コマンド
macnoise run <module> [--param key=val ...] Run a specific module
macnoise run --category <cat> Run all modules in a category
macnoise run --all Run all modules
macnoise list [--category <cat>] List modules
macnoise info <module> Show module details, params, MITRE
macnoise scenario <file.yaml> Run a YAML scenario
macnoise categories List categories with counts
macnoise version Print version
グローバルフラグ
| フラグ | デフォルト | 説明 |
|---|---|---|
--format | human | 出力形式: human または jsonl |
--output | (なし) | 出力をファイルに書き込む (stdout に加えて) |
--verbose | false | クリーンアップエラーを含む詳細出力 |
--dry-run | false | 実行せずにアクションをプレビュー |
--no-cleanup | false | モジュールのアーティファクトをそのまま残す (下記参照) |
--timeout | 30 | モジュールごとのタイムアウト (秒) |
--audit-log | (なし) | OCSF 1.7.0 監査レコードを JSONL ファイルに書き込む |
--config | (なし) | YAML 設定ファイルからデフォルトを読み込む |
アーティファクトをそのまま残す
デフォルトでは、すべてのモジュールは終了時に自身を元に戻します。これは通常望ましい動作ですが、検知が インストール イベントしか見ないことを意味します。スタックが永続化自体を検知することを検証するには - ~/Library/LaunchAgents に存在する LaunchAgent、cron エントリ、変更されたシェルプロファイル - スキャンが実行される時点でアーティファクトがまだそこに存在している必要があります:
./macnoise run svc_launch_agent --no-cleanup
クリーンアップをスキップする各モジュールは自身の名前を示す行を出力し、監査ログは ok ではなく cleanup_result: skipped を記録するため、永続化を残した実行がクリーンアップした実行と誤認されることはありません。特定のモジュールが何を作成するかを確認するには macnoise info <module> を使用してください。
これらの削除はご自身の責任で行ってください。 フラグなしで同じモジュールを再実行すると、その実行が作成したものだけがクリーンアップされ、以前の --no-cleanup 実行が残したものはクリーンアップされません。
監査ログ
MacNoise は 2 つの別々のストリームを書き込みます。テレメトリイベント - EDR/SIEM が実際に見るもの - は stdout または --output に送られます。2 つ目のオプションのストリームは、MacNoise 自体が何を行ったかを記録します: どのモジュールが実行されたか、前提条件/クリーンアップの結果、MITRE マッピングを OCSF 1.7.0 JSONL で記録します。
./macnoise scenario configs/scenarios/amos_atomic_stealer.yaml --audit-log /tmp/audit.jsonl
すべてのテレメトリイベントは success とともに outcome を持ちます (スキーマ 1.1)。success は MacNoise が機能したかどうかを示し、outcome は試みたアクションに何が起こったかを示します:
outcome | 意味 | 人間向けマーカー |
|---|---|---|
executed | アクションが実行され、モジュールが主張する通りのことを行った | [+] |
denied | アクションは実行されたが、環境がそれを拒否した | [-] |
indeterminate | アクションは実行されたが、何も結論付けられない | [?] |
error | MacNoise 自体がアクションを実行できなかった | [!] |
拒否された TCC プローブや死んだ C2 へのビーコンは、このツールが生成するために存在するテレメトリであるため、これらは success: true のままで、outcome によって区別されます。error のみが success: false を設定します。監査ログでは同じ値が unmapped.outcome に現れます。OCSF の status は拒否されたアクションと壊れたツールを同一に記録するためです。
監査ログは追記モードで開かれるため、複数の実行からのレコードがバッチ分析用に 1 つのファイルに蓄積されます。モジュールを追加していて、新しいイベントタイプがどのように OCSF に分類されるかを知りたい場合は、CONTRIBUTING.md を参照してください。
モジュールリファレンス
モジュールのドキュメントは各カテゴリとともにあります:
| カテゴリ | README |
|---|---|
network | modules/network/README.md |
process | modules/process/README.md |
file | modules/file/README.md |
tcc | modules/tcc/README.md |
endpoint_security | modules/endpoint_security/README.md |
service | modules/service/README.md |
plist | modules/plist/README.md |
xpc | modules/xpc/README.md |
evasion | modules/evasion/README.md |
シナリオ
シナリオはモジュールを順序付けられたシーケンスに連鎖させます - 単一の YAML ファイルで、多段階の侵入パターンを検知に対して再生します。
| ファイル | 説明 |
|---|---|
network_only.yaml | すべてのネットワークモジュール |
edr_validation.yaml | 包括的な EDR 検知カバレッジ |
full_sweep.yaml | すべてのカテゴリ |
lazarus_group.yaml | Lazarus Group: dylib インジェクション、サービスディスカバリ、リバースシェル、plist 永続化 |
amos_atomic_stealer.yaml | AMOS / Atomic Stealer: MaaS インフォスティーラー、Gatekeeper バイパス、キーチェーンダンプ、ZIP 持ち出し、バックドア永続化 |
clickfix.yaml | ClickFix: Terminal に貼り付けられた難読化ワンライナー、base64 デコード、セカンドステージの取得、LaunchAgent 永続化 |
2 つの APT シナリオは、実際に文書化された侵入シーケンスをテクニックごとに追従します - 各 YAML ファイルはそれが構築された実際の脅威インテリジェンスを引用し、すべてのステップにそれが行使する MITRE テクニックを注釈付けしているので、ここでの再説明ではなく、完全な内訳についてはそこから始めてください。
まずドライラン:
./macnoise scenario configs/scenarios/<scenario>.yaml --dry-run
SIEM/EDR と相互参照: 各ステップのコメントは、それがトリガーすべきテクニックを明示しています。実際の実行後に一致するアラートがなければ、それはカバレッジのギャップです。
独自のシナリオを書く:
name: My Custom Scenario
steps:
- module: net_connect
params:
target: "192.168.1.1"
port: "443"
- category: file
params:
base_dir: "/tmp/test"
コントリビューション
新しいモジュールの追加、コードスタイル、および完全な PR プロセスについては CONTRIBUTING.md を参照してください。
リリースは自動化されています - release-please があなたの Conventional Commit PR タイトルから直接新しいバージョンを切り出すので、feat: add net_tls module や fix: correct beacon jitter が PR タイトルと変更履歴エントリの両方になります。
免責事項
MacNoise は、あなたが所有する、またはテストする明示的な書面による許可を持つシステム上での 許可された セキュリティテスト、EDR 検証、および検知エンジニアリングを目的としています。作者は誤用に対して一切の責任を負いません。
AI コードポリシー
AI コードのコントリビューションは問題ありませんが、コードレビューは現在人間主導のプロセスになる予定であり、レビューできるコードの量には限りがあることに留意してください。PR は特定の修正または新しいテレメトリモジュールに限定してください。広範な変更を含む PR はクローズされる可能性が高いです。