본문으로 이동
LLM을 이용한 서비스 취약점 분석 자동화 #2
문서

LLM을 이용한 서비스 취약점 분석 자동화 #2

표상영 · 토스 · 토스 기술 블로그

원본 보기

소개

보안 분석가라면 누구나 한 번쯤 상상했을 ‘해줘’로 취약점 찾기. 그 경험을 공유해 드립니다.

AI 핵심 요약

대용량 코드에서 LLM이 필요한 코드를 놓치거나 분석 결과가 들쭉날쭉하고, 모든 경로를 분석하면 비용이 커지는 문제를 해결하기 위해 취약점 분석 파이프라인을 구성했다. ctags·tree-sitter 기반 SourceCode Browse MCP로 코드 탐색을 돕고, Semgrep으로 Untrusted Input 경로를 수집한 뒤 SARIF를 간소화하고 연속된 라인을 병합해 분석 입력을 줄였다. 이어 Discovery와 Analysis 에이전트를 분리해 후보 경로를 먼저 선별하고, 비용 지속성을 위해 샘플 프로젝트에서 여러 오픈 모델을 비교한 뒤 Qwen3:30B를 채택했으며 Pydantic과 Instructor로 출력 형식도 보완했다. 핵심 교훈은 모델 자체의 성능뿐 아니라 코드 인덱싱, 후보 수집, 단계별 역할 분담과 검증을 함께 설계해야 정확도와 비용을 관리할 수 있다는 것이다.

  • ctags와 tree-sitter로 심볼과 함수 범위를 미리 인덱싱하면 LLM의 코드 탐색을 정확하고 효율적으로 만들 수 있다.
  • SAST는 취약점 판정기가 아니라 입력 경로 후보를 빠짐없이 수집하는 용도로 활용하고, SARIF에서 필요한 정보만 추려 토큰 낭비를 줄인다.
  • Discovery 단계에서는 미탐을 줄이도록 후보를 넉넉히 남기고, 정밀 검증은 Analysis 에이전트에 맡기는 식으로 비용과 정확도의 균형을 잡는다.
  • 오픈 모델은 샘플 프로젝트와 통제된 환경에서 분석률·정탐률·오탐률, 도구 호출 안정성, 토큰 사용량을 함께 비교해 선택한다.
  • Pydantic으로 응답 형식을 검증하고 Instructor의 재시도를 활용하면 오픈 모델의 불안정한 출력 형식을 보완할 수 있다.