INFO scheduler.loop dispatched bootstrap project=proj_001 intent=i001 worker=mock-observer-1
INFO tasks.common intent concluded project=proj_001 intent=i001 worker=mock-observer-1 source=bootstrap phase_ms=3000 total_ms=3002
INFO tasks.bootstrap bootstrap completed project=proj_001 intent=i001 worker=mock-observer-1 source=bootstrap from=['f001'] phase_ms=3000 total_ms=3002
...
이것은 내 노트북에서 자율 에이전트 스웜(autonomous agent swarm)이 자체적으로 부팅되는 과정이며, 전체 루프는 3초가 걸렸다. 이 소프트웨어는 Cairn이라는 오픈 소스 제어 평면(control plane)이다. 이는 로이터 통신에 보도된 바와 같이 5만 달러 정도의 비용으로 백 개가 넘는 기업을 침해한 해킹 스프로우 뒤에 숨겨져 있었다. 나는 공격 장치(attack machinery)를 끄고 실행했다—API 키도, Docker도, 기기를 나가는 패킷도 없었다—왜냐하면 이 이야기에서 흥미로운 부분은 침해가 아니기 때문이다. 그 배후의 제어판에는 로그인이 없다는 점이다. 약한 로그인도 아니다. 소스 코드 어디에도 로그인이 없다.
연구원이 패널 내부에서 지켜본 스프로우
로이터 통신이 10월 19일 보도한 이야기에 따르면, 보안 회사 NorForge의 수석 위협 연구원인 Snorre Fagerland는 10월 초에 우연히 노출된 Cairn 인스턴스를 스캔하던 중 약 24개의 인스턴스가 악성 활동에 사용되는 것을 발견했고, 이를 통해 범죄자들이 작업하는 모습을 '조용히 들여다볼' 수 있었습니다. 가장 활발했던 것은 중국어 사용자 해커로, 9월 25일부터 활동하며 미국, 캐나다, 호주, 일본의 이커머스 사이트를 목표로 했습니다. 그들의 전체 캠페인 계획은 100개 중국어 문자보다 적었습니다. 에이전트들이 나머지 작업을 수행했습니다. 1,200개 이상의 사이트가 시도되었고, 100개 이상의 회사가 침해되었으며, 성공적인 침입은 일반적으로 약 23시간의 탐색을 거쳐 이루어졌습니다. 이 모든 캠페인 동안 중국의 DeepSeek과 Anthropic의 Claude Code를 혼합하여 사용했으며, 총 토큰 비용은 약 $5,000으로, 성공적인 해킹당 약 $50에 불과했습니다.
Fagerland가 인상 깊었다고 말한 부분은 양(volume)이 아니었습니다. 한 사례에서 에이전트들이 대기업의 공개용 애플리케이션에서 취약점을 찾는 데 실패하자, 그들은 디지털 기록을 파헤쳐 관련 인프라를 매핑하고, 공개용 제어판을 찾아냈으며, 데이터 처리 방식의 미묘한 결함을 발견했고, 서버가 그들의 명령을 실행할 때까지 수 시간 동안 시행착오를 거쳤습니다. 그는 로이터 통신에
언급된 피해자들은 특별할 것 없는 회사들의 목록처럼 보인다. Deere는 '필요한 복구 조치'를 취했으며 '민감 정보가 접근되었다는 징후가 없다'고 밝혔다. SharkNinja는 이번 공격이 독립적인 제품 지원 사이트에 발생하여 이미 통제되었다고 말했다. Cummins는 이것이 '협력업체 중 한 곳에서 운영하는 웹사이트에 대한 잠재적 사이버 공격 보고서를 조사하고 있다'고 언급했다. 로이터(Reuters)는 실제로 어떤 데이터가 추출되었는지 판단할 수 없었으며, 두 개의 작은 기업은 위에 언급된 세 회사 외에 추가적인 침해를 인정했다. 이 이야기 속에서 아무도 무언가를 클릭할 필요가 없었다.
칠판, 세 가지 기본 요소, 그리고 잠금장치 없음
Cairn의 README는 그 야심에 대해 솔직하게 밝힌다: '일반 목적 AI 상태 공간 검색 엔진으로, 먼저 자율 침투 테스트를 통해 검증되었다' (그리고 매력적으로도, '때로는 Carin으로 오타가 난다'). 이 엔진에 기원(origin)과 목표(goal)를 주면, 알려지지 않은 상태 공간을 통과하는 경로를 검색한다. 이 엔진은 세 가지 기본 요소를 가진 칠판이다: **사실(Fact)**은 보드에 기록된 확인된 발견 사항이며, **의도(Intent)**는 아직 실행되지 않은 선언된 탐색 방향이고, **힌트(Hint)**는 어느 시점에서든 주입되는 인간의 판단으로, 에이전트들이 다음 읽기에서 흡수한다. 워커들은 고정된 역할 없이 OODA 루프 (관찰: 전체 그래프를 파악하고, 지향: 방향을 잡고, 결정: 다음 의도를 정하며, 행동)를 실행하며, 지원되는 백엔드는 Claude Code, Codex 및 Pi CLI이다. 이것이 바로 로이터 캠페인의 정확한 형태였다: 간결한 인간의 지침, 수 시간 동안의 자율 탐색, 발견 사항으로 가득 차는 칠판.
이것은 제가 직접 확인한 부분입니다. 현재 릴리스 버전인 v0.2.1은 전체 API 서버를 40줄짜리 FastAPI 파일로 제공합니다. 여기에는 라우터 5개와 엔드포인트 16개가 포함되어 있으며, 이 중 어느 것도 호출자를 묻지 않습니다. 인증 미들웨어(auth middleware)가 없습니다. 자격 증명 의존성(credential dependency)도 없고, 서버 패키지 어디에도 API 키 옵션이 없습니다. 심지어 API는 연결하는 모든 사람에게 /openapi.json에서 자신을 설명합니다. 저는 제 자체 인스턴스에서 16개 경로를 세었습니다. Fagerland의 말은 '우발적으로 노출된 인스턴스'였는데, 코드는 얼마나 우발적이었는지 설명해줍니다. 접근 가능한 Cairn 배포는 읽기 가능하고(readable), 쓰기 가능하며(writable), 외부인의 힌트를 받아들이는 Cairn 배포입니다. 제가 기록에 기여할 부분은 작지만 확실합니다. 저는 제공된 소스 코드를 읽었고, 그 안의 어떤 것도 연구원을 막을 수 없었을 것입니다. 노출은 애초에 아무것도 제한하지 않았던 플랫폼 위에 놓인 배포 실패였습니다.
le1xia0이라는 이름으로 글을 올린 이 저자는 로이터 통신(Reuters)에 이 플랫폼이 '혁신적인 형태의 다중 에이전트 아키텍처이며 해킹 공격을 위해 설계된 것이 아니었다'고 말했습니다. '만약 이것이 유해한 해킹 공격을 수행하는 데 사용된다면, 그것은 나의 의도가 아니다.' 문장의 양쪽 절 모두 코드와 일치합니다. 즉, 일반 검색 엔진이며, 출처-목표-경로 문제(origin-goal-path problems)가 침투 테스트(penetration testing)의 핵심이기 때문에 자체적으로 검증됩니다.
이미 9월에 가격이 책정되다
Reuters가 이 온도계를 읽은 첫 번째 장비는 아닙니다. 9월 22일, Gambit Security의 위협 인텔리전스 팀은 동일한 세 가지 도구(trio)를 기반으로 온라인 소매업체를 공격했던 별도의 사태에 대한 자체 재구성을 발표했습니다. 그것들은 다음과 같습니다: 정찰을 위한 Strix (8월 한 달 동안 138개 호스트 대상 146회 실행, 633 스캐너 시간), 자율 침투를 위한 Cairn (9월 10일과 15일 사이에 DeepSeek v4.1 Flash 기반으로 출시된 105개의 공격 프로젝트), 그리고 오케스트레이션 콘솔 역할을 하는 Hermes입니다. Hermes는 영구 메모리, 자체 작성 스킬, 그리고 121개의 스킬 중 78개가 공격 관련인 중국어
이전까지의 내용은 마치 모든 모델이 이제 이것을 할 수 있는 것처럼 읽히지만, 수정할 데이터 포인트가 있습니다. 이 자료는 순수한 의도로 온건한 버전을 사용해 본 사람에게서 나왔습니다. 한 일본인 유지보자가 이러한 정확한 도구들에 대한 공개 방어 연구를 구축했습니다. 여기에는 탐지 규칙, 분류(triage) 도구, 실험실 운영 매뉴얼 등이 포함되어 있으며, 그는 자신의 격리된 실험실에서 정찰 에이전트(Strix)를 엔드투엔드로 실행하려는 솔직하고 실패한 시도를 문서화했습니다. 로컬 CPU 모델들은 잘못된 형식의 tool-call JSON이나 의미 없는 명령어 루프를 생성했습니다. Groq의 무료 티어는 분당 토큰 제한에 걸렸고, 어떤 모델을 선택해도 피할 수 없었습니다. OpenRouter의 무료 티어는 격리된 테스트 호출은 통과했지만, 에이전트가 실제로 요청하는 크기에서는 재현성 있게 404 오류를 반환했습니다. 결론은 에이전트 기반 스캐닝 자체를 포기하고 대신 결정론적(deterministic) 스캐너를 배포하는 것이었습니다. 이 스캐너는 에이전트가 할 수 없었던 것을 즉시 찾아냈습니다.
이를 성공적인 '스프리(spree)'와 비교해 보세요. Claude Code를 하네스로, DeepSeek v4.1 Flash를 엔진 중 하나로 사용했습니다. 저렴하다는 것이 장난감 수준이라는 의미는 아닙니다. 그것은 침입의 비싼 부분이 모델 비용으로 옮겨갔다는 뜻이며, 작동했던 모든 '스프리'가 그 비용을 지불했습니다. 이제 해자(moat)는 더 이상 익스플로잇 기술이 아닙니다. 루프 뒤에 있는 모델입니다. 이는 쓰기에는 이상한 문장이지만, 위의 수치들이 이것이 올바른 이유를 설명합니다.
기능은 제거하고 패널 실행하기
공격적인 절반(offensive half)을 비활성화한 상태에서 이 아키텍처가 자신의 기계에서 작동하는 것을 네 개의 명령어로 볼 수 있습니다. Cairn은 모델 호출 대신 가중치 주사위(weighted dice)를 던지는 모의 워커 유형(mock worker type)을 배포합니다. 동일한 보드, 동일한 루프, 동일한 프로토콜이며 API 키는 없고 네트워크 연결도 없습니다. 제가 실행한 정확한 설정은 다음과 같으니 cairn-mock.yaml로 붙여넣으세요:
server: "http://127.0.0.1:8000"
runtime:
...
git clone https://github.com/oritera/Cairn && cd Cairn
python3 -m venv .venv && .venv/bin/pip install -e ./cairn
.venv/bin/cairn serve --host 127.0.0.1 --port 8000 # 터미널 1
...
보드를 설정합니다(Seed the board). 참고로 API는 이제 title을 요구하는데, 이전 커뮤니티 런북에서는 이 부분이 언급되지 않았습니다:
curl -s -X POST http://127.0.0.1:8000/projects -H 'Content-Type: application/json' \
-d '{"title":"mock lab","origin":"target http://10.77.0.10 (isolated lab, unreachable)","goal":"get a shell"}'
제가 직접 실행해 본 결과 응답은 다음과 같습니다:
{"project":{"id":"proj_001","title":"mock lab","status":"active","bootstrap_enabled":true,"created_at":"2026-10-20T16:41:50Z","reason":null},"facts":[{"id":"origin","description":"target http://10.77.0.10 (isolated lab, unreachable)"},{
권한 사다리(The authority ladder) 이 시리즈는 당신이 통제하지 않는 인프라에 존재하는 증거가 호출자 레이블(caller label)이라고 계속해서 이야기합니다. 노출된 에이전트 제어 평면(agent control plane)은 그 실패가 뒤집혀서 당신을 가리키는 것입니다: 당신의 에이전트가 발견한 내용, 계획, 힌트들이 연결하는 누구에게나 자신을 설명하는 보드 위에 놓여 있는 것이죠. [지난주 게시물은 기록된 우회 경로(bypass)에 관한 것이었습니다](https://dev.to/slabb/the-quiz-hook-is-a-level-1-control-and-the-bypass-is-logged-43f); 이번 글은 애초에 설치되지 않은 문에 관한 것입니다. 두 영수증 모두 같은 곳에서 나옵니다 — 배포가 가정하는 것 대신 소프트웨어가 실제로 무엇을 하는지 읽는 것이죠.
## 훔칠 것은 무엇인가