
AI 범용 상태 공간 탐색 엔진으로, 자율 침투 테스트에서 먼저 검증되었습니다.
침투 테스트는 본질적으로 무한에 가까운 상태 공간을 통한 방향성 탐색입니다:
이 구조는 침투 테스트에만 국한되지 않습니다. 취약점 연구, 수학적 증명, CTF 챌린지 — 명확한 시작점, 명확한 성공 조건, 그리고 그 사이의 알려지지 않은 경로를 가진 모든 문제는 동일한 형태를 공유합니다.
Cairn은 이러한 유형의 문제를 위해 제작되었습니다. 침투 테스트는 이 엔진이 처음으로 검증된 도메인입니다.
이 엔진은 명시적인 사실-의도 그래프(Fact-Intent Graph)를 가진 블랙보드 아키텍처(Blackboard Architecture) 위에 구축되었습니다. 세 가지 기본 요소만 있으면 됩니다:
| 개념 | 의미 |
|---|---|
| Fact | 보드에 기록된 확인된 객관적 발견 |
| Intent | 아직 실행되지 않은 탐색 방향 선언 |
| Hint | 언제든지 주입되는 인간의 판단; 다음 읽기 시 에이전트가 흡수 |
그래프는 출발점(origin)에서 목표(goal)를 향해 성장합니다. 모든 새로운 Fact는 디딤돌이고, 모든 Intent는 미지의 세계로의 한 걸음입니다.
Agent Worker는 OODA 루프를 실행합니다 — 전체 그래프 관찰(Observe), 현재 상태 정향(Orient), 다음 Intent 결정(Decide), 탐색 실행(Act) — 그리고 그 결과를 새로운 Fact로 기록합니다. Worker는 고정된 역할이 없습니다. 작업은 사전 정의된 직무 설명이 아닌, 그래프의 현재 상태에서 런타임에 생성됩니다.
에이전트는 공유 보드를 통해서만 조정합니다(Stigmergy). 직접적인 통신은 없습니다. 정보 사일로도 없습니다.
세 가지 작업 유형, 모두 동일한 Worker에 의해 실행됩니다:
| 작업 | 수행 기능 | 출력 |
|---|---|---|
| Bootstrap | 프로젝트 시작 시 문제를 직접 해결 시도 | Fact + 가능한 Complete |
| Reason | 전체 그래프 읽기: 목표가 달성되었는가? 다음에 무엇을 탐색해야 하는가? | Complete / 새로운 Intent / no-op |
| Explore | 하나의 Intent를 획득하여 탐색 실행, 결과 보고 | 하나의 Fact |
시스템 아키텍처:
┌──────────────────────────────────┐
│ Cairn 서버 │
│ Facts + Intents + Hints │
└─────────────────┬────────────────┘
│
읽기 / 쓰기 API
│
┌─────────────────┴────────────────┐
│ Dispatcher │
│ 작업 스케줄링, 컨테이너 관리, │
│ 프로토콜 기록 │
└──────────┬───────────────┬───────┘
│ │
┌───────────────┴──┐ ┌──────┴──────────────┐
│ Worker Container │ │ Worker Container │
│ (프로젝트 A) │ │ (프로젝트 B) │
│ ┌────┐ ┌────┐ │ │ ┌────┐ ┌────┐ │
│ │ W. │ │ W. │ │ │ │ W. │ │ W. │ │
│ └────┘ └────┘ │ │ └────┘ └────┘ │
└──────────────────┘ └─────────────────────┘
Cairn Server는 그래프 일관성만 유지합니다.
Cairn Dispatcher는 그래프를 읽고, 작업을 스케줄링하며, Worker 컨테이너를 시작 및 종료하고, 프로토콜에 기록하는 유일한 주체입니다. 각 프로젝트는 자체 Worker Container를 가지며, 여러 Agent Worker가 그 안에서 동시에 실행됩니다. Agent Worker는 프롬프트만 받고 구조화된 출력을 반환합니다.
지원되는 Worker 백엔드: Claude Code, Codex, Pi.
Tencent Cloud Hackathon · AI Penetration Testing Challenge · 2nd Edition
610개 팀 · 1,345명 참가자 · 중국 전역의 최상위 대학 및 보안 기업
| 지표 | 값 |
|---|---|
| 해결한 문제 수 | 54 / 54 — 유일하게 AK 달성 |
| 최종 순위 | 3위 |
이 시스템은 대회 전에 한 번도 테스트되지 않았습니다. 전체 파이프라인이 대회 당일 오전 4시에 처음으로 가동되었습니다. 훈련, 튜닝, 도메인별 도구는 전혀 없었습니다. MCP 도구, RAG, 사전 정의된 에이전트 역할도 전혀 없었습니다.
필수 조건
두 설정 방법 모두 Worker 컨테이너 이미지가 필요합니다:
docker pull --platform=linux/amd64 ghcr.io/oritera/cairn-worker-container:latest
로컬 Dispatcher 설정 파일을 만들고 LLM 엔드포인트 및 API 키를 입력하세요:
cp dispatch.example.yaml dispatch.yaml
Cairn 빌드에 사용되는 기본 이미지를 가져옵니다:
docker pull ghcr.io/astral-sh/uv:python3.13-trixie
docker compose up --build
이 명령은 cairn-server를 포트 8000에서 시작하고, 서버가 상태 확인을 통과하면 cairn-dispatcher를 시작합니다. Dispatcher는 프로젝트 루트의 dispatch.yaml을 마운트하고 호스트 소켓을 통해 Docker에 연결합니다. 데이터는 ./datas/cairn/에 저장됩니다.
# 서버 시작
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
Docker나 실제 모델 엔드포인트 없이 빠른 회귀 테스트 스위트를 실행:
uv run --project cairn --group dev pytest
Cairn은 범용 문제 해결 엔진입니다. 침투 테스트, CTF 해결, 보안 평가 및 취약점 연구 워크플로를 지원하지만, 명시적인 수행 권한이 있는 환경에서만 사용해야 합니다.
이 프로젝트를 어떻게 사용하는지는 전적으로 귀하의 책임입니다. 소유자나 운영자의 명확한 사전 허가 없이 시스템, 네트워크, 애플리케이션 또는 데이터에 대해 Cairn을 사용하지 마십시오. 승인되지 않은 보안 테스트, 익스플로잇 또는 데이터 접근은 불법일 수 있으며 피해를 초래할 수 있습니다.
이 프로젝트의 개발자와 기여자는 사용으로 인한 오용, 남용, 손해, 손실 또는 법적 결과에 대해 어떠한 책임도 지지 않으며, 이를 묵인하지도 않습니다. 이 프로젝트를 사용함으로써 귀하는 귀하의 활동이 관할 구역의 모든 관련 법률, 규정, 계약상 의무, 전문가 또는 조직 정책을 준수하도록 보장하는 데 동의합니다.
이 프로젝트는 개인 및 교육용으로 GNU AGPLv3에 따라 라이선스가 부여됩니다.
상업적 사용: AGPL-3.0 오픈소스 의무 없이 상업적 또는 독점 환경에서 이 프로젝트를 사용하려면 상업용 라이선스를 위해 연락해 주시기 바랍니다.
기여: Pull Request를 제출함으로써 귀하는 귀하의 기여가 AGPL-3.0 및 프로젝트의 상업용 라이선스 모두에서 사용될 수 있음에 동의합니다.