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, 域名收集, 大语言模型, 实时处理, 密码管理, 无后门, 逆向工具