CODEGATE 키노트를 듣고 집에 돌아와서도 계속 머릿속에 남는 게 있었다. 발표자가 말한 그 시스템, 그러니까 DARPA AIxCC 결선에서 우승한 자율 취약점 탐지·패치 시스템이 실제로 존재한다면 코드를 한 번 보고 싶었다. 슬라이드로 아키텍처 다이어그램만 보는 것과 실제 코드 구조를 뜯어보는 건 전혀 다른 얘기니까.

먼저 이게 진짜 오픈소스로 풀렸는지 확인해야 했다. 검색해보니 DARPA가 결선에 오른 7개 팀의 CRS(Cyber Reasoning System)를 전부 OSI 승인 라이선스로 공개하겠다고 발표했고 이미 4개 팀은 공개된 상태였다. Georgia Tech 뉴스와 OpenSSF 팟캐스트로 교차 확인까지 해봤다. 우승팀은 Team Atlanta였다. Georgia Tech, KAIST, Samsung Research, POSTECH이 함께한 팀이고 시스템 이름은 ATLANTIS. 상금의 절반인 200만 달러를 Georgia Tech SSLab에 기부해서 오픈소스 유지보수를 지원하고 있다고 했다. Linux Foundation, OpenSSF와 함께 OSS-CRS라는 이니셔티브도 진행 중이라고.



저장소는 MIT 라이선스였다. --depth 1로 얕게 클론했는데도 4.5기가바이트가 나왔다. 구조를 살펴보니 크게 세 덩어리였다. CRS 본체인 example-crs-webservice, Azure·Terraform·Kubernetes·Tailscale로 짜인 배포 인프라인 example-crs-architecture, 그리고 부속 도구 모음인 example-crs-appendix. 대회용 배포 인프라 의존성이 워낙 커서 로컬에서 전체를 그대로 돌리는 건 무리였다. 대신 아키텍처와 에이전트 프롬프트, 워크플로우 코드를 읽는 레퍼런스로만 쓰기로 하고, 그 중에서 비교적 독립적으로 실행 가능해 보이는 컴포넌트 하나를 골랐다. 내부명 Crete라고 불리는 crs-patch였다.
집에 있는 우분투 서버로 옮겨서 uv sync부터 돌렸다. 예상대로 한 번에 되지는 않았다. vendor로 들어있던 third_party/aider 패키지의 setuptools 패키징에 버그가 두 개 있었다. 서브패키지 include 패턴이 빠져 있어서 일부 모듈이 설치 과정에서 누락됐고, 리소스 데이터 파일도 패키지에 포함이 안 되고 있었다. 둘 다 Crete 프로젝트만의 문제가 아니라 vendor된 aider 자체의 업스트림 버그였다. 직접 패치해서 두 문제를 다 해결하고 나서야 setup 스크립트가 끝까지 돌아갔다.
공식 스모크 테스트를 돌려보려고 했는데 여기서 막혔다. 대회 전용 OSS-Fuzz 픽스처인 aixcc/c/mock-c가 비공개였다. aixcc-finals/oss-fuzz-aixcc와 tob-challenges/oss-fuzz-aixcc 두 저장소를 다 확인해봤지만 어디에도 없었다. Crete의 LLM 모듈, insighter나 writeup 같은 부분도 Docker와 OSS-Fuzz 환경에 강하게 결합돼 있어서 가볍게 우회할 수 있는 수준이 아니었다. 여기서 전체 재현은 포기하기로 했다.
대신 Crete 없이 독립적으로 돌아가는 미니 데모를 하나 직접 짰다. 크래시 로그를 받으면 root_cause 분석, skeptic consensus 검증, patch 생성까지 3단계로 이어지는 파이프라인이고 Anthropic SDK만 써서 구현했다. 키노트에서 들었던 "익스플로잇 관점 vs 반박 관점 컨센서스" 아이디어를 최소 형태로 흉내낸 셈이다. 테스트 데이터는 지어내지 않고 내가 실제로 갖고 있던 걸 썼다. 이전에 nfcapd sequencer에서 찾은 use-after-free의 실제 ASAN 크래시 로그와 관련 소스 파일(ipfix.c, nfxV3.c)로 한 번 돌려봤다. 그런데 결과를 다 보기 전에 Anthropic Console API 크레딧이 0원이 됐다. claude.ai 구독과 콘솔 API 과금이 별개라는 걸 이번에 처음 제대로 알았다. 크레딧을 충전하고 나서 마저 돌려볼 생각이다.
이 작업을 하는 김에 IDA Pro용 MCP 플러그인도 설치했다. mrexodia가 만든 ida-pro-mcp를 Claude Code 플러그인 마켓플레이스로 설치하고 idalib를 전역 활성화했다. IDA와 Claude Code를 재시작해야 반영되는데, 이건 리버싱 작업할 때 IDA 안의 함수·구조체 정보를 에이전트가 직접 조회할 수 있게 해주는 도구라 나중에 리버싱 과제나 CVE 분석에서 꽤 쓸모가 있을 것 같다.

결과적으로 목표했던 "우승 시스템을 완전히 재현해서 돌려보기"는 못 했다. 대회용 인프라와 비공개 픽스처 때문에 애초에 로컬에서 통째로 돌아가게 만들어진 물건이 아니었다. 하지만 그 과정에서 얻은 게 더 많았다. 실제로 패키지를 빌드하다가 업스트림 버그 두 개를 발견해서 고쳤고, 슬라이드에서만 봤던 컨센서스 아이디어를 내 손으로 최소 구현까지 해봤다. 발표만 듣고 끝냈으면 절대 몰랐을 디테일들이다. 다음엔 크레딧을 채우고 crash_to_patch 스크립트를 끝까지 돌려서 실제로 얼마나 쓸만한 패치가 나오는지 확인해볼 생각이다.
이 시스템을 처음 접했던 CODEGATE 키노트 현장 기록은 CODEGATE 2026 키노트 — AI가 취약점을 찾고 고치기까지 6개월에 있다.
| 오픈소스 취약점을 GitHub에 책임 있게 제보하기 — PVR이 없을 때 겪은 일들 (0) | 2026.07.27 |
|---|---|
| Boolean Blind SQLi로 한 글자씩 데이터 뽑아내기 — WHS 워게임 5단계 (0) | 2026.07.26 |
| CTF - Cascading the Seven Seas: 브라우저 DevTools로 숨겨진 플래그 찾기 (0) | 2026.07.25 |
| 드림핵 시스템 해킹 입문 — 무료 자료만으로 시작하는 루트 (0) | 2026.07.24 |
| AFL++로 네트워크 포렌식 파서 퍼징해서 GHSA 10건 제보·게재까지 (0) | 2026.07.23 |