乐于分享
好东西不私藏

安全工具 | 从 AI 渗透到通用问题求解:Cairn的设计很“偏执”,但挺值得一看

安全工具 | 从 AI 渗透到通用问题求解:Cairn的设计很“偏执”,但挺值得一看

Cairn 是一个开源的“通用问题求解引擎”:你给它起点(Origin)和目标(Goal),它在一个完全未知的状态空间里自己找路径。渗透测试只是它第一个被验证的场景,底层是黑板架构 + Fact/Intent 图,没有预设角色,没有固定流程,多 Worker 通过共享图协作。

项目地址:

https://github.com/oritera/Cairn

1. Cairn的目标

官方一句话概括:Cairn 是一个通用问题求解引擎,它不定义角色,也不预设工作流。给定初始状态与目标状态,在未知的状态空间中搜索出一条路径。

这类问题的共同特征:

有明确的起点:已知目标系统、当前状态、已知条件

有明确的终点:拿到shell、拿到 flag、完成证明、达到某个配置

中间路径未知:没有现成SOP,只能边探索边决定下一步

渗透测试、漏洞研究、CTF 解题、数学证明……都属于这种“起点–终点明确,路径未知”的问题。Cairn 就是为这一类问题设计的。

2.核心设计

2.1 三个原语:Fact / Intent / Hint

Cairn 把所有信息抽象成三类:

Fact:已经确认的客观事实,写入黑板后全局可见

Intent:准备探索的方向,还没执行,只是“意图”

Hint:人类随时可以注入的判断,下次 Worker 读取时会被吸收

整个系统围绕一个Fact/Intent 图演化:

Fact 是已经踩实的“石板”

Intent 是向未知迈出的“试探脚”

Hint 是人从旁边喊的一句话:“这块值得深挖”“这边大概率死路”

图从Origin 逐渐长向 Goal,新 Fact 是踏脚石,新 Intent 是向未知迈的一步。

2.2 Worker:没有固定角色,只看图下菜碟

Cairn 的 Worker 没有预设角色(不是“信息收集 Agent”“漏洞利用 Agent”这种),而是统一跑一个 OODA 循环:

Observe:读整张图(Fact + Intent + Hint)

Orient:判断当前状态,目标是否已经达成

Decide:决定下一步 Intent(或者判定完成)

Act:执行 Intent,把结果写回 Fact

任务也不是预定义的岗位,而是运行时根据图当前状态动态生成。谁有空、谁有能力,谁就领Intent 去执行。

2.3 协作方式:蚁群式“留信息素”,而不是互相对话

Worker 之间不直接通信,只通过黑板协作(Stigmergy,蚁群式协作):

·A Worker 写下 Fact / Intent,相当于留下信息素

·B Worker 读到后,可以沿着这条路径继续扩展,也可以绕开走别的路

好处:

·没有信息孤岛:所有信息都在图上

·没有强耦合:Worker 挂了、加新的,都不影响全局

·天然支持并发:多个Worker 同时在不同分支上探索

3.系统架构

架构很简单,核心三件套:

·Cairn Server:只负责维护 Fact/Intent/Hint 图的一致性

·Cairn Dispatcher:读图、调度任务、起停 Worker 容器、写协议

·Worker Container:每个项目一个容器,里面可以跑多个 Worker,支持 Claude Code / Codex / Pi 等后端

          ┌──────────────────────────────────┐          │           Cairn Server           │          │    Facts + Intents + Hints       │          └─────────────────┬────────────────┘                            │                     Read / Write API                            │          ┌─────────────────┴────────────────┐          │             Dispatcher           │          │   Schedules tasks, manages       │          │   containers, writes protocol    │          └──────────┬───────────────┬───────┘                     │               │     ┌───────────────┴──┐     ┌──────┴──────────────┐     │  Worker Container│     │  Worker Container   │     │   (Project A)    │     │   (Project B)       │     │  ┌────┐  ┌────┐  │     │  ┌────┐  ┌────┐     │     │  │ W. │  │ W. │  │     │  │ W. │  │ W. │     │     │  └────┘  └────┘  │     │  └────┘  └────┘     │     └──────────────────┘     └─────────────────────┘

要点:

·Server 只管图,不业务逻辑

·Dispatcher 是“总管”,决定什么时候Reason / Explore / Bootstrap

·Worker 只被喂prompt + 当前图,返回结构化输出,无状态

4. 三类任务

Worker 执行的任务只有三类:

任务类型

作用

输出

Bootstrap

项目刚启动时,尝试直接从Origin 冲 Goal

Fact + 可能的 Complete

Reason

读整张图:判断Goal 是否达成,下一步该做什么

Complete / 新 Intent / no-op

Explore

认领一个Intent,执行探索,把结果写回 Fact

一个Fact

一个典型生命周期:

1.创建项目:Origin + Goal 写入图

2.Bootstrap:Worker 尝试直接完成 Goal,大多会失败,但会留下初始 Fact

3.Reason:Worker 判断 Goal 没达成,决定下一步 Intent

4.Explore:Worker 执行某个 Intent,产生新 Fact

5.回到3,不断循环,直到某个 Reason 判定 Complete

5. 实战表现

Cairn 在第二届 TCH·腾讯云黑客松智能渗透挑战赛上,作为唯一一支AK(All-Killed,解掉所有题)战队,最终总排名第三:

参赛队伍:610 支战队、1345 名选手

成绩:54 / 54 题全部解决,唯一AK

关键点:系统在比赛当天凌晨才首次完整上线,没有专门训练、没有专门调参、没有领域专用工具、没有预定义角色

更详细的实战复盘,作者在《无径之径:Cairn AI 从渗透测试到通用问题的求解》里有讲设计理念和比赛细节。

无径之径:Cairn AI 从渗透测试到通用问题的求解

6. 部署

前置条件:Python ≥ 3.12、Docker。

6.1 Docker部署

第一步,拉取工作容器镜像:

docker pull ghcr.io/oritera/cairn-worker-container:latest

第二步,Docker Compose 启动:

docker compose up --build

然后编辑dispatch.yaml填入你的LLM API Key,系统就会自动运行。

Web界面:http://localhost:8000,

API 文档:http://localhost:8000/docs

6.2 手动方式

编辑好dispatch.yaml 后:

·启动 server

uv run --project cairn cairn serve

·启动 dispatcher

uv run --project cairn cairn dispatch --config dispatch.yaml

·做启动健康检查

uv run --project cairn cairn dispatch --config dispatch.yaml --startup-healthcheck-only

最后,若要正式上线使用,务必做到以下几点:严格限制在授权环境内运行;配置完善的成本监控与频率限制机制;保留人工审核及任务中断功能。

-- END --

相关学习资料