AI에게 침투 랩을 맡겼을 때 실제로 어디서 무너졌는지, 실행 기록으로 남은 실패 여덟 가지와 거기서 나온 요구사항
레드팀 하네스 만들기
AI는 도구일 뿐, 지휘는 인간이 한다
부트캠프에서 다단계 침투 랩을 받았다. IP 하나에서 시작해 서버를 넘어가며 다음 주소를 찾는 구성이었고, AI에게 상당 부분을 맡겨 진행했다.
그런데 일이 잘 안 됐다. 한 곳만 계속 파거나, 조금 전에 실패한 방법을 다시 시도하는 것 같은데 확신할 수가 없었다. 지금 AI가 어떤 증거를 근거로, 어느 경로를, 어떤 방법으로 공략하고 있는지가 보이지 않았기 때문이다.
그래서 지시를 내리기가 어려웠다. 방향을 틀어주고 싶어도 무엇을 틀어야 할지 몰랐다.
보이지 않는 것이 문제였다
세 가지가 안 보였다.
- 무엇을 근거로 판단했는지
- 어디로 갔다가 어디로 새는지
- 잘못된 방향으로 가고 있는지
그래서 첫 번째 목표는 성능이 아니라 기록이었다. AI가 하는 모든 행동을 남기고, 그것을 한눈에 보이게 만드는 것.
세 가지를 만들었다
1. 가시성 — AI의 판단과 경로를 눈에 보이게
모든 행동을 세 단계로 승격시켜 기록한다.
| 답하는 질문 | ||
|---|---|---|
| EVENT | 행동 | 무엇을 했는지 |
| CLUE | 단서 | 무엇을 알아냈는지 |
| BRANCH | 가지 | 지금 어디를 보는지 |
이 기록이 쌓여 MAP(지도)이 된다. 실시간 대시보드에서 지금 어느 가지를 파고 있고 어떤 단서가 나왔는지 볼 수 있다.
2. 통제성 — 잘못 가면 사람이 튼다
지도가 보이니 지시가 쉬워졌다. “그 가지 말고 이걸 봐라” 를 가리켜서 말할 수 있다.
그리고 HOOK — 모든 행동이 지나는 검문소를 코드로 뒀다. 허락되지 않은 대상으로 나가는 요청, 직전 행동을 분류하지 않은 채 다음으로 넘어가는 시도는 즉시 차단된다. 프롬프트로 부탁하는 게 아니라 훅이 도구 호출 자체를 거부한다.
3. 객관성 — AI도 그 기록으로 추론하게
기록을 사람만 보게 두면 절반만 쓴 것이다. AI에게도 그 단서를 근거로 판단하게 했다.
MAP은 사람이, BRIEF는 AI가 본다. 지도는 단서가 쌓일수록 커지지만, BRIEF는 정해진 항목만 담아 크기가 거의 고정된다. 세션이 끊겨도 확정된 상태만 다시 주입된다.
실패는 네 가지로 분류한다. 원인을 나눠야 다음에 어디로 돌아갈지가 정해지기 때문이다.
| 분류 | 무슨 뜻인가 | 다음 행동 |
|---|---|---|
| 가설오류 | 예상한 취약점이 아니었다 | 경로를 접고 프론티어로 |
| 방법오류 | 방법이 틀렸다 | 같은 가설, 다른 방법으로 |
| 정보부족 | 아직 덜 살펴봤다 | 관찰 단계로 복귀 |
| 방어기제 | 무언가 막고 있었다 | 우회 방법을 계획 |
탐색은 best-first 다. 한 경로를 파는 동안 나머지 가지는 사라지지 않고 후보 목록에 남아, 이번 실행의 증거가 가장 강한 가지부터 확장한다.
무엇이 바뀌었나
다음 행동을 정하는 주체가 달라졌다.
이전 사람 → 프롬프트 → AI → 실행 다음에 볼 곳을 사람이 지정
이후 행동 → 증거 → 평가 → 다음 경로 다음에 볼 곳을 증거가 지정
실패가 곧 기능 명세였다
기능을 먼저 설계하지 않았다. 하네스 없이 맨손으로 랩을 풀 때 겪은 일이 거의 그대로 기능이 됐다.
| 랩에서 겪은 실패 | 하네스가 만든 답 |
|---|---|
| 죽인 줄 알았던 병렬 프로세스가 SQLi 오라클을 오염 | HOOK fail-closed, 실행 격리 |
| 출력 파일 경로를 재사용해 결과가 섞임 | runs/<id>/ 실행별 폴더 |
| 테이블 덤프에 825 요청을 쓰고 원하던 값은 못 얻음 | best-first 탐색 + 실패 4분류 |
whoami 결과를 오독하고 정답으로 보고 | E/C/B 증적 추적, 근거성 감사 |
| 세션이 끊기면 확정된 상태까지 소실 | BRIEF 주입 |
무엇을 하지 않는가
- 특정 대상의 정답 명령·페이로드를 넣지 않는다
- 탐지 엔진을 새로 만들지 않는다
- 기록이 남았다는 것이 판단이 옳았다는 뜻은 아니다
현재 상태 — 2026-09 best-first 탐색 + E/C/B 증적 추적, 실패 4분류, MAP/BRIEF 분리, HOOK 게이트, 근거성 감사까지 구현. 크로스플랫폼(Windows·macOS·Linux), 표준 라이브러리만 사용. 소스: moovingGun/pentest-harness
이 프로젝트를 만든 랩
하네스는 이 랩을 푸는 과정에서 나왔다. 무엇이 막혔는지는 침투 기록 쪽에 있다.
| 순서 | 글 | 구간 |
|---|---|---|
| 1 | CJ 레드팀 랩 모의해킹 (1) | 정찰 → IDOR → 2차 SQLi → 명령 실행 |
| 2 | CJ 레드팀 랩 모의해킹 (2) | 내부망 스캔 → 경로탐색 우회 → 토큰 유출 |
| 3 | CJ 레드팀 랩 모의해킹 (3) | CVE-2023-50164 → 명령 실행 → .git 노출 |
| 4 | CJ 레드팀 랩 모의해킹 (4) | CVE-2025-49113 → WAF 우회 → 권한 상승 |
| 5 | CJ 레드팀 랩 모의해킹 (5) | 하드코딩 AWS 키 → IAM 역할체인 → 개인정보 유출 |
특히 1편의 “이 오라클은 전역 상태를 읽는다” 절이 출발점이다. 오라클이 흔들리는 원인을 레이스 컨디션으로 오진하고 페이싱·다수결에 시간을 썼는데, 실제 원인은 종료를 확인하지 않은 백그라운드 프로세스였다. 현상을 설명하는 것처럼 보이는 가설을 붙들고 있었던 것 — 정확히 하네스가 막으려는 종류의 실패다.
구축 과정 기록
하네스를 만들며 내린 판단들을 시리즈로 정리하고 있다. 현재 작성 중이며 순차적으로 올린다.
- AI 혼자 랩을 풀게 뒀더니 — 실패 데이터 수집
- 통합 하네스의 뼈대 — best-first 탐색과 E/C/B 증적
- 실패를 지도에 되먹이다
- 사람용 MAP과 모델용 BRIEF를 나눈 이유
- 모델의 성공 주장을 증거로 검증하기
- 무엇을 측정했고 무엇을 못 했나
CJ AI Security Wave 과정 팀 프로젝트. 이 저장소는 그중 하네스 설계·구축 부분이다.