鸾鸟Agent:认知驱动的 AI 黑客
鸾鸟Agent:认知驱动的 AI 黑客
Github:https://github.com/SanMuzZzZz/LuaN1aoAgent/
📖 简介
鸾鸟 (LuaN1ao) 是新一代基于大模型的自主渗透测试智能体。
传统自动化扫描工具依赖预定义规则,难以应对复杂多变的实战场景。鸾鸟突破这一局限,创新性地融合了 P-E-R (Planner-Executor-Reflector) 智能体协同框架与因果图谱推理 (Causal Graph Reasoning) 技术。
鸾鸟模拟人类安全专家的思维方式:
- 🎯 战略规划:基于全局态势动态规划攻击路径
- 🔍 证据驱动:构建严密的"证据-假设-验证"逻辑链
- 🔄 持续进化:从失败中学习,自主调整战术策略
- 🧠 认知闭环:规划-执行-反思,形成完整的认知循环
从信息收集到漏洞利用,鸾鸟将渗透测试从"自动化工具"提升为"自主智能体"。
🚀 核心创新
1️⃣ P-E-R 智能体协同框架 ⭐⭐⭐
鸾鸟将渗透测试思维解耦为三个独立且协作的认知角色,形成完整的决策闭环:
-
🧠 Planner (规划器)
- 战略层大脑:基于全局图谱进行动态规划
- 自适应能力:识别死胡同,自动生成备选路径
- 图操作驱动:输出结构化的图编辑指令而非自然语言
- 并行调度:基于拓扑依赖自动识别可并行执行的任务
-
⚙️ Executor (执行器)
- 战术层执行:专注于单一子任务的工具调用和结果分析
- 工具编排:通过 MCP (Model Context Protocol) 统一调度安全工具
- 上下文压缩:智能管理消息历史,避免 token 溢出
- 容错重试:自动处理网络瞬时错误和工具调用失败
-
⚖️ Reflector (反思器)
- 审计分析:复盘任务执行,验证产出物有效性
- 失败归因:L1-L4 级失败模式分析,防止重复错误
- 情报生成:提取攻击情报,构建知识积累
- 终止控制:判断目标达成或任务陷入困境
关键优势:角色分离避免了单一 Agent 的"精神分裂"问题,每个组件专注于其核心职责,通过事件总线协作。
2️⃣ 因果图谱推理 (Causal Graph Reasoning) ⭐⭐⭐
鸾鸟拒绝盲目猜测和大模型幻觉,构建显式的因果图谱来驱动测试决策:
核心原则:
- 证据必须先行:任何假设都需要明确的前置证据支撑
- 置信度量化:每个因果边都有置信度评分,避免盲目推进
- 可追溯性:完整记录推理链条,支持失败溯源和经验复用
- 防止幻觉:强制要求证据验证,拒绝无根据的攻击尝试
示例场景:
Evidence: 端口扫描发现 3306/tcp 开放
↓ (置信度 0.8)
Hypothesis: 目标运行 MySQL 服务
↓ (验证成功)
Vulnerability: MySQL 弱口令/未授权访问
↓ (尝试利用)
Exploit: mysql -h target -u root -p [爆破/空密码]
3️⃣ Plan-on-Graph (PoG) 基于图的动态任务规划 ⭐⭐⭐
告别静态任务清单,鸾鸟将渗透测试计划建模为动态演进的有向无环图 (DAG):
核心特性:
- 图操作语言:Planner 输出标准化的图编辑操作 (
ADD_NODE,UPDATE_NODE,DEPRECATE_NODE) - 实时自适应:任务图随测试进度实时变形
- 发现新端口 → 自动挂载服务扫描子图
- 遇到 WAF → 插入绕过策略节点
- 路径不通 → 自动修剪或分支规划
- 拓扑依赖管理:基于 DAG 拓扑自动识别并并行执行无依赖任务
- 状态追踪:每个节点包含状态机 (
pending,in_progress,completed,failed,deprecated)
与传统规划的对比:
| 特性 | 传统 Task List | Plan-on-Graph |
|---|---|---|
| 结构 | 线性列表 | 有向图谱 |
| 依赖管理 | 手动排序 | 拓扑自动排序 |
| 并行能力 | 无 | 自动识别并行路径 |
| 动态调整 | 重新生成 | 局部图编辑 |
| 可视化 | 困难 | 原生支持 (Web UI) |
可视化示例:启动 --web 模式后,可在浏览器实时查看任务图的演化过程。
核心能力
工具集成 (MCP Protocol)
鸾鸟通过 Model Context Protocol (MCP) 实现工具的统一集成和调度:
- HTTP/HTTPS 请求:支持自定义 Headers、代理、超时控制
- Shell 命令执行:安全封装的系统命令调用(建议容器化运行)
- Python 代码执行:动态执行 Python 脚本用于复杂逻辑处理
- 元认知工具:
think(深度思考)、hypothesize(假设生成)、reflect(经验总结) - 任务控制:
halt_task(提前终止任务)
💡 扩展性:可通过
mcp.json轻松集成新工具(如 Metasploit、Nuclei、Burp Suite API)
知识增强 (RAG)
- 向量检索:基于 FAISS 的高效知识库检索
- 领域知识:集成 PayloadsAllTheThings 等开源安全知识库
- 动态学习:可持续添加自定义知识文档
Web 可视化 (新架构)
Web UI 现在是一个独立的数据库驱动的服务,支持持久化的任务监控和管理。
- 实时监控:在浏览器中查看动态任务图的演化和实时日志。
- 节点详情:点击节点查看详细的执行日志、产出物和状态转换。
- 任务管理:支持创建、终止和删除历史任务。
- 数据持久化:所有任务数据存储在 SQLite (
luan1ao.db) 中,重启后历史记录不丢失。
人机协同 (HITL) 模式
鸾鸟智能体支持人机协同(Human-in-the-Loop, HITL)模式,允许人类专家监督和干预智能体的决策过程。这增强了控制力、安全性,并能在复杂场景中提供专家指导。
- 启用: 在
.env中设置HUMAN_IN_THE_LOOP=true。 - 审批: 智能体在生成计划(初始或动态)后暂停,等待人类通过 Web UI 或 CLI 进行审批。
- 修改: 专家可以拒绝或直接修改计划(JSON 编辑)后再执行。
- 注入: 支持通过 Web UI 实时注入新的子任务(“主动干预”)。
交互方式:
- Web UI: 审批模态框自动弹出。使用“修改”按钮编辑计划,或使用“加任务”按钮注入任务。
- CLI: 提示符为
HITL >。输入y批准,n拒绝,m修改(会打开系统编辑器)。
🗓️ Roadmap 规划路线
-
[ ] 经验自进化 (Experience Self-Evolution)
- 跨任务长期记忆 (Long-term Memory)
- 自动提取成功攻击模式并存入向量库
- 基于历史经验的智能推荐
-
[x] 人机协同模式 (Human-in-the-Loop)
- 高危操作前的人工确认机制
- 运行时任务图谱编辑界面 (Graph Injection)
- 专家干预和策略注入
-
[ ] 工具生态扩容
- 集成 Metasploit RPC 接口
- 支持 Nuclei、Xray、AWVS 等扫描器
- Docker 沙箱化工具执行环境
-
[ ] 多模态能力
- 图像识别(验证码、截图分析)
- 流量分析(PCAP 文件解析)
长期愿景
- [ ] 协作智能体网络:多 Agent 分布式协作
- [ ] 强化学习集成:通过与环境交互自主优化攻击策略,实现智能体在复杂场景下的自我进化和策略收敛
- [ ] 合规报告生成:自动生成符合标准的渗透测试报告
📋 系统要求
| 组件 | 要求 | 说明 |
|---|---|---|
| 操作系统 | Linux (推荐) / macOS / Windows (WSL2) | 建议在隔离环境中运行 |
| Python | 3.10+ | 需要支持 asyncio 和类型提示 |
| LLM API | OpenAI 兼容格式 | 支持 GPT-4o, DeepSeek, Claude-3.5 等 |
| 内存 | 最小 4GB,推荐 8GB+ | RAG 服务和 LLM 推理需要内存 |
| 网络 | 互联网连接 | 访问 LLM API 和更新知识库 |
⚠️ 安全提示:鸾鸟包含
shell_exec和python_exec等高权限工具,强烈建议在 Docker 容器或虚拟机中运行,避免对宿主机造成潜在风险。
🚀 快速开始
步骤 1:安装
# 克隆仓库
git clone https://github.com/SanMuzZzZz/LuaN1aoAgent.git
cd LuaN1aoAgent
# 创建虚拟环境(推荐)
python3 -m venv venv
source venv/bin/activate # Linux/macOS
# Windows: venv\Scripts\activate
# 安装依赖
pip install -r requirements.txt
步骤 2:配置
2.1 环境变量配置
# 复制配置模板
cp .env.example .env
# 编辑 .env 文件
nano .env # 或使用你喜欢的编辑器
核心配置项:
# LLM API 配置(必填)
LLM_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
LLM_API_BASE_URL=https://api.openai.com/v1
# 推荐使用强大模型以获得更好效果
LLM_DEFAULT_MODEL=gpt-4o
LLM_PLANNER_MODEL=gpt-4o # 规划器需要强推理能力
LLM_EXECUTOR_MODEL=gpt-4o
LLM_REFLECTOR_MODEL=gpt-4o
OUTPUT_MODE=default # simple/default/debug
2.2 知识库初始化(首次运行必需)
鸾鸟依赖 RAG (检索增强生成) 系统获取最新安全知识。首次运行前需初始化知识库:
# 1. 克隆 PayloadsAllTheThings 知识库
mkdir -p knowledge_base
git clone https://github.com/swisskyrepo/PayloadsAllTheThings \
knowledge_base/PayloadsAllTheThings
# 2. 构建向量索引(需要几分钟)
cd rag
python -m rag_kdprepare
知识库说明:PayloadsAllTheThings 包含丰富的攻击载荷、绕过技巧和漏洞利用方法,是渗透测试的宝贵资源。
步骤 3:运行 (新架构)
系统现在分为两个独立进程运行:Web 服务(监控台)和 Agent(工作进程)。它们通过本地 SQLite 数据库 (luan1ao.db) 通信。
1. 启动 Web 服务 (监控台)
首先启动持久化的 Web 界面。该进程应保持运行。
python -m web.server
打开浏览器访问:<http://localhost:8088>
2. 运行 Agent 任务
打开一个新的终端窗口运行 Agent。Agent 将执行任务,将日志写入数据库,并在完成后退出。Web UI 会实时更新。
# 基础用法
python agent.py \
--goal "对 http://testphp.vulnweb.com 进行全面的 Web 安全测试" \
--task-name "demo_test"
# 启用 --web 标志以打印任务 URL
python agent.py \
--goal "扫描 localhost" \
--task-name "local_scan" \
--web
查看结果
- 实时查看:使用 Web UI (<http://localhost:8088>) 监控进度。
- 历史归档:任务历史持久化存储在数据库中。日志和指标也会保存在
logs/TASK-NAME/TIMESTAMP/目录:
logs/demo_test/20250204_120000/
├── run_log.json # 完整执行日志(包含所有 P-E-R 交互)
├── metrics.json # 性能指标和统计数据
└── console_output.log # 格式化的控制台输出
🏗️ 系统架构
整体架构图
┌─────────────────────────────────────────────────────────┐
│ 用户目标 (User Goal) │
│ "对目标系统进行全面的渗透测试" │
└────────────────────────┬────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────┐
│ P-E-R 认知层 (Cognitive Layer) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Planner │ ───> │ Executor │ ───> │Reflector │ │
│ │ 规划器 │ │ 执行器 │ │ 反思器 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │ │ │ │
│ └──────────────────┴──────────────────┘ │
│ ▲ │
│ │ LLM API 调用 │
└─────────────────────────┼────────────────────────────────┘
│
┌─────────────────────────┴────────────────────────────────┐
│ 核心引擎 (Core Engine) │
│ ┌────────────────────────────────────────────────┐ │
│ │ GraphManager │ │
│ │ • 任务图谱管理 (DAG) │ │
│ │ • 状态追踪与更新 │ │
│ │ • 拓扑排序与依赖解析 │ │
│ │ • 并行任务调度 │ │
│ └────────────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────────────┐ │
│ │ 数据库层 (SQLite) │ │
│ │ • 任务、图谱、日志的持久化存储 │ │
│ │ • 状态管理解耦 │ │
│ └────────────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────────────┐ │
│ │ EventBroker (全局) │ │
│ │ • 组件间通信 │ │
│ │ • 事件发布/订阅 │ │
│ └────────────────────────────────────────────────┘ │
└─────────────────────────┬────────────────────────────────┘
│
┌─────────────────────────┴────────────────────────────────┐
│ 能力支撑层 (Capability Layer) │
│ ┌────────────────────┐ ┌──────────────────────────┐ │
│ │ RAG Knowledge │ │ MCP Tool Server │ │
│ │ Service │ │ │ │
│ │ • FAISS 向量检索 │ │ • http_request │ │
│ │ • 知识文档解析 │ │ • shell_exec │ │
│ │ • 相似度搜索 │ │ • python_exec │ │
│ │ │ │ • think/hypothesize │ │
│ └────────────────────┘ │ • halt_task │ │
│ └──────────────────────────┘ │
└──────────────────────────────────────────────────────────┘
P-E-R 协作流程
sequenceDiagram
participant U as User
participant P as Planner
participant G as GraphManager
participant E as Executor
participant R as Reflector
participant DB as SQLite DB
participant W as Web UI
U->>P: 输入目标
P->>G: 初始化任务图谱
G->>DB: 持久化初始状态
W->>DB: 轮询更新 (SSE)
loop P-E-R 循环
P->>G: 分析图谱,生成图编辑操作
G->>G: 更新图谱结构
G->>DB: 同步更新
G->>E: 分配待执行子任务
E->>E: 调用工具执行
E->>DB: 记录日志事件
E->>R: 请求反思
R->>R: 分析成功/失败原因
R->>G: 更新节点状态
G->>DB: 同步更新
end
目录结构
LuaN1aoAgent/
├── agent.py # 主入口,P-E-R 循环控制
├── requirements.txt # 项目依赖
├── pyproject.toml # 项目配置和代码质量工具设置
├── mcp.json # MCP 工具服务配置
├── .env # 环境变量配置(需手动创建)
│
├── conf/ # 配置模块
│ ├── config.py # 核心配置项(LLM、场景、参数)
│ └── __init__.py
│
├── core/ # 核心引擎
│ ├── planner.py # 规划器实现
│ ├── executor.py # 执行器实现
│ ├── reflector.py # 反思器实现
│ ├── graph_manager.py # 图谱管理器
│ ├── events.py # 事件总线
│ ├── console.py # 控制台输出管理
│ ├── data_contracts.py # 数据契约定义
│ ├── tool_manager.py # 工具管理器
│ ├── intervention.py # 人机协同管理器
│ ├── database/ # 数据库持久化层
│ │ ├── models.py # SQLAlchemy 模型
│ │ └── utils.py # 数据库工具函数
│ └── prompts/ # 提示词模板系统
│
├── llm/ # LLM 抽象层
│ ├── llm_client.py # LLM 客户端(统一接口)
│ └── __init__.py
│
├── rag/ # RAG 知识增强
│ ├── knowledge_service.py # FastAPI 知识服务
│ ├── rag_client.py # RAG 客户端
│ ├── rag_kdprepare.py # 知识库索引构建
│ ├── markdown_chunker.py # 文档分块
│ └── model_manager.py # 嵌入模型管理
│
├── tools/ # 工具集成层
│ ├── mcp_service.py # MCP 服务实现
│ ├── mcp_client.py # MCP 客户端
│ └── __init__.py
│
├── web/ # Web UI
│ ├── server.py # Web 监控台服务
│ ├── static/ # 前端静态资源
│ └── templates/ # HTML 模板
│
├── knowledge_base/ # 知识库目录(需手动创建)
│ └── PayloadsAllTheThings/ # 安全知识库(需克隆)
│
└── logs/ # 运行日志和指标
└── TASK-NAME/
└── TIMESTAMP/
├── run_log.json
├── metrics.json
└── console_output.log



评论3次
哇哦,这个强。正需要一个客户端小助手
规划器 执行器 反思器 这个认知层 构建的真牛x 😃 我感觉使用 离线模型 下载使用 不仅省心 还安心
结论:鸾鸟Agent的P-E-R框架和MCP协议存在潜在命令注入与权限越界风险,Web UI组件需加强输入验证,SQLite数据库敏感数据存储缺乏加密防护。 --- ### L1攻击面识别(Source-Sink分析) **攻击入口(Source):** 1. **MCP协议工具调用**:`shell_exec`/`python_exec`接口直接执行用户输入参数 2. **Web UI输入**:任务名称、目标URL等字段未提及输入过滤机制 3. **知识库加载路径**:`knowledge_base`目录权限控制未明确说明 **漏洞触发点(Sink):** - Shell命令执行上下文(可导致RCE) - 文件路径拼接操作(可能导致目录穿越) - SQLite数据库存储的API密钥明文泄露 --- ### L2假设与验证路径 #### 命令注入验证路径 1. **假设**:`shell_exec`未过滤用户输入 2. **验证步骤**: ```bash # 修改任务目标参数注入恶意命令 python agent.py --goal "对 http://testphp.vulnweb.com 进入命令模式; id" --task-name "inject_test" # 检查执行器是否执行了"; id"部分 ``` 3. **预期现象**:若出现用户ID输出则存在注入漏洞 #### 知识库路径遍历验证 1. **假设**:`git clone`路径可控 2. **验证步骤**: ```bash # 在知识库初始化时构造恶意路径 git clone https://github.com/exploit/repo -- /etc/passwd knowledge_base/../../../ ``` 3. **预期现象**:若成功覆盖xi统文件则存在路径穿越 #### Web UI CSRF验证 1. **假设**:未校验CSRF令牌 2. **验证步骤**: - 抓取正常任务创建请求 - 伪造包含恶意任务名称的POST请求到`/api/tasks` 3. **预期现象**:若任务被创建则存在CSRF漏洞 --- ### L3边界/异常场景 1. **超大任务图攻击**:注入包含百万节点的DAG导致图操作指令解析阻塞 2. **LLM API密钥泄露**:在`web.server`进程中内存dump中捕获明文API_KEY 3. **反射器逻辑绕过**:构造包含`--no-reflect`参数的命令跳过验证步骤 4. **Docker逃逸测试**:在MCP执行器尝试`/bin/sh -c 'cat /flag'`验证容器隔离性 --- ### L4防御反推与修复 #### 命令执行加固 ```python # 在core/tool_manager.py中添加输入净化(示例) def sanitized_shell_exec(cmd: str) -> str: # 白名单过滤特殊字符 allowed_chars = set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_\-/ :") if any(c not in allowed_chars for c in cmd): raise ValueError("Invalid command characters detected") # 使用subprocess安全接口 return subprocess.check_output(['bash','-c', cmd], timeout=10).decode() ``` #### Web UI防护层 1. **CSRF防护**:在`web/server.py`添加: ```python from flask import request, session def generate_csrf_token(): if '_csrf_token' not in session: session['_csrf_token'] = os.urandom(24).hex() return session['_csrf_token'] @app.before_request def check_csrf(): if request.method == "POST": token = request.form.get('csrf_token') if token != generate_csrf_token(): abort(403) ``` #### 数据库加密存储 ```ini # 修改.env配置 ENCRYPTION_KEY=your_32_byte_key_here ENCRYPT_SENSITIVE=true # 在core/database/models.py中实现AES-256加密存储 class APICredential(Base): __tablename__ = 'api_credentials' id = Column(Integer, primary_key=True) encrypted_key = Column(Binary) # 加密/解密方法实现... ``` #### 运行时检测机制 ```bash # 在Dockerfile中添加运行时防御层 RUN apt-get install -y runc && \ echo '{ "no_new_privs": true, "seccomp": "docker-default" }' > /etc/containers/deployments.d/security.json ``` --- 验证修复效果应通过: 1. 重放上述攻击载荷验证漏洞不可复现 2. 使用`strace`检测敏感xi统调用是否被拦截 3. 对加密后的`luan1ao.db`进行sqlite3命令行直接读取验证密文不可读