rivalsec/autobb

GitHub: rivalsec/autobb

持续的外部攻击面监控与漏洞自动化工具,通过资产发现、变化追踪、风险评分和漏洞扫描实现自托管闭环监控。

Stars: 24 | Forks: 1

# AutoBB **持续的外部攻击面监控与漏洞自动化 — 自托管,在 Docker 中持续运行。** AutoBB 能够发现您的互联网暴露资产,追踪其变化趋势,按风险对发现结果进行评分,扫描漏洞,并在发现新问题时向您发出警报。它会在 MongoDB 中维护一个持久的资产清单,并按计划重新检查,因此它是一个持续监控器,而非一次性的侦察脚本。专为**漏洞赏金猎人**(在大型项目中率先发现新的或变化的资产)和**安全团队/公司**(了解您的外部攻击面,并在其发生变化时立即收到警报)而设计。 核心循环:*发现资产 → 追踪变化 → 风险评分 → 漏洞扫描 → 发出警报*。 ## 功能 - **持续资产发现** — 被动 OSINT(subfinder)、DNS 暴力破解(puredns)、排列组合(dnsgen)和解析(dnsx),用于发现子域名和活跃主机。 - **持久资产清单** — 每个域名、HTTP 服务、开放端口和发现结果都存储在 MongoDB 中(`domains`、`http_probes`、`ports`、`nuclei_hits`、`nuclei_passive_hits`、`http_paths`)。 - **变化检测** — 将每次扫描与上一次进行对比,并记录每个字段的变化历史,从而在真正发生变化时发出警报,而不会因波动值(例如轮换的 CDN CNAME)重复报警。 - **风险评分(“juicy”)** — 优先显示有趣的结果:超出范围的 CNAME/证书、非 80/443 端口的服务、外部重定向、从 `4xx → 200` 的模糊测试路径等。 - **漏洞扫描** — 以主动、被动(针对已保存的响应)和网络模板模式运行 Nuclei。 - **内容发现** — 对新发现的活跃 HTTP 服务进行目录/文件暴力破解(ffuf)。 - **定期重新扫描 / 持续模式** — 可配置的重新扫描间隔,加上 `--workflow-olds` / `--ports-olds` 用于重新探测已知资产;设计用于在 Docker 中持续运行。 - **多渠道警报** — Telegram、SMTP 和 VK Teams,并自动将大消息作为附件发送。 - **考虑周全的扫描,分散在资产上** — AutoBB 旨在通过将每次扫描分散到单个运行中的多个目标上,避免对接触的资产造成损害,而不是将负载集中到某个主机或名称服务器上: - **子域名暴力破解**:将所有范围的主机名在一个打乱顺序、容量受限的运行中一起解析,这样 DNS 查询不会溢出任何单个权威名称服务器(通过 puredns 进行速率限制)。 - **HTTP 探测**:从一个共享池中针对所有范围的主机运行——任何单个主机大约只收到一个请求。 - **端口扫描**:速率受限,且跳过 CDN 范围。 - **漏洞和内容扫描**:默认情况下对每个主机保持温和:ffuf 使用**每个目标 1 个线程**,Nuclei 一次只运行一个模板但覆盖多个主机(`-c 1 -bs 100`),因此每个主机一次只收到一个请求,同时扫描在整个主机集合中展开。 每个并发/速率参数都是可调的——在目标能够承受的情况下可以调高以提高速度。 - **可识别的自托管扫描** — 设置一个统一的 User-Agent / 自定义头部(例如 `X-Bug-Bounty`),应用于每个工具,并将所有收集的数据保存在您自己的基础设施中。 ## 适用人群 **漏洞赏金猎人** - 持续监控大型项目,无需手动重复进行侦察。 - 在新资产或变更资产出现时立即收到通知——抢占先机。 - 风险评分会突出显示有价值的目标,让您无需在噪声中挖掘。 - 无需管理基础设施:它在 Docker 中自行运行并向您发出警报。 **安全团队与公司** - 了解您面向互联网的攻击面(EASM),并捕获影子 IT / 被遗忘的子域名。 - 在新暴露点和变化发生时立即收到警报。 - 对所有已知资产进行持续的 Nuclei 漏洞监控。 - 完全自托管——数据永远不会离开您的基础设施。 - 通过自定义头部实现可识别的扫描流量,并且默认采用考虑周全的扫描方式,不会压垮生产主机(在需要速度时可调高)。 ## Web 界面 一个配套的**只读** Web 仪表盘——[rivalsec/autobb-webui](https://github.com/rivalsec/autobb-webui)——可可视化 AutoBB 写入 MongoDB 的所有内容:资产清单(域名、HTTP 服务、端口、路径)、带严重性筛选的漏洞发现结果、每个主机的下钻分析以及警报历史。它仅读取——AutoBB 仍然是唯一的写入方——基于 FastAPI + React 构建,支持可选的令牌认证。 快速演示(针对示例数据集启动 UI): ``` curl -fsSL https://raw.githubusercontent.com/rivalsec/autobb-webui/main/demo/docker-compose.yml | docker compose -f - -p autobb-demo up # 然后打开 http://127.0.0.1:8000 ``` 要指向您自己的数据,请设置 `MONGO_URI` / `MONGO_DB`(使用只读的 MongoDB 凭据,并将其绑定到回环地址)。完整设置请参见 [autobb-webui](https://github.com/rivalsec/autobb-webui) 仓库。 ## 架构 ``` subs.py Main recon pipeline (subdomain enum, HTTP probing, port scan, nuclei) fullscan.py Full nuclei scan on all known alive hosts export.py Export assets from the database config.yaml Runtime configuration (copy from config.dist.yaml) scopes.yaml Optional separate scopes file (included via !include) modules/ alerts/ Alert backends: telegram, vkteams, smtp domain.py Domain/subdomain logic http.py HTTP probing httpfuzz.py HTTP fuzzing port.py Port scanning vulns.py Nuclei scanning and template management ``` ### 工具(已打包在 Docker 镜像中) subfinder, shuffledns, puredns, massdns, dnsx, dnsgen, httpx, naabu, nuclei, chromium ## 快速开始 ### 1. 安装 Docker ``` sudo snap install docker # 或者: curl -fsSL https://get.docker.com | sh ``` ### 2. 启动 MongoDB ``` sudo docker network create autobbnet sudo docker run -d -p 127.0.0.1:27017:27017 --net autobbnet --name bbmongodb mongodb/mongodb-community-server:latest ``` ### 3. 克隆并配置 ``` git clone https://github.com/rivalsec/autobb.git cd autobb cp config.dist.yaml config.yaml nano config.yaml ``` 至少需要编辑: - `scope` — 目标域名/CIDR - `alerts` — 通知后端 ### 4. 构建 Docker 镜像 ``` sudo docker build -t autobb . ``` ### 5. 运行扫描 ``` sudo docker run --rm -v $(pwd):/autobb --init --shm-size=2g --net autobbnet autobb ``` 此命令将以所有标志启用的默认模式运行(请参见下文)。 `--init` 运行一个小的初始化进程(tini)作为 PID 1,以便正确回收由管道产生的许多短期子进程(subfinder, httpx, nuclei, naabu, chromium...),并转发信号;否则会积累僵尸进程,并且 Ctrl-C 可能无法干净地停止容器。 `--shm-size=2g` 增大 `/dev/shm`(默认为 64 MB),用于屏幕截图/JS 渲染的无头 chromium 需要它进行进程间共享内存——在默认大小下负载过重时会崩溃。 ## 用法 ### subs.py — 侦察管道 ``` docker run --rm -v $(pwd):/autobb --net autobbnet autobb [FLAGS] ``` | 标志 | 描述 | |------|-------------| | `--dns-brute` | 使用字典暴力破解子域名 | | `--dns-alts` | 根据已发现的子域名尝试排列/替代子域名 | | `--workflow-olds` | 重新探测旧的子域名以检测变化 | | `--ports` | 扫描新主机的端口(新主机 top 1000,旧主机 top 100) | | `--ports-olds` | 重新扫描已知主机的端口 | | `--nuclei` | 对新发现的结果运行 nuclei 模板 | | `--passive` | 运行被动 nuclei 检查 | | `http-fuzz` | 对新发现的活跃 HTTP 探测进行目录/文件暴力破解(ffuf) | | `--no-subfinder` | 在子域名枚举中跳过 subfinder(被动 OSINT)步骤 | 所有标志都是可选的。默认的 Docker CMD 启用了除 `--no-subfinder` 之外的所有标志。 **轻量扫描**(仅新/修改的资产): ``` sudo docker run --rm -v $(pwd):/autobb --init --shm-size=2g --net autobbnet autobb --ports --dns-brute --nuclei ``` ### fullscan.py — 完整漏洞扫描 对配置窗口内所有活跃主机运行 nuclei(high/critical 级别)。 ``` sudo docker run --rm -v $(pwd):/autobb --init --shm-size=2g --net autobbnet --entrypoint python autobb fullscan.py ``` ### export.py — 数据库导出 ``` sudo docker run --rm -v $(pwd):/autobb --net autobbnet --entrypoint python autobb export.py [OPTIONS] ``` | 选项 | 描述 | |--------|-------------| | `-g {scopes,domains,ports,http_probes}` | 要导出的集合 | | `-s SCOPE` | 按范围名称筛选(默认:所有配置的范围) | | `-a DAYS` | 仅导出 N 天内添加的条目 | | `-l DAYS` | 仅导出 N 天内活跃的条目(默认:30) | | `-p FIELD` | 仅打印单个字段而非完整 JSON | 示例: ``` # 列出某个 scope 下的所有 live domains export.py -g domains -s hackerone -p host # 最近的 HTTP probes 作为 JSON export.py -g http_probes -l 7 # 过去2天内添加的 Domains export.py -g domains -a 2 -p host ``` ## 配置 将 `config.dist.yaml` 复制为 `config.yaml`。关键部分: ### 范围 ``` scope: - name: hackerone domains: [hackerone.com] # subs_recon: true # enabled by default # cidr: [127.0.0.1/32] # ips: [1.2.3.4] # domains_file: extra_domains.txt # cidr_file: extra_cidrs.txt # ips_file: extra_ips.txt # sub_refilters: # regex filters to exclude subdomains # - \.(stage|dev)\.hackerone\.com$ ``` 范围也可以拆分为单独的文件: ``` scope: !include ./scopes.yaml ``` ### 警报 支持同时使用一个或多个后端。 ``` alerts: use: telegram # single backend # use: [telegram, smtp] # multiple backends telegram: token: "BOT_TOKEN" chat_id: "CHAT_ID" msg_max_size: 4000 vkteams: host: myteam.corp.com token: "BOT_TOKEN" chat_id: "CHAT_ID" msg_max_size: 1000 smtp: host: smtp.example.com port: 587 tls: true # STARTTLS (port 587) ssl: false # implicit SSL (port 465) username: user@example.com password: "APP_PASSWORD" from: autobb@example.com to: - me@example.com subject: autobb alert msg_max_size: 4000 timeout: 30 ``` 当超过 `msg_max_size` 时,完整消息将作为 `.txt` 文件附件(telegram/smtp)或上传文件(vkteams)发送。 ### Nuclei 自定义模板可以添加到捆绑的 `nuclei-templates/` 旁边: ``` nuclei: cmd: ['nuclei', '-no-color', '-jsonl', '-t', './nuclei-templates', '-t', './nuclei-my-templates'] exclude_templates: - ./nuclei-templates/http/technologies/tech-detect.yaml ``` ### 警报过滤器 从通知中过滤掉嘈杂的 nuclei 发现: ``` juicer_filters: cname: [] tls_dns: [] title404: [] location: [] ``` ## 常见问题 ### 使用 dnsvalidator 获取新鲜解析器 ``` git clone https://github.com/vortexau/dnsvalidator.git sudo docker build -t dnsvalidator ./dnsvalidator sudo docker run --rm -v /tmp:/dnsout -t dnsvalidator -threads 20 -o /dnsout/resolvers.txt mv /tmp/resolvers.txt ./resolvers ``` ### 修复 "nf_conntrack: table full, dropping packet" ``` echo "net.netfilter.nf_conntrack_max=1048576" | sudo tee -a /etc/sysctl.conf sudo sysctl -p ```
标签:bug bounty, dnsgen, dnsx, Docker, ffuf, GitHub, Google, MongoDB, Nuclei, puredns, SMTP, subfinder, Telegram, VK Teams, 代理支持, 内容发现, 变化检测, 告警, 安全防御评估, 实时处理, 密码管理, 开源, 持续监控, 插件系统, 漏洞自动化, 请求拦截, 逆向工具, 风险评分