fgrg1978/bbscan
GitHub: fgrg1978/bbscan
一款由 LLM 驱动的智能安全扫描器,整合 73 种安全工具实现动态编排、关联分析与漏洞确认。
Stars: 0 | Forks: 0
# bbscan - AI 驱动的安全扫描器
这是一款使用 LLM 在生产部署前编排、关联和分析漏洞扫描的安全扫描器。涵盖 8 大类 73 种安全工具(DAST + 实验性 SAST),由 AI agent 驱动,根据发现的信息动态调整策略。
## 安装
```
# 克隆并安装
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
# 安装 DAST 扫描工具
brew install nuclei httpx katana subfinder
# 安装 SAST 工具(可选,用于 --code-path)
pip install semgrep bandit pip-audit
brew install gitleaks trivy
```
## 快速开始
```
export ANTHROPIC_API_KEY="sk-ant-..."
bbscan scan https://your-app.com
```
## 命令
| 命令 | 描述 |
|---|---|
| `bbscan scan ` | 运行安全扫描 |
| `bbscan check` | 验证工具是否已安装 |
| `bbscan history ` | 显示扫描历史 |
## 扫描选项
```
--scope [full|recon|headers|vulns] Scan scope (default: full)
--api-key TEXT LLM API key
--max-turns INTEGER Max agent turns (default: 30)
--auth-token TEXT Bearer token for authenticated scanning
--auth-cookie TEXT Cookie string (e.g. 'session=abc123')
--auth-header TEXT Custom auth header (repeatable)
--openapi TEXT Direct URL to OpenAPI/Swagger spec
--throttle INTEGER Delay in ms between requests
--report [html|json|both|none] Report format (default: html)
--output-dir TEXT Report output directory
--slack-webhook TEXT Slack webhook URL for notifications
--provider [anthropic|openai|ollama|openai-compatible] LLM provider
--model TEXT Model name override
--llm-base-url TEXT Base URL for compatible APIs
--callback INTEGER Callback server port for blind vuln testing
--callback-url TEXT External callback URL (if behind NAT)
--aggressive Enable aggressive mode (exploit confirmation)
```
## LLM 提供商
### 支持的提供商
| 提供商 | 模型 | 命令 |
|---|---|---|
| **Anthropic** | Claude Sonnet 4, Opus 4 | `--provider anthropic` (默认) |
| **OpenAI** | GPT-4o, GPT-4o-mini, o1 | `--provider openai` |
| **Ollama** | Llama 3.1, Qwen 2.5, Mistral | `--provider ollama --model llama3.1:70b` |
| **LM Studio** | 任意 GGUF 模型 | `--provider openai-compatible --llm-base-url http://localhost:1234/v1` |
| **DeepSeek** | DeepSeek V3, Chat | `--provider openai-compatible --llm-base-url https://api.deepseek.com` |
| **Mistral** | Mistral Large | `--provider openai-compatible --llm-base-url https://api.mistral.ai/v1` |
### 模型推荐
| 模型 | 工具调用 | 推理能力 | 最适用场景 |
|---|---|---|---|
| Claude Sonnet 4 | 优秀 | 优秀 | 整体最佳 |
| GPT-4o | 优秀 | 很好 | 稳健的替代方案 |
| Qwen 2.5 72B | 良好 | 良好 | 最佳本地模型 (LM Studio/Ollama) |
| Llama 3.1 70B | 良好 | 良好 | 免费的本地选项 |
| Mistral Large | 良好 | 中等 | 通过 openai-compatible 使用 |
| DeepSeek V3 | 良好 | 良好 | 低成本的云端选项 |
### 各提供商示例
```
# Anthropic(默认)
bbscan scan https://target.com
# OpenAI
bbscan scan https://target.com --provider openai --api-key $OPENAI_API_KEY
# Ollama(本地,免费)
bbscan scan https://target.com --provider ollama --model llama3.1:70b
# LM Studio(本地,免费)
bbscan scan https://target.com \
--provider openai-compatible \
--llm-base-url http://localhost:1234/v1 \
--model your-model \
--api-key lm-studio
# DeepSeek
bbscan scan https://target.com \
--provider openai-compatible \
--llm-base-url https://api.deepseek.com \
--model deepseek-chat \
--api-key $DEEPSEEK_KEY
# Mistral
bbscan scan https://target.com \
--provider openai-compatible \
--llm-base-url https://api.mistral.ai/v1 \
--model mistral-large-latest \
--api-key $MISTRAL_KEY
```
## 扫描模式
### 基础模式 (未经认证)
```
bbscan scan https://target.com
```
### 经过认证的扫描
```
# Bearer token
bbscan scan https://api.target.com --auth-token "eyJhbG..."
# Cookie 会话
bbscan scan https://target.com --auth-cookie "session=abc123; csrf=xyz"
# 自定义 header
bbscan scan https://target.com --auth-header "X-API-Key: your-key"
```
### 配合 OpenAPI 规范
```
bbscan scan https://api.target.com \
--openapi https://api.target.com/docs/openapi.json \
--auth-token "eyJhbG..."
```
### 盲测漏洞测试
```
# 启动 callback server 用于 SSRF/XXE/blind XSS 检测
bbscan scan https://target.com --callback 9999
# 若位于 NAT 之后,请使用隧道(例如 ngrok)
ngrok http 9999
bbscan scan https://target.com --callback 9999 --callback-url https://abc123.ngrok.io
```
### 激进模式 (仅限受控环境)
```
# 实际利用漏洞以进行确认并提取证据
# 仅在你拥有或书面授权测试的系统上使用
bbscan scan https://target.com --aggressive
```
在激进模式下,LLM 会作为一名无限制的渗透测试人员运行:
- 通过尝试真实利用来确认每一项发现
- 提取证据:数据库内容、文件、token、凭证
- 串联多个漏洞以展示最大影响
- 为开发团队生成可运行的 PoC 脚本
- 将发现标记为 **CONFIRMED** (已利用) 或 **POTENTIAL** (仅检测到)
### 保护 Staging 环境
```
# 限制请求速率以避免压垮 Staging 环境
bbscan scan https://staging.target.com --throttle 500
```
### 报告与通知
```
# 包含 Slack 通知的 HTML + JSON 报告
bbscan scan https://target.com \
--report both \
--output-dir ./reports \
--slack-webhook https://hooks.slack.com/services/xxx
```
### SAST 模式 (实验性)
```
# 扫描在线应用 + 分析源代码
bbscan scan https://target.com --code-path /path/to/source
# SAST + 已认证 + aggressive
bbscan scan https://staging.target.com \
--code-path ./backend \
--auth-token "eyJhbG..." \
--aggressive
# SAST + 本地 LLM
bbscan scan https://target.com \
--code-path ./src \
--provider ollama --model qwen2.5:32b
```
当提供 `--code-path` 时,LLM 会同时执行 DAST (实时扫描) 和 SAST (代码分析),并关联两者的发现。例如:通过 semgrep 在代码中发现 SQL 注入模式 + 通过 DAST 模糊测试确认可利用 = 高置信度的 CRITICAL 级别。
## 安全工具 (共 73 种)
### 侦察 (5 种工具)
| 工具 | 描述 |
|---|---|
| `httpx_probe` | 技术指纹探测 |
| `katana_crawl` | JS 感知的爬取和端点发现 |
| `port_scan` | 服务端口扫描 |
| `subdomain_discover` | 子域名枚举 (subfinder) |
| `waf_detect` | WAF 检测 (Cloudflare, AWS, Akamai 等) |
### API 分析 (2 种工具)
| 工具 | 描述 |
|---|---|
| `load_openapi_spec` | OpenAPI/Swagger 规范导入和解析 |
| `graphql_test` | GraphQL 内省、深度限制、批处理 |
### 漏洞扫描 (4 种工具)
| 工具 | 描述 |
|---|---|
| `nuclei_scan` | 8000+ 漏洞模板 |
| `check_headers` | 安全头分析 |
| `test_cors` | CORS 错误配置测试 |
| `ssl_analysis` | SSL/TLS 证书和加密套件分析 |
### 认证与授权 (4 种工具)
| 工具 | 描述 |
|---|---|
| `authenticated_request` | 经认证 vs 未经认证对比 |
| `test_auth_endpoints` | 认证绕过测试 |
| `test_idor` | 不安全的直接对象引用 (IDOR) 测试 |
| `jwt_test` | JWT 算法、密钥和声明测试 |
### 注入与模糊测试 (5 种工具)
| 工具 | 描述 |
|---|---|
| `fuzz_params` | 参数模糊测试 (SQLi, XSS, SSTI, CMDi) |
| `deep_fuzz` | 带有 WAF 绕过 payload 的高级模糊测试 |
| `test_blind_injection` | 基于时间的盲注 SQLi 和 CMDi |
| `test_ssrf` | 服务端请求伪造 (SSRF) 测试 |
| `test_file_upload` | 文件上传安全测试 |
### 高级测试 (3 种工具)
| 工具 | 描述 |
|---|---|
| `test_race_condition` | 并发请求竞态条件测试 |
| `rate_limit_test` | 速率限制检测 |
| `zap_scan` | OWASP ZAP 爬虫 + 主动扫描 (若正在运行) |
### 回调服务器 (2 种工具)
| 工具 | 描述 |
|---|---|
| `callback_generate` | 为盲注漏洞生成回调 URL |
| `callback_check` | 检查是否有 payload 触发了回调 |
### 网络服务 (8 种工具)
| 工具 | 描述 |
|---|---|
| `redis_unauth_test` | Redis 未授权访问测试 |
| `mongo_unauth_test` | MongoDB 未授权访问测试 |
| `elasticsearch_test` | Elasticsearch 开放访问测试 |
| `postgres_test` | PostgreSQL 认证测试 |
| `mysql_test` | MySQL 认证测试 |
| `smtp_test` | SMTP 开放中继和枚举 |
| `ftp_test` | FTP 匿名访问测试 |
| `service_banner_grab` | 服务版本抓取 |
### 云安全 (6 种工具)
| 工具 | 描述 |
|---|---|
| `s3_bucket_test` | AWS S3 bucket 错误配置测试 |
| `azure_blob_test` | Azure Blob Storage 公开访问测试 |
| `gcp_storage_test` | GCP Storage bucket 测试 |
| `cloud_metadata_test` | 云元数据端点测试 (SSRF to IMDS) |
| `dns_zone_transfer` | DNS 区域传送测试 |
| `cloud_storage_enum` | 多云存储枚举 |
### CI/CD 与暴露 (6 种工具)
| 工具 | 描述 |
|---|---|
| `exposed_git_test` | 暴露的 .git 目录检测 |
| `exposed_env_test` | 暴露的 .env 和配置文件 |
| `exposed_ci_test` | 暴露的 CI/CD 接口 (Jenkins, GitLab 等) |
| `source_map_test` | JavaScript Source Map 暴露 |
| `debug_endpoint_test` | 调试/分析端点检测 |
| `secrets_in_js_test` | JavaScript 中硬编码的机密 (21 种模式) |
### WebSocket (5 种工具)
| 工具 | 描述 |
|---|---|
| `ws_connect_test` | WebSocket 连接和协议测试 |
| `ws_injection_test` | WebSocket 消息注入测试 |
| `ws_auth_test` | WebSocket 认证绕过测试 |
| `ws_dos_test` | WebSocket 拒绝服务测试 |
| `ws_hijack_test` | 跨站 WebSocket 劫持 (CSWSH) |
### gRPC (4 种工具)
| 工具 | 描述 |
|---|---|
| `grpc_reflection_test` | gRPC 反射服务暴露 |
| `grpc_auth_test` | gRPC 认证绕过测试 |
| `grpc_fuzz` | gRPC 畸形 protobuf 模糊测试 |
| `grpc_plaintext_test` | gRPC 明文 (非 TLS) 测试 |
### 激进模式 - 漏洞利用确认 (7 种工具)
仅在使用 `--aggressive` 时可用。这些工具通过实际利用来确认漏洞。
| 工具 | 描述 |
|---|---|
| `exploit_sqli` | SQL 注入利用 — 提取数据库内容 |
| `exploit_xss` | XSS 利用 — 生成可用的 PoC payload |
| `exploit_ssrf_read` | SSRF 利用 — 读取内部文件和云元数据 |
| `exploit_path_traversal` | 路径遍历 — 读取敏感文件 (.env, passwd) |
| `exploit_idor_data` | IDOR 利用 — 提取其他用户数据 |
| `exploit_auth_bypass` | 认证绕过 — 执行特权操作 |
| `generate_poc` | 生成可运行的 Python 利用脚本 |
### SAST - 静态代码分析 (10 种工具, 实验性)
仅在使用 `--code-path` 时可用。LLM 直接读取和分析源代码。
| 工具 | 描述 |
|---|---|
| `sast_list_files` | 探索项目结构和文件树 |
| `sast_read_file` | 带行号读取源代码文件 |
| `sast_search_code` | 跨代码库正则搜索 (查找危险模式) |
| `semgrep_scan` | 多语言静态分析 (OWASP, 注入, XSS, 机密) |
| `bandit_scan` | Python 专用安全检查器 (SQLi, exec, pickle 等) |
| `dependency_audit` | 易受攻击的依赖检测 (pip-audit, npm audit, trivy) |
| `secret_scan` | 硬编码机密检测 (gitleaks 或 21 种内置模式) |
| `dockerfile_scan` | Dockerfile 安全分析 (root, 机密, 权限) |
| `iac_scan` | 基础设施即代码扫描 (Terraform, K8s, CloudFormation) |
| `git_history_audit` | Git 历史审计 (过往提交中的机密, 敏感文件) |
### 历史与回归 (2 种工具)
| 工具 | 描述 |
|---|---|
| `get_scan_history` | 获取过往扫描结果 |
| `compare_with_previous` | 回归检测 (新增/已解决/持续存在) |
## 工作原理
1. 你运行 `bbscan scan `
2. LLM 接收目标及所有可用工具
3. LLM 自主决定扫描内容及顺序
4. 每个工具执行并将结果返回给 LLM
5. LLM 关联发现,识别攻击链,过滤误报
6. 将结果与过往扫描对比以进行回归检测
7. 生成 GO/NO-GO (通过/不通过) 建议
8. 保存报告并发送通知
LLM 是核心大脑 —— 它不遵循固定脚本。它会根据发现的内容(技术、端点、错误)进行调整,并在必要时深入挖掘。
## 扫描历史
结果保存于 `~/.bbscan/history/`。每次扫描都会与上一次对比以检测:
- **新出现的问题** (回归)
- **已解决的问题** (修复已确认)
- **持续存在的问题** (仍未解决)
```
bbscan history https://target.com
```
## 环境变量
| 变量 | 描述 |
|---|---|
| `ANTHROPIC_API_KEY` | Anthropic API key |
| `OPENAI_API_KEY` | OpenAI API key |
| `BBSCAN_SLACK_WEBHOOK` | Slack webhook URL |
| `LLM_API_KEY` | 用于 openai-compatible 提供商的 API key |
## 系统要求
- Python 3.12+
- nuclei, httpx, katana (通过 Homebrew)
- subfinder (可选,用于子域名发现)
- 至少一个 LLM 提供商的 API key (或使用 Ollama 进行本地运行)
标签:AI安全, AI风险缓解, Chat Copilot, CISA项目, DAST, DLL 劫持, DNS 反向解析, DNS枚举, FTP漏洞扫描, Google, GraphQL安全矩阵, Nuclei, Python安全工具, SAST, Semgrep, Web安全, WordPress安全扫描, 大语言模型, 安全合规, 安全扫描器, 安全编排, 密码管理, 应用程序安全, 恶意软件分析, 智能安全分析, 盲注攻击, 红队自动化, 网络代理, 网络安全工具, 自动化渗透测试, 蓝队分析, 运行时操纵, 逆向工具