アップデート一覧に戻る
UpdatedAug 31, 2026

nightcrawler — Updated!

ローカルAI駆動のレッドチーマーをスマートフォン上で

共有

Nightcrawler

スマートフォン上で完全に動作する自律型ペネトレーションテストエージェント。電話をネットワークに置いて立ち去るだけで、ホストの発見、サービスのマッピング、脆弱性の発見、ペンテストレポートの生成までを、クラウド接続なしで実行します。

 ░█▄░█ █ █▀▀ █░█ ▀█▀ █▀▀ █▀█ ▄▀█ █░█░█ █░░ █▀▀ █▀█
 ░█░▀█ █ █▄█ █▀█ ░█░ █▄▄ █▀▄ █▀█ ▀▄▀▄▀ █▄▄ ██▄ █▀▄  v0.1.0

 AUTONOMOUS MOBILE PENTEST AGENT
 OnePlus 8 · NetHunter · LFM2.5-1.2B · OpenCL GPU

これは何か?

ペネトレーションテスト(ペンテスト)とは、ネットワーク所有者の明示的な許可を得た上で、攻撃をシミュレートしてコンピュータネットワークのセキュリティをテストする手法です。プロのペンテスターは、実際の攻撃者よりも先に脆弱性を見つけるために雇われます。

Nightcrawlerはこのプロセスを電話上で自動化します。電話のGPU上でローカルに動作する小型AIモデル(LFM2.5-1.2B-Instruct-Heretic、12億パラメータ)を使用して、次に何をするか(どのホストを調査するか、どのツールを使うか、何を探すか)を決定します。インターネット接続やクラウドAPIは不要です。

デモ

▶️ InstagramでNightcrawlerの動作を見る

仕組み

  1. WiFi侵入(オプション)— WiFiなしで設置された場合、外部USB WiFiアダプタを使用してWPA2ネットワークを自律的にクラックできます
  2. 偵察 — ステルススキャンを使用してネットワーク上のデバイスを発見
  3. 列挙 — 発見したサービス(Webサーバー、ファイル共有、SSH、DNSなど)を調査
  4. 悪用 — 既知の脆弱性とデフォルト認証情報をテスト
  5. レポート作成 — 調査結果と修復アドバイスを含む構造化されたペンテストレポートを生成

このエージェントは忍耐強い人間のペンテスターのように動作します — ホスト間をローテーションし、ターンごとに小さなアクションを1つ実行し、数時間かけて徐々に知識を構築します。これにより、すべてのホストを一度に攻撃する従来の脆弱性スキャナーよりもはるかに検出が困難です。

主要な概念

用語意味
ドロップボックスターゲットネットワーク上に残され、自律的にテストを実行するデバイス
スコープテストを許可されたネットワーク/ホストのセット
交戦規則(ROE)何が許可されているかを指定する法的文書
ステルスネットワーク監視(IDS/IPS)による検出を回避する技術
MCPModel Context Protocol — AIツール使用のための標準インターフェース
C2Command and Control — エージェントの監視と操作のためのWebダッシュボード

アーキテクチャ

┌──────────────────────────────────────────────────────────┐
│                   電話 (OnePlus 8)                        │
│                                                           │
│  ┌─────────────┐     ┌──────────────────┐                │
│  │  LFM2.5     │     │  エージェントループ │                │
│  │  1.2Bモデル  │◄───►│  (main.py)       │                │
│  │  GPU上      │     │  次に何をするか     │                │
│  │  (:8080)    │     │  を決定           │                │
│  └─────────────┘     └────────┬─────────┘                │
│                               │                           │
│                      ┌────────▼─────────┐                │
│                      │  スコーププロキシ  │  ← 安全レイヤー  │
│                      │  実行前にすべての  │    スコープ外の   │
│                      │  コマンドを検証   │    アクションを   │
│                      │                  │    ブロック      │
│                      └────────┬─────────┘                │
│                               │                           │
│                      ┌────────▼─────────┐                │
│                      │  Kali MCPサーバー │  ← 実際のコマンド │
│                      │  nmap, curl,     │    を実行        │
│                      │  smbclient, ...  │                │
│                      └──────────────────┘                │
│                                                           │
│  ┌──────────────────┐  ┌──────────────────┐              │
│  │  Webダッシュボード │  │  SQLite DB       │              │
│  │  (:8888)         │  │  ホスト、脆弱性、   │              │
│  │  監視と操作       │  │  認証情報、コマンド │              │
│  └──────────────────┘  └──────────────────┘              │
└──────────────────────────────────────────────────────────┘

完全なシステム設計については、docs/ARCHITECTURE.mdを参照してください。

機能

  • 完全自律型 — 運用中に人間の介入は不要
  • 100%ローカル推論 — AIは電話のGPU上で動作し、クラウドは不要
  • スコープ強制 — 2層防御でスコープ外のアクションを防止
  • ステルス優先 — 低速スキャンレート、ホストローテーション、カバートラフィック、nmap -T2のみ
  • 27のエクスプロイトプレイブック — 自動実行される多段階攻撃チェーン
  • 24,956件のCVEデータベース — バージョン認識型の脆弱性マッチング
  • Webダッシュボード — リアルタイム監視、ホスト管理、C2コントロール
  • WiFi侵入モード — USBアダプタによる自律的WPA2クラッキング(Pwnagotchiに着想を得た)
  • パッシブディスカバリ — mDNS/NBNS/DHCP/ARPブロードキャストのバックグラウンドキャプチャ
  • マルチネットワーク — ネットワークごとにデータを分離、MACキー付きホストでDHCP変更に耐性
  • 自己修復 — ガベージ検出、コンテキストリセット、ウォッチドッグ、スタック検出
  • トレーニングキャプチャ — 将来のモデルファインチューニングのための成功したインタラクションを記録
  • レポート生成 — 脆弱性、エクスプロイトチェーン、修復策を含むダウンロード可能なペンテストレポート

完全な機能リファレンスについてはdocs/FEATURES.mdを参照してください。

ハードウェア

必須

  • AndroidスマートフォンKali NetHunter搭載(OnePlus 8、Snapdragon 865でテスト済み)
  • ルートアクセスMagisk経由
  • 12GB以上のRAM(モデルは約1.3GB、Androidは約4GB、残りはツール用)

オプション

  • USB WiFiアダプタ — オフラインWiFi侵入モード用(Ralink RT3572推奨)
  • カスタムカーネル — モニターモード用のMAC80211搭載(ビルドガイド
  • NVIDIA AGX — Tailscale経由でより大きなモデルにオフロードするため

GPUパフォーマンス

すべての推論はAdreno 650 GPU上のOpenCL経由で実行:

モデル量子化プロンプト速度生成速度
LFM2.5-1.2B-Instruct-Heretic(本番)Q8_0115 tok/s13 tok/s
Qwen3.5-0.8BQ8_030.5 tok/s6.3 tok/s
Qwen3.5-4BQ4_010.1 tok/s2.0 tok/s

注記: Androidはバッテリー駆動時にGPUをスロットルします(6倍の減速)。Nightcrawlerには、最大パフォーマンスを強制し、バッテリー残量≤15%で自動スロットルするGPUガバナーデーモンが含まれています。

クイックスタート

# 1. インストール(Kali NetHunter chroot内)
bash INSTALL.sh

# 2. llama-serverの起動を待つ(起動後約5分)
curl -s http://127.0.0.1:8080/health  # {"status":"ok"}が返るはず

# 3. すべてのサービスを開始
bash scripts/run-36h.sh

# 4. Webダッシュボードを開く(Tailscaleネットワーク上の任意のデバイスから)
# https://<your-tailscale-hostname>:8888

ドライラン(実際のコマンドは実行されません)

NC_DRY_RUN=1 python3 main.py

これによりモックKaliサーバーが使用され、実際のネットワークコマンドを実行せずにエージェントループをテストできます。

手動起動(tmuxランチャーを使用しない場合)

kali-server-mcp --port 5000 &
python3 scope_proxy.py --config config.yaml --port 8800 --upstream http://127.0.0.1:5000 &
bash scripts/webui-daemon.sh start
python3 main.py &

設定

デプロイ前にconfig.yamlを編集:

mission:
  id: "CLIENT-YYYY-XXX"           # エンゲージメントID
  scope:
    networks: ["auto"]             # "auto" = 起動時にwlan0から検出
    excluded_hosts: ["auto"]       # "auto" = ゲートウェイ + 自身のIP
    excluded_ports: [502, 503]     # 絶対に触れないSCADA/ICSポート
  authorization: "ROE-YYYY-XXX.pdf"
  max_runtime_hours: 0             # 0 = 制限なし

model:
  local:
    ctx_size: 8192
    port: 8080

動的スコープ検出により、ネットワーク間を移動する際の設定変更は不要です — エージェントは起動時にwlan0から現在のサブネットを読み取ります。

プロジェクト構造

nightcrawler/
├── main.py                  # エントリーポイント
├── config.yaml              # ミッションスコープ + モデル設定
├── scope_proxy.py           # スコープ強制プロキシ
├── INSTALL.sh               # インストーラー
│
├── agent/                   # コアエージェントロジック
│   ├── loop.py              # 決定ループ + エラーリカバリ
│   ├── planner.py           # フェーズ状態機械(偵察→悪用)
│   ├── llm_client.py        # LLM APIクライアント(llama.cpp / リモート)
│   ├── db.py                # SQLiteバックエンド(ホスト、脆弱性、認証情報)
│   ├── host_memory.py       # ホストごとの観察 + 自動タグ付け
│   ├── cve_db.py            # 24,956件のCVEデータベース
│   ├── attack_planner.py    # 悪用フェーズの戦略的指示
│   ├── output_parser.py     # ツール出力から構造化データを抽出
│   ├── offline_manager.py   # WiFi侵入パイプライン状態機械
│   ├── net_detect.py        # wlan0からネットワークを自動検出
│   ├── cover_traffic.py     # 現実的なWebトラフィックとのステルスブレンド
│   ├── passive_capture.py   # ブロードキャストトラフィックのバックグラウンドtcpdump
│   └── ...
│
├── proxy/                   # スコープ強制コンポーネント
│   ├── scope.py             # IP/ポート/ホストの検証
│   ├── rate_limiter.py      # コマンドレート制限 + ジッター
│   └── command_filter.py    # 破壊的コマンドのブロックリスト
│
├── webui/                   # Webダッシュボード(Flask)
│   ├── server.py            # API + ステルスミドルウェア
│   └── templates/index.html # ダッシュボードUI
│
├── data/                    # 静的データファイル
│   ├── cve_exploits.json    # CVE→エクスプロイトコマンドマッピング
│   └── playbooks.json       # 27の多段階攻撃プレイブック
│
├── prompts/                 # LLMプロンプトテンプレート(ホットリロード可能)
├── scripts/                 # 運用スクリプト(開始、停止、ウォッチドッグ)
├── tests/                   # テストスイート(API、UI、オフラインモード)
├── kernels/                 # WiFiドライバーモジュール + カーネルドキュメント
├── simulation/              # ドライランモックサーバー
├── docs/                    # アーキテクチャ、GPUセットアップ、機能
├── logs/                    # ランタイムデータ(gitignore対象)
└── models/                  # モデルファイル(gitignore対象)

エージェントの思考プロセス

エージェントはシンプルだが効果的なループを使用します:

  1. ターゲットを選択 — 重み付きランダム選択(70%は既知ポートのあるホスト、30%は新規ディスカバリ)
  2. コンテキストを構築 — ホストメモリ、ネットワーク観察、フェーズガイダンスをプロンプトに注入
  3. LLMに問い合わせ — モデルがREASONING: ... COMMAND: ...を生成
  4. 検証 — スコーププロキシがコマンドがスコープ内で破壊的でないことを確認
  5. 実行 — Kali MCPサーバー経由でコマンドを実行
  6. 学習 — 出力パーサーが発見事項を抽出し、ホストメモリを更新
  7. コンテキストをリセット — 会話をクリアし、永続メモリを保持して繰り返す

1.2Bモデルのコマンド成功率は約50%(サイズに固有の特性)です。エージェントは以下で補償します:

  • ガベージ検出 — 多様なfew-shot例による5連続リセット
  • 重複検出 — ツール/ターゲットの多様化を強制
  • 時間ベースのスタック検出 — 5分のバックストップでコンテキストリセットを強制
  • 直接プレイブック実行 — 多段階攻撃はLLMを完全にバイパス

Webダッシュボード

:8888のダッシュボードはリアルタイムの監視と制御を提供します:

  • ライブフィード — すべてのコマンド、発見事項、エージェントの決定
  • ホストカード — ポート、サービス、脆弱性を表示するクリック可能なカード
  • ネットワークマップ — インタラクティブなフォース指向グラフ(ドラッグ、ズーム、パン)
  • 脆弱性の詳細 — CVEタグ、エクスプロイトチェーン、修復手順
  • C2コントロール — ホストのスター/ブラックリスト登録、フェーズ強制、一時停止/再開、コマンド注入
  • オフラインモード — アニメーション顔付きのPwnagotchiに着想を得たWiFi攻撃UI

ダッシュボードはステルスフィルタリングされています:nginxヘッダーを偽装し、ターゲットネットワークからの接続には空の404を返します。

テスト結果

複数のネットワークでの72時間以上の自律運用から:

  • ネットワークごとに30以上のホストを発見
  • 2,000以上のコマンドを自律実行
  • 複数のサービスで10以上の脆弱性を発見
  • 6以上のプレイブックを直接実行で実行
  • エージェントメモリは全体を通して35-50MBで安定(リークなし)

貢献

貢献は歓迎します!ガイドラインについてはCONTRIBUTING.mdを参照してください。

支援が必要な分野

  • モデルのファインチューニング — コマンド形式のコンプライアンスを約50%から85%以上に改善
  • 新しいプレイブック — より多くのサービス向けのエクスプロイトチェーンを追加
  • CVEデータベース — 現在の24,956件を超えるカバレッジの拡大
  • アダプタサポート — より多くのUSB WiFiチップセットでのテスト
  • ドキュメント — 異なる電話向けのチュートリアル、セットアップガイド
  • テスト — 特にエッジケース向けのテストカバレッジの拡大

開発環境のセットアップ

# リポジトリをクローン
git clone https://github.com/garagehq/nightcrawler.git
cd nightcrawler

# ドライランモード(実際のコマンドなし、ハードウェア不要)
NC_DRY_RUN=1 python3 main.py

# テストを実行
python3 -m pytest tests/

法的注意事項

このツールは許可されたペネトレーションテスト専用です。 Nightcrawlerを展開する前に、ネットワーク所有者から書面による許可(交戦規則)が必要です。所有していない、またはテスト許可のないネットワークに対する不正使用は違法です。

ライセンス

MIT — 詳細はLICENSEを参照してください。

サポート

このプロジェクトを気に入っていただけたら、コーヒーを一杯ごちそうしてください ☕:

Buy Me A Coffee

buymeacoffee.com/cyrilengmann

カテゴリ