PentestGPT 소개
PentestGPT는 대규모 언어 모델(LLM)의 강력한 추론 및 생성 능력을 활용하여 모의해킹(Penetration Testing) 과정을 자동화하고 보조하는 지능형 보안 프레임워크입니다. 싱가포르 난양공과대학교(NTU)와 여러 연구 기관의 협력으로 개발된 이 프로젝트는 단순한 자동화 스크립트의 모음을 넘어, 보안 전문가가 수행하는 사고 과정을 모방하도록 설계되었습니다. 특히 이 프로젝트의 기술적 유효성과 혁신성은 세계 최고 권위의 보안 학회인 USENIX Security 2024에서 관련 논문이 채택 및 발표됨으로써 학술적으로 입증되었습니다.
최근 사이버 보안 업계에서는 생성형 AI를 활용하여 취약점을 탐지하려는 시도가 급증하고 있습니다. 그러나 일반적인 LLM은 긴 문맥을 유지하지 못하거나 복잡한 공격 시나리오를 구상하는 데 한계를 보여왔습니다. PentestGPT는 이러한 문제를 해결하기 위해 '추론', '생성', '파싱'이라는 세 가지 핵심 모듈을 유기적으로 결합한 독창적인 아키텍처를 도입했습니다. 최근 공개된 v1.0 버전부터는 기존의 대화형 도구 형식을 벗어나 자율 에이전트(Autonomous Agent) 파이프라인을 탑재했습니다. 이를 통해 사용자는 세션을 저장 및 재개할 수 있으며, Docker 기반의 격리된 환경에서 보다 안전하고 효율적으로 모의해킹 작업을 수행할 수 있게 되었습니다.
PentestGPT가 기존의 일반적인 LLM 사용 방식이나 자신의 이전 버전들과 구별되는 가장 큰 특징은 '기억력'과 '자율성'의 혁신적인 개선에 있습니다.
먼저, ChatGPT나 Gemini와 같은 일반적인 LLM을 사용하여 모의해킹을 시도할 때 발생하는 가장 치명적인 문제는 '문맥 손실(Context Loss)'과 '깊이 우선 편향(Depth-first bias)'입니다. 일반적인 LLM은 대화가 길어지면 초기 정찰 단계에서 발견한 중요한 단서를 잊어버리거나, 당장 실패한 공격 시도에만 매몰되어 전체적인 공격 전략을 수정하지 못하는 경향이 있습니다. 반면 PentestGPT는 PTT(Pentesting Task Tree) 라는 독자적인 구조를 도입하여 전체 테스트 과정을 트리 형태로 시각화하고 관리합니다. 이를 통해 에이전트는 현재 어떤 단계에 와 있는지, 이전에 어떤 포트가 열려 있었는지를 명확히 기억하며 장기적인 전략을 수립할 수 있습니다.
또한, 이전의 PentestGPT v0.15가 사용자의 입력에 의존하는 수동적인 도구였다면, 최신 공개한 v1.0 버전은 명실상부한 자율 에이전트 시스템으로 진화했습니다. 과거에는 사용자가 일일이 다음 단계를 지시해야 했지만, 이제는 에이전트가 스스로 취약점을 분석하고 다음 공격 벡터를 결정합니다. 아울러 보안 도구 특성상 수많은 라이브러리 의존성 문제가 발생하기 마련인데, PentestGPT는 Docker-First 설계를 채택하여 이러한 설치 및 실행 환경의 복잡성을 제거했습니다. 이로써 사용자는 환경 설정에 시간을 낭비하지 않고, 재현 가능한 격리된 환경에서 즉시 테스트를 시작할 수 있게 되었습니다.
PentestGPT의 구성 및 주요 기능
┌───────────────────────────────────────────────────┐
│ PENTESTGPT │
├───────────────────────────────────────────────────┤
│ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Reasoning │ │ Tool │ │ Parsing │ │
│ │ Module │◄─►│ Module │◄─►│ Module │ │
│ └───────────┘ └───────────┘ └───────────┘ │
│ ▲ ▲ ▲ │
│ └──────────────┼──────────────┘ │
│ ▼ │
│ ┌──────────────┐ │
│ │ Context Pool │ │
│ └──────────────┘ │
│ │
└───────────────────────────────────────────────────┘
PentestGPT의 높은 성능은 인간 모의해킹 팀의 협업 방식을 그대로 모방한 3단계 모듈형 아키텍처에서 비롯됩니다. 이 구조는 LLM이 가진 한계를 보완하고 모의해킹의 정확도를 극대화하는 핵심 원리입니다.
추론 모듈 (Reasoning Module): 전체를 지휘하는 팀 리더
추론 모듈은 마치 모의해킹 팀의 리더(Team Lead)와 같은 역할을 수행합니다. 이 모듈은 구체적인 공격 코드를 작성하거나 도구를 실행하는 세부 작업에는 관여하지 않는 대신, 전체적인 테스트의 흐름과 상태를 관리하는 데 집중합니다. 핵심은 PTT(Pentesting Task Tree) 라는 데이터 구조입니다. 추론 모듈은 정찰 단계에서 수집된 정보(오픈된 포트, 서비스 버전 등)를 바탕으로 작업 트리를 생성하고, 각 단계의 성공/실패 여부에 따라 동적으로 트리를 업데이트합니다. 덕분에 LLM의 고질적인 문제인 문맥 손실을 방지하고, 전체 공격 시나리오(Kill Chain)를 일관성 있게 유지할 수 있습니다.
생성 모듈 (Generation Module): 실무를 담당하는 주니어 테스터
추론 모듈이 "웹 서비스에 대한 취약점 스캔이 필요하다"는 고수준의 지시를 내리면, 생성 모듈(Generation Module)이 이를 이어받아 구체적인 실행 계획을 수립합니다. 이 모듈은 주니어 테스터(Junior Tester)의 역할을 수행하며, CoT(Chain-of-Thought) 프롬프팅 기술을 활용하여 작업을 단계별로 구체화합니다. 예를 들어 단순히 스캔을 수행하는 것이 아니라, "어떤 도구를 사용할 것인가?", "해당 도구의 어떤 옵션이 적절한가?"를 단계적으로 추론한 뒤, 최종적으로 터미널에서 실행 가능한 정확한 명령어(예: nmap -sV -p80 <IP>)를 생성해냅니다. 이 과정은 명령어 생성의 정확도를 높이고 불필요한 시행착오를 줄여줍니다.
파싱 모듈 (Parsing Module): 정보를 정제하는 분석가
보안 도구(Nmap, Nikto, Dirbuster 등)의 실행 결과는 매우 방대하고 복잡한 경우가 많습니다. 이를 가공 없이 LLM에 입력하면 토큰 제한(Token Limit)을 초과하거나, 핵심 정보가 노이즈에 묻혀버리는 문제가 발생합니다. 파싱 모듈(Parsing Module)은 이러한 문제를 해결하기 위해 도구의 출력 결과(Raw Output), 소스 코드, HTTP 응답 등을 분석하여 핵심 정보만을 추출하고 요약합니다. 이렇게 정제된 정보는 다시 추론 모듈로 전달되어 PTT를 업데이트하는 데 사용됩니다. 결과적으로 파싱 모듈은 제한된 토큰 자원을 효율적으로 사용하면서도 에이전트가 상황을 정확하게 인식하도록 돕는 필수적인 역할을 수행합니다.
로컬 LLM 지원 및 확장성 (v1.0 기능)
최신 v1.0 버전은 클라우드 API 의존도를 낮추고 데이터 프라이버시를 강화하기 위해 로컬 LLM 지원을 대폭 강화했습니다. 사용자는 Ollama나 LM Studio와 같은 도구를 통해 호스트 머신에서 로컬 모델을 구동하고, 이를 PentestGPT 컨테이너와 연동할 수 있습니다. 특히 scripts/ccr-config-template.json 설정 파일을 통해 작업의 성격에 따라 모델을 다르게 라우팅할 수 있는 기능이 제공됩니다. 예를 들어, 고도의 논리적 판단이 필요한 '추론(Reasoning)' 작업에는 Qwen 코드 모델을 할당하고, 일반적인 텍스트 처리나 배경 작업에는 가벼운 모델을 할당하는 식의 유연한 구성이 가능합니다.
벤치마크 성과 및 실전 활용
PentestGPT의 성능은 정량적인 벤치마크를 통해 입증되었습니다. 연구 논문에 따르면, 13개의 타겟 시스템과 182개의 하위 작업으로 구성된 자체 벤치마크 테스트에서 GPT-3.5를 단독으로 사용했을 때보다 약 228.6% 높은 하위 작업 완료율을 기록했습니다.
또한, 실제 해킹 방어 대회인 HackTheBox의 활성 머신들을 대상으로 한 테스트에서도 10대 중 4대를 성공적으로 공략했으며, picoMini CTF 대회에서는 248개 참가 팀 중 24위를 기록하는 기염을 토했습니다. 이는 PentestGPT가 단순한 이론적 연구를 넘어, 실전 모의해킹 환경에서도 충분히 활용 가능한 도구임을 시사합니다.
PentestGPT 설치 및 사용 가이드
PentestGPT는 다양한 의존성 패키지와 보안 도구를 필요로 하므로, 시스템 안정성을 위해 Docker 환경에서의 설치 및 실행을 강력하게 권장합니다.
설치 절차 (Installation)
설치는 소스 코드 복제부터 시작하여 Docker 이미지를 빌드하고 설정을 마치는 순서로 진행됩니다. 특히 벤치마크 데이터셋이 서브모듈로 포함되어 있으므로 재귀적(recursive) 복제가 필요합니다.
# 1. 저장소 복제 (벤치마크 서브모듈 포함)
# --recurse-submodules 옵션은 벤치마크 테스트를 위한 데이터까지 함께 다운로드합니다.
git clone --recurse-submodules https://github.com/GreyDGL/PentestGPT.git
# 2. 프로젝트 디렉토리로 이동
cd PentestGPT
# 3. Docker 이미지 빌드 및 설치
# 이 과정에서 필요한 모든 보안 도구와 환경이 컨테이너 내부에 구성됩니다.
make install
# 4. 초기 설정 (API 키 및 LLM 설정)
# Anthropic API 키를 입력하거나, 로컬 LLM 사용을 위한 설정을 진행합니다.
# 로컬 LLM을 사용할 경우, Option 4를 선택하여 호스트의 API 주소를 지정합니다.
make config
# 5. 컨테이너 연결 및 실행
# 설정이 완료되면 컨테이너 내부 셸로 접속하여 도구를 사용할 준비를 마칩니다.
make connect
설치 과정과 관련하여 상세한 내용은 아래 영상을 참고해주세요:
실행 모드 및 활용 (Usage)
컨테이너 내부에서는 pentestgpt 명령어를 통해 다양한 모드로 에이전트를 실행할 수 있습니다. 사용자의 숙련도나 목적에 따라 적절한 모드를 선택할 수 있습니다.
가장 기본이 되는 대화형 모드(Interactive Mode) 는 사용자가 에이전트와 실시간으로 소통하며 테스트를 진행하는 방식입니다. 터미널에서 pentestgpt --target <IP_ADDRESS>를 입력하면 실행되며, 에이전트가 제안하는 공격 단계에 대해 사용자가 승인하거나 수정 의견을 제시할 수 있습니다. 이는 교육적인 목적으로나 정밀한 제어가 필요할 때 유용합니다.
반면, 자동화를 극대화하고 싶다면 비대화형 모드(Non-interactive Mode) 를 사용할 수 있습니다. pentestgpt --target <IP_ADDRESS> --non-interactive 명령어를 사용하면 에이전트가 사람의 개입 없이 스스로 판단하고 전체 테스트 과정을 수행합니다. 또한, 특정 시나리오나 취약점에 집중하고 싶을 때는 --instruction 옵션을 추가하여 "WordPress 플러그인 취약점에 집중해라"와 같은 구체적인 지침을 내릴 수도 있습니다.
라이선스
PentestGPT 프로젝트는 오픈 소스 라이선스인 MIT License에 따라 배포되고 있습니다. 누구나 자유롭게 사용, 수정 및 배포할 수 있으나, PentestGPT는 합법적인 보안 테스트 및 교육 목적으로만 사용되어야 합니다. 개발자들은 악의적인 사용에 대해 어떠한 책임도 지지 않음을 명시하고 있습니다.
PentestGPT 공식 홈페이지
PentestGPT 프로젝트 소개 영상
[USENIX Security 2024 논문] PentestGPT: Evaluating and Harnessing Large Language Models for Automated Penetration Testing
https://www.usenix.org/conference/usenixsecurity24/presentation/deng
PentestGPT 프로젝트 GitHub 저장소
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. ![]()
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ ![]()





