코드‑그래프 기반 취약점 탐지: AI4VA와 GNN의 혁신

코드‑그래프 기반 취약점 탐지: AI4VA와 GNN의 혁신

초록

본 논문은 소스 코드를 Code Property Graph(CPG)로 변환한 뒤, Gated Graph Neural Network(GGNN)를 활용해 취약점 서명을 학습한다. AI4VA 파이프라인을 구축하여 그래프를 의미 보존 방식으로 벡터화하고, 다중 데이터셋에서 정적 분석기·전통 머신러닝·CNN·RNN 기반 모델을 능가하는 성능을 입증한다. 코드‑그래프 표현이 기존의 이미지·시퀀스 기반 인코딩보다 취약점 탐지에 더 효과적임을 증명한다.

상세 분석

이 연구는 소스 코드의 구조적·의미적 특성을 그래프 형태로 포착하는 Code Property Graph(CPG)와, 그래프 데이터를 처리하도록 설계된 Gated Graph Neural Network(GGNN)를 결합한다는 점에서 독창적이다. CPG는 추상 구문 트리(AST), 제어 흐름 그래프(CFG), 데이터 흐름 그래프(DFG)를 하나의 통합 그래프에 결합해 변수 선언, 함수 호출, 제어 흐름 전이 등 다양한 관계를 노드와 엣지로 표현한다. 이러한 복합 그래프는 기존의 토큰 시퀀스나 이미지 변환 방식이 놓치기 쉬운 코드 간의 비국소적 상호작용을 그대로 유지한다.

AI4VA 파이프라인은 먼저 입력 소스 파일을 파싱해 CPG를 생성하고, 각 노드에 타입, 연산자, 리터럴 등 풍부한 속성을 부여한다. 그 다음, 노드와 엣지의 속성을 고차원 임베딩으로 매핑하고, 그래프 전체를 메시지 패싱 방식으로 집계한다. 여기서 핵심은 GGNN의 게이트 구조이다. 각 라운드에서 노드 상태는 인접 노드로부터 전달된 메시지를 게이트(입력·망각·출력)로 조절해 업데이트되며, 이는 순환 신경망이 시간 축에서 정보를 유지하는 방식과 유사하지만, 그래프 토폴로지를 직접 반영한다. 논문은 8~10회의 전파 라운드가 최적 성능을 보인다고 보고한다.

학습 단계에서는 취약점이 포함된 샘플과 정상 샘플을 라벨링한 후, 그래프 레벨의 분류기를 통해 이진 분류를 수행한다. 손실 함수는 크로스 엔트로피이며, 클래스 불균형을 완화하기 위해 가중치를 조정한다. 실험에서는 두 개의 공개 데이터셋(NVD 기반 Java 취약점 데이터와 Juliet 테스트 케이스)과 자체 구축한 C 프로젝트 데이터셋을 사용했으며, 각각 5‑fold 교차 검증을 수행했다.

성능 비교 결과, AI4VA는 정적 분석기(예: SpotBugs, FindSecBugs)와 전통 머신러닝(특징 기반 SVM, Random Forest)보다 높은 정밀도·재현율을 기록했으며, 특히 CNN·RNN 기반 코드‑시퀀스 모델보다 평균 12% 이상 향상된 F1 점수를 얻었다. 특히 데이터 흐름과 제어 흐름이 복잡하게 얽힌 취약점(예: 경계 검증 누락, 자원 해제 오류)에서 그래프 기반 접근법이 큰 이점을 보였다.

한계점으로는 그래프 생성 비용이 높아 대규모 코드베이스에 적용하려면 사전 처리 최적화가 필요하고, 현재는 함수 수준의 그래프만 다루어 파일 간 상호작용을 포착하지 못한다는 점을 언급한다. 또한, 라벨링된 취약점 데이터가 제한적이어서 라벨 스무딩이나 반지도 학습 기법을 도입하면 더욱 일반화 성능을 끌어올릴 수 있을 것으로 보인다.

전반적으로 이 논문은 코드‑그래프와 GNN의 결합이 소프트웨어 보안 분야에 새로운 패러다임을 제시한다는 점에서 의의가 크다. 향후 연구에서는 멀티‑모듈 그래프, 동적 실행 정보 통합, 그리고 트랜스퍼 러닝을 통한 크로스‑언어 취약점 탐지 등으로 확장될 가능성이 있다.