LLM 기반 취약점 분석 자동화, 비용 절감과 성능 향상의 두 마리 토끼를 잡다!

by DD
2개월 전
조회수 42

LLM을 활용한 서비스 취약점 분석 자동화 과정에서 발생한 문제점과 해결 방안을 제시하며, MCP 서버를 구축하여 소스코드 탐색 효율을 높임

SAST 도구를 활용하여 AI가 검토해야 할 후보군을 추출하고, Multi-Agent 구조를 도입하여 분석 정확도와 일관성을 향상시킴

Open Model로 전환하여 비용 문제를 해결하고, PydanticInstructor 라이브러리를 활용해 모델 응답의 안정성을 확보함

Qwen3:30B 모델을 채택하여 성능과 비용 효율성을 모두 잡았으며, 지속 가능한 분석 시스템 구축을 위한 노력을 기울임

소스코드 인덱싱 서버 구축을 통해 특정 기술에 종속되지 않는 확장 가능한 인프라를 구축하고, MCP(Model Context Protocol)를 활용하여 유연성을 확보함

MCP 서버 아키텍처: 효율적인 소스코드 탐색

저자는 Cursor, Claude Code와 같은 도구의 단순 패턴 매칭 방식의 한계를 지적하며, MCP(Model Context Protocol) 서버를 구축하여 소스코드 탐색 능력을 향상시켰다. MCP 서버는 ctags를 이용한 심볼 정의 사전 인덱싱과 tree-sitter를 활용한 함수 범위 구조적 파싱을 통해, AI에게 IDE의 'Go to Definition / Find References'와 유사한 기능을 제공한다. MCP 서버는 find_references(), read_definition(), read_source(), get_project_structure()의 4가지 도구로 구성되어 있으며, 특히 get_project_structure()는 원격 환경에서 AI가 프로젝트 구조를 파악할 수 있도록 돕는다. 이 아키텍처는 AI의 소스코드 이해 능력(Source Code Understanding)을 극대화하고, 불필요한 토큰 낭비를 줄이는 데 기여한다.

SAST 도구와 AI의 시너지: 정확도 향상 전략

저자는 SAST(Static Application Security Testing) 도구를 활용하여 AI의 취약점 분석 정확도를 높이는 전략을 제시한다. 기존의 SAST 도구 활용 방식과는 달리, SAST를 '취약점 결과'를 AI에게 전달하는 대신, AI가 검토해야 하는 모든 후보군(Untrusted Input 발생 지점)을 추출하는 보조 도구로 사용했다. Semgrep을 이용한 SAST 분석을 통해, 모든 Source→Sink 도달 경로를 추출하고, SARIF(Static Analysis Results Interchange Format) 형식으로 결과를 얻었다. 이후, 파일 사이즈를 줄이기 위해 불필요한 정보를 제거하고, 연속된 라인을 merge하는 후처리를 통해 분석 결과 다이어트(Analysis Result Diet)를 수행했다. 이 방식은 AI가 취약점을 '못 보는' 문제를 해결하고, 분석의 일관성을 확보하는 데 기여한다.

Multi-Agent 구조: 분석 효율 극대화

저자는 분석 비용 문제를 해결하기 위해 Multi-Agent 구조를 도입했다. 이 구조는 Supervisor, Discovery, Analysis 에이전트로 구성되며, Discovery 에이전트는 Semgrep으로 수집된 모든 Untrusted Input 경로 중 취약점 발생 가능성이 높은 경로만 선별하는 필터 역할을 수행한다. Discovery 에이전트의 성능이 전체 분석 퀄리티에 영향을 미치지만, 소스코드 참조를 최소화하여 토큰 비용을 절감했다. Discovery 에이전트의 과탐률을 허용함으로써, 미탐률을 줄이고 전체적인 분석 정확도를 높이는 Trade-off 전략(Trade-off Strategy)을 채택했다. 이 방식은 분석 비용을 절감하면서도, 모든 취약점을 찾아내는 100%의 정확도를 달성하는 데 기여했다.

Open Model 전환: 지속 가능한 비용 확보

저자는 Cloud Model의 높은 비용 문제를 해결하기 위해 Open Model로의 전환을 결정하고, Qwen3:30B, gpt-oss:20B, llama3.1:8B 모델을 비교 분석했다. 샘플 웹 프로젝트를 구축하여 분석률, 정탐률, 오탐률을 정량적으로 측정하고, MCP Tool 호출 안정성 및 토큰 비용을 고려하여 Qwen3:30B 모델을 최종 선택했다. Open Model의 응답 포맷 문제를 해결하기 위해 Pydantic과 Instructor 라이브러리를 활용하여, 응답 포맷에 대한 타입 힌트와 검증을 강화하고, LLM의 자동 보정을 유도했다. 이 과정을 통해, 지속 가능한 비용(Sustainable Cost)으로 AI 기반 취약점 분석 시스템을 운영할 수 있는 기반을 마련했다.

미래를 위한 설계: 소스코드 인덱싱 서버

저자는 AI 기술 발전에 발맞춰, 소스코드 인덱싱 서버 구축을 통해 확장 가능한 인프라를 구축하려는 비전을 제시한다. 모든 서비스의 소스코드를 중앙 서버에 모아두고 미리 인덱싱하여, AI 에이전트가 항상 최신 상태의 코드를 효율적으로 참조할 수 있도록 한다. MCP(Model Context Protocol)를 표준 프로토콜로 활용하여, Claude, Codex, 또는 미래의 새로운 에이전트가 등장하더라도 인프라 변경 없이 바로 연결할 수 있도록 설계했다. 이 아키텍처는 특정 기술에 종속되지 않고, 유연성(Flexibility)확장성(Scalability)을 확보하여, 지속적인 기술 발전에 대응할 수 있는 기반을 마련한다.

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