Bridging Code Property Graphs and Language Models for Program Analysis
이 논문은 토큰 제한과 절차 간 데이터 흐름 파악의 한계를 극복하기 위해 Joern 의 코드 속성 그래프 (CPG) 엔진을 대규모 언어 모델 (LLM) 과 통합한 오픈소스 MCP 서버 'codebadger'를 제안하며, 이를 통해 대규모 코드베이스의 정적 분석, 취약점 발견 및 패치 생성을 효율적으로 수행할 수 있음을 보여줍니다.
이 논문은 **"거대한 코드 세계를 탐색하는 AI 비서 (codebadger) 가 어떻게 해커의 눈으로 소프트웨어의 구멍을 찾아내고, 그 구멍을 메꾸는지"**에 대한 이야기입니다.
기존의 AI(대형 언어 모델, LLM) 가 코드를 분석할 때 겪는 한계를 해결하고, 마치 숙련된 보안 전문가처럼 일할 수 있게 해주는 새로운 도구인 **'codebadger'**를 소개합니다.
이해하기 쉽게 세 가지 비유로 설명해 드리겠습니다.
1. 문제: 왜 기존 AI 는 실패했을까? (도서관과 나침반의 문제)
상상해 보세요. **수백만 권의 책이 쌓인 거대한 도서관 (실제 소프트웨어 코드)**이 있다고 칩시다. 여기서 '책장 하나가 찢어지는 치명적인 결함 (보안 취약점)'을 찾아야 합니다.
기존 AI 의 한계 (기억력 부족): AI 는 한 번에 읽을 수 있는 책의 양 (토큰 제한) 이 정해져 있습니다. 도서관 전체를 한 번에 읽으려 하면 머리가 터져버립니다. 그래서 AI 는 책 한 두 장만 보고 "여기 괜찮네?"라고 말하다가, 책장 사이사이를 오가는 숨은 결함을 놓쳐버립니다.
검색의 한계 (키워드만 찾는 검색): AI 가 "책장 찢어짐"이라는 키워드로 검색하면, 그 단어가 나오는 책만 찾아옵니다. 하지만 실제 문제는 "A 책의 페이지 100 에서 시작된 물방울이 B 책의 페이지 500 에서 벽을 뚫고 나오는 것"처럼, **책과 책 사이의 연결고리 (데이터 흐름)**를 이해해야 발견할 수 있습니다. 기존 AI 는 이 연결고리를 보지 못합니다.
질문하기의 어려움 (복잡한 언어): 전문 도서관 사서 (보안 분석 도구) 는 아주 복잡한 규칙 (CPGQL 이라는 언어) 으로만 질문해야 정확한 답을 줍니다. 하지만 AI 는 이 복잡한 규칙을 잘 몰라서 엉뚱한 질문을 하거나, 아예 질문을 못 합니다.
2. 해결책: codebadger 는 어떤 도구인가? (똑똑한 나침반과 지도)
저자는 codebadger라는 도구를 만들었습니다. 이는 AI 와 도서관 사이에서 일하는 **초능력을 가진 '보안 가이드'**입니다.
직접 읽지 않고 탐색한다: codebadger 는 AI 에게 "도서관 전체를 다 읽어봐"라고 하지 않습니다. 대신 "어디서 물이 새는지 (데이터 흐름) 찾아줘", **"이 책장이 어떻게 연결되었는지 (호출 그래프) 보여줘"**라고 간단한 명령을 내립니다.
전문가의 눈 (CPG): codebadger 는 도서관의 모든 책장을 하나의 거대한 **3D 지도 (코드 속성 그래프, CPG)**로 만들어 AI 에게 보여줍니다. 이 지도를 보면, 책 한 권 한 권을 읽지 않아도 "어떤 책이 다른 책과 연결되어 있는지"가 한눈에 보입니다.
전문 용어 대신 쉬운 도구: AI 가 복잡한 사서 언어를 배울 필요 없이, codebadger 는 "이 부분만 잘라내서 보여줘 (프로그램 슬라이싱)", "이 물이 어디로 흘러갔는지 추적해줘 (타인 추적)" 같은 쉬운 버튼을 제공합니다.
3. 실제 성과: codebadger 가 한 일들 (세 가지 미션)
이 도구를 통해 AI 는 실제로 놀라운 일을 해냈습니다.
거대한 도서관의 안전 점검 (GGML 라이브러리):
상황: 8,000 개가 넘는 함수가 있는 거대한 코드를 분석해야 했습니다.
결과: AI 는 모든 코드를 읽지 않고, codebadger 의 지도를 통해 "돈 (메모리) 이 어디로 흘러가는지"만 쫓아갔습니다. 그 결과, 숫자가 너무 커져서 터지는 (정수 오버플로우) 위험한 구멍들을 찾아냈습니다.
새로운 해킹 구멍 발견 (libtiff 라이브러리):
상황: 아직 아무도 모르고 있던 새로운 버그를 찾아야 했습니다.
결과: AI 는 "이 숫자가 어떻게 계산되어 메모리 위치를 바꾸는지"를 추적했습니다. 그 결과, **악성 파일이 들어오면 도서관 벽을 뚫고 들어올 수 있는 구멍 (버퍼 오버플로우)**을 찾아냈고, 심지어 그 구멍을 이용해 해킹하는 방법 (PoC) 까지 직접 만들어냈습니다. 이는 기존에 알려지지 않은 새로운 발견이었습니다.
구멍을 바로 메꾸기 (libxml2 라이브러리):
상황: 이미 알려진 치명적인 버그 (CVE-2025-6021) 를 고쳐야 했습니다.
결과: AI 는 codebadger 를 통해 문제의 원인을 정확히 파악하고, **한 번의 시도로 완벽한 수정 코드 (패치)**를 작성했습니다. 이 수정 코드는 실제 개발자들이 나중에 만든 수정안과 거의 똑같았습니다.
요약: 왜 이것이 중요한가?
이 논문은 **"AI 가 이제 더 이상 코드를 단순히 읽는 것을 넘어, 복잡한 연결고리를 이해하고 전문가처럼 문제를 해결할 수 있다"**는 것을 보여줍니다.
과거: AI 는 "책을 한 장씩 읽다가 지쳐서 중요한 연결고리를 놓쳤다."
현재 (codebadger): AI 는 "3D 지도와 나침반을 들고, 필요한 부분만 정확히 찾아내어 구멍을 막는다."
이 도구는 앞으로 소프트웨어의 보안 구멍을 찾아내고, 자동으로 고치는 AI 기반 보안 시스템의 핵심이 될 것으로 기대됩니다.
1. 문제 정의 (Problem Statement)
대규모 언어 모델 (LLM) 은 실제 코드베이스의 보안 취약점 분석에 있어 다음과 같은 근본적인 한계에 직면해 있습니다:
토큰 제한 (Token Limits): 현대의 코드베이스는 수천 개의 파일과 수백만 줄의 코드로 구성되어 있어, 전체 리포지토리를 LLM 의 컨텍스트 윈도우에 로드하는 것이 불가능합니다. 이로 인해 기존 접근법은 고립된 코드 스니펫에만 의존하게 되어, 여러 함수와 파일을 가로지르는 취약점을 놓치게 됩니다.
심층적 의미 관계 부재 (Lack of Semantic Depth): 코드 임베딩 (Embedding) 은 문법적 패턴은 포착할 수 있지만, "함수 A 의 반환값이 함수 B 의 버퍼 쓰기로 흐른다"와 같은 함수 간 (Inter-procedural) 데이터 흐름이나 제어 의존성을 표현하지 못합니다.
복잡한 정적 분석 쿼리 생성의 어려움: Code Property Graph (CPG) 를 활용한 정적 분석은 강력한 도구이지만, 이를 위한 쿼리 언어 (CPGQL) 는 도메인 특화 언어로 복잡합니다. LLM 은 CPGQL 문법을 잘 모르거나 훈련 데이터가 부족하여 복잡한 쿼리를 생성할 때 할루시네이션 (허위 정보 생성) 이나 문법 오류를 빈번히 일으킵니다.
이러한 한계로 인해 LLM 은 대규모 코드베이스에서 분석가 수준의 추론을 수행하거나 교차 함수적 취약점을 발견하는 데 실패합니다.
2. 방법론 (Methodology)
저자는 **codebadger**라는 오픈소스 Model Context Protocol (MCP) 서버를 제안하여 이 문제를 해결합니다. codebadger 는 Joern 의 CPG 엔진과 LLM 을 통합하여, LLM 이 복잡한 CPGQL 쿼리를 직접 작성하지 않고도 고수준의 분석 도구를 사용할 수 있게 합니다.
아키텍처:
LLM 에이전트와 Joern 정적 분석 엔진 사이의 중개자 역할을 수행합니다.
LLM 이 리포지토리를 로드하면 codebadger 가 Joern 을 통해 CPG(코드 속성 그래프) 를 생성하고 세션을 관리합니다.
LLM 은 CPGQL 대신 고수준의 도구 함수 (Tool Functions) 를 호출하여 분석을 수행합니다.
핵심 도구 및 기능:
프로그램 슬라이싱 (Program Slicing): 특정 취약점 지점에서 역방향으로 의존성을 추적하여 관련 코드만 추출합니다 (코드베이스 크기를 최대 90% 감소).
테이팅 추적 (Taint Tracking): 신뢰할 수 없는 소스 (Source) 에서 민감한 싱크 (Sink) 로의 데이터 흐름을 추적합니다.
데이터 흐름 분석 및 호출 그래프 추출: 변수의 기원과 전파 경로를 시각화하고 분석합니다.
경계 확인 (Bounds Checking): 메모리 접근 시 경계 검증 로직이 존재하는지 분석합니다.
작동 원리:
LLM 은 전체 파일을 읽는 대신, find_taint_sources, get_program_slice 등의 도구를 호출하여 **의미적 탐색 (Semantic Navigation)**을 수행합니다.
이는 인간 분석가가 호출 그래프를 따라 취약점 경로를 추적하는 방식과 유사하며, 불필요한 토큰 소모를 방지합니다.
3. 주요 기여 (Key Contributions)
codebadger 도구 개발: CPG 엔진과 LLM 을 연결하는 오픈소스 MCP 서버를 공개하여, LLM 이 대규모 코드베이스에서 정적 분석을 수행할 수 있는 인프라를 제공합니다.
고수준 추상화 제공: LLM 이 복잡한 CPGQL 문법을 학습하거나 생성할 필요 없이, 의미론적 분석 도구 (슬라이싱, 테이팅 등) 를 통해 전문적인 보안 분석이 가능하도록 합니다.
실제 사례를 통한 검증:
코드 이해: 8,000 개 이상의 메서드를 가진 GGML 라이브러리 전체를 분석하여 메모리 안전성 패턴을 감사했습니다.
새로운 취약점 발견:libtiff 라이브러리에서 보고되지 않은 버퍼 오버플로우 취약점을 발견하고 이를 악용하는 PoC(Proof of Concept) 를 생성했습니다.
자동 패치 생성:libxml2 의 CVE-2025-6021 (정수 오버플로우) 에 대해 첫 시도에서 유지보수진이 적용한 패치와 유사한 정확한 수정 코드를 생성했습니다.
4. 실험 결과 및 사례 연구 (Results & Use Cases)
논문의 3 가지 주요 사례 연구는 codebadger 의 효과를 입증합니다:
Case 1: GGML 라이브러리 메모리 안전성 감사 (규모 확장성)
8,667 개의 메서드와 198,006 개의 함수 호출을 분석했습니다.
LLM 은 전체 코드를 읽지 않고 find_taint_sources 등을 통해 메모리 할당 지점과 위험한 연산을 식별했습니다.
결과:alloca 사용 시 크기 제한 부재, 정수 오버플로우 위험, 포인터 연산 검증 부재 등 여러 문제를 발견했습니다.
Case 2: libtiff 의 미보고된 버퍼 오버플로우 발견 (의미론적 정확성)
tif_getimage.c 파일에서 col_offset 변수가 검증되지 않은 채 포인터 연산에 사용되어 버퍼 오버플로우가 발생할 수 있음을 발견했습니다.
결과: LLM 은 데이터 흐름을 추적하여 취약점을 확인하고, AddressSanitizer (ASAN) 로 검증된 악성 TIFF 파일 생성 PoC 를 작성했습니다. 이는 단순한 패턴 매칭으로는 불가능한 교차 함수적 분석의 성공 사례입니다.
Case 3: libxml2 CVE-2025-6021 패치 (자동화 및 정확성)
xmlBuildQName 함수의 정수 오버플로우 취약점을 분석했습니다.
결과: LLM 은 get_program_slice 와 get_data_dependencies 를 사용하여 취약점의 근본 원인 (길이 계산 시 정수 오버플로우) 을 파악하고, 첫 시도에서 올바른 패치 (크기 확인 로직 추가 및 size_t 타입 사용) 를 생성했습니다. 이 패치는 실제 유지보수진이 적용한 수정안과 거의 일치했습니다.
5. 의의 및 결론 (Significance & Conclusion)
LLM 기반 보안 분석의 패러다임 전환:codebadger 는 LLM 이 단순히 코드를 생성하거나 요약하는 것을 넘어, **전체 리포지토리에 걸친 컨텍스트 인식 추론 (Context-aware Reasoning)**을 가능하게 합니다.
확장성: 토큰 제한을 우회하여 대규모 코드베이스에서도 정밀한 정적 분석을 수행할 수 있게 하여, 취약점 발견, 패치, 프로그램 이해를 자동화합니다.
실용성: 실제 산업계 코드베이스 (GGML, libtiff, libxml2) 에서 검증된 결과, 이 접근법이 이론적 가능성을 넘어 실제 보안 운영 (SVM) 에 기여할 수 있음을 보여줍니다.
한계점 및 향후 과제:
Joern 의 CPG 생성은 매우 대규모 코드베이스 (예: Linux 커널) 에서는 메모리 오버헤드가 발생할 수 있습니다.
LLM 의 도구 체이닝 (Tool-chaining) 능력에 따라 결과가 달라질 수 있으며, 복잡한 CPGQL 쿼리가 필요한 경우 여전히 LLM 의 성능 저하가 발생할 수 있습니다.
런타임 취약점 (경쟁 조건 등) 분석에는 한계가 있습니다.
결론적으로, 이 연구는 LLM 과 정적 분석 도구의 강력한 시너지를 통해 대규모 소프트웨어의 보안성을 향상시키는 새로운 방향을 제시합니다.