AquaInferno/RedTeamAI

GitHub: AquaInferno/RedTeamAI

一个基于 Ollama 和 MCP 协议的个人红队自动化实验室,串联侦察、漏洞扫描、漏洞利用研究与报告生成,支持 CLI 和 MCP 服务器两种模式。

Stars: 0 | Forks: 0

# RedTeam MCP 个人红队自动化实验室:侦察 → 漏洞扫描 → 漏洞利用研究 → 报告生成,既可以作为由 Ollama 驱动的独立 CLI 工具 (`ai_controller.py`)使用,也可以作为真实的 MCP 服务器 (`orchestrator.py`),供 Claude Desktop(或任何其他 MCP 客户端) 直接驱动。 ## 使用范围 —— 运行任何操作前请先阅读此说明 **此工具仅对明确列在 `config/allowlist.json` 中的设备进行操作。** 该文件被刻意地未提交到 git(参见 `.gitignore`)—— 每次全新的克隆、虚拟机或新安装都必须 创建其自己的副本,并填入该安装的操作者实际拥有且被授权测试的设备。 不支持禁用此检查的方法,并且代码中未附带默认的 白名单 —— 如果 `config/allowlist.json` 不存在,项目将拒绝 导入。这是刻意为之的。 如果你要在新机器上为自己进行设置,或者将其 交给其他人:**要做的第一件事就是创建并正确 填写你自己的 `config/allowlist.json`。** 请在安装 任何其他内容之前执行此操作。 没有签署的工作说明书 (SOW),不得用于客户工作。仅限个人实验室设备。 ## 架构 ``` ai-redteam/ ├── config/ │ ├── allowlist.example.json # template, safe to commit │ └── allowlist.json # YOUR real scope — gitignored, create this yourself ├── tools/ │ ├── allowlist.py # scope enforcement + safe subprocess helper (everything else depends on this) │ ├── recon.py # nmap, dig, whois, banner grab, http headers │ ├── vuln_scan.py # nikto, nmap NSE vuln scripts, security header check │ ├── exploit.py # searchsploit/msf_search (read-only lookups) + reverse shell TEXT generator │ └── reporting.py # SQLite-backed finding log + Markdown report generator ├── ai_controller.py # standalone Ollama-driven CLI controller (no MCP) ├── orchestrator.py # the real MCP server (FastMCP), for Claude Desktop / any MCP client ├── reports/ # generated findings.db + markdown reports — gitignored, personal data └── venv/ # Python virtualenv — gitignored, recreate per machine ``` `recon.py`/`vuln_scan.py`/`exploit.py`/`reporting.py` 中的 每个工具函数在执行任何操作之前,都会独立地根据 `tools/allowlist.py` 重新验证其目标 —— 这不仅仅是在控制器/编排器 层强制执行,因此不存在单一的绕过点。 ## 全新设置(新机器、新虚拟机或朋友的独立安装) ### 1. 首先克隆并设置范围 ``` git clone ai-redteam cd ai-redteam cp config/allowlist.example.json config/allowlist.json ``` 编辑 `config/allowlist.json` —— 将占位符 IP 替换为你 自己拥有的设备: ``` [ {"ip": "192.0.2.10", "label": "My Phone"}, {"ip": "192.0.2.11", "label": "My Desktop"}, {"ip": "192.0.2.12", "label": "My Laptop"} ] ``` ### 2. Python 环境 ``` python3 -m venv venv source venv/bin/activate pip install "mcp[cli]" requests ``` 验证范围配置是否正确加载: ``` python3 -c "from tools.allowlist import ALLOWLIST; print(ALLOWLIST)" ``` 如果出现 `ScopeConfigError` 错误,请返回第 1 步 —— 你跳过了 创建 `config/allowlist.json`。 添加一个便捷的别名,这样你就不必在每个新终端中记住 venv 路径 (Kali 默认使用 zsh): ``` echo "alias redteam-env='source ~/ai-redteam/venv/bin/activate && cd ~/ai-redteam'" >> ~/.zshrc source ~/.zshrc ``` 新终端:只需输入 `redteam-env` 即可准备就绪。 ### 3. 立即提交 这个项目曾经因为一次完整的操作系统擦除而丢失。不要等到它 “完成”才开始跟踪它: ``` git config --global user.email "you@example.com" # any consistent value works, doesn't need to be real git config --global user.name "Your Name" git add . git commit -m "initial setup" git push ``` ## 独立运行(Ollama 控制器,无 MCP) 需要一个具备工具调用能力的 Ollama 模型。原版的 `llama3.1:8b` 开箱 即用: ``` ollama pull llama3.1:8b ollama serve # or check `systemctl status ollama` — install.sh sets this up as a service on Linux ``` 在另一个终端中: ``` redteam-env python3 ai_controller.py ``` 在 `you>` 提示符处输入提示词。侦察/漏洞扫描/报告工具会自动 运行;`exploit.py` 中的任何内容(`searchsploit_query`、 `msf_search`、`generate_reverse_shell`)在运行之前,都会在终端中 提示你进行 `y/n` 确认,无论模型请求什么。 **请不要以相同的方式运行 `python3 orchestrator.py`** —— 请参阅下一 节,其传输方式完全不同。 ## 作为 MCP 服务器运行(orchestrator.py) `orchestrator.py` 使用 stdio/JSON-RPC 传输。直接在 终端中运行它并对其进行输入看起来会像卡住了一样 —— 它在等待 真实的 MCP 客户端,而不是键盘输入。 **独立测试**(MCP Inspector Web UI): ``` redteam-env mcp dev orchestrator.py ``` **快速脚本测试**(无 UI,执行真实的 `mcp.call_tool` 路径): ``` python3 -c " import asyncio from orchestrator import mcp async def main(): tools = await mcp.list_tools() print(f'{len(tools)} tools registered') result = await mcp.call_tool('list_findings', {}) print(result) asyncio.run(main()) " ``` ### 信任模型 —— 重要 与 `ai_controller.py` 不同,`orchestrator.py` 对于漏洞利用工具**没有基于 input() 的 确认门** —— stdio 没有终端可以进行提示。针对 `searchsploit_query`、`msf_search` 和 `generate_reverse_shell` 的人工检查点是**无论你将其连接到 哪个 MCP 客户端**(例如 Claude Desktop 自身的每次调用“允许此工具?”批准 UI)。在信任其处理任何与漏洞利用相关的事情之前,请确认你的 特定客户端实际上会逐次调用提示,而不是自动批准。 ## 安装到 Claude Desktop(桌面扩展 / .mcpb) Claude Desktop 不再为此使用手动编辑的 `claude_desktop_config.json` —— 它使用打包的 `.mcpb` 扩展包,通过 设置 → 扩展 → 高级设置 → 扩展开发者 → 安装扩展... 进行安装。 ### 构建扩展包 需要 Node/npm(与 Python venv 分开): ``` sudo apt install -y nodejs npm sudo npm install -g @anthropic-ai/mcpb ``` ``` mkdir ~/ai-redteam-mcpb cd ~/ai-redteam-mcpb mcpb init ``` 向导将生成一个 `manifest.json` —— **它会有几处 出错的地方,需要手动纠正**: 1. `mcp_config.command` —— 向导默认使用纯粹的 `python`。这 必须是你的 venv Python 的完整路径,例如 `/home/youruser/ai-redteam/venv/bin/python3` —— Claude Desktop 启动扩展时使用的是最简化的 PATH,其中不会有你的处于活动状态的 venv ,因此纯粹的 `python`/`python3` 会命中系统解释器, 而该解释器没有安装 `mcp`。 2. `mcp_config.args` —— 由于 `orchestrator.py` 位于此 扩展包文件夹之外,这必须是它的普通绝对路径(例如 `/home/youruser/ai-redteam/orchestrator.py`),不要带有 `${__dirname}` 前缀 —— 向导有时会将两者连接在一起,从而 产生损坏的无意义路径。 3. 指向 `${__dirname}/server/lib` 的 `env.PYTHONPATH` —— 这是 为其自带依赖项的扩展包准备的模板默认值。 我们不需要这样做(依赖项存在于 venv 中)—— 完全删除此键 。 4. `tools` 数组 —— 用 `orchestrator.py` 中的 真实工具列表填入,而不是仅仅留下你为了通过 向导而输入的任何占位符。随时可以通过以下命令重新生成: python3 -c " import asyncio from orchestrator import mcp async def main(): for t in (await mcp.list_tools()): print(f' {{\"name\": \"{t.name}\", \"description\": \"{(t.description or \"\").splitlines()[0]}\"}},') asyncio.run(main()) " 然后: ``` mcpb validate manifest.json mcpb pack . redteam-mcp.mcpb ``` 通过设置 → 扩展 → 高级设置 → 扩展 开发者 → 安装扩展... 进行安装,指向生成的 `.mcpb` 文件。 **此扩展包不可在机器/用户之间移植** —— 它内置了 绝对路径(你的主目录、你的 venv 位置)。新的 机器、虚拟机或朋友的安装需要使用他们自己的路径重新运行整个 `mcpb init`/`pack` 过程。这也是为什么 构建的 `.mcpb` 文件和 `manifest.json`(一旦其中包含真实路径) 被 gitignore 忽略而不是被提交的原因。 ## 硬件/驱动程序说明(NVIDIA + Ollama) 如果 Ollama 的日志显示它尽管有 NVIDIA 显卡,却在 `Vulkan0` 而不是 `CUDA` 上加载模型,则可能是未安装专有驱动程序 (Kali 默认提供 `nouveau`)。修复: ``` sudo apt update && sudo apt full-upgrade -y sudo reboot # if a new kernel was pulled in sudo apt install -y linux-headers-$(uname -r) sudo apt install -y nvidia-driver sudo reboot nvidia-smi # should show your GPU + driver + CUDA version ``` 在对你关心的系统改动驱动程序之前,请先拍摄快照: ``` sudo apt install -y timeshift sudo timeshift --create --comments "pre-nvidia-driver" --tags D ``` 并检查安全启动状态(`mokutil --sb-state`)—— 如果已启用, 驱动程序安装将在下次启动时需要额外的 MOK 注册步骤, 这很容易出错。 ## 已知准确性警告 —— 本地 LLM 幻觉 一个进行工具调用的 8B 本地模型(llama3.1:8b),在测试中 既发明了工具输出中不存在的发现,也将原始 服务名称意译为更“听起来熟悉”但不正确的名称(例如 nmap 的字面服务名称 `msrpc` 被报告为 `Microsoft-DS`,这 是一个不同的、不相关的服务)。`ai_controller.py` 的系统提示词 有明确的反幻觉指令来缓解这种情况,但是 在信任或记录发现之前,**始终将模型的摘要与实际 工具结果中的原始 `stdout` 进行交叉核对** —— 将 工具结果视为基本事实,将模型的叙述视为未经验证的 摘要,尤其是在使用小型本地模型时。 ## 法律 仅供个人实验室使用。`config/allowlist.json` 中的每个设备都必须 是你拥有并被授权测试的设备。不得用于针对 该列表之外的任何设备。没有签署的工作说明书 (SOW),不得用于客户工作。
标签:AI风险缓解, DLL 劫持, LLM评估, MCP, Ollama, Python, 域名收集, 大语言模型, 实时处理, 密码管理, 无后门, 逆向工具