[튜토리얼] 원격 공격 가능케 하는 취약점, 벌헌터로 찾아내자
- 무료 오픈소스 취약점 발굴 도구, 벌헌터
- 파이선 코드 베이스에서는 높은 성과 낼 수 있어
- 모든 취약점 다 찾아내는 건 아냐
원격 공격을 가능케 해 주는 취약점을 찾아내는 오픈소스 도구가 등장해 소개한다. 이름은 벌헌터(Vulnhuntr)로, 대형 언어 모델(LLM)과 정적 코드 분석 기법을 활용해 사용자 입력부터 서버 출력까지 애플리케이션 내의 데이터 흐름을 추적한다. 이를 통해 기존 다른 도구들이 놓치곤 하는 복잡하고 다층위적인 취약점까지 식별할 수 있다.
벌헌터는 프로텍트AI(ProtectAI)의 연구원인 댄 맥키너니(Dan McInerney)가 개발했다. 그는 “현재 LLM에 코드베이스 전체를 넣었을 때 취약점 발굴이 어렵다”며 “특히 컨텍스트가 너무 제한적이고 관련 없는 코드들이 많이 포함되어 있을 때 LLM들은 취약점을 놓치거나 헛소리를 하기도 한다”고 지금 인공지능 모델들이 가지고 있는 문제를 짚었다.
“벌헌터는 프로젝트 내 파일을 읽고, GET 또는 POST처럼 원격 사용자 입력을 처리하는 기능이 포함돼 있는지 확인할 수 있도록 만들어졌습니다. 그런 기능들이 있다면 벌헌터는 해당 입력값이 어디로 흘러가는지를 추적합니다. 파일을 넘나들며, 그때 그때 필요한 클래스, 함수, 변수 등을 요청하는 방식입니다. 그 후 특정 취약점마다 맞춤형 프롬프트를 구성했고, 이를 활용해 코드를 분석합니다.” 맥키너니의 설명이다.
그렇게 했을 때 인공지능이 이상한 응답을 내는 경우가 크게 줄었다고 한다. 그 외 우회 경로 분석이나 실제 익스플로잇 코드 작성까지도 가능해졌다. “이 벌헌터를 가지고 주요 오픈소스 프로젝트에서 12개 이상의 제로데이 취약점을 발굴해냈다”고 맥키너니는 자랑하기도 했다. 이중 몇 가지 사례는 프로텍트AI 블로그에 소개돼 있다.
하지만 벌헌터가 모든 경우에 만능인 것은 아니다. 제한 사항이 존재한다. “파이선 코드베이스만 지원합니다. 또 로컬 파일 인클루전(Local File Inclusion, LFI) 임의 파일 덮어쓰기(Arbitrary File Overwrite, AFO), 원격 코드 실행(Remote Code Execution, RCE) 교차 사이트 스크립팅(Cross Site Scripting, XSS), SQL 주입(SQL Injection, SQLi), 서버 측 요청 조작(Server Side Request Forger, SSRF), 불안전 직접 객체 참조(Insecure Direct Object Reference, IDOR) 취약점만 식별 가능합니다.”
설치 방법
벌헌터를 설치해 사용하고 싶다면 깃허브(https://github.com/protectai/vulnhuntr)에서 다운로드가 가능하다. 설치 시 주의 사항이 하나 있다. 파이선 3.10만을 엄격하게 요구한다는 것이다. “벌헌터는 파이선 코드를 검사하는 데 사용하는 제다이(Jedi)의 여러 버그 때문에 파이선 3.10 버전과만 정확히 호환됩니다. 다른 파이선 버전들이라고 해서 안 되는 건 아닌데 결과 신뢰도가 떨어집니다.”
권장되는 플랫폼은 pipx와 도커(Docker)라고 한다.
도커 사용 시 설치를 위한 명령어는 다음과 같다.
pipx 사용 시 설치를 위한 명령어는 다음과 같다.
포트리(Poetry)로 직접 설치도 가능하다.
cd vulnhuntr && poetry install
사용법
벌헌터는 깃허브 저장소를 분석해 원격으로 악용 가능한 취약점을 찾는 데 주 목적이 있다. 사용자는 API 키와 로컬 경로를 지정해야 하며, LLM 서비스의 사용자 지정 엔드포인트도 원한다면 같이 지정할 수 있다. “여기서 한 가지 주의해야 할 것이 있습니다. LLM 제공업체에 대한 지출 한도를 반드시 설정하거나, 비용을 면밀히 모니터링 해야 합니다. 벌헌터는 LLM 컨텍스트 윈도에 많은 코드를 넣는다는 특성을 가지고 있기 때문에 요금이 올라갈 수 있습니다.”
또한 맥키너니는 클로드(Claude)라는 모델을 추천한다고 깃허브를 통해 밝혔다. 여러 모델들을 테스트 했을 때 클로드에서 가장 좋은 결과를 얻었기 때문이다.
명령행 인터페이스의 경우 다음과 같다.
Analyze a GitHub project for vulnerabilities. Export your ANTHROPIC_API_KEY/OPENAI_API_KEY before running.
options:
-h, --help show this help message and exit
-r ROOT, --root ROOT Path to the root directory of the project
-a ANALYZE, --analyze ANALYZE
Specific path or file within the project to analyze
-l {claude,gpt,ollama}, --llm {claude,gpt,ollama}
LLM client to use (default: claude)
-v, --verbosity Increase output verbosity (-v for INFO, -vv for DEBUG)
용례도 소개되어 있는데, 다음과 같다.
1) pipx 설치 후 클로드로 전체 리포지토리를 분석한다고 했을 때 :
vulnhuntr -r /path/to/target/repo/
2) 특정 파일만을 GPT-4o로 분석한다고 했을 때 :
vulnhuntr -r /path/to/target/repo/ -a server.py -l gpt
3) 도커에서 클로드와 사용자 지정 엔드포인트를 사용해 한다고 했을 때 :
논리의 흐름
논리의 흐름은 다음과 같다고 공개됐다.
1) LLM이 README를 요약하고 시스템 프롬프트에 포함
2) LLM이 전체 파일을 초기 분석하고 취약점 가능성 보고
3) 벌헌터가 특정 취약점에 대한 보조 프롬프트를 제공
4) LLM은 다른 파일의 관련 함수/클래스/변수를 요청해 컨텍스트를 확장
5) 사용자 입력부터 서버 처리까지 전체 호출 체인이 구성될 때까지 반복
6) 최종 분석 : LLM의 추론, 개념증명 익스플로잇, 신뢰 점수 포함
6)번까지 완료했을 때 신뢰 점수가 7보다 낮으면 취약점일 가능성이 낮은 것이다. 7점이면 조사할 가치가 있는 것이고, 8점 이상이라면 실제 취약점일 가능성이 높다고 한다. “벌헌터는 상세 보고서를 출력하는 것으로 분석을 마무리 합니다. 이 보고서에는 각 파일의 초기 평가 결과, 보조 평가 결과, 참조된 함수와 클래스 정보, 분석 과정의 로그, 개념증명용 익스플로잇이 포함돼 있습니다.”
Related Materials
- Vulnhuntr: Zero shot vulnerability discovery using LLMs - ProtectAI 오픈소스 깃허브 저장소 , 2024년
- Vulnhuntr: Open-source tool to identify remotely exploitable vulnerabilities - Help Net Security 분석 기사 , 2025년
- Hunting with Vulnhuntr: Getting Your First CVE - Huntr Blog 활용 가이드 및 분석 , 2024년
- Vulnhuntr: A Tool for Finding Exploitable Vulnerabilities with LLMs and Static Code Analysis - SecurityOnline 분석 , 2024년
