QLCoder: A Query Synthesizer For Static Analysis of Security Vulnerabilities
이 논문은 CVE 메타데이터를 기반으로 코드 분석 엔진인 CodeQL 의 취약점 탐지 쿼리를 자동으로 생성하는 에이전트 프레임워크인 QLCoder 를 제안하며, LLM, 실행 피드백 루프, MCP 를 통한 언어 서버 및 RAG 기반의 구조적 제약을 결합하여 기존 단일 에이전트 방식보다 훨씬 높은 정확도로 보안 쿼리를 합성함을 입증했습니다.
즉, QLCoder 는 기존 도구들이 놓친 진짜 위험을 찾아내고, 무고한 부분을 잡지 않는 '정교한 수사관'이 된 것입니다.
💡 왜 이것이 중요한가요?
보안 취약점은 매일 수백 개씩 새로 발생합니다. 전문가들이 하나하나 수동으로 대응하는 것은 불가능합니다. QLCoder 는 보안 보고서 (CVE) 를 읽는 순간, 자동으로 그 취약점을 찾아내는 '수사 지시서'를 만들어냅니다.
이로써 기업들은 새로운 해킹 시도가 발생하기 전에, 자동으로 대응책을 마련하고 소프트웨어를 안전하게 지킬 수 있게 됩니다.
🎯 한 줄 요약
QLCoder 는 복잡한 보안 언어를 몰라도, AI 가 스스로 학습하고 검증하여 '정확한 보안 수사 지시서'를 만들어주는 혁신적인 도구입니다.
1. 문제 정의 (Problem)
정적 분석 도구 (Static Analysis Tools) 는 소스 코드를 실행하지 않고 취약점을 탐지하는 강력한 수단이지만, 이를 효과적으로 사용하기 위해서는 CodeQL과 같은 도메인 특화 쿼리 언어로 취약 패턴을 명시해야 합니다. 그러나 이러한 쿼리를 작성하는 것은 다음과 같은 이유로 매우 어렵습니다.
높은 진입 장벽: 보안 지식, 프로그램 분석 개념, 그리고 복잡한 쿼리 언어 구문에 대한 전문 지식이 모두 필요합니다.
낮은 정확도와 커버리지: 기존 상용 정적 분석 도구들의 쿼리 스위트는 취약점 커버리지가 제한적이며, 잘못된 쿼리는 오탐 (False Positive) 을 유발하거나 실제 버그를 놓칠 수 있습니다.
복잡한 데이터 흐름: 취약점은 소스 (Source), 싱크 (Sink), 정제기 (Sanitizer) 가 서로 다른 파일이나 모듈에 분산되어 있고, 복잡한 인터프로시저 (Inter-procedural) 데이터 흐름을 통해 전파되는 경우가 많아, 이를 정확히 포착하는 쿼리를 수동으로 작성하는 것이 매우 어렵습니다.
CVE 데이터의 미활용: CVE(Common Vulnerabilities and Exposures) 데이터베이스에는 풍부한 취약점 설명과 패치 정보가 있지만, 이를 자동으로 정적 분석 쿼리로 변환하는 기술은 아직 부족합니다.
2. 방법론 (Methodology)
저자들은 QLCoder라는 에이전트 기반 프레임워크를 제안하여, 주어진 CVE 메타데이터로부터 CodeQL 쿼리를 자동으로 합성합니다. QLCoder 는 다음과 같은 핵심 메커니즘을 사용합니다.
A. 에이전트 기반 합성 루프 (Agentic Synthesis Loop)
반복적 개선: LLM 에이전트가 초기 쿼리를 제안하면, CodeQL 기반 유효성 검사기 (Validator) 가 취약 버전과 패치된 버전의 코드에서 쿼리를 실행합니다.
피드백 기반 수정: 실행 결과 (컴파일 성공/실패, 취약 버전에서의 탐지 여부, 패치 버전에서의 오탐 여부) 를 에이전트에게 피드백으로 제공하고, 에이전트는 이를 바탕으로 쿼리를 수정합니다. 이 과정은 성공적인 쿼리가 생성되거나 최대 반복 횟수 (N=10) 에 도달할 때까지 반복됩니다.
B. 구조화된 컨텍스트 엔지니어링 (Context Engineering via MCP)
LLM 이 무작위로 추론하는 것을 방지하고 정확한 쿼리를 생성하기 위해 MCP(Model Context Protocol) 인터페이스를 통해 두 가지 주요 도구를 제공합니다:
CodeQL 언어 서버 (Language Server Protocol):
구문 오류를 실시간으로 감지하고, 올바른 API 이름, 클래스, 예측자 (Predicate) 를 제안합니다.
LLM 이 구문적으로 유효한 (Syntactically Valid) 쿼리를 생성하도록 안내합니다.
검색 증강 생성 (RAG) 데이터베이스:
CVE 설명, CWE 정의, 기존 CodeQL 쿼리 예시, 문서화 자료 등을 벡터 데이터베이스에 저장합니다.
에이전트가 필요한 경우 (예: 특정 취약점 패턴의 데이터 흐름 추적 방법) 에 관련 문서를 검색하여 의미론적 (Semantic) 가이드를 제공합니다.
C. 의미론적 엄격성 (Semantic Precision)
QLCoder 의 핵심 목표는 단순히 구문이 맞는 쿼리가 아니라 의미론적으로 정확한 쿼리를 만드는 것입니다.
성공 기준: 생성된 쿼리는 취약 버전에서는 최소 한 개의 경로를 탐지해야 하고, 패치된 버전에서는 탐지하지 않아야 합니다 (False Positive 제거).
이를 위해 에이전트는 패치된 코드에서 추가된 정제기 (Sanitizer, 예: setProperty 호출) 를 식별하고, 이를 쿼리의 제약 조건으로 활용하여 패치된 버전에서는 경로를 차단하도록 학습시킵니다.
3. 주요 기여 (Key Contributions)
QLCoder 프레임워크: CVE 설명에서 실행 가능한 CodeQL 쿼리를 자동으로 생성하는 최초의 에이전트 프레임워크 중 하나로, 실행 피드백, 의미 검색, 구조화된 추론을 통합했습니다.
실제 환경 평가: 111 개의 Java 프로젝트에 포함된 176 개의 CVE 를 대상으로 평가했습니다. 이는 다양한 CWE(42 개) 와 프로젝트 규모 (0.01~1.5 MLOC) 를 포괄합니다.
성능 비교 및 입증: 기존 상용 도구 및 최신 LLM 기반 분석 도구 대비 월등히 높은 성능을 입증했습니다.
성공률: QLCoder 는 53.4% 의 CVE 에서 정확한 쿼리를 생성했으나, 기존 에이전트 (Claude Code 단독) 는 10% 에 불과했습니다.
정확도 (F1 Score): QLCoder 는 0.7의 F1 점수를 기록했습니다. 반면, 최신 LLM 보조 정적 분석기인 IRIS 는 0.048, 일반적인 CodeQL 쿼리 스위트는 0.073 에 그쳤습니다. 이는 QLCoder 가 생성한 쿼리가 훨씬 더 정밀하고 재현 가능함을 의미합니다.
4. 실험 결과 (Results)
CWE 유형별 성능: 경로 이동 (Path Traversal, CWE-022), XSS(CWE-079), 코드 주입 (CWE-094) 등 주요 취약점 유형에서 50~66% 의 높은 성공률을 보였습니다.
학습 데이터 컷오프 영향: 모델 학습 데이터 (2025 년 3 월 이전) 이후에 보고된 2025 년 CVE 들에 대해서도 일관된 성능을 보여주어, 최신 취약점에도 효과적으로 대응할 수 있음을 확인했습니다.
비용 및 효율성: 쿼리 1 개당 평균 3,712 초 (약 1 시간) 의 시간이 소요되었으며, 평균 비용은 2.90 달러였습니다. 3,000 초 이내에 합성이 완료된 쿼리의 경우 성공률이 97% 에 달해 조기 종료 정책의 가능성을 시사합니다.
기타 에이전트와의 비교: Claude Code, Gemini CLI, Codex 등 다양한 에이전트 프레임워크에 QLCoder 를 적용했을 때, 컴파일 성공률과 성공적인 쿼리 생성률이 모두 크게 향상되었습니다.
5. 의의 및 한계 (Significance & Limitations)
의의:
보안 자동화의 혁신: 보안 전문가의 수동 개입 없이도 CVE 보고서를 즉시 실행 가능한 정적 분석 규칙으로 변환함으로써, 회귀 테스트 (Regression Testing), 변형 분석 (Variant Analysis), 패치 검증 (Patch Validation) 의 속도와 정확도를 획기적으로 높였습니다.
정밀도 향상: 기존 도구의 낮은 정밀도 문제를 해결하여, 실제 취약점을 놓치지 않으면서도 오탐을 줄이는 데 성공했습니다.
오픈 소스 기여: QLCoder 와 CodeQL LSP MCP 서버를 오픈 소스로 공개하여 연구 및 산업계 활용을 촉진합니다.
한계:
언어 제한: 현재는 Java 프로젝트에 국한되어 평가되었으며, CodeQL 이 지원하는 다른 언어 (C++, Python 등) 로의 확장은 추가적인 데이터베이스 구축이 필요합니다.
비코드 요소 배제: 설정 파일이나 비-Java 코드가 포함된 취약점은 제외되었습니다.
동적 분석 부재: 생성된 쿼리는 정적 분석에 기반하므로, 런타임에만 발생하는 취약점 (Dynamic Execution) 을 포착하지는 못합니다.
결론
QLCoder 는 LLM 에이전트와 정적 분석 도구를 결합하여 보안 취약점 탐지 자동화의 새로운 지평을 열었습니다. 단순한 코드 생성을 넘어, 실행 피드백과 구조화된 도구를 통해 구문적 정확성과 의미론적 정밀도를 동시에 확보함으로써, 실제 산업 환경에서 즉시 활용 가능한 고품질 보안 쿼리를 생성할 수 있음을 입증했습니다.