BBOT TUI 뷰어

BBOT 스캔 결과를 탐색하고 분석하기 위한 독립형 터미널 UI입니다.

기능
- 🚀 제로 설정 - 단일 자체 설치 파일, 수동 종속성 불필요
- 🔴 실시간 새로고침 - 스캔 실행 중 정확한 상태 감지로 자동 업데이트
- 🎯 스마트 상태 감지 - 실행 중, 완료, 중단 스캔을 정확하게 식별
- 📋 스캔 브라우저 - 취약점/발견 항목 수 및 상태 표시기가 포함된 여러 스캔 탐색
- 📦 아카이브 관리 - 오래된 스캔을 압축하여 공간 절약, 필요 시 복원
- 📝 작업 추적 - 취약점과 발견 항목에 상태, 우선순위, 메모 주석 추가
- 🔍 분리된 뷰 - 취약점(심각도별 정렬)과 발견 항목 전용 탭
- 🌳 발견 트리 - 이벤트 간 부모-자식 관계를 보여주는 계층 뷰
- 🌐 서브도메인 트리 - 발견된 서브도메인의 계층 뷰 (사용 가능 시)
- 📊 풍부한 통계 - 이벤트 분포, 범위 분석, 워크플로우 메트릭을 포함한 아름다운 테이블
- 🔎 이벤트 탐색기 - 모든 스캔 이벤트 필터링, 검색, 검사
- ⚙️ 설정 뷰어 - 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가 200ms 이내에 나타나고 스캔이 점진적으로 로드됨
- 스캔 이름, 상태, 이벤트, 취약점, 발견 항목, 마지막 수정일 열이 있는 테이블에서 모든 스캔 탐색
- 헤더에는 총 스캔 수, 취약점/발견 항목 개수, 실행 중인 스캔 수 표시
- 상태 열은 실시간 스캔 상태 표시:
- ● 실행 중 (녹색) - 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로 이벤트 참조 - BBOT의 원래
output.json을 절대 수정하지 않음
- 백업/복원을 위해 아카이브에 자동 포함
- 동일 대상 재스캔 시에도 유지
취약점/발견 항목 주석 추가:
- 취약점 또는 발견 항목 탭으로 이동
- 항목 선택 (화살표 키 또는 j/k)
t를 눌러 주석 대화상자 열기
- 상태, 우선순위(선택 사항), 메모 설정
- 저장 클릭 또는 Enter 누르기
빠른 단축키:
x를 눌러 선택한 항목을 거짓 긍정으로 표시
i를 눌러 선택한 항목을 위험 수용으로 표시
- 기존 우선순위와 메모를 유지하면서 상태만 업데이트
상태 옵션:
- 🆕 새 항목 - 주석 없는 항목의 기본 상태
- 🔍 조사 중 - 현재 분석 중
- ✓ 확인됨 - 실제 문제로 확인
- ✗ 거짓 긍정 - 실제 취약점 아님
- 📢 보고됨 - 보안 팀에 제출됨
- 🔧 수정됨 - 문제 해결됨
- ⚠ 위험 수용 - 알려져 있지만 수용됨
우선순위 수준(선택 사항):
- 🔴 심각 - 즉시 주의 필요
- 🟠 높음 - 중요, 곧 처리
- 🟡 중간 - 일반 우선순위
- 🟢 낮음 - 사소한 문제
기능:
- 취약점/발견 항목 테이블의 상태 및 우선순위 열
- 상태 필터 드롭다운 - 특정 상태 또는 "조치 필요" 항목으로 필터링 (기본값)
- 빠른 키보드 단축키 (x/i)로 신속한 트라이지
- 통계 탭의 워크플로우 상태 차트
- 상세 컨텍스트를 위한 메모 필드
- 재설정을 위한 주석 지우기 버튼
- 주석은 세션과 아카이브에서 유지됨
상태 필터링:
- 조치 필요 (기본값) - 주의가 필요한 항목만 표시 (새 항목, 조사 중, 확인됨, 보고됨)
- 모두 - 상태에 관계없이 모든 취약점/발견 항목 표시
- 특정 상태 - 개별 상태로 필터링 (거짓 긍정, 수정됨 등)
- 키보드 단축키로 항목 표시 시 필터 자동 업데이트
스캔 뷰어 탭
- 상태 표시줄: 실시간 이벤트 수와 함께 스캔 상태 표시
- ● 실행 중 (녹색) - 새 이벤트로 활발히 업데이트 중
- ✓ 완료 (파란색) - 스캔 완료, 더 이상 업데이트 없음
- ⚠ 중단됨 (노란색) - 스캔이 중지/중단됨
- 자동 새로고침: 스캔이 실행 중일 때 모든 탭이 2초마다 업데이트
- 스마트 감지: 완료 및 중단 스캔에 대한 폴링을 자동으로 중지
r을 눌러 수동 새로고침 및 새 이벤트 수 알림 확인
1. 취약점 - 심각도(심각→높음→중간→낮음→정보→알 수 없음)별로 정렬된 VULNERABILITY 이벤트, 상태, 우선순위, 주석 포함 (실시간 업데이트)
2. 발견 항목 - 상태, 우선순위, 주석이 포함된 FINDING 이벤트 (실시간 업데이트)
3. 이벤트 - 유형 필터, 범위 거리 필터, 다중 용어 검색, JSON 세부 정보가 포함된 모든 이벤트 (실시간 업데이트)
4. 트리 - 두 가지 뷰 모드 (실시간 업데이트):
- 발견: 스캔 모듈을 통해 이벤트가 어떻게 발견되었는지 보여줌 (부모-자식 관계)
- 토폴로지: 논리적 네트워크 계층 (IP_RANGE → IP → OPEN_TCP_PORT)
5. 통계 - 이벤트 분포, 상위 15개 모듈(순위별), 범위 거리 차트, 워크플로우 상태, 우선순위 분포 (실시간 업데이트)
6. 서브도메인 - 발견된 서브도메인의 계층 트리 뷰 (일반적으로 서브도메인 열거 프리셋에서
subdomains.txt가 존재할 때만 표시됨)
7. 설정 - 구문 강조된 preset.yml
다중 용어 검색
이벤트 탭은 강력한 다중 용어 검색을 지원합니다:
- 공백으로 구분된 용어: 여러 용어를 검색하려면 공백 사용 (예:
httpx in-scope)
- AND 논리: 이벤트가 결과에 나타나려면 모든 용어와 일치해야 함
- 검색 필드: 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 또는 Escape
참고: 주석 단축키 (t, x, i)는 취약점 또는 발견 항목 탭을 볼 때만 하단에 표시됩니다.
실시간 새로고침 및 상태 감지
bbot-ui는 실행 중인 스캔의 업데이트를 실시간으로 자동 감지하여 표시합니다:
스마트 상태 감지
UI는 다중 방법 감지 체인을 사용하여 스캔 상태를 정확히 결정합니다:
-
SCAN 이벤트 분석: output.json에서 마지막 SCAN 이벤트의 status 필드 읽기
"FINISHED" → 스캔 완료 (finished_at 및 duration 필드 있음)
"RUNNING" → 실제로 실행 중인지 확인 (2단계로 진행)
-
활성 프로세스 감지 (RUNNING 상태의 경우):
- psutil (자동 설치, 크로스 플랫폼) - 어떤 프로세스가
output.json을 열고 있는지 확인
-
최종 상태:
- 실행 중: SCAN 이벤트가 RUNNING + 프로세스가 파일을 활발히 열고 있음
- 중단됨: SCAN 이벤트가 RUNNING + 프로세스가 파일을 열고 있지 않음 (스캔이 Ctrl+C로 중단됨)
- 완료: SCAN 이벤트가 FINISHED (완료 데이터 있음)
기능
- 점진적 로딩: 시작 중 스캔이 하나씩 실시간 상태 업데이트와 함께 나타남
- 정확한 감지: 타임아웃을 기다리지 않고 중단된 스캔을 즉시 식별
- 성능 최적화:
- 점진적 디렉터리 반복 (비차단, 디렉터리당 1ms)
- 10ms 타이머 틱당 하나의 스캔 로드
- 프로세스 확인 5초 캐시 (모든 프로세스 반복 방지)
- 실행 중인 스캔만 확인 (완료된 스캔의 고비용 확인 건너뜀)
- 스마트 폴링: 완료 및 중단 스캔 확인 중지
- 증분 로딩:
output.json에서 새 이벤트만 효율적으로 읽음
- 비차단: 업데이트 중 UI가 완전히 응답함
- 커서 유지: 새로고침 중 테이블에서 위치 유지
- 우아한 처리: 실행 중인 스캔의 불완전/잘못된 JSON 라인 건너뜀
- 구성 가능한 간격: 필요에 맞게 새로고침 속도 사용자 정의
설정
실시간 새로고침 동작을 사용자 정의할 수 있습니다:
명령줄을 통해:
./bbot-ui --scan-interval 5 --list-interval 10
기본값:
- 스캔 상세 뷰: 2초마다 새로고침
- 스캔 목록 뷰: 3초마다 새로고침
사용 사례:
- 빠른 네트워크/로컬 스캔: 짧은 간격 사용 (예:
--scan-interval 1)
- 원격/느린 시스템: 긴 간격 사용 (예:
--scan-interval 5)
- CPU 사용량 감소: 모든 간격을 늘려 덜 빈번한 확인
설정은 ~/.bbot_ui_config.json에 저장되며 세션 간에 유지됩니다.
문제 해결
설정이 제대로 완료되지 않았나요?
rm -rf ~/.bbot_ui_venv && ./bbot-ui
psutil이 설치되지 않았다는 경고가 보이나요?
psutil이 누락되었다는 경고가 보이면 venv가 이전 버전입니다. 재설치:
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가 즉시 렌더링 (<200ms), 스캔이 하나씩 로드됨
- 디렉터리 나열이 점진적으로 수행됨 (디렉터리당 1ms)
- 네트워크 파일 시스템 및 원격 마운트에서 효율적으로 작동
- 시작 중 차단 작업 없음
표시 제한:
- 취약점 탭: 최대 1000행 (심각도별 정렬)
- 발견 항목 탭: 최대 1000행
- 이벤트 탭: 최대 1000행 (대규모 스캔의 경우 필터 사용)
- 트리 뷰: 최대 500개 노드 (특정 영역에 집중하려면 필터 사용)
- 스캔 목록: 점진적 로딩으로 스캔이 발견될 때 표시
파일 읽기:
- 파일의 양쪽 끝에서 SCAN 이벤트를 읽음 (재사용된 스캔 디렉터리 처리)
- 타임스탬프로 가장 최근 스캔 감지 (동일 디렉터리에서 여러 실행 지원)
- 파일 크기 및 샘플링을 사용하여 대규모 스캔의 이벤트 수 추정
- 상태 확인을 캐싱하여 반복적인 프로세스 스캔 방지
자동 새로고침:
- 완료/중단 스캔의 경우 타이머가 자동으로 중지
- 업데이트를 위해 실행 중인 스캔만 확인
- 결과를 5초 동안 캐시
initial_load_phase 플래그가 시작 중 새로고침 충돌 방지
팁
- 대규모 스캔에서 특정 이벤트에 집중하려면 필터(유형, 범위 거리) 사용
- 대규모 스캔(>1MB)의 이벤트 수는 성능을 위한 추정치
- 주석 단축키 (t, x, i)는 상황에 따라 관련 탭에서만 표시됨
- 점진적 로딩으로 모든 스캔이 로드될 때까지 기다릴 필요 없이 즉시 작업 시작 가능
- 느린 네트워크 파일 시스템에서는 스캔이 점차 채워짐 - 정상적인 동작
~/.bbot_ui_venv/를 삭제하여 강제로 깨끗한 재설치
라이선스
MIT