
出典付きの脆弱性トリアージ。ローカルに構築したコーパス(NVD/KEV/EPSS、ExploitDB、nmap script.db)からCVEを解決し、実行時にターゲットへ与える影響別に分類された検証コマンドを出力します。
脆弱性トリアージツール。スキャンがすでに発見した内容を入力として受け取り、どのCVEが妥当に該当するかを判断し、その確信度と理由を提示し、自分で確認するためのコマンドを提供します。
スキャンは行わず、エクスプロイトも行いません。
git clone https://github.com/xGhst0/reconkg && cd reconkg && pip install -e . --break-system-packages && python -m reconkg.selfcheck
最後のステップでは、何が見えて何が見えないかを報告します。nmapのscript.dbが見つかったかどうか、どのコーパスが設定されているか、そして実際にどれだけの現実的なフィンガープリントが手がかりを生み出すかです。まずこれを実行してください。初期状態での答えは「手書きのCVEが9件」であり、selfcheckはそう仮定させるのではなく、そのとおりに報告します。
組み込みの9件のエントリはデモ用のフィクスチャです。実際の用途には:
export NVD_API_KEY=... # free: https://nvd.nist.gov/developers/request-an-api-key
python -m reconkg.fetch --dest ~/.reconkg/feeds --all
python -m reconkg.builddb --feeds ~/.reconkg/feeds --out ~/.reconkg/vuln.db
export RECONKG_VULN_DB=~/.reconkg/vuln.db
export RECONKG_EXPLOIT_DB=~/.reconkg/exploits.db
export RECONKG_SCRIPT_DB=/usr/share/nmap/scripts/script.db
API キーがない場合、NVD は 30 秒あたり 5 リクエストに制限され、完全な取得には 25 分ではなく約 4 時間かかります。チェックポイントがあるため、中断された取得は再開されます。--since は変更されたものだけを取得します。
コーパス変数が設定されていてファイルを開けない場合、reconkg は起動を拒否します。300,000 件を要求したのに 9 件を黙って提供するということは、何も見つからず、しかも成功したように見えるスキャンを意味してしまうからです。
python -m reconkg.app # serves http://127.0.0.1:8765/ui
python -m reconkg.console # REPL
app はループバックにのみバインドされ、それを変更するフラグはありません。このプロセスはスキャン結果を保持し、テスト対象のホストに向けたコマンドを発行します。SSH トンネルは、それをネットワークの他の部分から到達可能にするのに比べれば小さな代償です。--port で移動でき、RECONKG_PORT でデフォルトを設定できます。
認証。 すべてのルートには Authorization: Bearer <token> が必要で、これは RECONKG_TOKENS から name:role:token の形式で取得します(ロール: viewer、scanner、operator、admin、トークンは最低 16 文字)。未設定の場合、app はそのプロセス専用のトークンを 1 つ生成し、起動時に表示します — ディスクには書き込まれず、再起動のたびに異なります。
ブラウザは通常のナビゲーションにヘッダーを付加できないため、/ui を直接開くと 401 になります。ヘッダーを注入する拡張機能を使うか、API を操作してください:
export RECONKG_TOKENS="me:admin:$(openssl rand -hex 16)"
curl -H "Authorization: Bearer ${RECONKG_TOKENS##*:}" \
http://127.0.0.1:8765/api/corpus
UI はクリックでプロヴェナンス付きのナレッジグラフを表示するため、スコアを信頼するのではなく、なぜその CVE がホストに紐づけられたのかを確認でき、KEV と EPSS を加味したトリアージ優先度順の台帳も表示されます。
提案されるすべてのコマンドには、実行するとターゲットに何が起こるかを説明する NSE カテゴリが付与されます。この語彙は nmap のものであり、ここで発明されたものではありません。
| カテゴリ | reconkg の動作 |
|---|---|
safe、discovery、version | 組み立てて表示、デフォルトで表示 |
intrusive、vuln、unclassified | 組み立てて表示、チェックボックスをオンにしたときに表示、認可に関する警告付き |
exploit、dos、fuzzer、brute | 名前のみ提示、組み立ては決して行わない |
最後の行が境界です。あるリードに対して動作するエクスプロイトが存在する場合、reconkg はそのモジュールまたはテンプレートと、その入手先を伝えます。それをターゲットを既に埋め込んだ呼び出しへと組み立てることはしません。Metasploit の提案は show options で止まります — そこで RHOSTS を読み返し、認可されたホストであることを確認するステップです。
これは自分が所有するマシン上ではキーストローク一つ分の違いですが、ツールの本質としてははるかに大きな違いです。
安全性はチェックごとに分類され、ツールごとに分類されることは決してありません。これは細かすぎる話ではありません。現在の nuclei の CVE テンプレートはエクスプロイトによって検出を達成しています — あるものは Langflow RCE 経由で subprocess.run('cat /etc/passwd') ペイロードを送信し、root:.*:0:0: にマッチさせます。「nuclei は検出し、Metasploit はエクスプロイトする」と仮定するものは、最初に出会うテンプレートで誤りとなります。そのため nuclei は unclassified として扱われ、オプトインの背後に置かれます。
selfcheck は見栄えの良い数字ではなく実際のヒット率を表示します。describe() はコーパスが 30 日を超えて古い場合にその旨を示し、どのフィードが古いのかを明示します。pip install -r requirements-dev.txt
python -m pytest tests/ -q # 1219 tests
python -m audit.mutation # mutation testing, 12 targets at 100%
python -m audit.scale_bench # corpus scale benchmark
docs/ には設計ノートと、上記の決定に至った理由が記載されています。audit/AUDIT.md は検出事項の記録です。10 回の敵対的ラウンドで 47 件の検出事項があり、そのうち 13 件を占める単一のバグ形状の分析と、何がそれを防いでいるか、何が防いでいないかについての正直な評価が含まれています。
MIT — LICENSE を参照してください。
reconkg は脆弱性データを一切同梱していません。コーパスは、あなた自身が取得したフィードからあなたのマシン上で構築されるため、そのライセンスを遵守するのはあなたの責任となります。特に ExploitDB のインデックスは GPL-2.0-or-later であり、ここで再配布されることは意図的にありません。
reconkg が出力するものはすべて、人間が実行するための提案です。所有していない、または書面によるテスト許可を得ていないシステムに対して intrusive または vuln チェックを実行することは、ほとんどの法域で違法です。