Cairn: 상태 공간 탐색으로 침투 테스트와 CTF를 푸는 범용 AI 문제 해결 엔진

Cairn 소개

침투 테스트, 취약점 연구, 수학 증명, CTF 문제는 겉보기엔 서로 다른 분야지만 구조가 같습니다. 시작점(원본, target IP나 대상 시스템)이 명확하고, 도착점(셸 획득이나 플래그 획득 같은 목표)도 명확한데, 그 사이를 잇는 경로만 알 수 없다는 점입니다. Cairn은 이런 문제 부류를 풀기 위한 범용 문제 해결 엔진으로, README는 이를 "거의 무한한 상태 공간(state space)을 향한 방향성 탐색"이라고 설명합니다. 정해진 역할이나 워크플로우 없이 시작점과 목표만 주어지면 알려지지 않은 상태 공간을 탐색해 경로를 찾으며, 침투 테스트는 이 엔진이 처음으로 검증받은 도메인일 뿐이라고 소개하고 있습니다.

Cairn의 핵심은 블랙보드 아키텍처(Blackboard Architecture)와 명시적인 fact-intent 그래프입니다. 세 가지 요소만으로 그래프가 굴러갑니다. 확인된 객관적 발견을 보드에 기록하는 Fact, 아직 실행하지 않은 탐색 방향을 선언하는 Intent, 언제든 주입할 수 있는 사람의 판단인 Hint입니다. 그래프는 origin에서 goal을 향해 자라나며, 새로운 Fact 하나하나가 디딤돌이 되고 Intent 하나하나가 미지의 영역으로 내딛는 발걸음이 됩니다. Agent Worker는 고정된 역할 없이 그래프의 현재 상태를 관찰(Observe)하고 방향을 잡아(Orient) 다음 Intent를 결정(Decide)한 뒤 실제로 탐색을 실행(Act)하는 OODA 루프를 돌립니다. Worker끼리는 직접 통신하지 않고 오직 공유 보드를 통해서만(Stigmergy) 협업합니다.

이 접근은 2026년 Tencent Cloud Hackathon의 AI 침투 테스트 챌린지 2회차에서 검증되었습니다. 610개 팀, 1,345명이 참가한 이 대회에서 Cairn은 54개 문제를 모두 풀어낸 유일한 팀(AK)이었고 최종 3위에 올랐습니다. README에 따르면 이 시스템은 대회 전 한 번도 테스트된 적이 없었고, 대회 당일 새벽 4시에 전체 파이프라인이 처음으로 가동되었으며, 별도의 학습이나 튜닝, 도메인 특화 도구, MCP 도구, RAG 없이 이 결과를 냈다고 밝히고 있습니다. 다만 README는 침투 테스트, CTF, 보안 평가, 취약점 연구에 활용할 수 있더라도 명확한 사전 허가가 있는 환경에서만 사용해야 한다고 별도의 면책 조항으로 강조하며, 무단 보안 테스트나 침해는 위법일 수 있고 그 책임은 전적으로 사용자에게 있다고 명시하고 있습니다.

Cairn의 동작 원리

같은 Worker가 세 종류의 작업을 처리합니다. Bootstrap은 프로젝트 시작 시 문제를 곧바로 풀어보려 시도하며 Fact와 경우에 따라 Complete 판정을 남깁니다. Reason은 그래프 전체를 읽어 목표 달성 여부를 확인하고 다음에 무엇을 탐색할지 판단해 Complete 또는 새 Intent, 혹은 아무 작업도 하지 않음(no-op)을 결정합니다. Explore는 Intent 하나를 맡아 실제 탐색을 수행하고 결과를 Fact 하나로 보고합니다. 위 스크린샷은 실제 CTF 프로젝트에서 이 그래프가 origin부터 자라나는 모습을 보여줍니다. Intent i004가 Twig SSTI(서버 사이드 템플릿 인젝션) 원격 코드 실행을 확인하는 과정에서, 앞선 Fact(f002)의 판단이 틀렸음을 스스로 정정하고 실제 플래그 파일 위치를 새 Fact로 남기는 과정이 우측 패널의 상세 로그에 그대로 기록되어 있습니다.

Cairn의 시스템 아키텍처

시스템은 서버, 디스패처, 워커 컨테이너 세 계층으로 나뉩니다.

          ┌──────────────────────────────────┐
          │           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. │     │
     │  └────┘  └────┘  │     │  └────┘  └────┘     │
     └──────────────────┘     └─────────────────────┘

Cairn Server는 그래프의 일관성만 유지합니다. Cairn Dispatcher는 그래프를 읽어 작업을 스케줄링하고, 워커 컨테이너를 띄우고 종료하며, 프로토콜에 쓰기 작업을 하는 유일한 주체입니다. 프로젝트마다 별도의 Worker Container가 할당되고, 그 안에서 여러 Agent Worker가 동시에 실행됩니다. Agent Worker는 프롬프트만 받아 구조화된 출력을 돌려주는 역할에 그치며, 실제 백엔드로는 Claude Code, Codex, Pi를 지원합니다.

Cairn 설치 및 실행

macOS 또는 Linux, Python 3.12 이상, Docker가 필요합니다. 두 설치 방식 모두 워커 컨테이너 이미지를 먼저 받아야 합니다.

docker pull --platform=linux/amd64 ghcr.io/oritera/cairn-worker-container:latest
cp dispatch.example.yaml dispatch.yaml   # LLM 엔드포인트·API 키 입력

Docker Compose로 실행하는 방법이 권장됩니다.

docker pull ghcr.io/astral-sh/uv:python3.13-trixie
docker compose up --build

이 명령은 cairn-server를 8000번 포트에서 띄우고, 서버가 헬스체크를 통과하면 cairn-dispatcher를 시작합니다. 디스패처는 프로젝트 루트의 dispatch.yaml을 마운트하고 호스트 소켓을 통해 Docker에 연결하며, 데이터는 ./datas/cairn/에 저장됩니다.

직접 서버와 디스패처를 따로 띄우고 싶다면 다음과 같이 실행합니다.

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

Docker나 실제 LLM 엔드포인트 없이 빠른 회귀 테스트만 돌려보려면 다음 명령을 사용합니다.

uv run --project cairn --group dev pytest

Cairn의 라이선스

Cairn은 GNU AGPLv3로 공개되어 있어 개인 및 교육 목적으로 자유롭게 사용할 수 있습니다. AGPL의 특성상 Cairn을 수정해 네트워크 서비스로 제공하는 경우에도 소스 코드를 동일한 라이선스로 공개해야 합니다. AGPL의 오픈소스 의무 없이 상업적·독점적 환경에서 사용하려면 별도의 상업용 라이선스를 저자에게 문의해야 한다고 README는 안내하고 있습니다.

:github: Cairn 프로젝트 GitHub 저장소

더 읽어보기




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! 텔레그램(Telegram)이나 Slack/Discord/Teams/Dooray/GoogleChat 등으로도 새 글 알림을 받으실 수 있습니다. :smiley:

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: