상상해 보세요. 거대한 성벽 (소프트웨어) 이 있고, 그 안에 도둑이 들어갈 수 있는 아주 작은 구멍 (취약점) 이 하나 있다고 가정해 봅시다.
기존의 문제점:
수동 검사 (개발자): 성벽을 눈으로 일일이 훑어보는 건 너무 느리고 힘들어요.
자동 탐지 도구 (기존 기술): 드론을 띄워 성벽을 스캔하면 구멍을 찾을 수는 있지만, "어디에 있는 구멍인지"는 알려줄 뿐, **"그 구멍으로 실제로 들어가는 방법"**을 알려주지는 못해요. 또, 가짜 구멍 (오보) 을 너무 많이 찾아내서 개발자를 혼란스럽게 하기도 해요.
인공지능 (LLM) 만의 한계: 최근의 AI 는 똑똑해서 글을 잘 쓰지만, 성벽의 구조를 모른 채 막상 "구멍으로 들어가는 방법"을 말해보라고 하면, **상상해서 거짓말 (할루시네이션)**을 하거나 엉뚱한 곳을 찌르는 실수를 자주 해요.
이 논문이 제안한 해결책: "PAGENT" (프로그램 분석 가이드 AI 에이전트)
이 시스템은 AI 비서에 **전문 건축가 (정적 분석)**와 **실전 훈련 코치 (동적 분석)**를 붙여주었어요.
🛠️ PAGENT 가 어떻게 작동할까요? (3 단계 프로세스)
이 시스템은 세 명의 팀원이 협력하여 문제를 해결합니다.
1 단계: 건축가의 지도 (정적 분석 - Static Analysis)
역할: 성벽의 설계도 (소스 코드) 를 꼼꼼히 분석하는 전문 건축가입니다.
작동 방식: AI 가 막상 시작하기 전에, 건축가가 "여기 구멍이 있을 가능성이 높은 구간은 A, B, C 지점이고, 들어가기 위해서는 X 라는 문이 열려야 한다"는 정확한 지도를 AI 에게 줍니다.
효과: AI 가 막연하게 성벽 전체를 두드리지 않아도 되게 되어, 실수를 줄이고 정확한 곳을 집중적으로 공격할 수 있게 됩니다.
2 단계: AI 의 시뮬레이션 (PoC 생성 에이전트)
역할: 건축가의 지도를 들고 실제 침입 시도를 하는 AI 비서입니다.
작동 방식: 지도를 보고 "아, 이 문 (함수) 을 통해 들어가는구나"라고 추론하며, 도둑이 들어갈 수 있는 **실제 열쇠 (PoC 입력값)**를 만들어냅니다.
특징: AI 는 단순히 글만 쓰는 게 아니라, 직접 코드를 실행해보고 수정할 수 있는 능력을 갖췄습니다.
3 단계: 코치의 피드백 (동적 분석 - Dynamic Analysis)
역할: AI 가 만든 열쇠로 성벽을 두드려보고 결과를 알려주는 실전 훈련 코치입니다.
작동 방식: AI 가 만든 열쇠로 성벽을 찔러봅니다.
성공: 성벽이 무너지면 (버그 발생) "성공! 여기가 약점이야!"라고 알려줍니다.
실패: 성벽이 무너지지 않으면, 코치는 "너는 A 문만 열었는데, B 문도 열어야 해" 혹은 "너는 너무 약하게 찔렀어"라고 구체적인 피드백을 줍니다.
효과: AI 는 이 피드백을 받고 "아, 내가 잘못했구나"라고 깨닫고 열쇠를 다시 만들어 다시 시도합니다. 이 과정을 버그가 발생하거나 시간이 다 될 때까지 반복합니다.
🏆 왜 이 방법이 특별한가요? (결과)
연구팀은 이 시스템을 203 개의 실제 소프트웨어 취약점에 적용해 보았습니다.
압도적인 승리: 기존에 가장 잘하던 AI 들 (GPT-5 등) 보다 약 2 배 이상 (132% 향상) 더 많은 버그를 찾아내고 증명했습니다.
저렴한 비용: 비싼 유료 AI 모델을 쓰지 않아도, 오픈소스 모델 (DeepSeek) 로도 최고의 성능을 냈습니다. 마치 고급 스포츠카 엔진을 달아주지 않아도, 운전 실습 (지도와 피드백) 만 잘 시켜도 레이싱 카처럼 달리는 것과 같습니다.
숨겨진 보물 발견: 이미 패치 (수정) 된 코드에서도, 개발자가 놓친 새로운 구멍을 찾아내기도 했습니다.
💡 요약
이 논문은 **"AI 가 혼자서 버그를 찾으려다 헛수고를 하는 대신, 전문 도구 (정적/동적 분석) 가 AI 에게 정확한 지도와 실시간 피드백을 주면, 훨씬 더 빠르고 정확하게 해킹 시뮬레이션 (PoC) 을 만들어낼 수 있다"**는 것을 증명했습니다.
이는 앞으로 소프트웨어 개발 과정에서 자동으로 보안 취약점을 찾아내고 수정할 수 있는 강력한 자동화 시스템으로 이어질 수 있는 중요한 기술입니다.
1. 문제 정의 (Problem)
배경: 소프트웨어 생태계 내 취약점 발견이 급증함에 따라, 개발자들은 보고된 취약점을 신뢰할 수 있게 재현하고 패치해야 합니다. 이를 위해 취약점을 유발하는 구체적인 입력 데이터 (PoC) 를 생성하는 것이 필수적입니다.
현황 및 한계:
많은 취약점 보고서에 유효한 PoC 가 포함되어 있지 않아, 개발자가 직접 생성해야 하는 수동 작업이 발생합니다.
기존 기법인 **심볼릭 실행 (Symbolic Execution)**과 **퍼징 (Fuzzing)**은 전문가의 가이드가 필요하고, 경로 폭발 (path explosion) 문제나 환경 모델링의 어려움으로 인해 확장성 (scalability) 이 낮습니다.
최근 **대규모 언어 모델 (LLM)**을 활용한 자동화 시도가 있었으나, 할루시네이션 (hallucination) 으로 인해 정확도가 낮고, 복잡한 코드베이스의 의미론적 이해와 입력 생성에 실패하는 경우가 많습니다.
2. 방법론 (Methodology: PAGENT)
저자들은 **정적 분석 (Static Analysis)**과 **동적 분석 (Dynamic Analysis)**을 LLM 에이전트에 통합한 하이브리드 프레임워크인 PAGENT를 제안합니다. 이 시스템은 다음 세 가지 핵심 구성 요소로 작동합니다.
2.1 정적 분석 가이드 (Static Analysis Guidance)
목적: LLM 에이전트가 취약점 관련 정보를 정확히 추출할 수 있도록 신뢰할 수 있는 가이드를 제공합니다.
구현:
경량 정적 분석 (Lightweight Static Analysis): 진입점 (Entrypoint, 예: LLVMFuzzerTestOneInput) 기반의 호출 그래프를 구성하여 도달 가능한 함수만 필터링합니다. 이를 통해 대규모 코드베이스에서 확장성을 확보합니다.
규칙 기반 정적 분석 (Rule-based Static Analysis): LLVM-IR 레벨에서 Datalog 기반의 규칙 (Soufflé/cclyzerpp 사용) 을 적용하여 취약점 패턴 (버퍼 오버플로우, 정수 오버플로우 등) 을 탐지합니다.
출력: 취약점 유형, 취약 함수, 진입점, Taint Path(오염 경로), 템플릿 어설션 (Template Assertion) 등을 포함한 **취약점 보고서 (Vulnerability Report)**를 생성합니다. 이는 LLM 의 할루시네이션을 줄이고 구체적인 맥락을 제공합니다.
2.2 PoC 생성 에이전트 (PoC Generation Agent)
아키텍처: OpenHands 기반의 CodeAct 아키텍처를 사용하는 LLM 에이전트입니다.
작동 방식:
정적 분석에서 생성된 취약점 보고서를 바탕으로 소스 코드에 접근하여 초기 PoC 후보를 생성합니다.
에이전트는 테스트 환경에서 실행 가능한 코드 (예: Bash 스크립트, Python) 를 작성하고 실행합니다.
정적 분석 정보와 동적 피드백을 반복적으로 활용하여 입력을 정제합니다.
2.3 동적 분석 가이드 (Dynamic Analysis Guidance)
목적: 생성된 PoC 후보의 유효성을 검증하고, 실패 시 에이전트에게 구체적인 피드백을 제공합니다.
구현:
Sanitizer 기반 빌드: AddressSanitizer (ASan), MemorySanitizer (MSan) 등을 사용하여 취약점 유형에 맞는 인스트루먼트된 바이너리를 생성합니다.
프로파일링 및 커버리지: PoC 실행 시 종료 코드 (Exit Code), 실행 시간, 진입점, 그리고 코드 커버리지 (파일, 함수, 라인, 브랜치 커버리지) 정보를 수집합니다.
피드백 루프: PoC 가 크래시를 유발하지 않으면, 커버리지 정보를 에이전트에게 반환합니다. 에이전트는 "어떤 코드 경로가 실행되지 않았는지"를 분석하여 입력을 수정하고 재시도합니다.
3. 주요 기여 (Key Contributions)
LLM 에이전트를 위한 정적 분석 설계: 대규모 코드베이스에 확장 가능하고, 취약점 패턴에 맞춰 커스터마이징 가능한 정적 분석 파이프라인을 설계하여 LLM 의 정확도를 높였습니다.
동적 분석을 통한 에이전트 정제: PoC 검증 과정에서 Sanitizer 와 커버리지 정보를 활용하여 에이전트가 오류를 수정하고 취약점 코드를 정확히 도달하도록 유도하는 피드백 루프를 구현했습니다.
성능 향상 및 비용 효율성:
오픈소스 모델인 DeepSeek3.1(성능이 낮은 모델로 간주됨) 을 사용했을 때, 정적/동적 분석 가이드를 통해 PoC 생성 성공률을 132% 향상시켰습니다.
상용 최상위 모델인 GPT-5 및 Sonnet-4보다 평균적으로 100% 이상 높은 성능을 달성했습니다.
토큰 비용 측면에서 상용 모델 대비 32 배 저렴한 비용으로 동등하거나 더 나은 성능을 제공합니다.
패치 후 (Post-patch) 취약점 탐지: 패치가 적용된 코드에서도 여전히 취약점을 유발하는 PoC 를 발견하여, 패치가 불완전하거나 새로운 취약점이 존재함을 4 배 더 많이 탐지했습니다.
4. 실험 결과 (Results)
데이터셋: Cybergym 벤치마크의 ARVO 데이터셋을 사용했습니다. (10 개의 오픈소스 프로젝트, 203 개의 실제 취약점 포함).
비교 대상: Cybergym 의 최상위 LLM 에이전트 (GPT-5, Sonnet-4 등) 및 기존 PoC 생성 도구 (PoCGen, Faultline).
성과:
DeepSeek3.2 기반 PAGENT: 전체 203 개 취약점 중 **64.6%**의 성공률로, GPT-5 기반 에이전트 (약 31% 성공률 추정) 를 크게 능가했습니다.
고유 PoC 생성: PAGENT 는 다른 어떤 에이전트나 에이전트 조합으로도 생성되지 않은 고유한 PoC 를 대량으로 생성했습니다.
패치 후 취약점: 기존 에이전트 대비 4 배 더 많은 패치 후 취약점을 발견했습니다. 이는 동적 분석 피드백이 에이전트가 취약점과 직접 관련 없는 코드 영역까지 탐색하게 하여 숨겨진 취약점을 발견하게 했음을 시사합니다.
5. 의의 및 결론 (Significance)
자동화 및 확장성: PAGENT 는 수동 개입 없이 대규모 코드베이스에서 취약점 PoC 를 생성할 수 있는 확장 가능한 솔루션을 제시합니다.
하이브리드 접근법의 우위: LLM 의 추론 능력에 정적/동적 분석이라는 '사실적 (factual)' 가이드를 결합함으로써, LLM 의 할루시네이션 문제를 해결하고 신뢰성을 극대화했습니다.
실무 적용 가능성: CI/CD 파이프라인에 통합되어 커밋마다 변경된 코드 위치를 분석하고 PoC 를 생성함으로써, 소프트웨어 공급망 보안 강화에 기여할 수 있습니다.
비용 효율성: 고가의 상용 LLM 대신 오픈소스 모델을 활용하면서도 더 높은 성능을 달성함으로써, 보안 분석 도구의 접근성을 높였습니다.
요약하자면, PAGENT 는 정적 분석으로 '무엇을' 찾아야 하는지를, 동적 분석으로 '어떻게' 도달했는지를 LLM 에이전트에게 알려줌으로써, 기존에는 불가능했던 고난도 취약점 PoC 생성을 성공적으로 자동화한 획기적인 연구입니다.