BBOT TUI Viewer

Автономный терминальный интерфейс для просмотра и анализа результатов сканирования BBOT.

Возможности
- 🚀 Нулевая настройка — Один самоустанавливающийся файл, без ручных зависимостей
- 🔴 Живое обновление — Автоматически обновляется во время сканирования с точным определением статуса
- 🎯 Умное определение статуса — Точно определяет выполняющиеся, завершённые и прерванные сканирования
- 📋 Обзор сканирований — Навигация по нескольким сканированиям с отдельными счётчиками уязвимостей/находок и индикаторами статуса
- 📦 Управление архивами — Сжимайте старые сканирования для экономии места, восстанавливайте при необходимости
- 📝 Отслеживание работы — Аннотируйте уязвимости и находки с указанием статуса, приоритета и заметок
- 🔍 Отдельные представления — Выделенные вкладки для уязвимостей (отсортированы по серьёзности) и находок
- 🌳 Дерево обнаружений — Иерархическое представление связей «родитель-потомок» между событиями
- 🌐 Дерево поддоменов — Иерархическое представление обнаруженных поддоменов (при наличии)
- 📊 Богатая статистика — Красивые таблицы с распределением событий, анализом границ и метриками рабочих процессов
- 🔎 Просмотр событий — Фильтрация, поиск и просмотр всех событий сканирования
- ⚙️ Просмотр конфигурации — Просмотр файла preset.yml
Быстрый старт
# Скопируйте на сервер и запустите (автоустановка при первом запуске)
./bbot-ui
# Или укажите свой путь
./bbot-ui /path/to/scans
При первом запуске создаётся .bbot_ui_venv/ и устанавливаются зависимости. Последующие запуски выполняются мгновенно.
Использование
./bbot-ui # По умолчанию: ~/.bbot/scans
./bbot-ui /path/to/scans # Обзор всех сканирований в директории
./bbot-ui ~/.bbot/scans/scan-name # Просмотр конкретного сканирования
Параметры командной строки
./bbot-ui --help # Показать все параметры
./bbot-ui --scan-interval 5 # Обновлять вид сканирования каждые 5 секунд
./bbot-ui --list-interval 10 # Обновлять список сканирований каждые 10 секунд
Доступные параметры:
--scan-interval SECONDS — Интервал обновления детального вида сканирования (по умолчанию: 2.0)
--list-interval SECONDS — Интервал обновления списка сканирований (по умолчанию: 3.0)
Настройки автоматически сохраняются в ~/.bbot_ui_config.json и используются как значения по умолчанию в будущих сеансах.
Интерфейс
Список сканирований
- Мгновенный запуск — UI появляется менее чем за 200 мс, сканирования загружаются постепенно
- Просмотр всех сканирований в таблице со столбцами: Имя сканирования, Статус, События, Уязвимости, Находки, Последнее изменение
- В заголовке отображается общее количество сканирований, количество уязвимостей/находок и количество выполняющихся сканирований
- Столбец Статус показывает состояние сканирования в реальном времени:
- ● ВЫПОЛНЯЕТСЯ (зелёный) — Сканирование активно выполняется, обнаружен процесс bbot
- ⚠ ПРЕРВАНО (жёлтый) — Сканирование было остановлено/прервано (нет активного процесса)
- ✓ ЗАВЕРШЕНО (синий) — Сканирование успешно завершено
- ○ ПРОВЕРКА... (тусклый) — Статус проверяется (отображается во время постепенной загрузки)
- Столбцы Уязвимости и Находки показывают индикатор ⚠ для сканирований с уязвимостями/находками
- Сканирования появляются одно за другим с обновлением статуса в реальном времени во время начальной загрузки
- Автоматическое обновление каждые 3 секунды для отображения новых сканирований и изменений статуса
↑/↓ или j/k для навигации, Enter для открытия, r для ручного обновления, a для архивации, d для удаления
- Нажмите
Tab для просмотра архивированных сканирований
Список архивов
- Просмотр всех архивированных сканирований (сжатые .zip файлы)
- Показывает: Имя архива, Размер, События, Уязвимости, Находки, Дата архивации
u для разархивирования (восстановления), d для окончательного удаления
- Нажмите
Tab, q или Escape для возврата к списку сканирований
Управление архивами
Экономьте дисковое пространство, сжимая старые сканирования в ZIP-архивы:
Архивация сканирования:
- В списке сканирований перейдите к сканированию, которое хотите архивировать
- Нажмите
a для архивации
- Подтвердите операцию
- Папка сканирования сжимается в .zip файл, исходная папка удаляется
- Архив появляется в списке архивов (нажмите
Tab для просмотра)
Восстановление архива:
- Нажмите
Tab для просмотра списка архивов
- Перейдите к архиву, который хотите восстановить
- Нажмите
u для разархивирования
- Подтвердите операцию
- Архив извлекается, .zip файл удаляется
- Нажмите
q для возврата к списку сканирований и просмотра восстановленного сканирования
Функции безопасности:
- Невозможно архивировать выполняющиеся сканирования
- Целостность архива проверяется перед удалением исходной папки
- Извлечение проверяется перед удалением архива
- Все операции требуют подтверждения
- Если какой-либо шаг завершится неудачей, операция безопасно откатывается
Удаление сканирований/архивов:
- Из списка сканирований: Нажмите
d для окончательного удаления папки сканирования
- Из списка архивов: Нажмите
d для окончательного удаления файла архива
- Невозможно удалить выполняющиеся сканирования
- Требуется подтверждение (действие необратимо)
- Все данные сканирования будут потеряны
Отслеживание работы и аннотации
Отслеживайте свой рабочий процесс безопасности, аннотируя уязвимости и находки с указанием статуса, приоритета и заметок.
Как это работает:
- Аннотации хранятся в
.bbot_ui_annotations.json рядом с каждым сканированием
- Ссылаются на события по UUID — никогда не изменяют оригинальный
output.json от BBOT
- Автоматически включаются в архивы для резервного копирования/восстановления
- Сохраняются при повторных сканированиях той же цели
Аннотирование уязвимости/находки:
- Перейдите на вкладку «Уязвимости» или «Находки»
- Выберите элемент (клавиши со стрелками или j/k)
- Нажмите
t для открытия диалога аннотации
- Установите статус, приоритет (необязательно) и заметки
- Нажмите «Сохранить» или Enter
Быстрые сочетания:
- Нажмите
x, чтобы пометить выбранный элемент как Ложное срабатывание
- Нажмите
i, чтобы пометить выбранный элемент как Принятый риск
- Эти действия сохраняют существующий приоритет и заметки, обновляя только статус
Варианты статуса:
- 🆕 Новый — Статус по умолчанию для неаннотированных элементов
- 🔍 Исследуется — В настоящее время анализируется
- ✓ Подтверждено — Проверено как реальная проблема
- ✗ Ложное срабатывание — Не является реальной уязвимостью
- 📢 Сообщено — Отправлено группе безопасности
- 🔧 Исправлено — Проблема решена
- ⚠ Принятый риск — Известно, но принято
Уровни приоритета (необязательно):
- 🔴 Критический — Требует немедленного внимания
- 🟠 Высокий — Важно, решить в ближайшее время
- 🟡 Средний — Обычный приоритет
- 🟢 Низкий — Незначительная проблема
Функции:
- Столбцы «Статус» и «Приоритет» в таблицах уязвимостей/находок
- Выпадающий список фильтра статуса — фильтрация по конкретному статусу или по «Требующим действий» (по умолчанию)
- Быстрые клавиши (x/i) для быстрой сортировки
- Диаграммы статуса рабочего процесса на вкладке «Статистика»
- Поле заметок для подробного контекста
- Кнопка очистки аннотации для сброса
- Аннотации сохраняются между сеансами и архивами
Фильтрация по статусу:
- Требующие действий (по умолчанию) — Показывает только элементы, требующие внимания (новые, исследуемые, подтверждённые, сообщённые)
- Все — Показывает все уязвимости/находки независимо от статуса
- Конкретные статусы — Фильтр по отдельному статусу (ложное срабатывание, исправлено и т.д.)
- Фильтр автоматически обновляется при пометке элементов с помощью клавиш
Вкладки просмотра сканирования
- Строка состояния: Показывает статус сканирования с количеством событий в реальном времени
- ● ВЫПОЛНЯЕТСЯ (зелёный) — Активно обновляется новыми событиями
- ✓ ЗАВЕРШЕНО (синий) — Сканирование завершено, обновлений больше нет
- ⚠ ПРЕРВАНО (жёлтый) — Сканирование было остановлено/прервано
- Автообновление: Все вкладки обновляются каждые 2 секунды, если сканирование выполняется
- Умное обнаружение: Автоматически прекращает опрос завершённых и прерванных сканирований
- Нажмите
r для ручного обновления и просмотра уведомления с количеством новых событий
1. Уязвимости — События VULNERABILITY отсортированы по серьёзности (CRITICAL→HIGH→MEDIUM→LOW→INFO→UNKNOWN), со статусом, приоритетом и аннотациями (обновления в реальном времени)
2. Находки — События FINDING со статусом, приоритетом и аннотациями (обновления в реальном времени)
3. События — Все события с фильтром по типу, фильтром по расстоянию до границы, многотерминальным поиском и деталями в JSON (обновления в реальном времени)
4. Дерево — Два режима просмотра (обновления в реальном времени):
- Обнаружение: Показывает, как события были найдены модулями сканирования (связи родитель-потомок)
- Топология: Логическая сетевая иерархия (IP_RANGE → IP → OPEN_TCP_PORT)
5. Статистика — Распределение событий, топ-15 модулей (ранжированы), диаграммы расстояния до границы, статус рабочего процесса и распределение приоритетов (обновления в реальном времени)
6. Поддомены — Иерархическое древовидное представление обнаруженных поддоменов (отображается только при наличии
subdomains.txt, обычно из предустановки subdomain-enum)
7. Конфигурация — preset.yml с подсветкой синтаксиса
Многотерминальный поиск
Вкладка «События» поддерживает мощный многотерминальный поиск:
- Термины, разделённые пробелами: Используйте пробелы для поиска по нескольким терминам (например,
httpx in-scope)
- Логика И: События должны соответствовать ВСЕМ терминам, чтобы появиться в результатах
- Области поиска: data, type, module, host, tags, discovery_context
- Комбинирование с фильтрами: Работает вместе с фильтрами по типу и расстоянию до границы
Примеры:
httpx in-scope — События от модуля httpx с тегом in-scope
k11h HIGH — События, связанные с k11h.de, с серьёзностью HIGH
nuclei VULNERABILITY — Уязвимости, обнаруженные модулем nuclei
Дерево поддоменов
При запуске BBOT с предустановкой subdomain-enum (или любым сканированием, генерирующим subdomains.txt) в просмотрщике сканирования автоматически появляется вкладка Поддомены, показывающая иерархическое дерево обнаруженных поддоменов.
Функции:
- Иерархическое отображение: Поддомены организованы по структуре домена (например,
api.example.com под example.com)
- Разворачиваемое дерево: Навигация по уровням домена с помощью интуитивной навигации по дереву
- Индикатор количества: На ярлыке вкладки отображается общее количество поддоменов (например, «Поддомены (42)»)
- Автоматическое обнаружение: Вкладка появляется только при наличии
subdomains.txt в папке сканирования
Пример иерархии:
example.com
├─ api.example.com
├─ dev.example.com
└─ www.example.com
Горячие клавиши
Навигация: ↑/↓ или j/k | Аннотировать: t (только Уязвимости/Находки) | Ложное срабатывание: x (только Уязвимости/Находки) | Принятый риск: i (только Уязвимости/Находки) | Просмотр архивов: Tab (из списка сканирований) | Поиск: f | Обновить: r | Архивировать: a (список сканирований) | Разархивировать: u (список архивов) | Удалить: d | Изменить разделение: ←/→ | Назад/Выход: q или
Примечание: Сочетания для аннотирования (t, x, i) отображаются в нижнем колонтитуле только при просмотре вкладок «Уязвимости» или «Находки».
Живое обновление и определение статуса
bbot-ui автоматически обнаруживает и отображает обновления от выполняющихся сканирований в реальном времени:
Умное определение статуса
UI использует многоуровневую цепочку обнаружения для точного определения статуса сканирования:
-
Анализ события SCAN: Читает поле status последнего события SCAN из output.json
"FINISHED" → Сканирование завершено (есть поля finished_at и duration)
"RUNNING" → Проверить, действительно ли выполняется (перейти к шагу 2)
-
Обнаружение активного процесса (для статуса RUNNING):
- psutil (автоустановка, кроссплатформенный) — Проверяет, открыл ли какой-либо процесс
output.json
-
Итоговый статус:
- RUNNING: Событие SCAN говорит RUNNING + процесс активно держит файл открытым
- INTERRUPTED: Событие SCAN говорит RUNNING + ни один процесс не держит файл открытым (сканирование прервано Ctrl+C)
- FINISHED: Событие SCAN говорит FINISHED (есть данные о завершении)
Функции
- Постепенная загрузка: Сканирования появляются одно за другим с обновлением статуса в реальном времени при запуске
- Точное обнаружение: Немедленно определяет прерванные сканирования без ожидания тайм-аута
- Оптимизация производительности:
- Постепенный перебор директорий (неблокирующий, 1 мс на директорию)
- Одно сканирование загружается за один такт таймера (10 мс)
- Кэширует проверки процессов на 5 секунд (избегает повторного сканирования всех процессов)
- Проверяет только выполняющиеся сканирования (пропускает дорогие проверки для завершённых)
- Умный опрос прекращает проверку завершённых и прерванных сканирований
- Инкрементальная загрузка: Эффективно читает только новые события из
output.json
- Неблокирующий: UI остаётся полностью отзывчивым во время обновлений
- Сохранение курсора: Сохраняет вашу позицию в таблицах при обновлении
- Корректная обработка: Пропускает неполные/повреждённые строки JSON из выполняющихся сканирований
- Настраиваемые интервалы: Изменяйте частоту обновления под свои нужды
Конфигурация
Вы можете настроить поведение живого обновления:
Через командную строку:
./bbot-ui --scan-interval 5 --list-interval 10
Значения по умолчанию:
- Детальный вид сканирования обновляется каждые 2 секунды
- Список сканирований обновляется каждые 3 секунды
Варианты использования:
- Быстрые сети/локальные сканирования: Используйте короткие интервалы (например,
--scan-interval 1)
- Удалённые/медленные системы: Используйте длинные интервалы (например,
--scan-interval 5)
- Снижение нагрузки на ЦП: Увеличьте все интервалы для более редких проверок
Настройки сохраняются в ~/.bbot_ui_config.json и сохраняются между сеансами.
Устранение проблем
Установка завершилась некорректно?
rm -rf ~/.bbot_ui_venv && ./bbot-ui
Предупреждение об отсутствии psutil?
Если вы видите предупреждение, что psutil отсутствует, ваше виртуальное окружение из старой версии. Переустановите:
rm -rf ~/.bbot_ui_venv && ./bbot-ui
Не найден output.json?
Убедитесь, что директория сканирования содержит output.json (BBOT генерирует его автоматически)
Python не найден?
# Ubuntu/Debian
sudo apt install python3 python3-venv
# macOS
brew install python3
Требования
- Python 3.8+
- Автоустановка: textual>=0.47.0, rich>=13.0.0, psutil>=5.9.0
Примечание: psutil используется для точного определения статуса сканирования путём проверки, открыл ли какой-либо процесс файл сканирования.
Производительность
UI оптимизирован для больших сканирований и множества директорий:
Производительность запуска:
- Постепенная загрузка — UI отображается мгновенно (<200 мс), сканирования загружаются одно за другим
- Перечисление директорий выполняется постепенно (1 мс на директорию)
- Эффективно работает на сетевых файловых системах и удалённых монтированиях
- Нет блокирующих операций при запуске
Лимиты отображения:
- Вкладка «Уязвимости»: максимум 1000 строк (отсортированы по серьёзности)
- Вкладка «Находки»: максимум 1000 строк
- Вкладка «События»: максимум 1000 строк (используйте фильтры для больших сканирований)
- Древовидные представления: максимум 500 узлов (используйте фильтры для фокусировки на определённых областях)
- Список сканирований: Постепенная загрузка показывает сканирования по мере обнаружения
Чтение файлов:
- Читает с обоих концов файла для поиска событий SCAN (обрабатывает повторное использование директорий сканирования)
- Определяет самое последнее сканирование по временной метке (поддерживает несколько запусков в одной директории)
- Оценивает количество событий для больших сканирований по размеру файла и выборке
- Кэширует проверки статуса, чтобы избежать повторных сканирований процессов
Автообновление:
- Таймер автоматически останавливается для завершённых/прерванных сканирований
- Проверяет только выполняющиеся сканирования на наличие обновлений
- Результаты кэшируются на 5 секунд
- Флаг
initial_load_phase предотвращает конфликты обновления при запуске
Советы
- Используйте фильтры (тип, расстояние до границы), чтобы сосредоточиться на определённых событиях в больших сканированиях
- Количество событий для больших сканирований (>1 МБ) является оценочным для производительности
- Сочетания для аннотирования (t, x, i) зависят от контекста и отображаются только на соответствующих вкладках
- Постепенная загрузка означает, что вы можете начать работать сразу — не нужно ждать загрузки всех сканирований
- На медленных сетевых файловых системах сканирования будут появляться постепенно — это нормальное поведение
- Удалите
~/.bbot_ui_venv/ для принудительной чистой переустановки
Лицензия
MIT