------ 从 LLM 驱动主动防御,到"合法反制"智能体,再到 IPP 统一协议架构
当一个安全平台既能让 AI Agent 像安全专家一样审计你的系统,又能对已确认的攻击者执行"只打自己家"的合法反制,它就不再是传统意义的 EDR,而是一个攻防一体的主动网络防御平台。
参考:OpenGovernment v0.0.2 AI Agent 驱动的下一代主动网络防御平台:当大语言模型成为你的安全专家
📖 目录
- [1. 引言:从"会防御"到"会反击"](#1. 引言:从"会防御"到"会反击")
- [2. 平台总览:三个服务 · 三层防御 · 一个进攻翼](#2. 平台总览:三个服务 · 三层防御 · 一个进攻翼)
- [3. 核心架构(一):IPP 信息处理协议 ------ 统一一切组件的抽象内核](#3. 核心架构(一):IPP 信息处理协议 —— 统一一切组件的抽象内核)
- [4. 核心架构(二):去中心化数据库与进程级隔离](#4. 核心架构(二):去中心化数据库与进程级隔离)
- [5. 更新的主动防御模块(v0.2):从规则引擎到 AI 专家](#5. 更新的主动防御模块(v0.2):从规则引擎到 AI 专家)
- [6. 主动进攻模块(v0.2 核心新增):合法主动防御的智能体化](#6. 主动进攻模块(v0.2 核心新增):合法主动防御的智能体化)
- [7. 流式 Agent 对话:ChatGPT 式的实时推理过程](#7. 流式 Agent 对话:ChatGPT 式的实时推理过程)
- [8. 实战演示:从发现到反制的攻防全流程](#8. 实战演示:从发现到反制的攻防全流程)
- [9. 工程合规:许可策略与安全边界](#9. 工程合规:许可策略与安全边界)
- [10. 演进路线与未来展望](#10. 演进路线与未来展望)
- [11. 总结](#11. 总结)
1. 引言:从"会防御"到"会反击"
在过去一年多里,我们见证了 AI Agent 在网络安全领域的两条演进主线:
第一代(2026-07 之前):被动防御
数据采集 → 硬编码规则匹配 → 告警 → 人工研判 → 人工处置
第二代(2026-07):LLM 驱动的主动防御
数据采集 → AI Agent 自主分析 → LLM 研判误报 → 深度取证
第三代(2026-08,v0.2):攻防一体
防御发现 → LLM 确认攻击者 → 合法反制智能体执行反击
(封禁、沉洞、滥用举报、蜜罐拖延)+ 全过程审计留证
ActiveCybersecurity 平台在 v0.1 系列完成了"三层递进式 AI 防御体系"(标准检查 → Agentic 深度审计 → 高级取证),并在 v0.2 系列实现了一次架构级的跃迁:
| v0.2 新增/升级 | 具体内容 |
|---|---|
| ⚔️ 主动进攻翼 | agentic_offense(Strike 反制智能体)+ cyberoffensetools(反制工具箱 + 进攻门户) |
| 🧬 IPP 统一框架 | 全新 ipp/ 包:MCP / ACP / KGP / RP 四个对等协议,统一一切组件 |
| 🗄️ 去中心化数据库 | SQLite 独立进程 + WAL + 线程局部读连接,8 读 + 4 写并发压测零错误 |
| 🖥️ 去中心化层 | 每一层检查都在独立子进程中运行,互不阻塞 |
| 💬 流式 Agent 对话 | 前端实时渲染"思考 → 工具调用 → 最终结论"的完整过程 |
| 🤖 双 Agent 体系 | Aegis(防御,read-only)+ Strike(进攻,合法反制) |
本文将以源码级视角,重点拆解主动进攻模块 的设计与实现,同时回顾更新后的主动防御模块 ,最后剖析把两者粘合在一起的平台架构(IPP 协议框架 + 去中心化数据库 + 三服务 UI 拓扑)。
2. 平台总览:三个服务 · 三层防御 · 一个进攻翼
python run_ui.py 一条命令即可启动整个平台,它实际拉起 3 个服务:
| 服务 | 地址 | 角色 |
|---|---|---|
| 🛡️ 防御仪表盘 | http://127.0.0.1:8765 |
主 SPA------三层防御、Agentic 对话、统一发现表 |
| ⚔️ 进攻门户 | http://127.0.0.2:8766 |
反制门户(注意是 127.0.0.2 回环地址,与防御侧隔离) |
| 🗄️ 数据库服务器 | http://127.0.0.1:8767 |
独立进程的 SQLite(WAL、JSON-RPC、自动拉起) |
#mermaid-svg-IuDN2yGyY6Jwb0Ld{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-IuDN2yGyY6Jwb0Ld .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .error-icon{fill:#552222;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .marker{fill:#333333;stroke:#333333;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .marker.cross{stroke:#333333;}#mermaid-svg-IuDN2yGyY6Jwb0Ld svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-IuDN2yGyY6Jwb0Ld p{margin:0;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .cluster-label text{fill:#333;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .cluster-label span{color:#333;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .cluster-label span p{background-color:transparent;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .label text,#mermaid-svg-IuDN2yGyY6Jwb0Ld span{fill:#333;color:#333;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .node rect,#mermaid-svg-IuDN2yGyY6Jwb0Ld .node circle,#mermaid-svg-IuDN2yGyY6Jwb0Ld .node ellipse,#mermaid-svg-IuDN2yGyY6Jwb0Ld .node polygon,#mermaid-svg-IuDN2yGyY6Jwb0Ld .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .rough-node .label text,#mermaid-svg-IuDN2yGyY6Jwb0Ld .node .label text,#mermaid-svg-IuDN2yGyY6Jwb0Ld .image-shape .label,#mermaid-svg-IuDN2yGyY6Jwb0Ld .icon-shape .label{text-anchor:middle;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .rough-node .label,#mermaid-svg-IuDN2yGyY6Jwb0Ld .node .label,#mermaid-svg-IuDN2yGyY6Jwb0Ld .image-shape .label,#mermaid-svg-IuDN2yGyY6Jwb0Ld .icon-shape .label{text-align:center;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .node.clickable{cursor:pointer;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .arrowheadPath{fill:#333333;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-IuDN2yGyY6Jwb0Ld .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-IuDN2yGyY6Jwb0Ld .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-IuDN2yGyY6Jwb0Ld .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .cluster text{fill:#333;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .cluster span{color:#333;}#mermaid-svg-IuDN2yGyY6Jwb0Ld div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-IuDN2yGyY6Jwb0Ld rect.text{fill:none;stroke-width:0;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .icon-shape,#mermaid-svg-IuDN2yGyY6Jwb0Ld .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .icon-shape p,#mermaid-svg-IuDN2yGyY6Jwb0Ld .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .icon-shape .label rect,#mermaid-svg-IuDN2yGyY6Jwb0Ld .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-IuDN2yGyY6Jwb0Ld .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-IuDN2yGyY6Jwb0Ld .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-IuDN2yGyY6Jwb0Ld :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 🧬 ipp/ 框架 (v0.2)
⚔️ 主动进攻
🛡️ 主动防御 (三层递进)
🖥️ run_ui.py (Process 1 · ThreadingHTTPServer)
🛡️ 防御仪表盘 :8765
系统头/风险条/行动卡/Agentic对话/发现表
⚔️ 进攻门户 iframe :8766
(Strike Console / 目标表 / 审计日志)
💬 Agentic Chat /api/agent/*
Tier 1 standard_check
5 层快速扫描 ~2min · L1
Tier 2 agentic_check
9 层 + LLM 审查 ~5min · L2
Tier 3 advanced_check
8 取证模块 ~10min · L3
cyberoffensetools
StrikeEngine + 5 工具
agentic_offense
Strike Agent · 15 武器
ToolRegistry (MCP)
4 阶段管线
AgentRegistry (ACP)
defense / offense
KnowledgeGraphAPI (KGP)
攻防共享知识图谱
ReferenceManager (RP)
威胁情报引用
HookSystem · 9 生命周期事件
🗄️ database/server.py
Process 2 · :8767 · SQLite WAL
平台的核心设计哲学可以总结为三句话:
- 一切皆 IPP ------工具、智能体、知识图谱、数据库、甚至防御检查层,都被建模为统一的信息变换
IPP = (Input, Compute, Output); - 一切皆独立进程------数据库、每个检查层、每个工具脚本都拥有自己的进程,天然免疫单点故障;
- 攻防共享一张图------防御层确认的攻击者、进攻层执行的反制动作,全部沉淀到同一个知识图谱(KGP)与审计日志中,形成完整证据链。
3. 核心架构(一):IPP 信息处理协议 ------ 统一一切组件的抽象内核
详见:本地 AI 编程智能体的自洽架构:Codex Local 中信息处理协议(IPP)统一框架的设计与实现
3.1 IPP = (Input, Compute, Output) 与组合闭包
IPP 将平台上每一个计算单元(LLM Provider、Agent 引擎、工具、知识图谱、参考库)抽象为纯信息变换:
python
@dataclass
class IPPInput:
payload: Any = None
meta: Dict[str, Any] = field(default_factory=dict)
@dataclass
class IPPOutput:
ok: bool = True
payload: Any = None
error: Optional[str] = None
meta: Dict[str, Any] = field(default_factory=dict)
class IPP(abc.ABC, Generic[I, O]):
@abc.abstractmethod
def compute(self, inp: IPPInput) -> IPPOutput: ...
def __call__(self, inp): # 异常隔离包装
try:
return self.compute(inp)
except Exception as e:
return IPPOutput.fail(str(e))
术语辨析 :这里的 "Protocol" 更接近"处理规程"(SOP),而非通信协议。IPP 描述的是信息如何被接收、变换和产出 ------至于内部是本地函数、LLM 推理还是远程 RPC,都只是
compute()的不同实现。
这一抽象最重要的性质是组合闭包(Compositional Closure) :若 A、B 都是 IPP,则 B ∘ A 也是 IPP。代码中通过运算符重载实现:
python
def __rshift__(self, other): return compose(self, other) # A >> B == B∘A
class Composition(IPP):
def compute(self, inp):
mid = self.first(inp)
if not mid.ok:
return IPPOutput.fail(...) # 中间失败即短路,不污染下游
return self.second(IPPInput(payload=mid.payload, meta=mid.meta))
任意深度的管道(agent → tool → knowledge-graph → reference)都保持同一抽象 ,且每一级都有异常隔离------某级崩溃只会返回 IPPOutput.fail,不会中断整体流程。
3.2 对等协议生态:MCP / ACP / KGP / RP
ipp/ 框架内实现了四个彼此独立、地位对等的协议,全部都是完整的 IPP 实例:
| 协议 | 位置 | 角色 | 关键能力 |
|---|---|---|---|
| MCP | ipp/registries.py |
工具发现与调度 | ToolRegistry:按模型分发、JSON Schema 下发、4 阶段执行管线 |
| ACP | ipp/agent.py |
多智能体注册与协作 | AgentRegistry:能力卡片发现、子智能体生命周期 |
| KGP | ipp/knowledge.py |
知识图谱协议 | CRUD + BFS 遍历 + 全文搜索 + JSON 持久化 |
| RP | ipp/reference.py |
威胁情报引用库 | search → store → tag → export(JSON / BibTeX) |
ACP 的能力卡片 是智能体协作的关键------内部状态对协作者保持不透明(opaque),只暴露 AgentInfo:
python
@dataclass
class AgentInfo:
engine_id: str # "defense" / "offense"
name: str # "Codex (ActiveCyberDefense)" / "Strike (ActiveCyberOffense)"
description: str
capabilities: List[str] # 能力声明,如 ["defense","audit","llm-review","codex-tools"]
model: str
registered_at: str
平台启动时,两个智能体通过副作用注册进入同一个 ACP 注册中心:
- 🛡️ Aegis (防御):
engine_id="defense",capabilities 含defense / audit / llm-review / codex-tools - ⚔️ Strike (进攻):
engine_id="offense",capabilities 含offense / counter-strike / powershell / block / sinkhole / report / enrich / tarpit
KGP 知识图谱 的数据模型(与 Codex Local 同构):节点 attacker | host | domain | technique | finding,边 attacked | uses | resolved_to | flagged_by:
attacker (85.203.45.37) ──attacked──▶ host (MSI)
├──uses──▶ technique (T1110 Brute Force)
└──resolved_to──▶ domain (evil.example.com)
攻防双方共享同一张图 :防御层写入 finding:network:conn:85.203.45.37、attacker:85.203.45.37 节点,进攻层写入 agent-target:{ip}(status=attempted)与 agent-action:{tool}:{target}(ok 布尔)节点------一次攻击事件从"发现"到"反制"的全链路都被图化留证。
RP 参考协议 则是证据链的出口:Reference 携带 source(local/rdap/shodan/greynoise/abuseipdb/user)与 kind(evidence/technique/report/intel),既能导出 database/references.json,还能生成 BibTeX 格式的 references.bib------滥用报告中的每一条证据都有引用来源。
3.3 四阶段工具管线:resolve → validate → prepare → invoke
所有工具(无论防御还是进攻)都经由统一的 4 阶段生命周期执行:
args ─▶ resolve ─▶ validate ─▶ prepare ─▶ invoke ─▶ ToolResult
│ │ │ │
修复参数 Schema错误 审批闸门 副作用执行
(幂等) (结构化) (危险操作) (隔离)
- resolve:参数归一化修复;
- validate :按 JSON Schema 校验,错误结构化返回(
data={"validation_errors": [...]}),供 LLM 解析后自我纠正重试; - prepare :审批闸门 ------
requires_approval=True的工具若ctx.user_approved为假,则返回PreparedInvocation(approved=False, cancelled=True)短路,支持"拒绝"与"取消"两种语义; - invoke :执行副作用,任何异常被标记为
{tool_name} crashed: {e}。
每个阶段独立 try/except,且同步/异步双兼容 (事件循环运行中则经 ThreadPoolExecutor 提交)。防御侧的 tier_monitor(启动监控进程)、ps_execute,进攻侧的 block / sinkhole / powershell / full_strike 等危险武器都在 prepare 阶段声明了审批门。
3.4 HookSystem:9 个生命周期事件
ipp/hooks.py 定义了横切所有智能体循环的钩子系统:
| 事件 | 触发时机 |
|---|---|
SESSION_START |
会话首条消息 |
USER_PROMPT_SUBMIT |
用户消息提交 |
STOP |
循环即将退出(可阻断强制继续) |
TOOL_PRE_INVOKE / TOOL_POST_INVOKE |
工具执行前 / 后 |
SUBAGENT_START / SUBAGENT_STOP |
子智能体创建 / 结束 |
COMPACTION |
上下文被压缩 |
ERROR |
捕获异常 |
机制上:handler 链式执行,第一个返回 should_block=True 的 handler 立即短路 ;injected_text 逐 handler 累积注入上下文。内置的 create_content_policy_hook() 用正则检测模型拒答话术("as an AI..."、"that would be illegal..."),在 STOP 事件阻断退出并提示模型给出有用回答。
HookSystem 是平台攻防两侧安全策略的挂载点:
- 🛡️ 防御侧挂
create_defense_audit_hook()(TOOL_POST_INVOKE)→ 每次工具调用写成 KGP 事实节点; - ⚔️ 进攻侧挂
create_legal_boundary_hook()(STOP)→ 法律边界强制点(详见第 6 章)。
3.5 ContextSummarizer:三级渐进压缩
在 DeepSeek V4 百万级上下文之上,平台仍实现了 3 级渐进式上下文管理(ipp/context.py,token 估算优先 tiktoken cl100k_base):
| 级别 | 触发条件 | 策略 |
|---|---|---|
| L1 预防 | 剩余 token < 25% | 把 keep_last 之前的旧工具结果截断到 300 字符 |
| L2 压缩 | 截断后仍不足 | compact():保留 system + 最近 15 条,中间消息按角色摘要(最多 25 段) |
| L3 应急 | emergency=True |
keep_last 降到 8 条 |
关键保证:system prompt 永不删除 ------压缩只是把历史摘要追加到 system prompt 之后。防御引擎 MAX_CONTEXT=1_000_000 / 压缩阈值 200K;进攻引擎 MAX_CONTEXT=128_000。
4. 核心架构(二):去中心化数据库与进程级隔离
4.1 独立进程 + WAL 并发模型
v0.2 最大的架构变化之一:数据库不再嵌入调用方进程,而是作为独立进程 运行(python -m database.server),通过 HTTP JSON-RPC(POST 127.0.0.1:8767/rpc)对外服务。并发模型是"四件套":
python
conn.execute("PRAGMA journal_mode=WAL") # ① WAL:读写互不阻塞
conn.execute("PRAGMA busy_timeout=5000") # ② 写锁等待上限 5s
conn.execute("PRAGMA synchronous=NORMAL") # ③ 性能与安全折中
# ④ 线程本地读连接(N 个读线程并行)+ 共享写连接 + RLock 写串行化
| 操作 | 并发性 |
|---|---|
get_findings / get_stats / get_full_state / get_monitor_status |
✅ 无锁,N 读并行 |
upsert_finding / clear_all / update_system_state / save_monitor_status |
写串行,但 WAL 保证写期间读不受阻 |
压测验证(README 记录):8 个并行读 + 4 个并行写,2.5 秒完成,0 错误。
4.2 自动拉起与统一 API
database/client.py 实现自动拉起 :调用前探测 /health(1s 超时)→ 失败则加进程级锁二次探测 → 仍未启动则 subprocess.Popen([sys.executable, "-m", "database.server"])(Windows 下 CREATE_NO_WINDOW),随后 25 次 × 0.2s 轮询健康检查。对调用方完全透明------"数据库不存在?那就把它拉起来"。
公共 API 与旧版完全向后兼容:upsert_finding / get_findings / get_unreviewed / clear_all / get_stats / get_full_state / get_monitor_status ...,同时每次写入都会镜像导出 database/findings.json(旧代码兼容 + KGP 数据源)。
4.3 upsert 合并语义与 flag_level
数据模型三张表:findings(主键 = sha256(f"{category}:{key}")[:16],含 severity / flag_level / status / mitre_techniques / tier_results JSON)、system_state、monitor_status。
upsert_finding 的合并语义是整个三层递进体系的支柱:
tier_results[tier]保留每一层的快照(flag_level / severity / status / flags / detail / mitre / 时间戳);- 行级
flag_level = max(所有层的 flag_level); - 行级 status / severity / mitre 按
["standard", "agentic", "advanced"]倒序取最高层(高级层覆盖低级层)。
flag_level 语义:
L1 ── 标准层规则标记(status = unreviewed)
│
│ Agentic 层把 L1 发给 DeepSeek V4 审查
▼
L2 ── LLM 判决(status = confirmed 升级 / false_positive 清除)
│
│ Advanced 层仅分析已确认项:进程→PE 风险分,网络→威胁情报聚合
▼
L3 ── 深度分析(status = escalated / confirmed)
5. 更新的主动防御模块(v0.2):从规则引擎到 AI 专家
防御侧在 v0.2 的核心变化是:每一层检查都以独立子进程运行 (run_once.py / monitor.py),并通过 IPP 工具暴露给 Aegis 智能体,同时在 UI 上提供流式对话能力。三层体系本身依旧保持"递进式"设计。
5.1 Tier 1:标准检查(~2 分钟,flag_level=1)
5 个独立工具脚本,每个都是"JSON 进 JSON 出"的纯函数式进程:
| # | 工具脚本 | 检查内容 | 技术 |
|---|---|---|---|
| 1 | system_baseline.py |
CPU / RAM / 磁盘 / 开机时间 / 网络接口 | psutil → system_state 表 |
| 2 | process_review.py |
11 个可疑进程名(mimikatz/procdump/psexec/nc...)、11 条可疑命令行正则(encodedcommand/frombase64string/downloadstring/iex...)、4 个临时目录标记 | psutil + 模式匹配 |
| 3 | network_review.py |
10 个敏感监听端口(21/22/23/135/139/445/3389/5985/5986/5900)、公网远端端点、非常见端口 | psutil.net_connections() |
| 4 | security_posture.py |
Windows Defender 状态、3 个防火墙配置文件 | PowerShell |
| 5 | persistence_audit.py |
HKCU/HKLM 的 Run/RunOnce 四个键 | winreg |
所有异常写入 flag_level=1(status=unreviewed),等待下一层研判。
5.2 Tier 2:Agentic 深度审计 + LLM 审查(核心创新层)
Tier 2 在 v0.2 升级为 9 层结构:继承标准层全部 5 层,追加 4 个深度层:
| 扩展层 | 检查内容 |
|---|---|
| L6 DLL 完整性 | lsass/winlogon/svchost/explorer/csrss 关键进程存在性 |
| L7 安全事件 | Event ID 4625(24h 失败登录)/ 4720(30d 新账户) |
| L8 已安装程序 | HKLM Uninstall 注册表,6 类关键词归类 |
| L9 PowerShell 深潜 | suspicious_ps / defender / scheduled_tasks / persistence / critical_dlls / dns_cache |
LLM 审查流程(替代硬编码误报规则):
Standard (T1) 标记 L1 发现
↓
Agentic (T2) 拉取 get_unreviewed(flag_level=1)
↓ 每批 5 条,附带进程/网络/注册表上下文
DeepSeek V4 (deepseek-v4-pro, temperature=0.2) 审查
↓ 强制输出纯 JSON 数组
[{"index": 0, "status": "false_positive"|"confirmed",
"severity": "low"|"medium"|"high", "reason": "..."}]
↓
数据库更新 flag_level=2(confirmed 升级 / false_positive 保留但标记)
经典案例(README 实测):ksdeui.exe -hidden → FALSE_POSITIVE :Kaspersky VPN 使用 -hidden 参数属合法行为。硬编码规则永远做不到这种上下文理解。
兜底策略同样工程化:LLM 未给出判定的条目一律 confirmed 升级;整个流程异常时降级到 14 条硬编码误报模式(lsass.exe / avpui.exe / crashpad_handler.exe / kaspersky / onedrive...)的 _hardcoded_review_findings()。
Aegis 智能体 (codex_agent/engine.py)是 v0.2 的明星组件------一个对标 OpenAI Codex CLI Rust 架构的生产级 Agent 引擎:
python
class CodexEngine:
MAX_TOOL_ROUNDS: int = 15 # 最多 15 轮工具调用
COMPACT_THRESHOLD: int = 200_000 # 剩余 20 万 token 时自动压缩
MAX_CONTEXT: int = 1_000_000 # DeepSeek V4 百万级上下文
23 个工具 (write_file / apply_patch 已注释禁用------只读是 Aegis 的铁律):
| 类别 | 工具 |
|---|---|
| 文件/搜索 | read_file · list_directory · search_files · grep_search · view_image |
| 平台工具 | standard_tool(直接跑 5 个标准层脚本)· advanced_tool(9 个取证脚本)· db_query |
| PowerShell | ps_recon(15 种只读侦查片段)· ps_history(审计日志)· shell_command(30s 超时 + 7 条破坏性正则拦截) |
| 智能体 | plan · spawn_agent / wait_agent / list_agents / cancel_agent(多子代理并行) |
| 记忆/通知 | memory_read / memory_write(TTL 持久 KV)· send_notification(PushOver)· web_search · current_time |
| 安全研判 | review_top_threats(按 flag_level+severity 排序,可触发 LLM 复核)· request_user_input |
防御侧 PowerShell 护栏(powershell.py):13 条 deny 正则(Format-Volume / Clear-Disk / Stop-Computer / Set-MpPreference -DisableRealtimeMonitoring / Set-NetFirewallProfile -Enabled $false...),60s 超时、6000 字符截断,每次调用审计写入 agentic_check/logs/powershell_history.log。
5.3 Tier 3:高级取证分析(8 模块,flag_level=3)
8 个取证模块 + 1 个 L2→L3 升级桥(deep_analyze.py),其中 YARA 规则库升级到 16 条(AMSI 绕过、ETW Patch、CobaltStrike Beacon、勒索加密 API 等):
| 模块 | 关键技术 | 关键数字 |
|---|---|---|
| Statistical Anomaly | z-score(阈值 2.5σ)+ percentile + Mahalanobis 距离(伪逆、按指标贡献度) | 90 天窗口 / 200 样本基线 |
| MITRE Mapper | 47 条映射(正则索引 + 分类匹配) | 11 战术 / 约 42 个唯一技术 ID |
| Memory Forensics | 跨视图进程扫描(psutil vs Get-Process vs WMI)+ 未签名 DLL 检测 + 进程镂空(WorkingSet/虚拟内存比 <0.1)+ 线程注入(>100 线程)+ Volatility 集成 | 镂空/隐藏进程 = CRITICAL |
| Sigma Engine | 8 条内置规则(ACD-001~008),findings → 规则自动生成,可导出 Splunk/Elastic/Sentinel | export_rules() yaml/json |
| PE Analyzer | 节熵(熵 >7.0 → 打包)、RWX 节、约 48 个可疑导入 API → ATT&CK 映射、未来时间戳 | 风险分 0~1:≥0.7 CRITICAL |
| Threat Intelligence | VirusTotal v3(4 req/min 限速)+ AbuseIPDB v2(90 天报告)+ OTX v1 | 24h TTL 缓存,聚合分 → 分级 |
| DeepSeek Agent | 单条 triage + 批 5 条审查(跨批 sleep 1s 限速)+ 双系统提示关联分析(攻击链/威胁者画像/优先级队列) | reasoning_effort=high |
| ETW Consumer | 9 个 ETW Provider GUID (含 Threat-Intelligence、Sysmon、PowerShell)+ 14 个关键事件 ID + 4 个实时通道(Security/PS/Sysmon/Defender)+ tracerpt 解析 ETL |
11 个可疑关键词实时过滤 |
L2 → L3 升级桥 (deep_analyze.py):读取 get_findings(status="confirmed")------
- process 类 :PE 分析,
risk > 0.3→flag_level=3, status=escalated(risk > 0.6为 critical),附mitre_techniques; - network 类:威胁情报聚合,risk_level ∈ {HIGH, CRITICAL} → 升级 L3 escalated;
- 未达标项统一
flag_level=3, status=confirmed, detail={deep_analyzed: True}。
5.4 跨层数据流与持续监控
Standard Check ──写入 L1──▶ 共享数据库 ──┐
├─▶ Agentic 读取 → LLM 审查 → L2
▼
Advanced Check ◀──读取 L2 confirmed───── 数据库
└── PE 分析 / 威胁情报 / MITRE 映射 ──▶ L3 escalated
三层都支持持续监控模式 (Standard/Advanced 为独立进程循环,Agentic 为 daemon 线程),周期 60s,每轮结果写入 monitor_status 表,UI 3 秒轮询一次状态。
6. 主动进攻模块(v0.2 核心新增):合法主动防御的智能体化
这是本文的重头戏。v0.2 给平台装上了一个"反制翼"------但必须强调的是,这个翼的每一个动作都严格限定在合法主动防御的边界内。
6.1 设计哲学与法律边界
⚖️ "只打自己家,不打别人家。"
合法主动防御 vs 非法黑客反击的边界定义得非常清晰:
| ✅ 合法(本模块支持) | ❌ 非法(明确禁止) |
|---|---|
本机防火墙封禁(netsh 入站规则) |
端口扫描 / nmap / masscan |
| 本机 hosts 文件 DNS 沉洞 | Metasploit / 漏洞利用 |
| 本地进程处置(杀恶意进程、清持久化) | DDoS / 流量洪泛 |
| 被动 OSINT(whois / RDAP / DNS / Shodan / GreyNoise) | 访问对方系统 / 横向移动 |
| 本地诱骗监听(tarpit 拖延攻击者) | 窃取对方凭证 / 数据 |
| 生成滥用报告文件(绝不自动发送) | 针对未确认目标的任何动作 |
平台 README 明确引用了 US CFAA 与 UK Computer Misuse Act 作为法律依据------反制动作只作用于本机资源(防火墙/hosts/本地进程/本地监听)与被动公共 API,不扫描、不利用、不破坏任何第三方系统。这份边界不是写在 README 里的口号,而是有代码强制实现的(见 6.3 与 6.5)。
6.2 cyberoffensetools:反制工具箱(StrikeEngine + 5 工具)
cyberoffensetools/ 是进攻翼的执行层。StrikeEngine(单例,线程安全)的每个动作都走同一流程:执行 → 审计(logs/strike_log.jsonl)→ 写入 KGP 知识图谱。
工具一:blocklist ------ 防火墙封禁
powershell
netsh advfirewall firewall add rule name=ACO-BLOCK-{ip} dir=in action=block enable=yes remoteip={ip} profile=any
ipaddress严格校验 IP/CIDR;- 幂等:先删除同名规则再加;
- 规则名
ACO-BLOCK-前缀,list_blocks通配查询。
工具二:sinkhole ------ DNS 沉洞
- 向
C:\Windows\System32\drivers\etc\hosts写入0.0.0.0 域名+www.域名; - 写前自动备份到
data/hosts.backup.{时间戳}(实测已积累 8 份备份); - 标记块方案(
# === ActiveCyberOffense Sinkhole ===),支持增量增删与list_sinkholes(); - 临时文件 + 原子替换防半写;域名归一化剥 scheme/www/路径/端口。
工具三:abuse_report ------ 滥用报告生成
- RDAP 深度 1 递归查询,从 entities 的 vcardArray 提取 abuse/administrative/technical 三类角色邮箱(去重限 5 个,失败回退全量 JSON 扫描);
- 生成正式报告 txt(目标 / 上游组织 / CIDR / 国家 / 滥用联系邮箱 / 证据区);
- 只生成文件,绝不自动发送 ------ 报告由人工审查后自行投递。
工具四:osint ------ 被动情报聚合
enrich_target():DNS(A/PTR/TXT)→ RDAP(org/country/cidr/asn)→ Shodan(端口/服务/OS/ISP/漏洞)→ GreyNoise(classification/noise/riot/tags)。缺失 API key 优雅降级 (_skipped: no SHODAN_API_KEY),绝不因单一情报源不可用而中断。
工具五:tarpit ------ 诱骗拖延
经典 endlessh/laBrea 手法:
python
def _stall(self, conn):
blob = b" \b" * 512 # 空格 + 退格字符对
while ...:
conn.send(blob[:256]) # 每 1.5 秒发送一次
# 攻击者看到滚动的空白,以为连接到了一个半死的 SSH/banner 服务
- 监听
0.0.0.0:4444(非阻塞 accept、backlog 32、幂等启动),无需管理员权限; - 每个连接拖延 45 秒 后关闭,统计
accepted/ 唯一对端数; - 代码注释明确:"Only interacts with connections that arrive at OUR OWN machine"。
6.3 Strike 反制智能体:agentic_offense
进攻翼的"大脑"是 Strike------一个 IPP-native 的 ReAct 智能体:
① session_start hook(注入 OFFENSE_SYSTEM_PROMPT)
② ContextSummarizer 预压缩
③ user_prompt_submit hook
④ 主循环:LLM(stream) → tool_calls → TOOL_PRE/TOOL_POST hooks → execute_tool → 结果回填
⑤ STOP hook(法律边界检查:命中 → 注入纠正指令 → 强制重进循环)
⑥ done(yield final 事件)
模型与配置(刻意与防御侧区分):
| 项 | Aegis(防御) | Strike(进攻) |
|---|---|---|
| 模型 | deepseek-v4-pro(1M 上下文,thinking 模式) |
deepseek-v4-flash(128K,快速果断) |
| thinking | 启用 | 自动禁用 (extra_body={"thinking":{"type":"disabled"}}) |
| temperature | 0.3 | 0.2(低随机性、决策果断) |
| max_tokens | 384000 | 8192 |
| 轮次上限 | 15 | 12 |
系统提示词(约 60 行)定义了 Strike 的作战流程:
Mission(六步反制剧本):
ENRICH → BLOCK → SINKHOLE → REPORT → TARPIT → PowerShell 清除立足点
(kill 恶意进程、删持久化、断连接、查防火墙/服务)
Legal Boundary(绝对):
• 只作用于本机:防火墙 / hosts / 本地进程 / 本地监听
• 被动公共 API:whois / DNS / Shodan / GreyNoise
• 严禁扫描 / 探测 / 利用 / 破坏第三方系统
• 严禁攻击未经防御层确认或用户未授权的目标
• 滥用报告只生成文件供人工审查
风格要求:
输出格式 target → action → ✓/✗ → evidence,最终答案必须是 Markdown
法律边界钩子 (create_legal_boundary_hook,挂载在 STOP 事件)是代码级的强制:14 条 (?i) 正则检测越界意图------
python
r"(?i)port\s*scan", r"(?i)nmap", r"(?i)masscan", r"(?i)metasploit",
r"(?i)exploit\s+(that|the|their|remote)", r"(?i)hack\s+back",
r"(?i)attack\s+(their|the attacker'?s|remote|that)\s+(server|site|infra)",
r"(?i)ddos", r"(?i)flood\s+(that|the|their|remote)",
r"(?i)access\s+their\s+system", r"(?i)breach\s+their",
r"(?i)take\s+over\s+their", r"(?i)steal\s+their\s+(credentials|data|files)",
命中判定:final_text + user_input 拼接后正则扫描 → should_block=True, reason="Illegal hack-back intent detected" → 注入纠正指令 [LEGAL BOUNDARY] That action would be illegal hacking-back... 并强制重进循环 ,让模型改走合法路径(enrich/block/sinkhole/report/tarpit)。也就是说:Strike 不是被提示词"劝"着守法的,而是被钩子"拦"下来的。
此外,TOOL_PRE_INVOKE / TOOL_POST_INVOKE 钩子把每次攻击动作写入 KGP(agent-target:{ip} attempted → agent-action:{tool}:{target} ok),与防御侧共享同一张证据图。
6.4 15 件武器详解
agentic_offense/weapons/ 定义了 15 个武器(TOOLS schema + execute_tool() 分发 + IPP BaseTool 注册),其中 6 个危险武器声明 requires_approval=True:
| # | 武器 | 功能 | 审批 | 技术实现 |
|---|---|---|---|---|
| 1 | enrich |
被动 OSINT | --- | DNS + RDAP + Shodan + GreyNoise |
| 2 | block |
防火墙入站封禁 | ✅ | netsh 规则 ACO-BLOCK-{ip},域名自动解析为 IP |
| 3 | unblock |
删除封禁规则 | ✅ | netsh delete rule |
| 4 | sinkhole |
hosts 沉洞 | ✅ | 0.0.0.0 域名 + www,先备份 |
| 5 | unsinkhole |
移除沉洞 | ✅ | 标记块删除 |
| 6 | report |
滥用报告文件 | --- | RDAP 查 abuse 邮箱 → 生成报告 txt |
| 7 | contact |
上游组织联系信息 | --- | ipwhois lookup_rdap(depth=1) |
| 8 | tarpit_start |
启动诱骗监听 4444 | --- | 无需管理员 |
| 9 | tarpit_stop |
停止 tarpit | --- | 幂等 |
| 10 | full_strike |
一键作战剧本 | ✅ | enrich → block → sinkhole(域名) → report → tarpit(可选) |
| 11 | list_targets |
从防御 DB 拉已确认攻击者 | --- | db_bridge.get_attacker_targets() |
| 12 | status |
反制状态总览 | --- | tarpit / 防火墙规则 / 沉洞 / DB 目标 |
| 13 | powershell |
本机任意 PowerShell | ✅ | 护栏 + 审计(见 6.5) |
| 14 | local_recon |
内置只读侦查 | --- | 8 种片段,validate 白名单校验 |
| 15 | ps_history |
PowerShell 审计记录 | --- | 读 logs/powershell_history.log |
full_strike 剧本 (StrikeEngine.full_strike)的完整序列:
python
enrich(target) # ① 必做:知己知彼
block(target, note) # ② 必做:防火墙切断(域名自动解析为 IP)
if resolve_target(target).kind == "domain":
sinkhole(target) # ③ 仅域名:DNS 沉洞
report(target) # ④ 必做:ISP/CERT 滥用报告
if with_tarpit: tarpit(start=True) # ⑤ 可选:拖延后续连接
# 汇总 {ok, steps, completed[], failed[]}
剧本是部分失败容忍 的:即使某一环失败(如未以管理员运行导致 block 失败),已完成步骤照常返回,门户仍返回 200 并携带 steps/completed/failed 数组------失败信息本身就是给操作员的审计素材(实测中即出现过 enrich+report 成功、block 因权限失败的真实日志)。
6.5 PowerShell 武器:护栏与审计
weapons/powershell.py 是 Strike 最强的武器,也是防护最重的武器:
python
cmd = [Config.PS_EXECUTABLE, "-NoProfile", "-NonInteractive",
"-ExecutionPolicy", "Bypass", "-Command", script]
subprocess.run(cmd, capture_output=True, text=True, encoding="utf-8",
errors="replace", timeout=timeout, creationflags=CREATE_NO_WINDOW)
三层防护:
- deny-list 护栏 (11 条正则,
Config.is_ps_denied()):Remove-Item -Recurse C:\、Format-Volume、Clear-Disk、Stop-Computer、Set-MpPreference -DisableRealtimeMonitoring $true、删Windows\System32、向系统目录写文件等,命中即拒绝并记录denied_by; - 超时与截断:默认 60s 超时(侦查 30s),stdout 截断 6000 字符、stderr 2000 字符;
- 全程审计 :每次调用追加 JSONL 到
logs/powershell_history.log:{at, script[:400], status, exit_code, elapsed, stdout_head[:300], denied_by?}。
8 种内置侦查片段 (local_recon):processes(Top CPU 40)、network(全部 TCP 状态)、listeners、firewall(三 profile)、services、dns_cache、hosts(0.0.0.0 沉洞条目)、suspicious_ps(encodedcommand|frombase64string|downloadstring|iex 混淆 PowerShell)。
6.6 进攻门户:127.0.0.2:8766
cyberoffensetools/server.py(纯标准库 ThreadingHTTPServer)提供完整 REST API 与内嵌 SPA:
| 端点 | 功能 |
|---|---|
/api/status |
反制状态 + DB 摘要 |
/api/targets |
从防御 DB 拉已确认攻击者列表 |
/api/log |
最近 50 条打击审计 |
/api/ipp |
聚合 IPP 平台状态(引擎/工具/KGP 节点数) |
/api/strike |
一键反制 {"action","target","note","with_tarpit"} |
/api/agent |
同步版智能体聊天 |
/api/agent/start + /api/agent/events |
流式版(单任务互斥,busy 返回 409) |
门户 UI 的核心元素:
- ⚖️ 法律边界横幅:"LEGAL ACTIVE-DEFENSE ONLY..."
- 🤖 Agentic Offense Chat :折叠式进程容器(💭 Thinking / ⚡工具调用 / ✓✗ 结果标记)+ 前端 Markdown 渲染器 +
localStorage聊天持久化; - 🎯 Strike Console:target 输入 + action 下拉(FULL COUNTER-STRIKE / Enrich / Block / Sinkhole / Report / Contact / Unblock / Unsinkhole)+ 💥 EXECUTE + 🪤 Tarpit 开关;
- 📡 Attacker Targets 表:每行带 💥 STRIKE 快捷按钮(自动填 full_strike);
- 🛡️ Countermeasure Status 卡片 + 📜 Strike Audit Log 表。
防御仪表盘通过顶层标签 ⚔️ activecyberoffense 以 iframe 嵌入 门户(不随标签切换重载,聊天历史不丢),每 5 秒 ping /api/health 显示在线状态。
6.7 攻防联动:从发现到反制的闭环
进攻侧的目标不是凭空产生的------db_bridge.py 只读 防御层写入的 database/findings.json:
过滤 category ∈ (network, net, persistence, process)
→ 从 tier_results.{standard,agentic,advanced}.detail 提取 remote/name 字段
→ 正则抽 IP,_valid_ip() 排除私网/回环/链路本地/组播/保留地址(只打公网)
→ 去重输出 {ip, category, status, flag_level, remote, finding_key, flagged_at}
完整生命周期闭环:
防御层标记 → Agentic LLM 确认 (L2) → 目标进入进攻门户目标表
→ 操作员一键 ⚔️ STRIKE(enrich → block → sinkhole → report → tarpit)
→ strike_log.jsonl 审计 + KGP 图记录(法律证据链)
→ 滥用报告文件供人工投递 ISP/CERT
7. 流式 Agent 对话:ChatGPT 式的实时推理过程
v0.2 的 UI 体验升级:两个门户都能流式渲染智能体的完整工作过程,而不是突然蹦出一个最终答案。
用户消息 ─▶ POST /api/agent/start ─▶ AgentJob 后台线程消费 chat_stream() 生成器
│ 事件缓冲 ≤200 条(丢最旧)
前端 400ms 轮询 GET /api/agent/events?job_id&since=N ◀─┘
│
💭 Thinking(思考增量)→ 折叠块文本累积
📝 text(前言文本)→ 气泡流
⚙️ tool_call → 实时展开的折叠工具块
⚙️ tool_result → 结果填充 + 自动折叠 + ✓/✗ 徽标
💭 Thinking → 下一轮
───────────────────────────────────────
完成 → process 容器自动折叠
**Final answer** → markdown 渲染成普通聊天气泡
技术要点:
- 后端 (
ui/agent_stream.py):AgentJob构造时启动 daemon 后台线程 消费生成器,事件序列化带截断策略(工具参数 600 字符、结果 8000、错误 500),snapshot(since)增量拉取,异常永不静默死亡(finally 置 done,异常写入 error); - 安全 :门户模式下
codex_tool.tools.PORTAL_MODE = True------后台流式线程无人审批通道,禁用 write_file / apply_patch / shell 等可变工具,只允许审查和查询; - 前端 :单个可折叠
<details class="agent-process">容器包装全过程,工具结果用/"ok":\s*false|\[ERROR\]|\[DENIED\]|\[TIMEOUT\]/正则自动判定 ✓/✗; - Markdown 渲染:约 60 行零依赖原生 JS------先 HTML 转义防 XSS,再保护 fenced code blocks,识别标题/表格/列表/链接/粗斜体;
- 单任务互斥:防御与进攻侧各允许 1 个并发 agent 任务(busy 返回 409),避免 LLM 成本失控。
8. 实战演示:从发现到反制的攻防全流程
8.1 启动平台
powershell
pip install -r requirements.txt
python run_ui.py
# 浏览器自动打开 http://127.0.0.1:8765
仪表盘 6 行布局:系统头 → 风险条(flags>10=HIGH / >3=MEDIUM / >0=LOW)→ 三层行动卡片 → Agentic 对话 → 统一发现表(🛡️S → 🤖A → 🚀X 三列跨层追踪)→ 三层详情 Tab。
8.2 防御侧:三层递进确认
bash
# 步骤 1:标准检查(~2min)
点击 "Standard Check: Run Once" → 5 层扫描 → 12 个 L1 标记入库
# 步骤 2:Agentic 深度审计(~5min)
点击 "Agentic Check: Run Once" → 9 层扫描 + DeepSeek V4 逐批审查
# 8 个 → FALSE_POSITIVE(合法应用)
# 4 个 → CONFIRMED(升级至 L2,其中 1 个网络连接指向公网 IP)
# 步骤 3:高级取证(~10min)
点击 "Advanced Check: Run Once" → 仅分析已确认项
# PE 熵值 / VirusTotal 查杀 / MITRE ATT&CK 映射
# 网络项威胁情报聚合 → risk=HIGH → 升级 L3 escalated
# 步骤 4:持续监控
点击 "Standard Check: Continuous Monitor" → 每 60s 自动扫描
8.3 进攻侧:确认即反制
攻击者 IP 进入门户目标表后,操作员一键 FULL COUNTER-STRIKE(实测日志还原):
1. ENRICH 85.203.45.37
→ RDAP: AS9009 M247 (CH), Country: CH
→ abuse 邮箱: jeroen@falco-networks.com ✓
2. BLOCK 85.203.45.37
→ netsh advfirewall 添加 ACO-BLOCK-85.203.45.37 入站封禁
→ ✗ 请求的操作需要提升(未以管理员运行)→ failed[] 记录,剧本继续
3. REPORT 85.203.45.37
→ 生成 abuse_85.203.45.37_*.txt(含证据区)✓
4. SINKHOLE(域名场景示例)
→ hosts 写入 0.0.0.0 wenxin.baidu.com + www 子域 ✓
→ RDAP: CHINANET-JS AS134756, abuse: anti-spam@chinatelecom.cn
5. TARPIT ON(可选)
→ 0.0.0.0:4444 监听,攻击者连接被拖延 45s
即使
block因权限失败,full_strike依然返回完整的steps/completed/failed数组------剧本部分失败容忍,审计日志完整记录每一步,操作员补提权后重试即可。
8.4 对话式反制(门户 Agentic Chat)
User: 侦查当前主机的可疑网络活动
Strike: [local_recon: network] 发现 12 条活动连接,6 个唯一公网 IP
[local_recon: processes] Top CPU 进程...
[powershell] 解析 findings.json → 232 个已确认 IP 与活动连接交叉比对
[db_query / list_targets] 高置信度目标:85.203.45.37 ...
建议:对 85.203.45.37 执行 full_strike(需你批准)
User: 执行 full_strike 85.203.45.37
Strike: [TOOL_PRE hook] KGP 记录 attempted...
enrich → block → report ...
[TOOL_POST hook] KGP 记录 ok=true/false...
✅ 完成:enrich ✓ / block ✓ / report ✓(详见审计日志)
9. 工程合规:许可策略与安全边界
9.1 依赖的"许可合规"策略
进攻工具箱的依赖选择是一个刻意的合规声明------只允许宽松许可(MIT / BSD / ISC / Apache-2.0):
text
dnspython (ISC) · ipwhois (BSD-2) · shodan (MIT) · greynoise (MIT)
requests (Apache-2.0) · impacket (Apache-2.0) · yara-python (Apache-2.0)
mitmproxy (MIT) · psutil (BSD-3)
明确排除:nmap(GPL)、masscan(AGPL)、scapy(GPL)、wireshark(GPL)、metasploit payloads、C2 implants------"permissive-licensed tools only" 既是法律红线,也是供应链安全策略。
9.2 多层安全边界总结
| 层 | 机制 | 对象 |
|---|---|---|
| 提示词层 | OFFENSE_SYSTEM_PROMPT 法律边界六步流程 | Strike 智能体 |
| 代码层 | STOP 钩子 14 条正则拦截越界意图 + 注入纠正 | 所有 LLM 输出 |
| 审批层 | prepare 阶段 requires_approval 闸门 |
block/sinkhole/powershell/full_strike 等 6 武器 |
| 护栏层 | PowerShell deny-list(11 条正则)+ 超时 + 截断 | powershell 武器 |
| 目标层 | db_bridge 只打公网、只打防御层已确认目标 |
所有反制动作 |
| 审计层 | strike_log.jsonl + powershell_history.log + KGP 图 | 全部动作留证 |
已知边界 (诚实说明):防火墙封禁与 hosts 写入需要管理员权限(未提权时 block/sinkhole 会失败并记录审计);deny-list 是正则匹配,存在绕写变体的可能(README 标注 "override at your own risk");审批闸门在智能体自主循环内依赖提示词 + 钩子兜底,门户的外部调用路径(/api/strike、IPP 执行)则强制走审批语义。
10. 演进路线与未来展望
#mermaid-svg-bznW9MqiTL5K0wBb{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-bznW9MqiTL5K0wBb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-bznW9MqiTL5K0wBb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-bznW9MqiTL5K0wBb .error-icon{fill:#552222;}#mermaid-svg-bznW9MqiTL5K0wBb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bznW9MqiTL5K0wBb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-bznW9MqiTL5K0wBb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bznW9MqiTL5K0wBb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bznW9MqiTL5K0wBb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-bznW9MqiTL5K0wBb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bznW9MqiTL5K0wBb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bznW9MqiTL5K0wBb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bznW9MqiTL5K0wBb .marker.cross{stroke:#333333;}#mermaid-svg-bznW9MqiTL5K0wBb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bznW9MqiTL5K0wBb p{margin:0;}#mermaid-svg-bznW9MqiTL5K0wBb .edge{stroke-width:3;}#mermaid-svg-bznW9MqiTL5K0wBb .section--1 rect,#mermaid-svg-bznW9MqiTL5K0wBb .section--1 path,#mermaid-svg-bznW9MqiTL5K0wBb .section--1 circle,#mermaid-svg-bznW9MqiTL5K0wBb .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .section--1 text{fill:#ffffff;}#mermaid-svg-bznW9MqiTL5K0wBb .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-bznW9MqiTL5K0wBb .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .edge-depth--1{stroke-width:17;}#mermaid-svg-bznW9MqiTL5K0wBb .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-bznW9MqiTL5K0wBb .lineWrapper line{stroke:#ffffff;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled,#mermaid-svg-bznW9MqiTL5K0wBb .disabled circle,#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:lightgray;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:#efefef;}#mermaid-svg-bznW9MqiTL5K0wBb .section-0 rect,#mermaid-svg-bznW9MqiTL5K0wBb .section-0 path,#mermaid-svg-bznW9MqiTL5K0wBb .section-0 circle,#mermaid-svg-bznW9MqiTL5K0wBb .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-bznW9MqiTL5K0wBb .section-0 text{fill:black;}#mermaid-svg-bznW9MqiTL5K0wBb .node-icon-0{font-size:40px;color:black;}#mermaid-svg-bznW9MqiTL5K0wBb .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-bznW9MqiTL5K0wBb .edge-depth-0{stroke-width:14;}#mermaid-svg-bznW9MqiTL5K0wBb .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-bznW9MqiTL5K0wBb .lineWrapper line{stroke:black;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled,#mermaid-svg-bznW9MqiTL5K0wBb .disabled circle,#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:lightgray;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:#efefef;}#mermaid-svg-bznW9MqiTL5K0wBb .section-1 rect,#mermaid-svg-bznW9MqiTL5K0wBb .section-1 path,#mermaid-svg-bznW9MqiTL5K0wBb .section-1 circle,#mermaid-svg-bznW9MqiTL5K0wBb .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .section-1 text{fill:black;}#mermaid-svg-bznW9MqiTL5K0wBb .node-icon-1{font-size:40px;color:black;}#mermaid-svg-bznW9MqiTL5K0wBb .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .edge-depth-1{stroke-width:11;}#mermaid-svg-bznW9MqiTL5K0wBb .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-bznW9MqiTL5K0wBb .lineWrapper line{stroke:black;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled,#mermaid-svg-bznW9MqiTL5K0wBb .disabled circle,#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:lightgray;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:#efefef;}#mermaid-svg-bznW9MqiTL5K0wBb .section-2 rect,#mermaid-svg-bznW9MqiTL5K0wBb .section-2 path,#mermaid-svg-bznW9MqiTL5K0wBb .section-2 circle,#mermaid-svg-bznW9MqiTL5K0wBb .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .section-2 text{fill:#ffffff;}#mermaid-svg-bznW9MqiTL5K0wBb .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-bznW9MqiTL5K0wBb .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .edge-depth-2{stroke-width:8;}#mermaid-svg-bznW9MqiTL5K0wBb .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-bznW9MqiTL5K0wBb .lineWrapper line{stroke:#ffffff;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled,#mermaid-svg-bznW9MqiTL5K0wBb .disabled circle,#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:lightgray;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:#efefef;}#mermaid-svg-bznW9MqiTL5K0wBb .section-3 rect,#mermaid-svg-bznW9MqiTL5K0wBb .section-3 path,#mermaid-svg-bznW9MqiTL5K0wBb .section-3 circle,#mermaid-svg-bznW9MqiTL5K0wBb .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .section-3 text{fill:black;}#mermaid-svg-bznW9MqiTL5K0wBb .node-icon-3{font-size:40px;color:black;}#mermaid-svg-bznW9MqiTL5K0wBb .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .edge-depth-3{stroke-width:5;}#mermaid-svg-bznW9MqiTL5K0wBb .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-bznW9MqiTL5K0wBb .lineWrapper line{stroke:black;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled,#mermaid-svg-bznW9MqiTL5K0wBb .disabled circle,#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:lightgray;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:#efefef;}#mermaid-svg-bznW9MqiTL5K0wBb .section-4 rect,#mermaid-svg-bznW9MqiTL5K0wBb .section-4 path,#mermaid-svg-bznW9MqiTL5K0wBb .section-4 circle,#mermaid-svg-bznW9MqiTL5K0wBb .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .section-4 text{fill:black;}#mermaid-svg-bznW9MqiTL5K0wBb .node-icon-4{font-size:40px;color:black;}#mermaid-svg-bznW9MqiTL5K0wBb .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .edge-depth-4{stroke-width:2;}#mermaid-svg-bznW9MqiTL5K0wBb .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-bznW9MqiTL5K0wBb .lineWrapper line{stroke:black;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled,#mermaid-svg-bznW9MqiTL5K0wBb .disabled circle,#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:lightgray;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:#efefef;}#mermaid-svg-bznW9MqiTL5K0wBb .section-5 rect,#mermaid-svg-bznW9MqiTL5K0wBb .section-5 path,#mermaid-svg-bznW9MqiTL5K0wBb .section-5 circle,#mermaid-svg-bznW9MqiTL5K0wBb .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .section-5 text{fill:black;}#mermaid-svg-bznW9MqiTL5K0wBb .node-icon-5{font-size:40px;color:black;}#mermaid-svg-bznW9MqiTL5K0wBb .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .edge-depth-5{stroke-width:-1;}#mermaid-svg-bznW9MqiTL5K0wBb .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-bznW9MqiTL5K0wBb .lineWrapper line{stroke:black;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled,#mermaid-svg-bznW9MqiTL5K0wBb .disabled circle,#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:lightgray;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:#efefef;}#mermaid-svg-bznW9MqiTL5K0wBb .section-6 rect,#mermaid-svg-bznW9MqiTL5K0wBb .section-6 path,#mermaid-svg-bznW9MqiTL5K0wBb .section-6 circle,#mermaid-svg-bznW9MqiTL5K0wBb .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .section-6 text{fill:black;}#mermaid-svg-bznW9MqiTL5K0wBb .node-icon-6{font-size:40px;color:black;}#mermaid-svg-bznW9MqiTL5K0wBb .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .edge-depth-6{stroke-width:-4;}#mermaid-svg-bznW9MqiTL5K0wBb .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-bznW9MqiTL5K0wBb .lineWrapper line{stroke:black;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled,#mermaid-svg-bznW9MqiTL5K0wBb .disabled circle,#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:lightgray;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:#efefef;}#mermaid-svg-bznW9MqiTL5K0wBb .section-7 rect,#mermaid-svg-bznW9MqiTL5K0wBb .section-7 path,#mermaid-svg-bznW9MqiTL5K0wBb .section-7 circle,#mermaid-svg-bznW9MqiTL5K0wBb .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .section-7 text{fill:black;}#mermaid-svg-bznW9MqiTL5K0wBb .node-icon-7{font-size:40px;color:black;}#mermaid-svg-bznW9MqiTL5K0wBb .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .edge-depth-7{stroke-width:-7;}#mermaid-svg-bznW9MqiTL5K0wBb .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-bznW9MqiTL5K0wBb .lineWrapper line{stroke:black;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled,#mermaid-svg-bznW9MqiTL5K0wBb .disabled circle,#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:lightgray;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:#efefef;}#mermaid-svg-bznW9MqiTL5K0wBb .section-8 rect,#mermaid-svg-bznW9MqiTL5K0wBb .section-8 path,#mermaid-svg-bznW9MqiTL5K0wBb .section-8 circle,#mermaid-svg-bznW9MqiTL5K0wBb .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .section-8 text{fill:black;}#mermaid-svg-bznW9MqiTL5K0wBb .node-icon-8{font-size:40px;color:black;}#mermaid-svg-bznW9MqiTL5K0wBb .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .edge-depth-8{stroke-width:-10;}#mermaid-svg-bznW9MqiTL5K0wBb .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-bznW9MqiTL5K0wBb .lineWrapper line{stroke:black;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled,#mermaid-svg-bznW9MqiTL5K0wBb .disabled circle,#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:lightgray;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:#efefef;}#mermaid-svg-bznW9MqiTL5K0wBb .section-9 rect,#mermaid-svg-bznW9MqiTL5K0wBb .section-9 path,#mermaid-svg-bznW9MqiTL5K0wBb .section-9 circle,#mermaid-svg-bznW9MqiTL5K0wBb .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .section-9 text{fill:black;}#mermaid-svg-bznW9MqiTL5K0wBb .node-icon-9{font-size:40px;color:black;}#mermaid-svg-bznW9MqiTL5K0wBb .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .edge-depth-9{stroke-width:-13;}#mermaid-svg-bznW9MqiTL5K0wBb .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-bznW9MqiTL5K0wBb .lineWrapper line{stroke:black;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled,#mermaid-svg-bznW9MqiTL5K0wBb .disabled circle,#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:lightgray;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:#efefef;}#mermaid-svg-bznW9MqiTL5K0wBb .section-10 rect,#mermaid-svg-bznW9MqiTL5K0wBb .section-10 path,#mermaid-svg-bznW9MqiTL5K0wBb .section-10 circle,#mermaid-svg-bznW9MqiTL5K0wBb .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .section-10 text{fill:black;}#mermaid-svg-bznW9MqiTL5K0wBb .node-icon-10{font-size:40px;color:black;}#mermaid-svg-bznW9MqiTL5K0wBb .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .edge-depth-10{stroke-width:-16;}#mermaid-svg-bznW9MqiTL5K0wBb .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-bznW9MqiTL5K0wBb .lineWrapper line{stroke:black;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled,#mermaid-svg-bznW9MqiTL5K0wBb .disabled circle,#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:lightgray;}#mermaid-svg-bznW9MqiTL5K0wBb .disabled text{fill:#efefef;}#mermaid-svg-bznW9MqiTL5K0wBb .section-root rect,#mermaid-svg-bznW9MqiTL5K0wBb .section-root path,#mermaid-svg-bznW9MqiTL5K0wBb .section-root circle{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-bznW9MqiTL5K0wBb .section-root text{fill:#ffffff;}#mermaid-svg-bznW9MqiTL5K0wBb .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-bznW9MqiTL5K0wBb .edge{fill:none;}#mermaid-svg-bznW9MqiTL5K0wBb .eventWrapper{filter:brightness(120%);}#mermaid-svg-bznW9MqiTL5K0wBb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} v0.1.0 标准检查 + PS1 脚本 v0.1.7 DeepSeek V4 LLM 审查 v0.1.9 6 行仪表盘 + Agentic 对话 v0.2.0 去中心化数据库(独立进程 WAL) v0.2.1 层检查自进程化 v0.2.2 进攻翼 cyberoffensetools + 门户 v0.2.3 Strike 智能体(Flash + PowerShell 武器 + 法律钩子) v0.2.4 IPP 框架(协议/管线/钩子/KGP/ACP) v0.2.5 流式 Agent 对话(thinking · tools · final) v0.2.6 Aegis 提示词 + ps_recon + 只读守卫 + Markdown 渲染 ActiveCybersecurity 演进历史(2026-07 → 08)
未来方向:
- MCP 生态扩展:通过统一 ToolRegistry 接入外部安全工具(SIEM / SOAR / 威胁情报平台 / MISP);
- 多 Agent 协同:防御与进攻 Agent 经 ACP 双向编排------防御确认、进攻反制、防御复检的自动化闭环;
- 联邦共享:多端点共享 KGP 攻击者画像(去隐私化)与 YARA/Sigma 规则;
- 自动化响应策略:在审批语义之上引入"低危自动处置、高危人工批准"的策略引擎。
11. 总结
ActiveCybersecurity v0.2 展示了一个完整的攻防一体 AI 安全平台形态:
防御侧 :三层递进检查 + DeepSeek V4 智能审查 + Aegis 23 工具只读智能体,把"误报"从规则引擎的顽疾变成了 LLM 的上下文理解问题;
进攻侧 :Strike 反制智能体 + 15 件武器 + 代码级法律边界钩子,把"反击"限定在本机资源 + 被动 OSINT 的合法范围内,全程审计留证;
架构侧:IPP 统一抽象(MCP/ACP/KGP/RP)+ 去中心化数据库(WAL 独立进程)+ 进程级隔离的层检查 + 流式 Agent 对话,让攻防两侧在同一套协议、同一张知识图谱、同一条证据链上运转。
最有价值的工程启示有三:
- AI Agent 安全平台的第一性原理是"边界"------能力越大,边界越要由代码强制,而不是提示词劝说;
- 统一抽象是复杂系统唯一可行的组织方式------IPP 让 40+ 个工具、2 个智能体、3 个检查层、4 个协议在同一框架下组合闭包;
- 去中心化不是噱头------数据库独立进程 + 层检查独立进程,让 5 分钟的深度扫描不再阻塞监控按钮和对话流。
📎 项目信息
| 项目 | 详情 |
|---|---|
| 项目名称 | ActiveCybersecurity |
| 版本 | v0.2.x(2026-08) |
| 核心技术 | Python 3.11+ / DeepSeek V4(pro + flash)/ IPP 协议框架 / SQLite WAL / PowerShell / HTML5 SPA |
| 平台 | Windows 10/11 |
| 架构 | 三层递进防御 + 合法反制进攻翼 + 去中心化服务拓扑 |
| 端口 | 防御 127.0.0.1:8765 · 进攻 127.0.0.2:8766 · 数据库 127.0.0.1:8767 |
| 许可策略 | 全依赖宽松许可(BSD-3 / Apache-2.0 / MIT / ISC),排除 GPL/AGPL 工具 |
"最好的防御不是把自己变成一座堡垒,而是让敌人知道------你既看得见他,也有权在他进门之前关上门。" ⚔️🛡️
如果你对"LLM Agent 驱动的攻防一体化平台"感兴趣,欢迎 Clone 体验:
pip install -r requirements.txt && python run_ui.py
本文基于 ActiveCybersecurity v0.2 源码分析生成 · 2026年8月
