[튜토리얼] 원격 공격 가능케 하는 취약점, 벌헌터로 찾아내자

[튜토리얼] 원격 공격 가능케 하는 취약점, 벌헌터로 찾아내자
Photo by Shahadat Rahman / Unsplash
💡
Editor's Pick
- 무료 오픈소스 취약점 발굴 도구, 벌헌터
- 파이선 코드 베이스에서는 높은 성과 낼 수 있어
- 모든 취약점 다 찾아내는 건 아냐

원격 공격을 가능케 해 주는 취약점을 찾아내는 오픈소스 도구가 등장해 소개한다. 이름은 벌헌터(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)라고 한다. 

도커 사용 시 설치를 위한 명령어는 다음과 같다.

💡
docker build -t vulnhuntr https://github.com/protectai/vulnhuntr.git#main

pipx 사용 시 설치를 위한 명령어는 다음과 같다.

💡
pipx install git+https://github.com/protectai/vulnhuntr.git --python python3.10

포트리(Poetry)로 직접 설치도 가능하다. 

💡
git clone https://github.com/protectai/vulnhuntr
cd vulnhuntr && poetry install

사용법

벌헌터는 깃허브 저장소를 분석해 원격으로 악용 가능한 취약점을 찾는 데 주 목적이 있다. 사용자는 API 키와 로컬 경로를 지정해야 하며, LLM 서비스의 사용자 지정 엔드포인트도 원한다면 같이 지정할 수 있다. “여기서 한 가지 주의해야 할 것이 있습니다. LLM 제공업체에 대한 지출 한도를 반드시 설정하거나, 비용을 면밀히 모니터링 해야 합니다. 벌헌터는 LLM 컨텍스트 윈도에 많은 코드를 넣는다는 특성을 가지고 있기 때문에 요금이 올라갈 수 있습니다.”

또한 맥키너니는 클로드(Claude)라는 모델을 추천한다고 깃허브를 통해 밝혔다. 여러 모델들을 테스트 했을 때 클로드에서 가장 좋은 결과를 얻었기 때문이다. 

명령행 인터페이스의 경우 다음과 같다.

💡
usage: vulnhuntr [-h] -r ROOT [-a ANALYZE] [-l {claude,gpt,ollama}] [-v]
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 설치 후 클로드로 전체 리포지토리를 분석한다고 했을 때 : 

💡
export ANTHROPIC_API_KEY="sk-1234"
vulnhuntr -r /path/to/target/repo/

2) 특정 파일만을 GPT-4o로 분석한다고 했을 때 : 

💡
export OPENAI_API_KEY="sk-1234"
vulnhuntr -r /path/to/target/repo/ -a server.py -l gpt

3) 도커에서 클로드와 사용자 지정 엔드포인트를 사용해 한다고 했을 때 : 

💡
docker run --rm -e ANTHROPIC_API_KEY=sk-1234 -e ANTHROPIC_BASE_URL=https://localhost:1234/api -v /local/path/to/target/repo:/repo vulnhuntr:latest -r /repo -a repo-subfolder/target-file.py

논리의 흐름

논리의 흐름은 다음과 같다고 공개됐다.

1) LLM이 README를 요약하고 시스템 프롬프트에 포함

2) LLM이 전체 파일을 초기 분석하고 취약점 가능성 보고

3) 벌헌터가 특정 취약점에 대한 보조 프롬프트를 제공

4) LLM은 다른 파일의 관련 함수/클래스/변수를 요청해 컨텍스트를 확장

5) 사용자 입력부터 서버 처리까지 전체 호출 체인이 구성될 때까지 반복

6) 최종 분석 : LLM의 추론, 개념증명 익스플로잇, 신뢰 점수 포함

6)번까지 완료했을 때 신뢰 점수가 7보다 낮으면 취약점일 가능성이 낮은 것이다. 7점이면 조사할 가치가 있는 것이고, 8점 이상이라면 실제 취약점일 가능성이 높다고 한다. “벌헌터는 상세 보고서를 출력하는 것으로 분석을 마무리 합니다. 이 보고서에는 각 파일의 초기 평가 결과, 보조 평가 결과, 참조된 함수와 클래스 정보, 분석 과정의 로그, 개념증명용 익스플로잇이 포함돼 있습니다.”


구글클라우드, AI 도구 2종 출시
💡Editor Pick - SOW 애널라이저, 작업 명세서 작성·보완·검토·승인 과정 효율화 - 봇 지원 라이브 채팅, 온보딩부터 청구 등 업무 지원 제공 구글 클라우드가 현지 시간 기준 27일 반복 작업을 효율화하고 정보 접근성을 높이는 동시에, 인텔리전스로 업무 역량을 돕는 AI 기반 도구 2종을 출시했다고 1일 밝혔다. 제미나이를 활용한

Read more

파이선 리포지터리 PyPI에서 고급 악성 패키지 발견돼

파이선 리포지터리 PyPI에서 고급 악성 패키지 발견돼

💡Editor's Pick - soopsocks라는 악성 패키지, 2600번 다운로드 돼 - SOCKS5 프록시 생성 후 여러 악성행위 실시 - 공공 리포지터리의 안전한 활용 위한 대책 도입 시급 파이선 생태계의 코드 리포지터리인 PyPI에서 악성코드가 유포되고 있다는 사실이 발견됐다. 이번 악성 패키지는 일종의 백도어 기능을 가지고 있다고 한다. SOCKS5 프록시 서비스를

By 문가용 기자
오라클 자산 관리 솔루션 노리는 캠페인 성행, 혹시 클롭?

오라클 자산 관리 솔루션 노리는 캠페인 성행, 혹시 클롭?

💡Editor's Pick - 대기업 자산 관리 솔루션 노리는 공격 - 데이터 훔쳤다는 협박 메일로부터 공격 시작 - 배후에 클롭 랜섬웨어 있을 가능성 높아 보여 구글의 보안 자회사 맨디언트(Mandiant)가 최근 새로운 악성 캠페인을 발견해 세상에 공개했다. 배후 세력으로 가장 유력한 건 악명 높은 랜섬웨어 단체인 클롭(Cl0p)

By 문가용 기자
한국서도 사용되는 마일사이트 라우터, 해킹 공격에 노출돼

한국서도 사용되는 마일사이트 라우터, 해킹 공격에 노출돼

💡Editor's Pick - 산업용 셀루러 라우터의 API, 인터넷에 노출돼 - 심지어 문자 메시지 열람과 확인까지 가능한 API - 너무 많은 권한을 주는 게 많은 보안 사고의 원인 산업용 셀룰러 라우터를 감염시키는 악성 캠페인이 발견됐다. 배후 세력은 자신들이 점거한 라우터들을 통해 악성 문자 메시지를 발송하고 있다고 한다. 단순 장난

By 문가용 기자
접근 제어 솔루션 원로그인에서 API 관리 부실 취약점 나와

접근 제어 솔루션 원로그인에서 API 관리 부실 취약점 나와

💡Editor's Pick - 원로그인에서 발견된 CVE-2025-59363 - client_secret이라는 민감 정보 노출시켜 - API 관리 개념 부족해서 생긴 취약점 인기 높은 아이덴티티 및 접근 관리 솔루션인 원로그인(OneLogin)에서 심각한 보안 취약점이 발견됐다. 이를 익스플로잇 하는 데 성공한 공격자는 민감한 정보를 가져갈 수 있게 된다고 한다. 해당 취약점에는

By 문가용 기자