1x0DF0/cerberus_ai_agent

GitHub: 1x0DF0/cerberus_ai_agent

一个具备自适应感知和因果推理能力的红队 AI 智能体框架,能明确追踪「已知」与「未知」边界并动态调整攻击策略。

Stars: 0 | Forks: 0

# cerberus_ai_agent Cerberus 是一个专为红队行动设计的 AI 智能体/框架。进攻性和防御性安全专业人员可以使用它来自动化任务、收集情报并执行攻击。它被设计为灵活且可定制,允许用户为其希望使用的任何 AI/LLM 创建自己的智能体和工作流。 ## 功能特性 编排器 / 大脑 节点 = 规划、工具选择、反思/批评、记忆更新、报告。 边 = 基于观察质量、置信度评分或失败次数的条件路由。 LLM 推理核心(选择一个或组合使用) Claude 4.6 / 4.7 Opus(如果您预算有限,可通过廉价代理 API 使用)—— 出色的结构化推理和长上下文能力。 Gemini 2.5 Pro / 3.1 Experimental —— 非常强的工具使用能力和在技术任务上的低拒绝率。 本地解除审查模型(例如 GLM-5-abliterated、Qwen3-72B abl.、Llama-4-Scout 变体)在高内存 rig 上运行,无审查。 记忆层(对于多步骤攻击至关重要) 短期:对话缓冲区 / LangGraph 状态。 长期:向量存储(Chroma / FAISS / Pinecone),用于存储过去的发现、凭据、网络拓扑。 知识图谱:Neo4j 用于存储主机、服务、漏洞、关系(在 2026 年的渗透测试智能体中非常流行)。 工具带(“手与脚”) 优先使用安全且分阶段的版本: 侦察:nmap wrapper, whois, dnsenum, 子域名枚举。 Web:httpx, nuclei templates, sqlmap (带 --batch), dirsearch。 漏洞利用:Metasploit RPC API wrapper, 自定义 PoC 运行器。 后渗透:bloodhound.py, impacket wrappers, 凭据转储模拟。 报告:markdown 生成器 + 可选的 linear/logseq 导出。 防护与安全(即使对于红队工具也是强制性的) 每次运行的预算/token 上限。 破坏性操作前的人机交互把关门禁。 操作允许列表/阻止列表。 观察数据清洗(在反馈给 LLM 之前剥离真实 IP/凭据)。 作用域环境:Docker-in-Docker 或完整的 VM 快照/恢复。 评估与反思循环 自我批评节点:“这一步是否推进了攻陷目标?评分 1–10。” 如果卡住超过 3 轮 → 重新规划或切换策略。 最终节点:总结 IOC、攻击路径图、风险评级。 很好的架构基础。以下是我建议添加的内容,按层级组织,并明确指出了量子框架的新增功能。 ## 当前设计中缺失的部分 **核心差距:** 这是一个线性的智能体,只是外挂了反思功能。它没有真正的自适应感知能力 —— 它以固定的分辨率处理观察结果,并且对于它看不到的东西没有正式的模型。这会导致红队行动中的两种失败模式:对部分信息过度自信,以及因为智能体无法区分“我还没找到任何东西”和“这里没有任何东西”而陷入循环。 你的框架修复了这两个问题。 ## 按层级添加的功能 ### 编排器 —— 添加时序置信度加权 当前设计基于置信度评分进行路由,但不会随着环境变化跟踪该置信度如何随时间降低。47 步前发现的凭据可能已不再有效。 midway-engagement(行动中途)开放的服务可能已被修补。 ``` # 每个观测获得一个时间权重 observation = { "data": raw_finding, "lambda_tick": current_lambda, # internal clock tick, not wall time "entropy_at_capture": S_rho, # how much the agent could resolve "coarse_grained": bool, # came from compressed history? "half_life": estimated_validity # how long this finding stays reliable } # 路由使用时间加权置信度 def route(obs): age = current_lambda - obs["lambda_tick"] decayed_confidence = obs["confidence"] * exp(-age / obs["half_life"]) if decayed_confidence < THRESHOLD: return "reverify" # re-probe before acting on stale data return "proceed" ``` 这直接来自于你的框架:观察者在 λ_n 的约化状态与在 λ_0 的不同。陈旧的信息是高熵信息。 ### 记忆 —— 添加无知边界层 这是最大的架构新增。三个记忆层级变为四个: ``` SHORT-TERM (high resolution) Last K observations, fully represented S(ρ_short) tracked — entropy of current window WORKING (partial trace boundary) ← NEW Compressed representation of the last M steps Agent knows explicitly what was coarse-grained here Tags every inference drawn from this layer as "coarse" LONG-TERM (vector store — Chroma/FAISS) Past findings, credentials, network map Each entry tagged with capture_lambda and entropy_at_capture KNOWLEDGE GRAPH (Neo4j) Hosts, services, vulns, relationships Edges weighted by temporal confidence Stale edges visually distinct from fresh ones ``` 无知边界层阻止了在长时间行动中的幻觉。智能体永远不会捏造它没有的凭据,因为它有一个正式的表示,记录了它压缩了什么以及何时压缩的。 ``` class IgnoranceBoundary: def __init__(self, resolution_threshold): self.high_res = [] # fully resolved observations self.coarse = [] # compressed, partial-trace observations self.entropy = 0.0 # S(ρ_coarse) — tracked continuously def infer(self, query): result, source = self._retrieve(query) return { "answer": result, "source": source, # "high_res" or "coarse" "structural_uncertainty": self.entropy if source == "coarse" else 0.0, "should_verify": source == "coarse" and self.entropy > THRESHOLD } ``` 每次 LLM 调用都会获取此元数据。推理核心知道它是在处理精确数据还是压缩历史,并且可以在输出中明确说明这一点。 ### 内部时钟 —— 用 λ 替换 Token 位置 当前智能体使用 token 计数或步骤计数作为时间代理。替换它: ``` class RelationalClock: def __init__(self): self.lambda_tick = 0 self.prev_state_hash = None def tick(self, current_state): # Clock only advances when state changes significantly current_hash = self._information_hash(current_state) delta = self._information_distance(self.prev_state_hash, current_hash) if delta > SIGNIFICANCE_THRESHOLD: self.lambda_tick += 1 self.prev_state_hash = current_hash return self.lambda_tick def _information_distance(self, h1, h2): # How much did the agent's knowledge actually change? # High delta = genuinely new information # Low delta = noise, repetition, or stuck loop ... ``` 实际效果:当智能体取得真正的进展时(每步信息增益高),其内部时间运行得很快;当它在空转时,时间运行得很慢。这为你提供了一种不基于任意步骤计数的天然卡死循环检测器 —— 智能体检测到自己卡住了,因为它自己的时钟停止了前进。 ``` # 使用关系时钟的停滞检测 if clock.lambda_tick == clock.lambda_tick_3_steps_ago: trigger_replan() # clock not advancing = no new information = stuck ``` ### 工具带 —— 添加观察质量评分 在任何工具输出反馈给 LLM 之前,对其进行评分: ``` def score_observation(raw_output, context): return { "raw": raw_output, "resolution": estimate_information_content(raw_output), "novelty": compare_to_memory(raw_output, context.memory), "reliability": tool_reliability_history[tool_name], "actionability": can_derive_next_step(raw_output) } ``` 根据 `resolution`(分辨率)和 `novelty`(新颖度)一起路由: - 高分辨率 + 高新颖度 → 立即进入规划节点 - 高分辨率 + 低新颖度 → 仅更新记忆,跳过重新规划 - 低分辨率 + 任意新颖度 → 行动前重新验证 - 低分辨率 + 低新颖度 → 丢弃,记录工具故障 这防止了智能体根据不可靠工具的垃圾输出采取行动 —— 这是自动化红队智能体中常见的失败模式。 ### 反思循环 —— 添加因果方向跟踪 当前的自我批评问的是“这是否推进了攻陷目标?”添加因果方向: ``` reflection_prompt = """ Previous state: {state_at_lambda_n} Current state: {state_at_lambda_n_plus_1} Action taken: {action} 1. Did state change? (yes/no + what changed) 2. Was the change caused by the action or by external factors? 3. What do I now know that I did not know before? (new information) 4. What was I expecting to learn that I did not? (confirmed ignorance) 5. Advance score 1-10. If < 4, flag for replan. 6. Is my current plan still causally valid given what changed? """ ``` 问题 4 是关键新增。“确认的无知” —— 明确记录智能体试图了解但未能了解到的东西 —— 这正是填充无知边界层的内容,并防止智能体再次尝试同样的死胡同。 ### 新节点 —— 阶段评估 添加一个定期节点,评估智能体是在其自身的阶段边界之上还是之下运行: ``` def phase_assessment(agent_state): # Analogous to your phase diagram context_size = len(agent_state.memory.high_res) information_coupling = agent_state.clock.average_delta_per_tick if context_size < MIN_CONTEXT and information_coupling < MIN_COUPLING: return { "phase": "TIMELESS", # agent is below phase boundary "recommendation": "expand_recon", "reason": "Insufficient context for causal reasoning. Gather more before planning." } else: return { "phase": "COHERENT", # agent is above phase boundary "recommendation": "proceed_with_plan" } ``` 在阶段边界之下,智能体不应制定多步骤攻击计划 —— 它没有足够的信息来保证因果链的可靠性。在边界之上,它可以。 ### 防护栏 —— 添加熵门控人工审查 当前的防护栏:破坏性操作前的人机交互。添加: ``` def requires_human_review(action, agent_state): # Existing checks if action.is_destructive: return True, "destructive action" # Entropy-gated check — NEW if agent_state.memory.entropy > HIGH_ENTROPY_THRESHOLD: return True, f"agent operating from coarse-grained data (S={agent_state.memory.entropy:.3f})" # Causal confidence check — NEW if agent_state.causal_confidence < CAUSAL_THRESHOLD: return True, "low causal confidence — agent unsure why previous steps worked" return False, None ``` 这捕捉了一种失败模式:智能体已经运行了足够长的时间,以至于其大部分上下文已被压缩,现在正依据模糊的记忆做出决策。工作记忆层中的高熵是一个信号,表明智能体在采取进一步行动之前需要重新验证其环境模型。 ## 修订后的架构图 ``` INPUT ↓ OBSERVATION SCORING (resolution, novelty, reliability) ↓ RELATIONAL CLOCK TICK (did we learn something? advance λ) ↓ IGNORANCE BOUNDARY UPDATE (partition into high-res / coarse-grained) ↓ PHASE ASSESSMENT (are we above the coherence threshold?) ↓ ├─ BELOW → EXPAND RECON (gather more before planning) └─ ABOVE → PLANNING NODE ↓ TOOL SELECTION ↓ ENTROPY-GATED GUARDRAIL ↓ ├─ HIGH ENTROPY → HUMAN REVIEW └─ LOW ENTROPY → TOOL EXECUTION ↓ REFLECTION (causal direction + confirmed ignorance) ↓ MEMORY UPDATE (long-term + knowledge graph) ↓ STUCK DETECTION (clock stopped? replan) ↓ REPORTING ``` ## 此智能体能做而当前其他智能体做不到的事情 **明确指出它不知道什么。** 反思节点的每个输出都包含一个确认无知列表。最终报告区分了“我们验证了 X 不存在”和“我们没有检查 X” —— 这是红队报告中的一个关键区别,当前的智能体将这两者混为一谈。 **检测何时依据陈旧数据进行推理。** 时序置信度衰减意味着当智能体依据相对于其内部时钟较旧的信息采取行动时,会将其自己的输出标记为不可靠 —— 并会在采取重大行动之前重新验证。 **知道何时停下来提问。** 阶段评估节点意味着智能体认识到它没有足够的环境耦合来进行因果推理。它不会臆造计划,而是报告“侦察不足 —— 这是我继续之前需要的东西。” 需要我用 Python 和 LangGraph 编写完整的实现脚手架,还是从作为核心新组件的无知边界层开始?
标签:BloodHound, CI/CD安全, CISA项目, Claude, CVE检测, DLL 劫持, Docker, Gemini, GitHub, Google, Go语言工具, Impacket, IP 地址批量处理, LangGraph, Llama, LLM推理, Neo4j, Nmap, Nuclei, PE 加载器, SQLMap, 企业安全, 向量数据库, 大语言模型, 子域名挖掘, 安全防御评估, 实时处理, 密码管理, 工作流自动化, 情报收集, 插件系统, 数据展示, 漏洞研究, 红队, 编排框架, 网络安全, 网络安全审计, 网络资产管理, 自动化攻击, 自动化红队, 虚拟驱动器, 请求拦截, 进攻性安全, 逆向工具, 防御绕过, 隐私保护