Devign 그래프 신경망 기반 포괄적 프로그램 의미 학습 취약점 탐지
Devign은 추상 구문 트리, 제어 흐름 그래프, 데이터 흐름 그래프, 자연 코드 순서를 결합한 복합 그래프를 입력으로 사용하고, 게이트형 그래프 순환 네트워크와 새로운 Conv 모듈을 통해 함수 수준의 취약점 여부를 예측한다. 4개의 대규모 오픈소스 C 프로젝트에서 수집한 실제 라벨링 데이터로 학습했으며, 기존 방법 대비 평균 정확도 10.5%·F1 8.7% 향상을 달성했다.
저자: Yaqin Zhou, Shangqing Liu, Jingkai Siow
본 논문은 소프트웨어 취약점 탐지를 위한 새로운 그래프 신경망 모델인 Devign을 제안한다. 기존 연구들은 주로 AST만을 이용하거나, 인공적으로 만든 단순 코드에 의존해 실제 프로젝트에서의 적용 한계가 있었다. 저자들은 이러한 한계를 극복하기 위해 함수 수준의 코드를 네 가지 서로 다른 관점—AST, 제어 흐름 그래프(CFG), 데이터 흐름 그래프(DFG), 그리고 자연 코드 시퀀스(NCS)—으로 변환한 뒤, 동일한 노드 집합을 공유하는 이질적 그래프 구조를 만든다. 각 엣지 타입은 별도의 인접 행렬 Aₚ로 표현되어, 그래프 내 다양한 관계를 명시적으로 보존한다.
노드 초기 특징은 사전 학습된 word2vec을 이용해 토큰을 벡터화하고, 타입 정보를 원-핫 인코딩한 뒤 결합한다. 이렇게 얻은 X∈ℝ^{m×d}와 A∈{0,1}^{k×m×m}를 입력으로 Gated Graph Recurrent Network(GGRN)를 적용한다. GGRN은 T번의 반복을 통해 각 노드가 이웃 노드와 엣지 타입별 메시지를 교환하고, GRU 셀을 통해 상태를 업데이트한다. 메시지는 Aₚ·Wₚ·h^{t‑1} 연산으로 계산되며, 모든 타입의 메시지는 SUM 집계 함수를 통해 합산된다. 최종 단계에서 얻은 H^{(T)}∈ℝ^{m×z}는 각 노드의 풍부한 의미 표현이다.
전통적인 그래프 분류는 H^{(T)}를 단순 평균하거나 전체 합산해 그래프 수준 표현을 만든다. 이는 중요한 서브그래프 패턴을 희석시킬 위험이 있다. 이를 보완하기 위해 Devign은 Conv 모듈을 도입한다. Conv 모듈은 1‑D 컨볼루션 레이어와 풀링 레이어를 여러 층 쌓아, 노드 특징 중 그래프‑레벨 판단에 핵심적인 부분을 선택적으로 강조한다. 컨볼루션 커널은 노드 차원 전체에 걸쳐 학습되므로, 특정 취약점 패턴과 연관된 특징을 강조하고, 풀링 단계에서 가장 중요한 노드 집합을 추출한다. 이렇게 얻은 그래프 표현은 MLP와 시그모이드 함수를 통해 이진 분류(취약/비취약)로 매핑된다.
학습 및 평가를 위해 저자들은 4개의 대규모 오픈소스 C 프로젝트(예: Linux kernel, OpenSSL, libpng, SQLite)에서 실제 개발자들이 라벨링한 함수 데이터를 구축했다. 라벨링 작업은 약 600인·시간이 소요되었으며, 각 함수는 CVE와 매핑돼 신뢰성이 높다. 데이터는 훈련/검증/테스트로 분할했으며, 모델은 교차 엔트로피 손실과 L2 정규화를 사용해 최적화했다.
실험 결과, Devign은 기존 GNN 기반 모델(Gated Graph Neural Network, GraphSAGE, GCN)과 전통적인 정적 분석 도구(Clang Static Analyzer 등) 대비 평균 정확도 10.51%, F1 점수 8.68% 향상을 보였다. 특히 Conv 모듈을 제거한 베이스라인 대비 정확도 4.66%, F1 6.37%의 추가 이득을 얻었다. 최신 CVE 40건에 대한 실험에서는 74.11%의 정확도를 기록, 실제 보안 현장에서 새로운 취약점을 발견할 가능성을 입증했다.
논문의 주요 기여는 다음과 같다. 첫째, 코드의 다중 의미(구문·제어·데이터·순서)를 하나의 이질적 그래프로 통합하는 방법을 제시했다. 둘째, GGRN을 활용해 깊이 있는 그래프 전파와 노드 임베딩 학습을 구현했다. 셋째, Conv 모듈을 통해 그래프‑레벨 분류에 필요한 핵심 노드 패턴을 선택적으로 강조함으로써 기존 풀링 방식의 한계를 극복했다.
한계점으로는 그래프 규모가 커질 경우 메모리·연산 비용이 급증하고, 현재는 네 가지 엣지 타입에 고정돼 있어 새로운 언어나 동시성, 메모리 모델 등 추가적인 흐름을 다루기 위해서는 그래프 설계 확장이 필요하다. 또한 라벨링 비용이 높아 데이터 확보가 어려울 수 있다. 향후 연구에서는 그래프 압축 기법, 동적 엣지 타입 학습, 멀티‑프로젝트 전이 학습, 그리고 다른 프로그래밍 언어에 대한 일반화 등을 탐색할 예정이다.
원본 논문
고화질 논문을 불러오는 중입니다...
댓글 및 학술 토론
Loading comments...
의견 남기기