tomerblum/AI-Powered-Recon-Assistant

GitHub: tomerblum/AI-Powered-Recon-Assistant

一款利用 LLM 将多种侦察工具的结构化扫描结果综合为优先级明确的攻击面 Markdown 报告的 CLI 工具。

Stars: 0 | Forks: 0

# AI 驱动的侦察助手 一个 CLI 工具,针对授权目标运行标准侦察工具,并使用 Claude 生成一份优先级明确的、人类可读的攻击面报告。 ![recon-assistant scanning scanme.nmap.org](https://static.pigsec.cn/wp-content/uploads/repos/cas/cf/cfbef3516cab5ca947ac6d0c221a00fdc07d2f89961b54da199d174823818692.svg) ## 功能介绍 输出内容(如上所示)是一份包含三个部分的 Markdown 报告: 1. **扫描元数据。** 记录了运行的内容、时间以及耗时。 2. **分模块章节。** 包含结构化发现的表格(事实来源),以及由 LLM 生成的分析,用于确定优先查看的内容。 3. **推荐的后续步骤。** 具体且可操作的分流建议。 LLM **不会执行扫描**。它读取由确定性的 Python 代码生成的结构化发现,并为其撰写叙述说明。这种分离是刻意为之:它使工具具有可预测性、可审计性,并且不可能被武器化为自主攻击者。 ### 查看输出效果 真实的、未经编辑的报告已提交到 [`samples/`](./samples/),因此无需安装任何软件,您就可以查看 `recon-assistant` 的生成内容: - [**`scanme.nmap.org`**](./samples/scanme.nmap.org_2026-06-27.md):一次包含所有四个模块的**主动**扫描(针对活动主机进行端口和技术栈指纹识别)。 - [**`nmap.org`**](./samples/nmap.org_2026-06-27.md):一次**被动**扫描(OSINT 和子域名枚举,不向目标发送流量)。 ## 开发初衷 该项目处于进攻性安全、应用级 AI/LLM 集成与 Python 工程的交汇点。它展示了一种将 LLM 与现有工具相结合的深思熟虑的方法:LLM 是阅读器和综合者,而不是执行者。 ## 架构 ``` ┌─────────────┐ ┌───────────────────┐ ┌──────────────┐ ┌──────────────┐ │ CLI │ -> │ Recon modules │ -> │ LLM │ -> │ Markdown │ │ (typer) │ │ (gather + typed │ │ client │ │ report │ │ │ │ pydantic model) │ │ (Claude) │ │ │ └─────────────┘ └───────────────────┘ └──────────────┘ └──────────────┘ ``` - **Modules** 各自收集一种类型的侦察数据并返回一个类型化的 Pydantic 模型。其中三个封装了外部工具(`subfinder`、`nmap`、`whatweb`);一个(`osint`)是通过公共 HTTP API 实现的纯 Python 代码。 - **Runner** 负责编排执行,优雅地处理超时和工具缺失错误,并对每一步进行计时。 - **LLM client** 将结构化的发现转化为 Markdown 分析章节。系统提示词在调用间会被缓存(Anthropic prompt caching)。 - **Report writer** 将结构化表格与 LLM 生成的叙述内容交织在一起。 ## 状态 **v0.1.0,早期开发阶段。** 四个 v1 模块均已发布,且架构已实现端到端的验证。 - [x] 子域名枚举(`subfinder`),被动 - [x] 端口扫描(`nmap`),仅主动模式,强度由扫描配置文件设置 - [x] 技术栈指纹识别(`whatweb`),仅主动模式 - [x] OSINT(RDAP 和证书透明度),被动,纯 Python,无需二进制文件 - [x] 示例报告已提交(见 [`samples/`](./samples/)) - [ ] HaveIBeenPwned 泄露数据源(需要付费的 API 密钥) - [ ] 将发现的子域名导入到端口和技术栈扫描器中(目前每个模块仅扫描目标主机) ## 安装说明 您需要 Python 3.11+ 以及您想使用的侦察工具。 ``` # 克隆 git clone https://github.com/tomerblum/AI-Powered-Recon-Assistant.git cd AI-Powered-Recon-Assistant # 安装(可编辑模式,包含 dev deps) pip install -e ".[dev]" # 配置 cp .env.example .env # add your ANTHROPIC_API_KEY cp recon-assistant.toml.example recon-assistant.toml # 安装 recon tools # macOS (Homebrew): brew install nmap subfinder # whatweb 不在 Homebrew 中,请从源码安装: git clone https://github.com/urbanadventurer/WhatWeb.git ~/WhatWeb ln -s "$HOME/WhatWeb/whatweb" "$(brew --prefix)/bin/whatweb" # (冒烟测试:`whatweb --version`) # Kali / Debian: # sudo apt install -y nmap whatweb subfinder ``` 该工具会在运行时检测缺失的二进制文件,并跳过受影响的模块同时提示安装建议,因此您无需安装所有工具即可运行扫描。 ## 使用说明 ``` # 被动扫描(默认):不向目标发送流量。运行 OSINT + subdomain enum。 recon-assistant scan example.com # 主动扫描:增加 nmap 端口扫描和 whatweb 指纹识别。 # 会向目标发送探测,因此仅在获得授权时运行。 recon-assistant scan example.com --active # 通过 profile 控制强度(独立于 --active): # light = top 100 端口,礼貌定时(温和;默认) # standard = top 1000 端口 + 服务/版本检测 # aggressive = 全部 65535 个端口,更快的定时(意味着 --active) recon-assistant scan example.com --active --profile standard recon-assistant scan example.com --profile aggressive # 自定义配置 / 输出目录 recon-assistant scan example.com --config ./prod.toml -o ./engagement-2026-q2/ ``` 运行 `recon-assistant scan --help` 获取完整的参数参考。 ### 选择 LLM 提供商 分析步骤是与提供商无关的。在 `recon-assistant.toml` 中设置 `llm.provider`: - **`anthropic`**(默认):原生 Anthropic Messages API,支持自适应思考(adaptive thinking)和提示词缓存(prompt caching)。需要在 `ANTHROPIC_API_KEY` 中设置 `sk-ant-...` 密钥。 - **`openai-compatible`**:任何兼容 OpenAI Chat Completions 的 endpoint(OpenRouter、Ollama、LM Studio 等)。设置 `base_url`、`model`(endpoint 的 slug)和 `api_key_env`。 OpenRouter 配置示例: ``` [llm] provider = "openai-compatible" base_url = "https://openrouter.ai/api/v1" model = "anthropic/claude-sonnet-4.5" # copy the exact slug from openrouter.ai/models api_key_env = "OPENROUTER_API_KEY" ``` 然后将 `OPENROUTER_API_KEY=sk-or-v1-...` 放入 `.env` 中。更换提供商只需修改配置,无需改动代码。 ### 各模块对应工具 | 模块 | 工具 | 模式 | 备注 | |--------------|----------------------|---------|------------------------------------------------| | `osint` | RDAP + crt.sh (HTTP) | passive | 纯 Python,无需二进制文件 | | `subdomains` | `subfinder` | passive | 证书透明度和公共 DNS 来源 | | `ports` | `nmap` | active | TCP connect scan (`-sT`),无需 root 权限 | | `tech_stack` | `whatweb` | active | HTTP 指纹识别;强度由配置文件设定 | ## 安全注意事项 - **API 密钥存储。** LLM API 密钥保存在被 gitignore 忽略的 `.env` 文件中,这与 `~/.aws/credentials`、`gh auth` 等工具的模型相同。在 Unix 上运行 `chmod 600 .env`。 - **无漏洞利用代码。** LLM 系统提示词将分析定位于防御者侧的分流(triage),并禁止生成 payload、漏洞利用代码或攻击指令。 - **默认被动模式。** `--active` 是一项明确的主动选择。若不使用此参数,则仅运行查询第三方数据源的模块,因此不会有任何数据包发送到目标。 - **无自主工具执行。** LLM 仅处理结构化数据。它从不决定运行哪个工具,从不执行 shell 命令,也从不发起超出分析调用范围的外部请求。该 pipeline 是确定性的 Python 代码。 ## 局限性 - 每个模块仅扫描目标主机。发现的子域名尚未反馈到端口和技术栈扫描器中。 - 扫描结果不会被缓存,因此对同一目标重新运行会再次调用工具。 - LLM 的分析质量仅取决于结构化输入的质量。垃圾进,听起来很客气的垃圾出。 ## 开发说明 ``` # 运行测试 pytest # 类型检查 mypy # Lint ruff check src tests ``` 测试基于已提交的 fixture 文件(捕获的工具输出)运行,没有实时子进程或网络调用。 ## 许可证 MIT。
标签:AI报告生成, GitHub, Python, 实时处理, 密码管理, 无后门, 自动化侦察, 逆向工具