
macnoise v0.2.1
拡張可能な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 scenario configs/scenarios/file_flow.yaml --format jsonl --output /tmp/events.jsonl
テレメトリカテゴリ
| カテゴリ | 説明 |
|---|---|
network | TCP 接続、HTTP、リスナー、リバースシェル、DNS、および TLS |
process | 正確な実行、シグナル送信、dylib インジェクション、Gatekeeper バイパス、および osascript |
file | 範囲を限定した探索、リテラル読み取り/コピー、作成、変更、アーカイブ、隠蔽、およびデコイ暗号化 |
tcc | 正確なフルディスクアクセス、連絡先、アクセシビリティ、または画面収録の要件を伴う TCC 権限プローブ |
credential | ネイティブのクレデンシャルストアアクセス |
volume | ディスクイメージの作成とマウントされたボリュームのライフサイクル |
service | Launchd 列挙、LaunchAgent/Daemon 永続化、cron、シェルプロファイル、およびログイン項目 |
plist | Plist の作成と変更 |
evasion | ログ消去、タイムスタンプ改ざん、履歴削除、およびなりすまし |
すべてのモジュール、パラメータ、出力、イベントタイプ、権限、および ATT&CK マッピングについては、生成されたモジュールカタログを参照してください。
コマンド
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> [--input key=val] [--report report.json]
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 設定ファイルからデフォルトを読み込む |
--run-id | 生成される | この実行の相関識別子を設定 |
シナリオのデータフロー
シナリオファイルは version: 1 を使用します。入力とモジュール出力は型付けされており、
後続のステップは文字列補間ではなく明示的なマッピングでそれらを参照します:
version: 1
name: Archive one generated artifact
on_error: stop
inputs:
content:
type: string
required: true
steps:
# Custom modules declare these outputs through OutputSpecs.
- id: create
module: custom_create
params:
content:
input: content
- id: archive
module: custom_archive
params:
source:
output: create.path
outputs:
archive:
output: archive.path
参照できるのは、モジュールによって宣言された出力のみです。ローカルシナリオは
include ステップで再利用できます。インクルードは相対パスで、ルートシナリオディレクトリより上に
遡ることはできず、循環チェックが行われ、8 レベルに制限されています。
MacNoise は実行前に完全なグラフを検証し、実行に 1 つの
プライベートワークスペースを与え、呼び出されたモジュールを逆順でクリーンアップします。
--input content=value で入力を供給し、--report report.json で
バージョン付き実行レポートを取得できます。
アーティファクトをそのまま残す
デフォルトでは、すべてのモジュールは終了時に自身を元に戻します。これは通常望ましい動作ですが、
検知が インストール イベントしか見られないことを意味します。永続化自体をスタックが検知することを
検証するには - ~/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
すべてのテレメトリイベントは、1 つの権威ある outcome と 1 つの型付き subject を持ちます
(スキーマ 2.0)。outcome は MacNoise が試みたアクションに何が起こったかを示し、
subject は関与するファイル、プロセス、ネットワークエンドポイント、サービス、またはリソースを
識別します:
outcome | 意味 | 人間向けマーカー |
|---|---|---|
executed | アクションが実行され、モジュールが主張する通りのことを行った | [+] |
denied | アクションが実行され、環境がそれを拒否した | [-] |
indeterminate | アクションが実行されたが、何も結論付けられない | [?] |
error | MacNoise 自体がアクションを実行できなかった | [!] |
拒否された TCC プローブや死んだ C2 へのビーコンは、このツールが生成するために存在する
テレメトリであるため、MacNoise 自体が失敗したことを意味する error とは区別されます。
監査ログは同じ値を unmapped.outcome に記録します。機密として宣言されたパラメータは、
管理された監査レコードおよびコマンドライン識別情報において [REDACTED] に置き換えられます。
監査ログは追記モードで開かれるため、複数の実行からのレコードがバッチ分析用に 1 つのファイルに 蓄積されます。モジュールを追加していて、新しいイベントタイプがどのように OCSF に分類されるかを 知りたい場合は、CONTRIBUTING.md を参照してください。
モジュールリファレンス
生成されたモジュールカタログは、名前、パラメータ、出力、イベントタイプ、 権限、および ATT&CK マッピングの権威あるリファレンスです。カテゴリノートはプラットフォームの 動作と運用上の境界を説明します:
| カテゴリ | README |
|---|---|
network | modules/network/README.md |
process | modules/process/README.md |
file | modules/file/README.md |
tcc | modules/tcc/README.md |
credential | modules/credential/README.md |
volume | modules/volume/README.md |
service | modules/service/README.md |
plist | modules/plist/README.md |
evasion | modules/evasion/README.md |
シナリオ
シナリオはモジュールを順序付けられたシーケンスに連鎖させます - 単一の YAML ファイルで、 多段階の侵入パターンをあなたの検知に対して再生します。