BBOT TUI Viewer

BBOT のスキャン結果を閲覧・分析するための自己完結型ターミナル UI です。

特徴
- 🚀 ゼロセットアップ - 自己インストール型の単一ファイル。手動での依存関係のインストールは不要
- 🔴 ライブ更新 - スキャン実行中に自動更新され、ステータスを正確に検出
- 🎯 スマートなステータス検出 - RUNNING、FINISHED、INTERRUPTED のスキャンを正確に識別
- 📋 スキャンブラウザ - 複数のスキャンを操作。脆弱性/フィンディング数とステータスインジケータを個別に表示
- 📦 アーカイブ管理 - 古いスキャンを圧縮して容量を節約し、必要なときに復元
- 📝 作業追跡 - 脆弱性とフィンディングにステータス、優先度、メモを注釈付け
- 🔍 個別ビュー - 脆弱性(深刻度順にソート)とフィンディング専用のタブ
- 🌳 ディスカバリーツリー - 親子イベントの関連性を示す階層ビュー
- 🌐 サブドメインツリー - 検出されたサブドメインの階層ビュー(利用可能な場合)
- 📊 リッチな統計情報 - イベント分布、スコープ分析、ワークフローメトリクスの美しいテーブル
- 🔎 イベントエクスプローラ - 全スキャンイベントのフィルタリング、検索、検査
- ⚙️ 設定ビューア - preset.yml 設定の表示
クイックスタート
# Copy to server and run (auto-installs on first run)
./bbot-ui
# Or specify custom path
./bbot-ui /path/to/scans
初回実行時に .bbot_ui_venv/ が作成され、依存関係がインストールされます。以降の実行は即座に起動します。
使用方法
./bbot-ui # Default: ~/.bbot/scans
./bbot-ui /path/to/scans # Browse all scans in directory
./bbot-ui ~/.bbot/scans/scan-name # View specific scan
コマンドラインオプション
./bbot-ui --help # Show all options
./bbot-ui --scan-interval 5 # Refresh scan view every 5 seconds
./bbot-ui --list-interval 10 # Refresh scan list every 10 seconds
利用可能なオプション:
--scan-interval SECONDS - スキャン詳細ビューの更新間隔(デフォルト: 2.0)
--list-interval SECONDS - スキャン一覧ビューの更新間隔(デフォルト: 3.0)
設定は自動的に ~/.bbot_ui_config.json に保存され、今後のセッションのデフォルトとして使用されます。
インターフェース
スキャン一覧
- 即時起動 - UI は <200ms で表示され、スキャンは段階的に読み込まれます
- スキャン名、Status、Events、Vulns、Findings、Last Modified の列で全スキャンを閲覧
- ヘッダーには総スキャン数、脆弱性/フィンディング数、実行中のスキャン数が表示されます
- Status 列 にリアルタイムのスキャン状態を表示:
- ● RUNNING (緑) - bbot プロセスが検出され、スキャンがアクティブに実行中
- ⚠ INTERRUPTED (黄) - スキャンが停止/中断されました(アクティブなプロセスなし)
- ✓ FINISHED (青) - スキャンが正常に完了
- ○ CHECKING... (暗色) - ステータスを確認中(段階的読み込みの際に表示)
- Vulns 列と Findings 列には、脆弱性/フィンディングがあるスキャンに ⚠ インジケータを表示
- 初期読み込み中、スキャンはライブのステータス更新とともに1件ずつ表示されます
- 3秒ごとに自動更新され、新しいスキャンとステータスの変更を表示
↑/↓ または j/k で移動、Enter で開く、r で手動更新、a でアーカイブ、d で削除
Tab キーでアーカイブ済みスキャンを表示
アーカイブ一覧
- アーカイブ済みスキャン(圧縮された .zip ファイル)をすべて閲覧
- 表示内容: Archive Name、Size、Events、Vulns、Findings、Date Archived
u でアーカイブ解除(復元)、d で完全削除
Tab、q、Escape キーでスキャン一覧に戻る
アーカイブ管理
古いスキャンをZIPアーカイブに圧縮してディスク容量を節約します:
スキャンのアーカイブ:
- スキャン一覧で、アーカイブしたいスキャンに移動
a を押してアーカイブ
- 操作を確認
- スキャンフォルダが .zip ファイルに圧縮され、元のフォルダは削除されます
- アーカイブ一覧にアーカイブが表示されます(
Tab キーで表示)
アーカイブの復元:
Tab キーでアーカイブ一覧を表示
- 復元したいアーカイブに移動
u を押してアーカイブを解除
- 操作を確認
- アーカイブが解凍され、.zip ファイルは削除されます
q を押してスキャン一覧に戻り、復元されたスキャンを確認
安全機能:
- RUNNING 状態のスキャンはアーカイブ不可
- 元のフォルダを削除する前にアーカイブの整合性を検証
- アーカイブを削除する前に解凍を検証
- すべての操作で確認が必要
- いずれかのステップが失敗した場合、操作は安全にロールバックされます
スキャン/アーカイブの削除:
- スキャン一覧から:
d を押すとスキャンフォルダを完全削除
- アーカイブ一覧から:
d を押すとアーカイブファイルを完全削除
- RUNNING 状態のスキャンは削除不可
- 確認が必要(操作は永続的で元に戻せません)
- すべてのスキャンデータが失われます
作業追跡と注釈
脆弱性とフィンディングにステータス、優先度、メモを注釈付けして、セキュリティワークフローを追跡します。
仕組み:
- 注釈は各スキャンと同じ場所にある
.bbot_ui_annotations.json に保存されます
- イベントを UUID で参照 - BBOT の元の
output.json を変更することはありません
- バックアップ/復元のためにアーカイブに自動的に含まれます
- 同じターゲットの再スキャン後も保持されます
脆弱性/フィンディングへの注釈付け:
- Vulnerabilities タブまたは Findings タブに移動
- 項目を選択(矢印キーまたは j/k)
t を押して注釈ダイアログを開く
- ステータス、優先度(任意)、メモを設定
- Save をクリックするか Enter キーを押す
クイックショートカット:
x を押すと選択した項目を False Positive にマーク
i を押すと選択した項目を Accepted Risk にマーク
- 既存の優先度とメモを保持したままステータスを更新します
ステータスオプション:
- 🆕 New - 未注釈項目のデフォルトステータス
- 🔍 Investigating - 現在分析中
- ✓ Confirmed - 実際の問題として検証済み
- ✗ False Positive - 実際の脆弱性ではない
- 📢 Reported - セキュリティチームに報告済み
- 🔧 Fixed - 問題は解決済み
- ⚠ Accepted Risk - 既知だが許容されるリスク
優先度レベル(任意):
- 🔴 Critical - 即時の対応が必要
- 🟠 High - 重要、早急に対応
- 🟡 Medium - 通常の優先度
- 🟢 Low - 軽微な問題
機能:
- Vulnerabilities/Findings テーブルに Status 列と Priority 列
- ステータスフィルタードロップダウン - 特定のステータスまたは「Actionable」項目でフィルタリング(デフォルト)
- クイックキーボードショートカット (x/i) による迅速なトリアージ
- Statistics タブのワークフローステータスチャート
- 詳細なコンテキスト用のメモフィールド
- リセット用の注釈クリアボタン
- 注釈はセッションとアーカイブをまたいで保持されます
ステータスフィルタリング:
- Actionable (デフォルト) - 対応が必要な項目のみ表示(new、investigating、confirmed、reported)
- All - ステータスに関係なくすべての脆弱性/フィンディングを表示
- 特定のステータス - 個別のステータスでフィルタリング(false-positive、fixed など)
- キーボードショートカットで項目をマークすると、フィルターは自動的に更新されます
スキャンビューアのタブ
- ステータスバー: リアルタイムのイベント数とともにスキャンステータスを表示
- ● RUNNING (緑) - 新しいイベントでアクティブに更新中
- ✓ FINISHED (青) - スキャン完了、以降の更新なし
- ⚠ INTERRUPTED (黄) - スキャンが停止/中断されました
- 自動更新: スキャンが RUNNING の間、すべてのタブが2秒ごとに更新
- スマート検出: FINISHED および INTERRUPTED スキャンのポーリングを自動的に停止
r を押すと手動更新し、新しいイベント数とともに通知を表示
1. Vulnerabilities - 深刻度順(CRITICAL→HIGH→MEDIUM→LOW→INFO→UNKNOWN)にソートされた VULNERABILITY イベント。ステータス、優先度、注釈付き(ライブ更新)
2. Findings - ステータス、優先度、注釈付きの FINDING イベント(ライブ更新)
3. Events - タイプフィルター、スコープ距離フィルター、複数語検索、JSON詳細付きのすべてのイベント(ライブ更新)
4. Tree - 2つの表示モード(ライブ更新):
- Discovery: スキャンモジュールを通じてイベントがどのように発見されたかを表示(親子関係)
- Topology: 論理ネットワーク階層(IP_RANGE → IP → OPEN_TCP_PORT)
5. Statistics - イベント分布、上位15モジュール(ランキング)、スコープ距離チャート、ワークフローステータス、優先度分布(ライブ更新)
6. Subdomains - 検出されたサブドメインの階層ツリービュー(
subdomains.txt が存在する場合のみ表示。通常は subdomain-enum プリセットから生成)
7. Configuration - シンタックスハイライト付き preset.yml
複数語検索
Events タブは強力な複数語検索をサポートしています:
- スペース区切りの語句: スペースで複数の語句を検索(例:
httpx in-scope)
- AND ロジック: 結果に表示するにはイベントがすべての語句に一致する必要があります
- 検索対象フィールド: data、type、module、host、tags、discovery_context
- フィルターとの併用: Type および Scope distance フィルターと連動
例:
httpx in-scope - in-scope タグが付いた httpx モジュールのイベント
k11h HIGH - k11h.de 関連の HIGH 深刻度イベント
nuclei VULNERABILITY - nuclei モジュールが発見した脆弱性
サブドメインツリービュー
subdomain-enum プリセット(または subdomains.txt を生成するスキャン)で BBOT を実行すると、スキャンビューアに Subdomains タブが自動的に表示され、発見されたサブドメインの階層ツリーが表示されます。
機能:
- 階層表示: サブドメインがドメイン構造ごとに整理されます(例:
example.com の下の api.example.com)
- 展開可能なツリー: 直感的なツリーナビゲーションでドメインレベルを移動
- カウント表示: タブラベルにサブドメインの総数が表示されます(例: "Subdomains (42)")
- 自動検出: タブはスキャンフォルダに
subdomains.txt が存在する場合のみ表示
階層の例:
example.com
├─ api.example.com
├─ dev.example.com
└─ www.example.com
キーボードショートカット
ナビゲーション: ↑/↓ または j/k | 注釈付け: t(Vulns/Findings のみ) | False Positive: x(Vulns/Findings のみ) | Accepted Risk: i(Vulns/Findings のみ) | アーカイブ表示: Tab(スキャン一覧から) | 検索: f | 更新: r | アーカイブ: a(スキャン一覧) | アーカイブ解除: u(アーカイブ一覧) | 削除: d | 分割サイズ調整: ←/→ | 戻る/終了: q または Escape
注意: 注釈ショートカット (t, x, i) は、Vulnerabilities タブまたは Findings タブを表示しているときのみフッターに表示されます。
ライブ更新とステータス検出
bbot-ui は実行中のスキャンからの更新を自動的に検出し、リアルタイムで表示します:
スマートなステータス検出
UI は マルチメソッド検出チェーン を使用してスキャンステータスを正確に判定します:
-
SCAN イベント分析: output.json から最後の SCAN イベントの status フィールドを読み取ります
"FINISHED" → スキャン完了(finished_at と duration フィールドあり)
"RUNNING" → 実際に実行中かどうかを検証(ステップ2へ)
-
アクティブプロセス検出(RUNNING ステータスの場合):
- psutil(自動インストール、クロスプラットフォーム)- いずれかのプロセスが
output.json を開いているかどうかを確認
-
最終ステータス:
- RUNNING: SCAN イベントが RUNNING + プロセスがファイルを開いたまま
- INTERRUPTED: SCAN イベントが RUNNING + ファイルを開いているプロセスがない(スキャンが Ctrl+C された)
- FINISHED: SCAN イベントが FINISHED(完了データあり)