자연어 한마디로 침투 테스트 전 과정을 자동화하는 AI 에이전트
터미널에 '이 주소에 침투 테스트를 해줘'라고 입력하면, 정보 수집부터 취약점 발견, 악용, 보고서 작성까지 AI가 스스로 판단하며 진행합니다. VulnClaw는 대형 언어 모델(LLM)과 도구 체인을 결합해, 사용자가 매 단계의 명령어를 직접 치지 않아도 되는 침투 테스트 환경을 만듭니다. CTF 대회나 교육용 타겟에서 반복적인 수동 작업을 줄이고, AI가 수집한 증거를 바탕으로 결과를 검증하는 흐름을 경험할 수 있습니다.
모델이 주도하는 자율 탐색
기존의 고정된 스크립트나 단계별 템플릿을 따르는 방식과 달리, VulnClaw는 모델이 다음 행동을 스스로 결정하는 구조를 취합니다. 프레임워크는 목표, 과거 대화, 증거 메모리, 사용 가능한 도구 목록만 제공하고, 모델은 이 정보를 바탕으로 어떤 도구를 호출할지, 언제 중단할지, 언제 사용자에게 질문할지를 판단합니다. 이 과정에서 모든 도구 실행 결과는 AgentState.evidence에 원본 그대로 저장되며, 모델은 필요할 때만 evidence_search나 evidence_view를 통해 과거 데이터를 다시 확인합니다. 이러한 설계는 모델이 맥락을 잃지 않으면서도, 방대한 출력 데이터가 현재 판단을 흐리지 않도록 균형을 맞춥니다.
거짓 결과 차단과 실패 대응
AI가 실제 존재하지 않는 플래그나 취약점을 지어내는 '환각' 현상을 막기 위해, VulnClaw는 증거 기반 검증 게이트를 적용합니다. 모델이 주장하는 결론이나 플래그는 실제 도구 출력에 문자 그대로 존재하거나, 저장된 증거 번호를 명시적으로 인용해야만 인정됩니다. 단순히 모델이 '찾았다'고 말한다고 해서 과정이 종료되지 않으며, 근거가 없으면 모델에게 거부 사유를 전달하고 계속 탐색하도록 유도합니다. 또한, 동일한 증거를 반복적으로 읽거나 새로운 발견 없이 증거만 뒤지는 상황이 지속되면 '스톨 가드'가 작동하여, 모델이 다른 도구를 사용하거나 최종 판단을 내리도록 강제합니다. 이는 AI가 무한 루프에 빠지거나 허위 성공을 보고하는 것을 방지하는 안전장치입니다.
도구 체인과 확장성
VulnClaw는 MCP(Model Context Protocol) 기반의 도구 체인을 통해 다양한 외부 서비스와 연동됩니다. 기본으로 제공되는 fetch와 memory 서비스 외에도, 브라우저 자동화를 위한 chrome-devtools와 HTTP 트래픽 분석을 위한 burp 서비스를 연결할 수 있습니다. 이 외에도 29종의 인코딩/디코딩 및 암호화 도구, 로컬 셸 명령 실행, Python 코드 실행, 그리고 50여 개의 전문 보안 스킬(CTF, 웹, 내트워크 등)이 내장되어 있습니다. 스킬은 모델이 필요하다고 판단할 때만 load_skill_reference를 통해 로드되는 참고 자료로 제공되며, 시스템 프롬프트에 강제로 주입되지 않아 컨텍스트 윈도우를 효율적으로 관리합니다. 13개의 LLM 프로바이더를 지원하여, OpenAI, Anthropic, DeepSeek, 또는 로컬 Ollama 등 사용자의 환경에 맞는 모델을 유연하게 선택할 수 있습니다.
실행 환경과 안전 경계
VulnClaw는 Python으로 작성되어 pip install vulnclaw로 설치할 수 있으며, CLI, TUI(터미널 그래픽 인터페이스), Web UI 세 가지 방식으로 사용할 수 있습니다. Web UI를 사용하려면 Node.js 18 이상이 필요하며, 프론트엔드 빌드 과정이 필요합니다. Docker를 통해 실행할 경우, 컨테이너 내부의 localhost는 컨테이너 자신을 가리키므로, 호스트 머신의 서비스를 스캔하려면 host.docker.internal을 사용해야 합니다. 가장 중요한 점은 이 도구가 '권한이 부여된' 환경에서만 사용되어야 한다는 것입니다. full_access 모드를 사용하면 모델이 승인 없이 셸 명령을 실행할 수 있으므로, 악성 입력에 의한 프롬프트 인젝션 공격에 노출될 위험이 있습니다. 따라서 실제 프로덕션 환경보다는 격리된 CTF 환경, 교육용 타겟, 또는 일회용 가상 머신에서 사용하는 것이 권장됩니다. auto_review 모드를 사용하면 읽기 전용 명령만 자동 실행되고, 위험한 명령은 여전히 사용자의 승인을 요구하므로 보다 안전한 운영이 가능합니다.