
マルウェアで使用されるプロセスインジェクションとメモリ操作を検出します。RWX領域、シェルコードパターン、APIフック、スレッドハイジャック、プロセスハロウイングを検出します。速度のためにRustで構築されています。CLIおよびTUIインターフェースを含みます。
Ghostは、Rustで書かれたプロセスインジェクション検出ツールです。実行中のプロセスを監視し、コードインジェクション、メモリ操作、その他マルウェアが隠れているために使う怪しい手口を検出しようとします。
基本的なアイデアはシンプルです。プロセスをスキャンし、不審なメモリパターン、フックされた関数、シェルコード、その他改ざんの兆候を探します。Windows、Linux、macOSで動作します(ただし、現在最も完全なサポートはWindowsです)。
検出できる項目の例:
また、検出された動作をMITRE ATT&CKフレームワークにマッピングするため、脅威の文書化やレポート作成に役立ちます。



Rust(1.70以降)が必要です。その後:
cargo build --release
Windowsでは、MSVCビルドツールも必要です。Linuxでは基本的な開発ツール(gccなど)が必要です。macOSではXcodeコマンドラインツールが必要です。
コマンドラインインターフェースと対話型ターミナルUIの2つのインターフェースがあります。
CLI:
# すべてのプロセスをスキャン
cargo run --bin ghost-cli --release
# 特定のプロセスを対象
cargo run --bin ghost-cli --release -- --pid 1234
# 結果をJSONで出力
cargo run --bin ghost-cli --release -- --format json
# 設定ファイルを使用
cargo run --bin ghost-cli --release -- --config ghost.toml
# 継続的監視モード
cargo run --bin ghost-cli --release -- --watch
# カスタム間隔で監視(10秒)
cargo run --bin ghost-cli --release -- --watch --interval 10
TUI:
cargo run --bin ghost-tui --release
TUIは、ライブ統計、検出履歴を備えたダッシュボードを提供し、キーボードショートカット(Tabでビュー切り替え、Qで終了)で操作できます。
GhostはBash、Zsh、Fish、PowerShell、Elvishのタブ補完をサポートしています。
# シェル用の補完を生成
ghost completions bash > /etc/bash_completion.d/ghost
ghost completions zsh > ~/.zfunc/_ghost
ghost completions fish > ~/.config/fish/completions/ghost.fish
# またはインストールスクリプトを使用
./completions/install.sh
詳細なインストール手順については completions/README.md を参照してください。
Ghostはビルド時に有効にできるオプション機能をサポートしています。
# YARAルールスキャン(libyaraが必要)
cargo build --features yara-scanning
# ニューラルML統合(Pythonと学習済みモデルが必要)
cargo build --features neural-ml
# eBPF検出(Linuxのみ、現在はスタブ実装)
cargo build --features ebpf-detection
注:ML機能を使用するには学習済みモデルが必要です。学習手順については ghost_ml/README.md を参照してください。
TOML設定ファイルで動作を調整できます。examples/ghost.toml を出発点として確認してください。特定の検出方法の有効/無効、信頼度しきい値、システムプロセスのスキップ、スキャン間隔の制御が可能です。
設定例:
shellcode_detection = true
hollowing_detection = true
hook_detection = true
confidence_threshold = 0.3
skip_system_processes = true
scan_interval_ms = 2000
デフォルトでは、Ghostは検出ごとに最大10個の指標に制限し、類似した発見を重複排除します。大規模なスキャンでは、出力をさらに削減できます。
コマンドラインオプション:
# サマリーモード - 詳細の代わりに統計情報を出力
ghost-cli --summary
# 検出あたりの指標数を制限
ghost-cli --max-indicators 5
# 悪意のある検出のみを報告
ghost-cli --min-threat-level malicious
# 最小限の出力に組み合わせる
ghost-cli --summary --quiet
設定ファイル:
[output]
verbosity = "minimal" # minimal, normal, verbose
max_indicators_per_detection = 5
min_threat_level = "suspicious"
deduplicate_indicators = true
summary_mode = true
これは、多くのプロセスをスキャンする場合や、出力ファイルが大きくなりすぎる継続的監視を実行する場合に便利です。
監視モードでは、手動でスキャンを実行しなくても、システムを継続的に監視できます。インジェクションの試行をリアルタイムで捉えるのに役立ちます。
# 監視を開始(デフォルト:5秒間隔)
ghost-cli --watch
# カスタム間隔
ghost-cli --watch --interval 10
# 特定のプロセスを監視
ghost-cli --watch --pid 1234
# クワイエットモード - 新しい検出でのみ警告
ghost-cli --watch --quiet
監視モードで実行中、Ghostは:
出力例:
[14:32:15] Scan #1: clean (142 processes, 89ms)
[14:32:20] Scan #2: 2 NEW detections! (2 total, 142 processes, 91ms)
[MALICIOUS] suspicious.exe (PID: 4521) - 87% confidence
[SUSPICIOUS] helper.dll (PID: 2201) - 54% confidence
[14:32:25] Scan #3: 2 known threats (142 processes, 88ms)
ベースラインモードは、システムの現在の状態のスナップショットを取得します。後続のスキャンでこのベースラインと比較して変更を検出できます。既知の問題を再確認することなく、新しい脅威を見つけるのに役立ちます。
# 現在の状態をベースラインとして保存
ghost-cli --save-baseline baseline.json
# 後で:ベースラインと比較
ghost-cli --baseline baseline.json
# 監視モードと組み合わせる
ghost-cli --watch --baseline baseline.json
ベースラインと比較する場合、Ghostは以下を報告します:
出力例:
3 changes from baseline:
New threats (1):
injector.exe (PID: 8821) - Malicious
Escalated threats (1):
helper.dll (PID: 2201): Suspicious -> Malicious
New indicators (1):
svchost.exe (PID: 1024):
- RWX memory region detected
- Shellcode pattern match
変更が検出された場合は終了コード1、クリーンな場合は0です。
Ghostは、脅威が検出されたときにSlack、Discord、または任意のHTTPエンドポイントにリアルタイムアラートを送信できます。SOC統合やスマートフォンへの通知に最適です。
# Slack webhook
ghost-cli --watch --webhook "https://hooks.slack.com/services/XXX/YYY/ZZZ"
# Discord webhook
ghost-cli --watch --webhook "https://discord.com/api/webhooks/123/abc"
# 汎用HTTP POST(JSONペイロード)
ghost-cli --watch --webhook "https://your-siem.example.com/api/alerts"
# 自動検出タイプを上書き
ghost-cli --webhook "https://custom.url" --webhook-type slack
GhostはURLからwebhookタイプを自動検出します:
hooks.slack.com → 添付ファイル付きSlack形式discord.com/api/webhooks → 埋め込み付きDiscord形式Slackアラートには、脅威レベル、信頼度スコア、上位指標を含む色分けされた添付ファイルが含まれます:
🚨 Ghost detected suspicious activity on *prod-server-01*
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚨 suspicious.exe (PID: 4521)
• RWX memory region detected at 0x7ff...
• Shellcode pattern: NOP sled
Threat Level: Malicious | Confidence: 87%
Discordアラートは、同じ情報をクリーンな形式でリッチ埋め込みとして送信します。
汎用webhookはJSONペイロードを送信します:
{
"event": "ghost.detection",
"timestamp": "2024-12-06T14:32:15Z",
"hostname": "prod-server-01",
"process_name": "suspicious.exe",
"pid": 4521,
"threat_level": "Malicious",
"confidence": 0.87,
"indicators": ["RWX memory region detected", "..."]
}
Ghostが怪しいものを発見すると、脅威レベルを割り当てます:Clean、Low、Medium、High、Critical。これは、見つかった指標の数とその深刻度に基づいています。
信頼度が高くても、必ずしもマルウェアとは限りません。正当なソフトウェアでもメモリ上で奇妙なことを行う場合があります。必要に応じて判断し、さらに調査してください。
Windows: 完全に機能します。プロセス列挙、メモリ読み取り、フック検出、プロセスハローイング検出、PE検証、スレッド分析がすべて動作します。
Linux: コア機能は動作します。procfs(/proc)を介したプロセス列挙、メモリ読み取り、LD_PRELOAD検出、ptraceベースのインジェクション検出が動作します。eBPFサポートには ebpf-detection 機能フラグが必要で、現在はスタブ実装です。
macOS: 部分的なサポート。mach VM APIを使用したプロセス列挙、メモリ領域列挙、メモリ読み取り、スレッド列挙が動作します。フック検出にはDYLD_INSERT_LIBRARIES検出とインラインフック検出フレームワークが含まれます。
継続的監視に十分な速度になるように設計されています。フルシステムスキャン(200プロセス)は通常5秒未満です。プロセスあたりのメモリ列挙は約50~100msです。検出エンジン自体は分析あたり約5~10ms追加されます。
このツールにはYARAルール統合が含まれています。ルールは rules/ ディレクトリに保存され、Metasploit、Cobalt Strike、一般的なシェルコードパターン、回避技術などの一般的なマルウェアファミリーをカバーしています。独自のルールを追加するには、.yar ファイルをそのフォルダに配置するだけです。
これはユーザー空間ツールであり、以下の制限があります。
詳細は docs/ フォルダにあります:
DETECTION_METHODS.md - 各検出技術の仕組みを説明MITRE_ATTACK_COVERAGE.md - カバーされているATT&CK技法の一覧PERFORMANCE_GUIDE.md - パフォーマンス調整のヒントまた、貢献したい場合は CONTRIBUTING.md、セキュリティポリシーについては SECURITY.md も確認してください。
MIT。LICENSEファイルを参照してください。
このツールは、セキュリティ研究、自身のシステムのテスト、実際の脅威の検出を目的としています。所有していない、またはテストする許可がないシステムでは使用しないでください。責任を持って使用してください。
また、実際のインシデントを調査している場合、マルウェアは分析されていることを検出し、動作が変わったりシャットダウンしたりする可能性があることを覚えておいてください。Ghostはステルス性を高めようとしていますが、高度なマルウェアが気付かないという保証はありません。