TRENDSHIFT · 2026.06.15

Claude-BugHunter 딥다이브
— 버그헌팅 절차 전체를 71개 Claude Code "스킬"로 부호화한 보안 운영 번들

Claude-BugHunter는 버그 바운티·외부 레드팀 작업의 방법론·취약점별 탐지 패턴·검증 게이트·보고서 양식71개의 Claude Code 스킬과 15개 슬래시 명령으로 묶은 "드롭인 번들"이다. 설치 한 번이면, Claude Code가 일반 챗봇에서 "방법론을 아는 시니어 보안 연구원처럼 행동하는 보조자"로 바뀐다. 공개된 HackerOne 신고서 681건에서 추출한 취약점 클래스별 탐지 패턴이 핵심이며, 토픽을 평문으로 말하면 관련 스킬이 자동으로 로드된다. (저장소: elementalsouls/Claude-BugHunter · MIT 라이선스 · v2.1.0 · 71 skills / 15 commands)

이 문서는 "보안 자동화 도구를 스킬 형태로 설계하는 법에서 무엇을 배울 수 있는가"에 초점을 둔 방어·진단·교육용 해설이다. 특정 시스템을 무단 공격하는 운영 지침이 아니며, 번들 자체가 강조하는 인가(authorization)·스코프 준수·증거 위생 관점에서 서술한다.
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 시스템 / 환경 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

이 레포가 무엇을 하는 물건인가.

핵심 메시지

"보안 연구원이 머릿속·북마크·메모장에 흩어 두던 절차 지식을,
Claude가 토픽만 듣고 자동으로 꺼내 쓰도록 '스킬'로 부호화했다."

버그 바운티 헌터는 보통 30개쯤 되는 공개 신고서를 북마크해 두고, 매번 다시 열어 읽는다. ?url= 파라미터를 보면 "SSRF를 어떻게 확인하더라?"를 떠올리고, 신고 전에는 "이게 진짜 유효한가, 스코프 안인가?"를 자문한다. Claude-BugHunter는 이 모든 절차를 마크다운 파일(스킬)로 적어 두고, 당신이 평문으로 무엇을 테스트하는지 말하면 관련 스킬만 골라 자동 로드한다.

핵심은 "더 많은 프롬프트"가 아니다. 실제 트리아저(triager)들이 돈을 지불한 공격 체인 템플릿, 신고 전 통과해야 하는 7문항 게이트, 스코프를 코드로 강제하는 엔진, 증거에서 쿠키·PII를 지우는 위생 규칙까지 — 한 번 설치로 따라온다.

Claude-BugHunterAgent Skills 표준(SKILL.md 형식)으로 짜인 보안 번들이다. 71개 스킬은 크게 네 층으로 쌓인다 — ① 생각(Think): 방법론·레드팀 마인드셋, ② 웹앱 헌트: 48개 hunt-* 취약점 클래스 스킬, ③ 외부 경계 공격: 기업 플랫폼(M365/Entra·Okta·SharePoint·vCenter·SSL-VPN 등) CVE 체인, ④ 마무리(Ship): 검증 게이트·보고서·증거 위생. Claude Code 외에 OpenCode·Codex CLI·Hermes Agent에서도 같은 스킬 파일이 로드된다.

용어
Agent Skill (에이전트 스킬)
Claude Code 등이 읽는 표준화된 지식 단위. 폴더 하나에 SKILL.md 한 장이 들어가며, 맨 위 프런트매터에 name·description이 있다. 모델이 사용자의 질문 토픽과 description을 매칭해 관련 스킬만 그때그때 컨텍스트에 끌어온다(이름으로 직접 호출하지 않아도 됨). 변하는 절차 지식을 코드가 아니라 문서로 외부화하는 패턴이다.
용어
버그 바운티 (Bug Bounty) · 레드팀 (Red Team)
버그 바운티는 기업이 공개한 인가 범위(스코프) 안에서 취약점을 찾아 신고하면 보상을 받는 제도. 레드팀은 서면 계약 하에 실제 공격자처럼 조직의 외부 표면을 평가하는 인가된 보안 평가다. 둘 다 공통 전제는 "인가받은 대상만" — 이 번들도 이 선을 코드 수준의 게이트로 강제한다.

2왜 주목받는가

트렌딩 이유 · "한 줄 프롬프트" 보안 셋업 대비 장점.

대부분의 "보안용 Claude 셋업"은 두 가지 극단 중 하나다 — 너무 일반적이거나("당신은 보안 전문가다…"라는 거대 프롬프트 한 장), 너무 파편적이거나(공개 신고서 30개를 북마크해 매번 다시 읽음). 둘 다 두 번째 타깃부터 무너진다. Claude-BugHunter가 스타를 모으는 이유는 이 사이의 "구조화된 운영 지식 라이브러리"라는 자리를 차지했기 때문이다.

비교 항목일반 "보안 프롬프트"흩어진 신고서 북마크Claude-BugHunter
탐지 패턴모델 일반 지식읽어야 활용681건 신고서에서 클래스별로 추출
로드 방식항상 전부수동토픽 매칭 자동 로드(이름 호출 불필요)
검증 규율없음없음7문항 게이트 + 4개 사전 제출 게이트
스코프 강제모델 판단없음엔진이 결정적(deterministic) 허용목록으로 강제
증거 위생없음없음쿠키 마스킹·PII 블랙바·HAR 정제 스킬
기업 표면거의 없음제각각M365/Entra·Okta·vCenter·SSL-VPN 등 2024–2026 CVE 체인
이식성도구 종속없음Claude Code·OpenCode·Codex CLI·Hermes 4종 하네스
번들이 풀려는 "실전 통증"
저자가 인가된 실제 작업에서 겪은 갭들

README는 이 번들이 막연한 아이디어가 아니라 실제 인가 작업에서 드러난 구체적 갭에서 나왔다고 못 박는다. 버그 바운티에서는 ① 가설 규율 부재(검증 전에 보고서를 써서 시간 낭비·유효성 비율 하락), ② 프로그램별 보고 전술 부재(VRT 기본값이 P3급 발견을 P4로 자동 강등), ③ 발견·증거·제출 ID가 폴더에 흩어짐, ④ 스크린샷이 쿠키·피해자 PII를 유출. 레드팀에서는 보수적 기본값이 진짜 발견을 도로 거둬들이고, SOC가 30분 만에 SQLi를 패치하는 등 "교전 중 상황 인식"이 통째로 안 보였다.

해결 — "지식을 데이터로, 규율을 게이트로"
스킬 자동 로드 + 검증 게이트 + 결정적 엔진

취약점 클래스별 스킬이 "웹앱에서 뭘 봐야 하나"라는 갭-제로를 메우고(실제 트리아저가 돈 낸 체인 템플릿), ② 7문항 게이트가 "기술적으로 가능"과 "실제로 신고 가능"을 가르며, ③ 엔진이 스코프를 코드로 강제하고 발견마다 알맞은 hunt-* 스킬로 라우팅한다. 흥미롭게도 저자는 "스킬을 더 늘리는 것"이 아니라 "그 능력을 안전하고 결정적으로 라우팅하는 엔진"이 진짜 레버리지라고 평가한다(아래 §4 참조).

중요 · 이중용도(dual-use) 안전 안내
이 도구는 "인가된 대상"에만 — 무단 공격 가이드가 아니다

번들 README 자체가 강조한다 — 이 스킬들은 본인 소유 자산, 또는 서면 인가가 있는 자산(버그바운티 인스코프, 펜테스트 계약서, CTF, 자기 인프라)에만 쓰도록 설계됐다. triage-validation의 7문항 게이트는 "이 자산이 스코프 안인가(Q3)"를 명시적으로 묻고, 번들은 0-day 무기화·후속 침투 도구·악성코드 개발·대량 표적화 인프라를 의도적으로 배제한다. 본 문서도 동일한 선을 따라 설계·방어·진단 관점으로만 해부한다.

3기술 스택 전체 지도

지식 층(스킬)·실행 층(명령/엔진)·통합 층 각각.

① 지식 층 — 71개 스킬 (마크다운)

번들의 본체는 코드가 아니라 71개의 SKILL.md 문서다. 각 스킬은 폴더 하나에 마크다운 한 장이며, 프런트매터(name·description·선택적 report_count·sources)와 본문(탐지 신호·페이로드·우회표·체인 템플릿)으로 구성된다. 토픽별로 분류된다.

카테고리개수예시 스킬
웹앱 헌팅13hunt-xss · hunt-sqli · hunt-ssrf · hunt-idor · hunt-lfi · hunt-ssti · hunt-xxe · hunt-csrf · hunt-cors · hunt-open-redirect
인증 · 아이덴티티7hunt-auth-bypass · hunt-session · hunt-oauth · hunt-saml · hunt-mfa-bypass · hunt-ato
API · 인프라15hunt-graphql · hunt-grpc · hunt-websocket · hunt-api-misconfig · hunt-host-header · hunt-rce · hunt-k8s
고급 · 동시성6hunt-race-condition · hunt-http-smuggling · hunt-deserialization · hunt-cache-poison
프레임워크별4hunt-nextjs · hunt-nodejs · hunt-laravel · hunt-springboot
기업 ID · 클라우드 ★3m365-entra-attack · okta-attack · cloud-iam-deep
인프라 · 어플라이언스 ★5vmware-vcenter-attack · enterprise-vpn-attack · hunt-sharepoint · hunt-aspnet · hunt-ntlm-info
레드팀 기술 ★4redteam-mindset · apk-redteam-pipeline · supply-chain-attack-recon · mid-engagement-ir-detection
정찰 · OSINT4web2-recon · offensive-osint · hunt-subdomain · osint-methodology
워크플로 · 보고 · 기타11bb-methodology · triage-validation · evidence-hygiene · report-writing · bugcrowd-reporting
용어
SKILL.md 프런트매터 / report_count
hunt-* 스킬의 description에는 그 스킬이 몇 건의 공개 신고서에서 추출됐는지(report_count)와 출처(sources: github, hackerone_public, …)가 적혀 있다. 예: hunt-xss는 174건, hunt-rce는 67건, hunt-idor는 26건 기반. "근거가 몇 개 신고서냐"가 메타데이터로 노출되는 것이 이 번들의 신뢰성 장치다.

② 실행 층 — 15개 슬래시 명령 + 엔진

스킬이 "지식"이라면, commands/의 15개 슬래시 명령은 "워크플로 진입점"이다. Claude Code 전용이며, 핵심 흐름을 단계적으로 안내한다.

명령역할
/hunt능동 헌팅 디스패처. 레드팀 vs WAPT 모드를 묻고 hunt-dispatch 스킬로 핸드오프.
/recon · /surface정찰 + 표면 랭킹(P1/P2/Kill 목록).
/chain확인된 발견을 A→B 신호표로 체이닝(예: SSRF→클라우드 크리덴셜).
/validate · /triage보고 전 7문항 게이트 강제 실행.
/reportH1/Bugcrowd/Intigriti/레드팀 양식으로 초안 생성.
/token-scan노출 토큰/시크릿 스캔(읽기 전용 — 행사 금지).
/autopilot · /intel · /pickup오케스트레이션 · 인텔 수집 · 세션 이어가기.
/remember · /memory-gc세션 메모리 저장 · 정리(타깃별 SESSION.md).
/web3-audit스마트컨트랙트 감사(Foundry PoC).

그 아래에 engine/(파이썬)이 있다 — 결정적 의사결정 지원 엔진이다. 정찰·파라미터 발견·시크릿 스캔·서비스 핑거프린트·카테고리화까지를 LLM 없이 순수 파이썬 + 수동(passive) 도구로 수행해 "공짜, 에이전트 없이, 레이트리밋 소모 없이" 표면을 그린다. LLM(에이전트)은 옵트인 헌트의 소수 판단 지점에만 쓴다.

엔진 파일역할
scope.py결정적 허용목록(apex/와일드카드/CIDR/regex; deny-wins; 기본 거부). 정찰·헌트 양쪽에서 강제.
recon.py서비스/기술 핑거프린트 · JS 번들 엔드포인트 채굴 · JS 시크릿 스캔(키 마스킹) · 입력 파라미터 수집(gau+katana). 찾는 단계에 LLM 없음.
skill_map.py발견한 (엔드포인트|파라미터, 클래스)를 실제 설치된 hunt-* 스킬로 매핑 + 첫 curl 프로브 제시.
engine.py오케스트레이터 — 단계·스코프 강제·랭킹·맵·병렬 헌트/검증·후보→확정·리포트.
agent.py헤드리스 claude -p 디스패치(옵트인 헌트/검증 전용, 기본 스킬 OFF로 토큰 절약).
state.py재개 가능한 교전 저장소(state.json+증거+로그+arsenal.md+report.md).

③ 통합 · 배포 층

요소역할
플러그인 패키징.claude-plugin/marketplace.json+plugin.json/plugin install로 네임스페이스(claude-bughunter:) 설치.
설치 스크립트scripts/install.sh --all — 3개 하네스 경로(~/.claude/skills·~/.agents/skills·~/.hermes/skills)에 복사. (OpenCode는 ~/.claude/skills 공유, 별도 경로 없음)
Burp MCP--burp-mcp — PortSwigger Burp Suite MCP 서버 연동(OOB/블라인드/퍼징용, 선택).
cbh CLIscripts/cbh.py — 터미널 네이티브 결정적 러너(recon·classify·triage·report 서브커맨드).
품질 게이트scripts/lint_skills.py — name 정규식·description≤1024자·본문≤500줄·식별자 denylist(SHA256) 검사.
외부 도구ProjectDiscovery(subfinder·dnsx·httpx·katana·nuclei) · SecLists · Assetnote 워드리스트.
용어
MCP (Model Context Protocol)
모델이 외부 도구·서버와 표준 방식으로 대화하게 해 주는 프로토콜. 여기서는 Burp Suite를 MCP 서버로 띄워 Claude가 Repeater/Collaborator 같은 기능을 호출하게 한다. 단, 엔진은 "curl 우선"이고 Burp는 OOB(out-of-band)·블라인드·퍼징처럼 curl로 안 되는 경우에만 보조로 쓴다.

4아키텍처 심화 분석

6단계 워크플로 + 토픽 기반 스킬 자동 라우팅 + 검증 게이트.

전체 흐름 한눈에 — 6단계, 비선형

번들은 SCOPE → RECON → HUNT → VALIDATE → CAPTURE → REPORT의 6단계로 매핑된다. 비선형이라 어느 단계에서든 끼어들 수 있다. 핵심 통찰은 "넓이(breadth)는 결정적 코드로 공짜·가시적으로, 깊이(판단)는 사람과 소수 에이전트로" — 표면을 그리는 일은 LLM 없이, 실제 공격 판단은 옵트인으로 한다.

사용자: "acme.com 테스트 — H1 인스코프 타깃" │ ┌──────────────────────── DEFAULT (결정적 · $0 · 에이전트 없음) ───────────────────────┐ │ │ [1 SCOPE] ──▶ [2 RECON] ──────────▶ [MAP & RANK] ───────────────────────────────────────────┤ scope.py recon.py skill_map.py │ 허용목록 서비스/기술 핑거 각 (엔드포인트|파라미터, 클래스) │ apex/CIDR JS 엔드포인트 채굴 ─▶ 어떤 hunt-* 스킬을 열지 + 첫 curl │ deny-wins JS 시크릿(마스킹) ─▶ arsenal.md 로 출력, 여기서 사람에게 핸드오프 │ 기본 거부 파라미터(gau+katana) │ │ │ └───────────────────────────────────────────────────────────────────────────────────┘ │ (사람이 선택할 때만 ↓ 옵트인) ┌──────────────────────── OPT-IN (--hunt · 에이전트 · 읽기전용 기본) ───────────────────┐ │ │ [3 HUNT] ───────────▶ [4 VALIDATE] ──────────▶ [5 CAPTURE] ──────────▶ [6 REPORT] │ hunt-* 스킬 자동로드 triage-validation evidence-hygiene report-writing │ curl 우선 프로브 7문항 게이트 쿠키 마스킹·PII VRT 인지 심각도 │ 클래스별 페이로드 ┌── PASS → CAPTURE 블랙바·HAR 정제 H1/Bugcrowd/레드팀 │ (Burp는 OOB만) ├── KILL → 다음 클래스 스크린샷 순서 │ ├── CHAIN → /chain 표 │ └── DOWNGRADE → 심각도 재산정 │ └───────────────────────────────────────────────────────────────────────────────────┘
용어
결정적(deterministic) vs 에이전트(agentic)
결정적 단계는 입력이 같으면 출력이 같은 순수 파이썬·수동 도구(정찰·랭킹·맵). 토큰을 안 쓰고 레이트리밋도 안 태운다. 에이전트 단계는 LLM이 판단을 내리는 부분(실제 헌트·검증). 이 번들의 핵심 설계는 "넓이는 결정적으로, 좁은 판단만 에이전트로"여서, 기본 실행은 표면 맵(arsenal.md)에서 멈추고 사람에게 넘긴다.

패턴 ① — 토픽 기반 스킬 자동 라우팅

이 번들의 가장 영리한 부분이다. 사용자가 "이 엔드포인트에 ?url= 파라미터가 보여"라고 평문으로 말하면, Claude는 71개 스킬의 description을 토픽 매칭해 hunt-ssrf 하나만 컨텍스트로 끌어온다. 이름으로 호출하지 않는다. 엔진의 skill_map.py는 이 매칭을 코드로도 구현해, 발견한 표면을 결정적으로 스킬에 배정한다.

skill_map.py — 클래스→스킬→첫 프로브 매핑(발췌, 단순화)
# 공격 클래스 → 번들 안의 hunt 스킬
CLASS_SKILL = {
  "ssrf": ["hunt-ssrf"], "idor": ["hunt-idor"],
  "xss":  ["hunt-xss", "hunt-dom"], "lfi": ["hunt-lfi"],
  "graphql": ["hunt-graphql"], "secret": ["hunt-source-leak"], ...
}
# 탐지된 기술 → 기술별 스킬
TECH_SKILL = {
  "next.js": ["hunt-nextjs"], "laravel": ["hunt-laravel"],
  "sharepoint": ["hunt-sharepoint"], ...
}
# 클래스별 "첫 curl" — OOB가 필요한 건 그렇게 주석
CLASS_PROBE = {
  "ssrf": 'curl -s "{ur}http://169.254.169.254/latest/meta-data/"'
          '   # 블라인드는 Burp Collaborator(OOB)',
  "idor": 'curl -s "{u}"   # 두 신원으로 id 바꿔 호출 → 본문 diff',
  ...
}

중요한 안전장치: skill_map.py실제로 ~/.claude/skills에 설치된 스킬만 매핑한다. 없는 스킬을 가리키지 않도록 필터링한다. 그리고 모든 프로브는 curl 우선이며, 침습적 동작은 명시적 인가가 있을 때만 권한다.

패턴 ② — "OOB-or-it-didn't-happen" 게이트 (진단의 엄정함)

이 번들이 단순 페이로드 모음과 다른 결정적 지점. 각 hunt-* 스킬은 "무엇이 확증이 아닌가"를 먼저 가르친다. 예컨대 hunt-ssrf"에러 메시지가 URL을 그대로 되비추는 것은 SSRF 확증이 아니다"라고 못 박는다 — 그건 서버가 입력을 에러 문자열에 끼워 넣은 것일 뿐, 실제로 외부 연결을 한 게 아니기 때문이다.

SSRF 확증이 아닌SSRF 확증인 것
에러 메시지가 내 URL을 그대로 출력OOB 리스너에 고유 서브도메인 DNS 조회가 찍힘
외부 URL과 localhost의 상태코드가 다름OOB 엔드포인트로 서버 소스 IP의 HTTP 요청이 옴
URL 전송 시 응답이 지연됨헤드리스 브라우저/PDF 렌더러가 콜백 URL을 실제로 페치
비유 — 검증 게이트

triage-validation7문항 게이트를 "신고서 제출 전 통과해야 하는 검문소"로 생각하자. ① 지금 당장 실제 HTTP 요청으로 악용 가능한가? ② 임팩트가 프로그램의 인정 목록에 있나? ③ 자산이 스코프 안인가? ④ 공격자가 못 얻는 권한 없이도 되나? ⑤ 이미 알려진 동작이 아닌가? ⑥ "기술적으로 가능" 이상으로 임팩트를 증명할 수 있나? ⑦ 절대-신고-금지 목록에 없나? 하나라도 NO면 그 발견은 KILL — 미련 없이 다음 테스트 클래스로. 이 한 가지 규율이 생산적인 연구자와 노이즈를 가른다.

설계 통찰 (반직관적)
"스킬을 더 쌓는 것"이 레버리지가 아니다 — 엔진이다

저자의 eval/ 측정 결과가 흥미롭다 — 벤치마크 가능한 표준 취약점 과제에서 스킬은 능력을 거의 ~0만큼만 더해 줬고(베이스 모델이 이미 표준 클래스를 다룬다), 오히려 에이전트당 ~12–15k 토큰을 더 먹었다. 그래서 옵트인 헌트 에이전트는 기본적으로 스킬을 OFF로 둔다. 진짜 레버리지는 "더 많은 지식"이 아니라 그 능력을 안전하게·결정적으로·스킬 라우팅하며·사람을 루프에 둔 채 굴리는 엔진이라는 결론이다. 보안 자동화 설계에서 곱씹을 만한 교훈이다.

5디렉토리 구조 해부

스킬(지식) · 명령(워크플로) · 엔진(오케스트레이션)의 3분할.

Claude-BugHunter/ ├── .claude-plugin/ ★ 플러그인 매니페스트 │ ├── marketplace.json /plugin marketplace add 로 등록되는 카탈로그 │ └── plugin.json 플러그인 메타(name·version 2.1.0·license) ├── skills/ ★★ 71개 스킬 (각 폴더에 SKILL.md 한 장) │ ├── hunt-xss/SKILL.md (174건 신고서 기반) — XSS 탐지·페이로드·우회표 │ ├── hunt-rce/SKILL.md (67건) · hunt-idor (26) · hunt-ssrf (15) · ... │ ├── m365-entra-attack/ M365/Entra ID 체인(AADSTS·스마트락아웃·CA 우회) │ ├── okta-attack/ Okta IdP — 테넌트 발견·팩터 열거·OIDC redirect_uri │ ├── vmware-vcenter-attack/ vSphere/vCenter CVE 체인 │ ├── enterprise-vpn-attack/ Cisco/Fortinet/Citrix/PAN/Pulse/SonicWall/F5 │ ├── triage-validation/ ★ 7문항 게이트 — 보고 전 필수 │ ├── evidence-hygiene/ 쿠키 마스킹·PII 블랙바·HAR 정제 │ ├── redteam-mindset/ 레드팀 운영 규율 (always-on) │ ├── hunt-dispatch/ 메타 라우터 (/hunt 명령이 내부 사용) │ └── ... (총 71개) ├── commands/ ★ 15개 슬래시 명령 (Claude Code 전용) │ ├── hunt.md 능동 헌팅 디스패처(레드팀 vs WAPT) │ ├── recon.md · surface.md 정찰 + 표면 랭킹 │ ├── chain.md · validate.md 체이닝 + 7문항 게이트 │ ├── report.md · triage.md 보고서 초안 + 트리아지 │ └── token-scan.md · ... 시크릿 스캔 등 ├── engine/ ★ 결정적 의사결정 지원 엔진 (Python) │ ├── scope.py 허용목록(apex/CIDR/regex, deny-wins, 기본 거부) │ ├── recon.py 결정적 정찰(서비스/JS 엔드포인트/시크릿/파라미터) │ ├── skill_map.py 표면 → hunt-* 스킬 매핑 + 첫 curl │ ├── engine.py 오케스트레이터(단계·랭킹·맵·병렬 헌트·리포트) │ ├── agent.py 헤드리스 claude -p 디스패치(스킬 OFF 기본) │ ├── state.py 재개 가능한 교전 저장소(state.json) │ └── osint.py 선택적 서비스/기술 프로브 ├── scripts/ 설치·CLI·품질 도구 │ ├── install.sh 3개 하네스에 스킬/명령 복사(--all, --burp-mcp) │ ├── cbh.py 터미널 CLI(recon/classify/triage/report) │ ├── lint_skills.py 스킬 품질 린트(name 정규식·≤1024자·≤500줄) │ └── refresh-cve-index.py CISA KEV CVE 인덱스 주간 갱신 ├── docs/ architecture.md · skills.md · cbh-cli.md · cve-coverage.md ├── eval/ "스킬이 능력을 더하는가" 측정 결과 ├── README · INSTALL · USAGE · SECURITY · CONTRIBUTING · CHANGELOG · ENGAGEMENTS.md └── assets/ 배너·아키텍처 SVG 다이어그램
읽는 순서 추천

README.md로 4층 구조와 스코프(인/아웃) 파악 → ② docs/architecture.md로 6단계·스킬↔단계 매핑 → ③ skills/hunt-ssrf/SKILL.md 한 장으로 스킬의 실제 형식(확증 게이트·신호·페이로드) 체감 → ④ skills/triage-validation/SKILL.md로 7문항 게이트 → ⑤ engine/README.md+skill_map.py로 "결정적 라우팅" 설계. 통찰의 80%가 이 다섯 곳에 있다.

6학습 포인트 (기술별)

보안 지식의 코드화·자동화 설계에서 무엇을 배우나.

A. Agent Skill 패턴 — 절차 지식을 문서로 외부화

이 레포는 "전문가의 절차 지식을 어떻게 재사용 가능한 단위로 패키징하나"의 살아 있는 교본이다. 핵심은 ① 폴더+SKILL.md 한 장이라는 최소 단위, ② 프런트매터 description"언제 이 스킬을 로드할지"의 트리거가 되는 설계, ③ 토픽 매칭으로 필요한 것만 컨텍스트에 끌어오는 지연 로딩. 거대 단일 프롬프트(전부 항상 로드)와 정반대 철학이다 — 토큰을 아끼고 정확도를 높인다.

실습: 당신이 반복하는 작업 절차 하나(예: "PR 리뷰 체크리스트", "장애 대응 런북")를 골라, 프런트매터(name·description)+본문으로 된 SKILL.md 한 장을 직접 써 보라. description에 "언제 쓰는가"를 1~2문장으로 명확히.

B. 결정적 vs 에이전트 분리 — 비용·재현성 설계

가장 값진 통찰. "넓이는 결정적 코드로 공짜·재현 가능하게, 좁은 판단만 LLM으로"라는 분할이다. 정찰·랭킹·스킬 매핑은 순수 파이썬이라 $0·재현 가능·레이트리밋 무소모이고, LLM은 옵트인 헌트의 몇 안 되는 판단 지점에만 투입된다. 이는 보안뿐 아니라 모든 LLM 에이전트 파이프라인(어디까지 코드로, 어디부터 모델로)에 그대로 옮길 수 있는 원칙이다.

실습: 당신의 워크플로 하나를 "결정적으로 가능한 부분"과 "판단이 필요한 부분"으로 종이에 갈라 적어 보라. 결정적 부분을 코드로 빼면 LLM 호출이 얼마나 줄어드는지 추정.

C. 검증 게이트 — "가능"과 "유효"의 분리

triage-validation의 7문항 게이트와 각 스킬의 "확증이 아닌 것" 표는 "기술적으로 가능"을 "실제로 보고 가능"과 절대 같게 취급하지 않는 규율을 코드화한다. SSRF에서 "에러가 URL을 되비춤"을 확증으로 오인하지 않는 것처럼 — 이는 OSINT·모니터링·QA·데이터 검증 등 "외부 신호로 사실을 판정하는 모든 일"에 적용되는 원칙이다. 거짓 양성(false positive)을 거르는 자세 자체가 자산이다.

실습: 당신이 다루는 "외부 신호 판정" 한 가지(예: 모니터링 알람, 테스트 통과 여부)에 대해 "이건 확증이 아니다"의 목록을 3개 적어 보라.

D. 증거 위생 — 결과물에서 민감정보 제거

evidence-hygiene 스킬은 "스크린샷·HAR·로그에서 쿠키·PII를 어떻게 지우나"를 절차로 만든다 — 쿠키 마스킹 시점, 타인 데이터/얼굴/주소의 블랙바, jq로 HAR 정제, 제출 후 시크릿 회전. 이는 보안 보고뿐 아니라 버그 리포트·로그 공유·데이터셋 공개 등 "산출물에 민감정보가 섞이는 모든 상황"의 체크리스트로 재사용된다.

실습: 평소 공유하는 산출물(스크린샷·로그·HAR) 하나에 어떤 민감정보가 새어 나갈 수 있는지 목록화하고, 각각의 제거 방법(마스킹/필터/삭제)을 적어 보라.

E. 플러그인·다중 하네스 배포

같은 SKILL.md 파일이 Claude Code·OpenCode·Codex CLI·Hermes 4종에서 로드되는 점, 그리고 marketplace.json으로 /plugin install 한 줄 설치되는 점은 "표준 포맷에 맞추면 배포·이식이 공짜"라는 교훈이다. lint_skills.py가 description 길이·본문 줄 수·식별자 denylist를 자동 검사하는 것도 "기여를 받되 품질을 코드로 강제"하는 좋은 예다.

7시스템 / 환경 요구사항

설치는 가볍다. 그러나 "인가(authorization)"가 가장 중요한 요구사항이다.

항목요구사항
호스트 OSmacOS / Linux(Windows는 WSL2 Ubuntu). 터미널 필요.
에이전트Claude Code(권장) — 유료 플랜 또는 API 크레딧. OpenCode·Codex CLI·Hermes도 지원.
설치/plugin install claude-bughunter@elementalsouls 또는 bash scripts/install.sh.
Python엔진/CLI용 Python 3(python3 --version 정도면 충분).
외부 도구(선택)ProjectDiscovery(subfinder·httpx·katana·nuclei) · gau · Burp Suite + MCP(OOB용).
안전 안내Anthropic 런타임은 공격형 보안 작업을 기본 차단할 수 있음 → 인가된 작업은 Cyber Verification Program(CVP) 신청으로 조정.
인가(필수)본인 소유 자산·버그바운티 인스코프·서면 펜테스트 계약·CTF·연습용 취약 사이트에 한해서만. 이것이 가장 중요한 "요구사항"이다.
법적 · 윤리적 사용 주의 (반드시 읽을 것)
이 번들은 "무단 공격 도구"가 아니다 — 책임 있는 보안 연구의 선

번들의 SECURITY.md와 README는 못 박는다 — 이 스킬들은 본인이 소유했거나 서면 인가가 있는 자산에만 쓰도록 설계됐고, triage-validation의 게이트(Q3 "스코프 안인가")가 미인증 제3자 타깃을 가리키면 자동 발동한다. 번들은 0-day 무기화·후속 침투/지속성/측면이동 도구·악성코드·대량 표적화 인프라를 의도적으로 배제하며, 내부 AD 공격·C2·EDR 우회도 스코프 밖이다.

허용되는 사용: ① 본인 인프라/앱의 보안 점검, ② 명시적 인스코프 버그바운티, ③ 서면 계약 범위의 인가된 펜테스트/레드팀, ④ CTF·연습용 취약 사이트. 금지되는 사용: 동의·계약 없는 시스템 공격, 데이터 탈취, 서비스 방해. 한국 정보통신망법(무단 침입·방해), 개인정보보호법, EU GDPR 등 관할 법률을 반드시 준수해야 하며, 위반 책임은 전적으로 사용자에게 있다. 본 문서는 설계·방어·진단 학습용이며 특정 시스템 대상 무단 공격 절차를 제공하지 않는다.

8직접 해볼 수 있는 실습 과제

난이도별 5단계 — 모두 본인 자산 / 연습용 취약 사이트(Juice Shop·DVWA 등)로만 안전하게.

과제 1 난이도 ★☆☆☆☆

스킬 한 장 읽고 구조 파악

skills/hunt-ssrf/SKILL.md를 처음부터 끝까지 읽고, ① 프런트매터의 description·report_count가 무엇을 알려 주는지, ② "확증이 아닌 것" 표가 왜 중요한지 한 문단으로 정리한다. 이름으로 호출하지 않고 토픽으로 로드되는 설계의 의미를 적어 본다.

과제 2 난이도 ★★☆☆☆

나만의 SKILL.md 한 장 쓰기

당신이 반복하는 작업 절차(코드 리뷰 체크리스트, 장애 런북 등)를 골라 프런트매터+본문으로 된 SKILL.md를 작성하고, scripts/lint_skills.py의 규칙(name 정규식·description≤1024자·본문≤500줄)을 직접 만족하도록 다듬는다.

과제 3 난이도 ★★★☆☆

7문항 게이트를 자기 발견에 적용

OWASP Juice Shop 같은 연습용 취약 사이트에서 발견 하나를 잡아, triage-validation의 7문항 게이트를 한 줄씩 자문하며 PASS/KILL을 판정한다. 한 항목이라도 NO면 왜 KILL인지 적는다. 실제 서비스는 대상으로 삼지 말 것.

과제 4 난이도 ★★★★☆

결정적 정찰 엔진 읽고 본인 도메인에 실행

engine/recon.pyskill_map.py를 읽고, 당신이 소유한 도메인을 스코프 파일에 넣어 python3 engine/engine.py --scope my.json(기본 = 맵만, 에이전트 없음)을 돌린다. 생성된 arsenal.md가 표면을 어떤 hunt-* 스킬로 라우팅했는지 분석한다.

과제 5 난이도 ★★★★★

"결정적 vs 에이전트" 분리 패턴 직접 구현

임의의 작은 워크플로(예: URL 목록의 기술 스택 핑거프린트 + "어떤 점검이 필요한가" 라벨링)를 골라, 찾기·분류는 순수 파이썬(결정적)으로, 최종 판단 1개만 LLM 호출로 짜 본다. 전부 LLM에 맡긴 버전과 토큰·재현성을 비교하며 이 번들의 설계 철학을 체감한다.

9관련 기술 심화 학습 로드맵

6주 코스 — 웹 보안 기초부터 보안 자동화 설계까지(전부 방어·진단 관점).

주차주제실습 · 참고
1주차웹 보안 기초 — OWASP Top 10, HTTP/세션, 취약점 클래스 개요OWASP Juice Shop · PortSwigger Web Security Academy(무료)
2주차Agent Skill 패턴 — SKILL.md 형식·자동 로드·지연 로딩Claude Code skills 공식 문서 · 본인 런북을 SKILL.md로
3주차대표 취약점 클래스 정독 — SSRF·IDOR·XSS의 "확증/비확증"hunt-ssrf·hunt-idor·hunt-xss SKILL.md · 연습 사이트 재현
4주차검증 규율 — 7문항 게이트·VRT 심각도·false positive 억제triage-validation · Bugcrowd VRT · 자기 발견에 게이트 적용
5주차결정적 자동화 — 스코프 강제·정찰·스킬 라우팅engine/ 정독 · 본인 도메인에 map-only 실행 · arsenal.md 해석
6주차증거 위생 · 책임 있는 공개 — PII 제거·법규·인가 절차evidence-hygiene · SECURITY.md · 정보통신망법·GDPR 학습

10핵심 키워드 사전

본문·소스에 나온 용어 빠른 참조.

용어의미
Agent Skill폴더+SKILL.md 한 장으로 된 표준 지식 단위. 토픽 매칭으로 자동 로드.
SKILL.md 프런트매터스킬 맨 위 메타블록(name·description·report_count·sources). description이 로드 트리거.
hunt-* 스킬취약점 클래스/프레임워크별 탐지 스킬(48개). 공개 신고서에서 패턴 추출.
report_count해당 스킬이 몇 건의 공개 HackerOne 신고서에서 추출됐는지(예: hunt-xss=174).
6단계 워크플로SCOPE→RECON→HUNT→VALIDATE→CAPTURE→REPORT(비선형).
7문항 게이트보고 전 통과해야 하는 7개 질문. 하나라도 NO면 그 발견 KILL.
결정적(deterministic)LLM 없이 순수 코드·수동 도구로 수행 — $0·재현 가능·레이트리밋 무소모.
스코프(scope)인가된 테스트 범위. scope.py가 허용목록(deny-wins, 기본 거부)으로 코드 강제.
arsenal.md엔진 기본 산출물 — 표면을 어떤 hunt-* 스킬로 점검할지 + 첫 curl을 적은 맵.
OOB (out-of-band)대역 외 확증 — Burp Collaborator 등 내가 통제하는 리스너로 외부 콜백을 받아 사실 확인.
VRTBugcrowd Vulnerability Rating Taxonomy — 취약점 심각도 분류 기준.
MCPModel Context Protocol — 모델↔외부 도구 표준. 여기선 Burp Suite 연동.
증거 위생(evidence hygiene)산출물에서 쿠키·PII를 제거하는 절차(마스킹·블랙바·HAR 정제).
다중 하네스같은 SKILL.md가 Claude Code·OpenCode·Codex CLI·Hermes에서 로드됨.
CVPAnthropic Cyber Verification Program — 인가된 이중용도 보안 작업의 안전장치 조정 신청.

11참고 링크