Security/Paper & Report

[Paper] PentestGPT: Evaluating and Harnessing Large Language Models for Automated Penetration Testing

Opal1031 2026. 8. 7. 14:20
※ 본 포스트는 "WHS 4th 팀 프로젝트"에 앞서 선행 연구 학습을 위해 읽은 논문의 요약본입니다.

※ 비영리적인 순수한 학습 기록용입니다.

※ 저작권 문제가 있을 경우, 즉시 수정 또는 삭제하겠습니다.
포스팅에 앞서 해당 논문은 아래의 링크에서 확인할 수 있습니다.
[논문 바로가기]

시스템 보안을 보장하는 데 필수적인 산업 현장의 침투 테스트는 인간 전문가에게 요구되는 광범위한 전문 지식 때문에 전통적으로 자동화에 어려움을 겪어왔습니다.
대규모 언어 모델(LLM)은 다양한 영역에서 상당한 발전을 보여왔으며, 그 새로운 능력들은 산업 혁신의 잠재력을 시사합니다.
본 연구에서는 실제 침투 테스트 대상을 사용하여 포괄적인 벤치마크를 구축하고, 이를 통해 침투 테스트 영역에서 LLM의 역량을 탐구합니다.
연구 결과, LLM은 테스트 도구 사용, 출력 해석, 후속 조치 제안과 같은 침투 테스트 프로세스 내의 특정 하위 작업에서는 뛰어난 능력을 보여주지만, 전체 테스트 시나리오의 맥락을 유지하는 데에는 어려움을 겪는 것으로 나타났습니다.

이러한 통찰력을 바탕으로, 본 논문에서는 LLM(Learning Language Model)에 내재된 풍부한 도메인 지식을 활용하는 자동화된 침투 테스트 프레임워크인 PENTESTGPT를 소개합니다.
PENTESTGPT는 침투 테스트의 개별 하위 작업을 처리하는 세 가지 상호 작용 모듈로 세심하게 설계되어 컨텍스트 손실과 관련된 문제를 완화합니다.
평가 결과, PENTESTGPT는 벤치마크 대상에서 GPT-3.5 모델 대비 작업 완료율이 228.6% 향상되는 등 LLM보다 우수한 성능을 보일 뿐만 아니라, 실제 침투 테스트 대상 및 CTF(Capture the Flag) 문제 해결에도 효과적임을 입증했습니다.
GitHub에서 오픈 소스로 공개된 PENTESTGPT는 12개월 만에 6,500개 이상의 스타를 획득하고 활발한 커뮤니티 참여를 통해 학계 및 산업계 모두에서 그 가치와 영향력을 입증했습니다.

 

이번에 리뷰할 논문은 2024년 USENIX Security에 발표된 "PentestGPT"입니다.

 

기술의 발전에 매우 빨라서 조금 오래된 논문이라고 볼 수도 있겠으나, 침투 테스트의 자동화와 관련하여 잘 작성되어 있다고 생각이 들어서 읽었습니다.


논문의 출발점은 침투 테스트의 자동화가 왜 어려운가라는 질문입니다.

 

Ch01. Introduction

LLM은 보안 도구 사용법이나 취약점 지식을 이미 많이 가지고 있기 때문에 자동화에 활용할 가능성이 있습니다.

하지만 당시에는 LLM이 실제 침투 테스트 전체를 얼마나 수행할 수 있는지 체계적으로 평가한 연구가 부족했습니다.

 

Ch02. Background & Related Work

기존 침투 테스트 자동화 연구와 LLM 관련 연구를 정리합니다.

 

기존 자동화 도구는 정해진 취약점이나 단계에는 강하지만, 다양한 정보를 연결해 새로운 공격 전략을 세우는 데 한계가 있습니다.

반대로 LLM은 자연어 이해와 추론에는 강하지만, 실제 시스템을 직접 조작할 수 없고 긴 작업의 맥락을 유지하기 어렵습니다.

 

그래서 이 논문의 핵심 질문은 아래의 두 개와 같습니다.

LLM이 실제 침투 테스트를 어디까지 수행할 수 있는가
LLM이 전체 맥락을 잃는 문제를 구조적인 Agent 설계로 보완할 수 있는가

 

논문을 이를 위해 벤치마크를 만들고, 일반 LLM을 먼저 평가한 다음, 그 결과에서 발견한 문제를 바탕으로 PentestGPT를 설계하고 다시 성능을 평가합니다.


Ch03. Penetration Testing Benchmark

침투 테스트 벤치마크를 설계합니다.

 

기존 벤치마크는 특정 취약점에 범위가 한정되거나 최종 공격 성공 여부만 평가해, 공격 과정에서 어디까지 진행했는지를 충분히 보여주지 못한다는 문제가 있었습니다.

 

연구진은 HackTheBox와 VulnHub에서 13개의 대상을 선정하고, 이를 182개의 세부 작업으로 분해했습니다. 세부 작업은 26개의 유형과 18개 CWE를 포함하며, OWASP Top 10의 취약점 범주를 모두 포함하도록 구성했습니다.

 

또한 최종 플래그 획득만 보는 것이 아니라 포트 스캔, 파일 열거, 코드 분석, 쉘 생성처럼 침투 과정에서 완료한 세부 작업을 함께 평가합니다.

 

Ch04. Exploratory Study

4장에서는 이 벤치마크를 이용해 GPT-3.5, GPT-4, Bard를 평가합니다.

여기서 RQ1은 LLM이 침투 테스트를 어느 정도 수행할 수 있는지, RQ2는 LLM과 인간 전문가의 전략이 어떻게 다른지를 묻습니다.

 

실험에서는 LLM이 직접 명령을 실행하지 않습니다. 인간 전문가가 LLM의 지시를 그대로 실행하고 결과를 다시 텍스트로 전달하는 human-in-the-loop 구조를 사용합니다. 전문가는 잘못된 지시를 발견해도 임의로 수정하거나 새로운 판단을 추가하지 않는 실행자 역할만 맡습니다.

 

표를 보면 GPT-4가 Easy 대상 7개 중 4개, Medium 대상 4개 중 1개를 완전히 해결했고, Hard 대상은 어떤 모델도 해결하지 못했습니다.

 

논문에서 정리한 긍정적인 결과는 두 가지입니다.

LLM은 nmap과 같은 도구를 사용하고 출력을 해석하는 데 비교적 능숙합니다.
일반적인 취약점을 찾고 소스 코드를 분석하거나 셸 명령을 구성하는 세부 작업에도 강점을 보입니다.

 

하지만 인간 전문가의 walkthrough와 비교하면 불필요한 작업도 많이 제안했습니다. Table 3에서 무차별 대입은 세 모델을 합쳐 235회로 가장 많았고, 알려진 CVE 공격 81회, SQL Injection 51회, Command Injection 37회가 뒤를 이었습니다. LLM이 가능성이 높은 경로를 우선순위화하기보다 익숙한 공격 기법을 반복하는 경향을 보여줍니다.

반면 가장 자주 관찰된 실패 원인은 세션 컨텍스트 손실 74회, 잘못된 명령 생성 55회, 동일 행동 반복이나 교착 45회였습니다.

 

이를 논문의 Finding 1부터 5로 정리하면 다음과 같습니다.

 

  1. 대규모 언어 모델(LLM)은 처음부터 끝까지 진행되는 모의 침투 테스트를 수행하는 데 어느 정도 능숙함을 보였으나, 난이도가 높은 타겟에서 발생하는 복잡한 문제들을 해결하는 데는 어려움을 겪습니다.
  2. LLM은 모의 침투 테스트 도구들을 효율적으로 사용하고, 시스템의 일반적인 취약점들을 잘 식별하며, 제공된 소스 코드를 해석해 취약점을 찾아내는 능력이 뛰어납니다.
  3. LLM은 긴 대화나 작업 과정에서 '장기 기억'을 유지하는 데 고전합니다. 이는 여러 취약점을 서로 연결하고 종합적인 공격 전략을 짜는 데 있어 치명적인 약점입니다.
  4. LLM은 가장 최근에 주어진 작업에 집착하고, 한 우물만 파는 '깊이 우선 탐색(Depth-first search)' 방식을 강하게 선호합니다. 이로 인해 하나의 특정 서비스에만 과도하게 매몰되어 다른 중요한 단서들을 간과하게 됩니다.
  5. LLM 모델 자체에 내재된 부정확성과 '환각(Hallucination, 그럴듯한 거짓말)' 현상으로 인해, 실제로는 작동하지 않거나 엉뚱한 해킹 명령어 및 작업을 생성할 때가 있습니다.

Ch05. Methodology

5장에서는 앞서 발견한 문제를 해결하기 위해 PentestGPT를 제안합니다.

 

논문의 핵심 설계 가설은 하나의 긴 대화에 모든 정보를 넣는 대신, 실제 침투 테스트 팀처럼 역할과 컨텍스트를 분리하면 전체 맥락 손실을 줄일 수 있다는 것입니다. PentestGPT는 Parsing, Reasoning, Generation의 세 모듈로 구성되고, 각 모듈은 별도의 LLM 세션과 대화 기록을 가집니다. 

 

Parsing Module은 보안 도구 출력, HTTP 페이지, 소스 코드처럼 길고 복잡한 입력을 압축합니다. 전체 원문을 계속 컨텍스트에 넣지 않고 다음 판단에 필요한 핵심 정보만 추출하는 역할입니다.

 

Reasoning Module은 팀의 리더 역할을 합니다. 침투 테스트 전체 진행 상태를 Pentesting Task Tree, 즉 PTT로 관리합니다. PTT에는 완료된 작업, 실패한 작업, 진행 중인 작업과 앞으로 수행할 후보 작업이 계층적으로 기록됩니다. Reasoning Module은 새로운 결과가 들어오면 트리를 갱신하고, 트리 구조가 잘못 변경되지 않았는지 검증한 뒤, 성공 가능성이 높은 다음 작업을 선택합니다. 이 구조는 이전 결과를 대화의 긴 원문으로 보관하는 것이 아니라 현재 공격 상태를 구조화된 자연어로 보관한다는 점이 중요합니다. 논문의 Finding 3인 장기 기억 손실과 Finding 4인 최근 작업 편향을 해결하기 위한 설계입니다.

 

Generation Module은 선택된 작업을 실제로 실행할 수 있는 수준까지 세분화합니다. 먼저 어떤 도구와 절차가 필요한지 작업을 확장하고, 이후 정확한 터미널 명령이나 GUI 조작 절차로 변환합니다. 이는 LLM이 바로 명령을 생성할 때 발생하는 환각과 부정확한 옵션 문제, 즉 Finding 5를 줄이기 위한 설계입니다

 

정리하면 Reasoning은 무엇을 할지 결정하고, Generation은 어떻게 실행할지를 만들며, Parsing은 실행 결과에서 무엇을 기억할지를 정합니다. 저희 프로젝트 관점에서는 PTT를 Agent의 구조화된 Memory 후보로 볼 수 있고, Planner와 Executor, Observer의 역할 분리 방식도 참고할 수 있습니다.


Ch06. Evaluation

6장에서는 네 개의 연구 질문을 추가로 다룹니다.

RQ3는 PentestGPT가 일반 LLM보다 성능이 좋은지, RQ4는 공격 전략이 어떻게 달라지는지, RQ5는 각 모듈이 성능에 얼마나 기여하는지, RQ6는 실제 환경에서도 사용할 수 있는지를 묻습니다.

 

왼쪽 그래프는 일반 GPT-3.5와 GPT-4, 그리고 각각을 PentestGPT 구조에 적용한 결과를 비교한 것입니다. PentestGPT-GPT-4는 Easy 세부 작업 69개, Medium 57개, Hard 12개를 완료했습니다. 일반 GPT-4는 각각 52개, 27개, 8개였습니다. 완전히 해결한 대상 수로 보면 일반 GPT-4는 Easy 4개와 Medium 1개로 총 5개를 해결했고, PentestGPT-GPT-4는 Easy 6개와 Medium 2개로 총 8개를 해결했습니다. 특히 Medium 난이도에서는 완료한 세부 작업이 27개에서 57개로 111퍼센트 증가했습니다. 이는 PentestGPT가 단순한 도구 사용을 넘어 여러 단계의 결과를 연결하는 데 도움을 줬다는 것을 보여줍니다.

 

오른쪽 표는 각 모듈을 제거한 절제 실험 결과입니다. 여기서 대상은 완전히 해결한 대상 수이고, sub-task는 전체 난이도에서 완료한 세부 작업 수의 합입니다. 전체 PentestGPT는 138개의 세부 작업을 완료했습니다. Parsing을 제거하면 115개, Generation을 제거하면 100개, Reasoning을 제거하면 74개로 감소합니다. Reasoning을 제거한 조건은 전체 모델 성능의 53.6퍼센트에 불과했고, 기본 GPT-4보다도 낮았습니다. 이 결과는 PTT를 이용해 전체 공격 상태를 유지하고 다음 작업을 선택하는 기능이 가장 중요한 구성 요소라는 연구진의 가설을 지지합니다. 반면 Parsing 제거의 영향은 상대적으로 작았습니다.

 

논문은 GPT-4의 32k 컨텍스트가 대부분의 출력은 처리할 수 있었고, Reasoning Module이 전체 상태를 별도로 유지해 Parsing의 부재를 일부 보완했다고 해석합니다. 또한 모든 구조가 Hard 대상에서는 큰 개선을 만들지 못했습니다.

Agent 구조는 기존 지식과 컨텍스트 활용을 개선할 뿐, 모델이 알지 못하는 취약점이나 복잡한 exploit 제작 능력을 새로 만들어주지는 않기 때문입니다.


Ch07. Conclusion

먼저 왼쪽의 Figure 6은 일반 LLM과 PentestGPT의 공격 전략 차이를 보여줍니다

일반 LLM은 FTP 파일 업로드 취약점과 웹 서비스를 각각 탐색했지만, 두 결과를 연결하지 못해 공격 경로가 독립적으로 끝났습니다. 반면 PentestGPT는 PTT에 두 서비스의 상태를 함께 유지했습니다. FTP에 업로드한 파일이 웹 서비스에서 노출된다는 관계를 파악한 뒤 셸을 업로드하고 reverse shell까지 이어갔습니다

 

최근 작업 하나에만 집중하지 않고 여러 공격 표면의 관계를 연결했다는 점이 핵심입니다. 참고로 Figure 6의 오른쪽 시스템에는 PentestGPT 대신 Excalibur라는 이름이 표시되어 있습니다. 이는 개발 과정의 prototype 명칭으로 보이며, 논문의 캡션과 본문에서는 PentestGPT로 설명됩니다

 

6장 후반에서는 실제 환경에서의 활용 가능성도 평가합니다. HackTheBox의 활성 머신 10개를 대상으로 각각 다섯 번씩 실험한 결과, 총 50번의 trial 가운데 17번 성공했고 API 비용은 총 131.5달러였습니다. picoMini CTF에서는 21개 문제 중 9개를 해결하고 248개 팀 가운데 24위에 해당하는 결과를 얻었습니다

 

다만 논문을 비판적으로 읽을 때 확인해야 할 부분도 있습니다. CTF 점수는 초록과 서론에서 1500점으로 서술되지만 6.5절과 성공한 문제별 점수의 합은 1400점입니다. HackTheBox에서 성공한 대상 수도 표와 본문의 서술 사이에 차이가 있습니다. 따라서 발표에서는 논문의 성능 수치를 그대로 확대 해석하기보다 실험 단위와 성공 기준을 함께 확인할 필요가 있습니다

 

7장에서는 연구의 한계를 설명합니다

  1. 당시 LLM은 이미지와 GUI 정보를 직접 처리하기 어려워 인간이 결과를 텍스트로 바꿔줘야 했습니다
  2. 사회공학적 단서를 이용하거나 저수준 바이트 연산이 필요한 exploit 코드를 정확하게 만드는 데 약했습니다.
  3. 환각과 오래된 지식, 모델의 보안 정책을 우회하기 위한 jailbreak 사용이 재현성과 안정성에 영향을 줍니다.
  4. 인간 전문가가 명령 실행과 일부 결과 요약을 담당하므로 완전히 자율적인 Agent를 평가한 것으로 보기는 어렵습니다. 사람의 결과 요약 방식이 다음 LLM 판단에 영향을 줄 가능성도 있습니다.
  5. 벤치마크 머신의 walkthrough가 학습 데이터에 포함됐을 가능성을 완전히 배제하기 어렵습니다. 연구진은 2021년 이후 공개된 머신과 최신 HTB 문제를 사용해 이를 줄이려 했지만, 완전한 통제는 아닙니다.

 

8장의 결론은 LLM이 기본 도구 사용과 일부 침투 작업에는 유용하지만, 현재 기술만으로 인간 전문가를 완전히 대체할 수는 없다는 것입니다. 대신 상태를 구조화하고 역할을 분리하면 LLM의 보안 지식을 더 일관되게 활용할 수 있습니다.


해당 논문에서 프로젝트를 위해 아래의 내용들을 참고할 수 있습니다.

  • PTT를 구조화된 Memory를 사용하는 Agent의 기준선으로 검토할 수 있습니다.
  • Planner, Executor, Observer의 역할과 로그를 분리하고, 각 단계에서 어떤 관측이 다음 행동을 바꿨는지 기록해야 합니다.
  • 공격 성공률뿐 아니라 요청 수, 토큰, 반복 행동, 교착 상태, 중간 sub-task 완료율을 함께 측정할 수 있습니다.
  • 적응형 Agent의 성능을 평가할 때 인간 개입이나 결과 요약 효과가 섞이지 않도록 통제해야 합니다.
  • 동일한 모델과 도구, 최대 예산을 사용한 상태에서 비적응형 공격과 PTT 기반 적응형 Agent를 비교하면, 모델 자체의 차이가 아니라 구조와 적응성의 효과를 더 공정하게 볼 수 있습니다.