I. 서론
현대의 소프트웨어는 점점 복잡해지고 있으며 이에 따라 보안 취약점에 대한 위협 또한 증가하고 있다. CWE Details에 따르면, 글로벌 CVE 취약점은 지난 2022년 25,084개에서 지난해 43,000개로 늘어났다. 최근 3년간 발견되는 취약점의 수가 60%에 가깝게 증가했다[1]. 이러한 수치는 보안 위협이 더욱 정교하고 빈번하게 나타내고 있음을 알려준다. 실제로 많은 보안 사고는 C 코드 상의 작은 오류에서 시작되며, 대표적인 예로 OpenSSL 라이브러리에서 발견된 Heartbleed 취약점은 단순한 메모리 경계 검증 오류로 인해 암호화된 통신에서 민감한 사용자 정보가 대규모로 유출되는 사고를 일으켰다[2].
기본적으로 취약점 탐지는 정적 분석(Static Analysis)과 동적 분석(Dynamic Analysis)으로 나뉜다. 동적 분석도구는 소스코드를 실행하여 프로그램의 동작 과정을 분석하고 보안 취약점을 찾아내는 방식이다. 이에 반해 정적 분석 도구는 소스 코드를 분석하여 실행 없이 보안 취약점을 찾아내어 동적 분석 도구보다 시간을 절감할 수 있다[3].
이러한 흐름 속에서 순환 신경망 기반의 LSTM(Long Short-Term Memory) 모델은 코드와 같이 순차적인 구조를 가지는 데이터에서 문맥을 파악하는 데 뛰어난 성능을 보여주며 활발하게 활용되고 있다. 하지만 LSTM 단일 구조만으로는 코드 내 복잡한 문법적 특징이나 국소적인 패턴을 완전히 포착하기에는 한계가 존재한다[4][5]. 이에 해당 논문에서는 다양한 신경망 구조와 LSTM을 결합한 하이브리드 모델을 제안하고 이들이 보안 취약점 탐지에 있어 어떠한 성능 차이를 보이는지를 분석하고자 한다.
II. 관련 연구
2.1 C언어 보안 취약점
C언어는 시스템 소프트웨어, 네트워크 프로그램 및 임베디드 환경에서 널리 사용되는 저수준 언어로, 직접적인 메모리 접근과 포인터 연산을 허용한다. 이러한 특성은 성능과 유연성을 제공하는 반면, 메모리 안전성을 보장하지 못하여 다수의 보안 취약점 발생 원인으로 작용한다[6][7][8]. 실제로 보고된 보안사고의 상당수가 C언어로 구현된 코드에서 기인하며, 이는 버퍼 오버플로우(Buffer Overflow), 포맷 문자열(Format String), 정수 오버플로우(Integer Overflow), Use-After-Free 등 메모리 관리 오류로 분류된다[9].
이와 같은 취약점은 C언어의 언어적 설계 특성과 밀접히 연관되어 있다. C언어는 자동 경계 검사를 수행하지 않으며, 메모리의 할당 및 해제를 개발자가 직접 수행해야 한다[10]. 또한, 표준 라이브러리에서 제공하는 strcpy, sprintf 등은 안전하지 않은 함수로 분류되며, 입력 검증을 하지 못할 경우 취약점을 유발한다[11]. 이러한 구조적 특성은 안전한 메모리 접근을 보장하지 못하므로, 취약점 발생 가능성이 존재한다.
취약점 탐지 기법은 정적 분석, 동적 분석, 그리고 딥러닝 기반 접근으로 구분된다. 정적 분석은 코드 실행 없이 구문, 제어 흐름을 점검하므로 탐지 효율이 높으나 오탐률이 높고, 동적 분석은 실제 실행 경로에서의 오류를 검출하지만 커버리지에 한계가 있다[3]. 최근에는 코드 시퀀스의 문맥적 특징과 구조적 의존성을 동시에 학습할 수 있는 딥러닝 기반 접근이 활발히 연구되고 있다[12][13].
C언어 보안 취약점 데이터는 코드 토큰, 호출 관계, 함수 간 의존성, 취약점 설명 등 다양한 요소로 구성된다. 이러한 데이터는 단일 모델로는 모든 특징을 포착하기 어렵다. 이에 따라 최근 연구에서는 시퀀스 기반 학습모델과 구조적 관계 학습모델을 결합하는 하이브리드 구조가 제안되고 있으며, 본 연구 또한 LSTM을 기반으로 CNN, GRU 및 GNN을 결합하여 코드의 구조와 정보를 통합적으로 학습하는 방법을 탐구한다[14].
2.2 LSTM
LSTM은 순환 신경망의 일종으로, 시계열 데이터의 장기 의존성 문제를 완화하도록 설계된 아키텍처이다. LSTM은 셀 상태와 게이트 구조를 통해 정보의 선택적 보존 및 폐기를 수행하므로, 코드 토큰 시퀀스와 같이 문맥적 순서가 중요한 입력에서 안정적으로 문맥 정보를 유지하고 전달할 수 있다. 이러한 특성은 특정 구문의 의미가 주변 코드와의 유기적인 관계에 의해 결정되는 취약점 탐지 문제에서, 소스코드 내 앞뒤 문맥 간의 상관관계를 효과적으로 파악하고 의존성을 추적하는 데 적합하다[4].

Fig. 1. LSTM Structure Chart
본 연구에서는 코드 토큰 임베딩을 입력으로 하는 LSTM 단일 모델을 기본 비교 대상으로 설정하였다. LSTM 모델은 함수 호출 순서, 변수 사용·해제 흐름 등 시퀀스 기반 문맥 패턴을 학습하여 취약점 분류 및 예측에 활용될 수 있다. 선행 연구에서는 LSTM 모델이 전통적 정적 분석 기법 대비 높은 정밀도를 보였으나, 지역적 구문 패턴 및 코드의 구조적 의존성은 충분히 반영하지 못한다는 한계가 보여지고 있다.
2.3 LSTM 기반 하이브리드(CNN, GRU) 모델 설명과 사례
본 연구에서 제안하는 LSTM-GNN 모델을 성능 평가의 기준으로 삼고, 코드 구조 정보 활용에 따른 성능을 객관적으로 검증하기 위해 두 가지 하이브리드 구조를 비교 대상으로 채택하였다. 비교 군은 CNN의 지역적 특징 추출 방식을 결합한 LSTM-CNN과, GRU의 효율적인 시퀀스 학습 방식을 결합한 LSTM-GRU이다. 모든 모델은 동일한 전처리 관점에서 토큰화 및 시퀀스 패딩을 공유하며, 코드에 따라 다음과 같이 구성된다.
LSTM-CNN 구조는 함수 본문의 토큰 시퀀스를 임베딩한 뒤 1차원 Conv1D 계층을 통해 지역적 특성을 추출하고, 그 출력을 Pooling 계층으로 압축한 다음 LSTM 계층으로 전달하여 시퀀스 문맥을 통합하는 방식으로 설계되었다. LSTM-CNN은 임베딩된 토큰 시퀀스에 1D 합성곱을 적용하여 지역적 n-gram 수준의 특징을 추출한 뒤, Pooling으로 축약된 특징을 LSTM 계층으로 전달하여 전역 문맥을 통합한다. 이 구조는 포맷 문자열 취약점 등 짧은 문맥에서 나타나는 국소적 패턴을 탐지하는 데 유리하다[5][15].
특히 MaxPooling1D 계층을 통해 추출된 특징 중 가장 지표가 뚜렷한 정보만을 선별함으로써 코드상의 불필요한 노이즈를 제거하고 연산 효율성을 높인다. 이러한 구조적 특성은 포맷 문자열 취약점과 같이 짧은 문맥 안에서 나타나는 국소적 패턴을 탐지하는 데 있어 매우 유리한 성능을 발휘한다.
반면 LSTM-GRU는 양방향 LSTM과 양방향 GRU를 병렬로 구성하여, LSTM의 장기 의존성과 GRU가 제공하는 계산 효율성을 동시에 활용한다. 본 모델은 두 개의 순환 신경망 경로를 병렬로 배치함으로써, 코드 시퀀스의 순차적 흐름과 연산 효율성을 동시에 확보하여 모델의 안정성을 극대화한다. 두 경로에서 추출된 특징은 Concatenate 연산을 통해 통합되며, 이를 통해 코드의 맥락 정보가 통합되어 단일 모델 대비 정보 손실 없이 문맥 의존성을 학습할 수 있다는 장점이 있다. 두 경로의 표현을 병합한 후 추가적인 레이어를 거쳐 이진 분류를 수행하도록 설계하였고, 이는 데이터 불균형 환경에서도 수렴 안정성과 일반화 성능을 개선하였다[16].

Fig. 2. Structural diagram that combines CNN and LSTM. After processing data in CNN, it is processed in LSTM.
두 하이브리드 모델의 설계에는 공통된 전처리 파이프라인이 적용된다. 학습 데이터는 토큰화되어 시퀀스로 변환되며, 사전 정의된 단어 수(10,000)로 어휘가 제한되고 OOV 토큰을 처리한다. 모든 시퀀스는 최대 길이 200으로 패딩되며, 임베딩은 학습 중 Fine-tuning된다. 학습/검증 분리는 동일한 시드로 재현성을 확보하였고, 평가에는 Accuracy, Precision, Recall, F1-score를 사용한다. 또한 모델별로 적용한 손실 함수 샘플링 비율의 차이가 결과에 미치는 영향을 분석하기 위해 비율별(1:1, 2:1, 3:1, 10:1, 30:1) 추가실험을 수행하였다[17].
마지막으로, LSTM-CNN은 제한된 패턴 인식에서 강점을 보이는 반면 소스코드 전반에 걸쳐 복잡하게 얽힌 데이터나 제어 흐름과 같은 비선형적 논리 관계를 충분히 포착하지 못하고, LSTM-GRU는 계산 효율과 안정성에서 장점을 가지지만 전체적 구조정보를 파악하지 못한다는 점을 고려하여 본 논문은 이후 장에서 GNN을 결합한 LSTM-GNN을 중심 모델로 채택하고 그 우수성을 비교 및 검증한다.

Fig. 3. Structural diagram that combines GRU and LSTM. It processes and combines data in parallel in GRU and LSTM.
III. GNN 기반 모델
3.1 LSTM 기반의 GNN 모델 — 도입 및 설계 개요
최근 논문[12]의 결론을 참고하여 기존의 정적 분석은 높은 코드 커버리지를 가지나 문맥 파악이 어렵고, 동적 분석은 실제 실행 경로를 검증하지만 커버리지가 낮다는 한계가 명확하다는 것을 파악하였다. 그리하여 본 연구에서 제안하는 LSTM-GNN 모델은 이러한 방식의 한계를 극복하기 위해, 정적 분석의 효율성을 유지하면서도 동적 실행 흐름의 특성을 모델링에 반영한 ‘구조 중심적 하이브리드 정적 분석’ 기법을 제시한다.
기존의 LSTM 기반 접근법은 소스 코드를 단순한 텍스트 시퀀스로 처리하여 시계열적 특징을 학습하는 데는 효과적이나, 함수 간 호출이나 AST 노드간 의존성과 같은 코드 고유의 비선형적 구조 관계를 충분히 반영하지 못한다는 한계를 지닌다[18]. 특히 하이브리드 모델에서 CNN은 국소적인 지역적 패턴(Local Patterns)을, GRU는 시퀀스의 흐름을 효율적으로 포착하는 데 유리하지만 이들 역시 평면적인 시퀀스 처리 방식에 의존하므로 코드의 복잡한 트리 구조나 전역적인 문맥 정보를 온전히 학습하기에는 어려움이 있다[19][20].
이러한 한계를 보완하기 위해 본 연구에서는 'CPGate Keeper’ 프레임워크를 제안한다. 제안 모델은 C언어 함수 단위의 소스코드를 대상으로 문법 구조(Abstract Syntax Tree, AST)에 제어 흐름과 데이터 흐름을 결합한 코드 속성 그래프(Code Property Graph, CPG)와 문맥적 시퀀스 정보를 동시에 학습함으로써 취약점 탐지 정확도를 향상시키는 것을 목표로 한다[21].

Fig. 4. Structural diagram that combines GNN and LSTM(CPGate Keeper). Processes GNN and LSTM in parallel.
'CPGate Keeper' 프레임워크는 소스코드의 시퀀스 정보와 비선형적 구조 정보를 동시에 학습하기 위해 병렬형 특징 추출 경로와 적응형 게이트 융합 계층으로 설계되었다. 먼저 함수 단위의 소스코드는 토큰 시퀀스와 실행 흐름이 반영된 CPG 기반 인접 행렬 A로 각각 변환되어 모델의 입력층으로 전달된다. 시퀀스 문맥 학습 경로(LSTM Path)에서는 입력된 토큰들이 임베딩 계층을 거쳐 Bi-LSTM으로 전달되며, 이를 통해 코드의 순차적 의존성이 투영된 문맥 특징 벡터 hLSTM이 추출된다. 이와 동시에 GNN 경로(GNN Path)에서는 동일한 임베딩 벡터와 CPG 인접 행렬 A를 입력받아 노드 간의 구조적 관계를 학습하며, GNN의 단일 계층에서 수행되는 노드 특징 업데이트 연산은 다음과 같다.
H(l+1) = textReLU(AH(1)W(1))
여기서 W(l)은 학습 가능한 가중치 행렬이며, 추출된 노드 특징들은 Global MaxPooling 계층을 통과하며 128차원의 전역 구조 특징 벡터 hGNN으로 변환된다. 추출된 두 특징 벡터 hLSTM과 hGNN은 단순 결합 방식의 정보 손실을 최소화하기 위해 본 연구에서 제안한 적응형 게이트 융합(Adaptive Gated Fusion) 계층을 통해 통합된다. 모델은 특정 취약점 탐지에 있어 문맥과 구조 정보 중 어느 요소가 더 결정적인지 스스로 판단하기 위해 아래의 수식을 통해 게이트 가중치 z를 산출한다.
z = σ(Wz[hLSTM;hGNN] + bz)
hfinal = z⊙hGNN + (1 - z)⊙hLSTM
상기 식에서 σ는 시그모이드 활성화 함수, ⊙은 요소별 곱(Element-wise multiplication)을 의미한다. 이러한 메커니즘은 문맥 정보가 모호한 환경에서도 CPG 기반의 구조 정보를 통해 탐지 성능의 붕괴를 방어하는 핵심 기제로 작용한다. 최종적으로 산출된 융합 벡터 hfinal은 완전 연결 계층(Dense Layer)과 Sigmoid 함수를 거쳐 해당 소스 코드의 취약점 유무를 판별하는 이진 분류를 수행한다.
3.2 GNN 하이브리드 모델 구현
3.2.1 데이터셋과 전처리
본 연구의 실험을 위해 사용된 데이터셋[22]은 보안 취약점 탐지 분야에서 학술적 신뢰성이 검증된 세 가지 대규모 오픈소스 데이터셋인 MegaVul[23], DiverseVul[17], BigVul[24]을 통합하여 구축되었다. 해당 데이터셋들은 MSR(Mining Software Repositories) 및 RAID(Recent Advances in Intrusion Detection) 등 소프트웨어 공학 및 보안 분야의 권위 있는 국제 컨퍼런스에서 발표되어 그 품질이 입증되었다.
데이터는 C언어 함수 단위의 소스코드로 구성되어 있으며, 각 샘플은 함수의 출처인 'Project', 모델의 입력값이 되는 'Func', 보안 취약점 유무를 나타내는 'Target(정상: 0, 취약: 1)' 정보를 포함한다. 각 함수는 평균 400자 내외의 길이를 가지며, 내용적으로는 CWE-119(버퍼 오버플로우), CWE-125(경계 외 읽기), CWE-787(경계 외 쓰기), CWE-20(부적절한 입력 검증), CWE-416(Use-After-Free) 등 실무에서 빈번히 발생하는 주요 결함들을 광범위하게 포함하고 있다.
다양한 비율(1:1, 2:1, 3:1, 10:1, 30:1)로 샘플링한 각 샘플은 함수 정의 텍스트와 취약점 레이블로 구성된다. 탐지 성능을 다각도로 분석하기 위해, 정상 데이터와 취약 데이터의 비율을 단계적으로 샘플링하여 실험을 설계하였다.
LSTM에 사용할 토큰화 과정은 LSTM-CNN / LSTM-GRU에서 사용했던 과정을 동일하게 사용하였다. 구조 정보 추출의 경우, 기존 연구에서 널리 사용되는 추상 구문 트리(AST)는 단순한 문법적 계층 구조만을 표현하므로 포인터 연산이 빈번한 C언어 고유의 취약점 경로를 파악하는 데 한계가 있다. 이러한 단일 구조 정보의 한계를 극복하기 위해, 본 연구에서는 AST 노드를 기반으로 제어 흐름과 데이터 흐름 정보를 결합한 CPG를 전처리 프레임워크로 새롭게 도입하였다.
학습용과 테스트용의 8:2로 분할한 데이터 코드의 파싱된 CPG의 각 구문 및 변수 노드는 최대 노드수 200을 기준으로 $200 \times 200$ 크기의 인접 행렬(Adjacency Matrix)로 변환된다. 단순히 부모-자식 노드만을 1로 연결하는 기존 AST 행렬과 달리, 본 연구의 인접 행렬은 순차적 실행 흐름과 데이터 의존성을 나타내는 간선(Edge)에 추가 가중치(예: 1.5)를 부여하여 확장 구성하였다. 트리의 노드 수가 200을 초과할 경우, 루트(Root) 노드를 시작으로 너비 우선 탐색(BFS) 기반으로 상위 200개의 핵심 노드만을 추출하는 방식으로 정규화한다.
3.2.2 모델 구현
모델은 두 개의 입력 계층을 사용한다. 첫 번째 입력은 토큰 시퀀스로부터 문맥적 특징을 학습하는 LSTM 경로이고, 두 번째 입력은 CPG 인접 행렬을 활용하는 GNN 경로이다.
GNN 경로는 동일한 임베딩을 입력으로 받아 인접 행렬과의 행렬 곱 연산을 통해 주변 노드 특징을 집계한 후, 밀집 계층으로 전달한다. GNN 출력은 GlobalMaxPooling1D 계층을 거쳐 전역 벡터로 변환되어 GNN 경로의 결과값이 산출된다.
해당 결과값은 LSTM 경로의 결과값과 단순 결합되는 대신, 적응형 게이트 융합 계층을 통해 결합된다. 모델은 두 벡터를 기반으로 시그모이드 함수를 통과하는 게이트 가중치를 학습하며, 이 가중치를 GNN의 구조 정보와 LSTM의 문맥 정보에 각각 상호 보완적인 비율로 곱하여 최종적으로 합산(Weighted Sum)한다. 결합된 최종 융합 벡터는 밀집 계층(Dense Layer)과 Sigmoid 함수를 통과하며 최종 분류를 수행하는 ‘CPGate Keeper’ 프레임 워크를 완성시켰다.
Table 1. LSTM-GNN Implementation Details

3.3 비교 및 평가 결과
실험의 객관성을 확보하기 위해, 비교군 모델들의 하이퍼파라미터(임베딩 차원, 은닉 유닛 수 등)는 제안하는 GNN 기반 모델과 유사한 수준의 전체 파라미터 수(Model Capacity)를 갖도록 설계되었다. 이는 특정 모델이 단순히 더 많은 학습 파라미터를 보유함에 따라 발생할 수 있는 성능 편향을 방지하고, 각 신경망 구조가 취약점 특징 추출에 기여하는 순수한 효용성을 측정하기 위함이다.
세 모델의 성능 비교 결과, LSTM-GNN 모델이 전반적인 성능 지표에서 가장 우수한 결과를 나타냈다. 특히 본 연구에서 제안한 게이트 메커니즘은 코드의 시퀀스 정보와 구조적 정보 중 탐지에 더 결정적인 특징을 동적으로 선택함으로써, 단순 하이브리드 모델 대비 높은 식별력을 확보하였다.
Table 2. Complexity of LSTM-CNN, LSTM-GRU, and LSTM-GNN

Table 3. Performance Changes by Ratio of LSTM-CNN Model

LSTM-CNN은 지역적 문맥 인식에 강점을 보였으나, AST 기반 구조 정보를 반영하지 못해 복잡한 구문 패턴에서 오탐이 발생하였다. LSTM-GRU는 학습 속도가 빠르고 안정적인 수렴 특성을 보였으나, 장기 의존성을 완전히 포착하지는못했다. 반면 ‘CPGate Keeper’ 프레임워크는 학습 시간이 다소 증가했음에도 불구하고 불균형 데이터 환경에서 가장 안정적 성능을 유지하였다.
비율별 실험에서는 정상:취약 비율을 1:1부터 30:1까지(1:1, 2:1, 3:1, 10:1, 30:1) 단계적으로 조정하여 모델의 불균형 데이터 대응력을 평가하였다. 실험 결과, 세 모델 모두 정상 데이터의 비율이 높아질수록 전체적인 Accuracy(정확도)는 증가하나, 소수 클래스인 취약점 탐지에 대한 Recall(재현율)은 감소하는 경향을 보였다.
Table 4. Performance Changes by Ratio of LSTM-GRU Model

Table 5. Performance Changes by Ratio of LSTM-GNN Model

실험 결과, 1:1 비율에서 취약 함수(Target 1)에 대한 F1-score가 가장 높았으며, 정상 함수(Target 0)와의 성능 균형도 가장 뛰어난 것으로 나타났다. 예를 들어 ‘CPGate Keeper’ 프레임워크를 기준으로 1:1 구성 시 Target 1의 F1-score는 0.9308로, 동일 모델의 다른 비율들보다 높은 탐지성능을 보였다. 반면, 데이터 불균형이 심화된 10:1 및 30:1 구성에서는 Target 1의 F1-score가 각각 0.6592, 0.2254로 급격히 감소하는 결과를 보인다. 이러한 결과는 다른 LSTM-CNN, LSTM-GRU에도 동일하게 나타난다. 이는 모든 하이브리드 모델들이 대부분의 입력을 미탐으로 처리함으로써 실제 보안 위협을 놓치는 과소탐지 현상을 반영한다.
특히 고불균형 구성(30:1)에서는 전체 정확도가 93%에 육박하는 반면, 정작 탐지해야 할 취약 클래스의 Target 1의 재현율은 21%에 불과하여, 겉보기의 성능과 실질 탐지력 사이의 괴리가 심각한 것으로 나타난다. 이처럼 높은 Accuracy 수치는 데이터 불균형 하에서 신뢰할 수 없는 지표가 될 수 있으며, 보안 분야에서는 오히려 미탐 사례가 치명적인 영향을 미칠 수 있다.
이는 정상 데이터 볼륨의 증가가 모델의 일반화 성능을 향상시킨다는 선행 연구[18] 기조와는 다소 상이한 결과이다. 선행 연구에 따라 초기엔 정상 코드의 비율을 높게 측정하여 모델을 학습시켰지만 모델의 정확도만 높아질 뿐, 실질적인 성능은 감소하게 되었다. 따라서 대규모 데이터를 통한 학습이 성능향상으로 이어진다고 보고하였으나, 실제 실험 과정에서 정상 데이터만을 과도하게 투입할 경우 모델이 불균형한 데이터 분포에 편향되어 실제 치명적인 보안 위협을 놓치게 되는 한계가 확인되었다.
모델 성능 측면에서, ‘CPGate Keeper’ 프레임워크의 경우, CPG를 통한 구조적 불변성(Structural Invariance)의 확보와 적응형 게이트 메커니즘의 유기적인 결합으로 인해 탐지 성능 향상을 이루었다. 코드를 단순 텍스트로 취급하여 단편적인 패턴에만 의존하는 기존 시퀀스 모델들과 달리, 본 모델의 GNN 계층은 소스코드 내에 복잡하게 얽힌 제어 흐름과 데이터 흐름 등 취약점 고유의 비선형적 의존성을 입체적으로 포착한다. 또한, 적응형 게이트 메커니즘은 특정 코드를 분석할 때 LSTM 경로가 추출한 '문맥 정보'와 GNN이 추출한 '구조적 특징' 중 탐지에 더 결정적인 요소가 무엇인지 모델이 스스로 판단하게 한다.
이에 따라 본 연구는 실험을 통해 취약 클래스의 탐지 성능과 전체 성능의 균형을 모두 고려할 때, 데이터셋의 1:1 구성 비율이 가장 적절한 학습 조건임을 확인하였다. 이 구성은 취약코드에 대한 학습기회를 충분히 보장하면서도, 전체 모델의 안정성과 일반화 성능을 함께 확보할 수 있었다. 또한, ‘CPGate Keeper’ 프레임워크의 두 가지 특징에 최적의 가중치를 부여하여 통합함으로써, 단일 특성에만 의존할 때 발생할 수 있는 노이즈와 오탐을 최소화할 수 있다.
IV. 결론
4.1 연구 결론 및 시사점
본 연구는 C언어 기반 소스코드의 보안 취약점 탐지를 위해 다양한 LSTM 하이브리드 모델을 구현하고, 그 중 GNN을 결합한 ‘CPGate Keeper’ 프레임워크를 제안하여 기존 CNN, GRU 기반 하이브리드 모델과의 성능을 비교·분석하였다. 연구의 목표는 코드의 시퀀스 문맥과 구조적 관계를 동시에 학습함으로써 취약점 탐지의 정밀도를 향상시키는 데 있다.
실험 결과, 제안한 ‘CPGate Keeper’ 프레임워크는 LSTM-CNN 및 LSTM-GRU 모델에 비해 전반적인 성능 지표에서 우수한 결과를 보였다. 특히 비율별 실험(1:1, 2:1, 3:1, 10:1, 30:1 조건)에서 정상 함수와 취약 함수를 동일한 비율로 학습시키는 것이 모델의 성능을 높일 수 있음을 알 수 있었다. 본 연구에서 1:1 비율을 최적의 학습 조건으로 채택한 이유는, 데이터 양에 의한 편향없이 CPG의 구조적 특징과 취약점 고유의 패턴을 모델이 동등한 비중으로 학습하게 하기 위함이다. 반면, 데이터 불균형이 심화된 구성(30:1 등)에서 급격히 감소하는 재현율(Recall) 결과는, 무분별한 정상 데이터의 투입이 모델을 비취약(정상) 클래스로 편향시켜 실제 치명적인 보안 위협을 놓치는 과소 탐지 현상을 초래함을 보여준다.
4.2 향후 연구 방향
연구를 진행하던 중 그래프 추출 과정에서 일부 호출 관계가 누락되거나 잘못 연결되는 경우가 발생하거나, 그래프 입력 크기와 LSTM 시퀀스 길이에 따라 학습 비용이 증가하여 대규모 프로젝트 전체를 실시간으로 처리하기에는 한계가 있었다. 또한 데이터셋이 함수 단위로 제한되어 있어 프로젝트 단위의 맥락 정보는 충분히 반영되지 못하는 경우 같은 한계점을 보이기도 하였다.
향후 연구에서는 이러한 한계를 보완하기 위해 동적 분석 로그와 정적 분석 그래프의 결합, 그래프 어텐션(GAT) 또는 트랜스포머 기반 그래프 인코더의 도입, 프로젝트 단위 취약점 추론으로의 확장을 계획하고 있다. 또한 코드 표현 학습 과정에서 자연어 모델(BERT, CodeBERT 등)을 활용하여 문맥적 의미를 보다 세밀하게 반영하는 방안을 고려하고 있다.
이런 방안들의 개선 효과를 확인하기 위해선 현재의 블랙박스 구조의 분석 결과에서 현재보다 모델의 결정 과정을 정확하게 인지할 수 있게 XAI 기능을 추가해야 함을 판단하였다. 하이브리드 딥러닝 모델이 탐지 후 취약하다고 판단한 구체적인 코드 라인을 출력하는 분석 로그를 추가하며 해당 판단에 대한 딥러닝의 근거를 함께 출력하는 방식으로 고안하고 있다. 이 기능으로 딥러닝의 신뢰도를 높이고, 개선 방안의 효과를 시각적이고 직관적이게 파악할 수 있으리라 판단한다.
References
- CVE Details, "Browse Vulnerabilities By Date" https://www.cvedetails.com/browse-by-date.php, 2025.
- Josh fruhlinger, "The Heartbleed bug: How a flaw in OpenSSL caused a security crisis," CSO, 2022.
- Yun-Kwan Kim, Tae-Wan Kim, and Chun-Hyon Chang, "Improvement of Reliability of Static Execution Time Analysis Using Software Monitoring Technique," Journal of the Korea Society of Computer and Information, 15(4), pp. 37-45, 2010. https://doi.org/10.9708/JKSCI.2010.15.4.037
- Sepp Hochreiter and Jürgen Schmidhuber, "Long short-term memory," Neural computation, vol. 9, no. 8, pp. 1735-1780, Nov. 1997. https://doi.org/10.1162/neco.1997.9.8.1735
- Farhad Mortezapour Shiri et al., "A comprehensive overview and comparative analysis on deep learning models: CNN, RNN, LSTM, GRU," arXiv preprint arXiv:2305.17473, May. 2023.
- Yeon-Gyeong Seo, Sanghoon Jeon, "An Error Detection and Automatic Correction Algorithm for Memory-related Vulnerabilities in Clanguage Programming," Journal of convergence security, 24(3), pp. 105-115, 2024. https://doi.org/10.33778/kcsa.2024.24.3.105
- L. Szekeres, M. Payer, T. Wei and D. Song, "SoK: Eternal War in Memory," Proceedings of the 2013 IEEE Symposium on Security and Privacy, pp. 48-62, May 2013.
- Stephen Turner, "Security vulnerabilities of the top ten programming languages: C, Java, C++, Objective-C, C#, PHP, Visual Basic, Python, Perl, and Ruby," Journal of Technology Research, vol. 5, pp. 1-16, 2014.
- Nasif Imtiaz and Laurie Williams, "Memory error detection in security testing," arXiv preprintarXiv:2104.04385, Apr. 2021.
- Gigon Bae et al., "Memory Leak Detection in C," Korean Institute of Information Scientists and Engineer, 34(1C), pp. 510-515, 2007.
- MITRE, "CWE-676: Use of Potentially Dangerous Function", https://cwe.mitre.org/data/definitions/676.html, 2025.
- Soolin Kim and Hyoungshick Kim, "Deep Learning-based Vulnerability Detection: Possibilities and Limitations," REVIEW OF KIISC, 35(5), pp. 47-54, 2025.
- Chen Liang et al., "Survey of source code vulnerability analysis based on deep learning," Computers & Security, vol. 148, pp. 104098, Jan, 2025.
- G. Lin, S. Wen, Q. -L. Han, J. Zhang and Y. Xiang, "Software Vulnerability Detection Using Deep Neural Networks: A Survey," Proceedings of the IEEE, vol. 108, no. 10, pp. 1825-1848, Oct. 2020. https://doi.org/10.1109/PROC.5
- Zhi Zeng, Kun-Hee Han, and Seung-Soo Shin, "CNN-LSTM Based Malicious Code Detection," Advanced Industrial Science, 4(3), pp. 49-51, 2025. https://doi.org/10.23153/AI-SCIENCE.2025.4.3.049
- Mohammad S. Al-Kahtani et al., "Intrusion detection in the Internet of Things using fusion of GRU-LSTM deep learning model," Intelligent Automation & Soft Computing, vol. 37, no. 2, pp. 2279-2290, 2023. https://doi.org/10.32604/iasc.2023.037673
- Yizheng Chen et al., "Diversevul: A new vulnerable source code dataset for deep learning based vulnerability detection," Proceedings of the 26th International Symposium on Research in Attacks, Intrusions and Defenses, Oct. 2023.
- Yaqin Zhou et al., "Devign: Effective Vulnerability Identification by Learning Comprehensive Program Semantics via Graph Neural Networks," Advances in Neural Information Processing Systems, Dec. 2019.
- Yoon Kim, "Convolutional neural networks for sentence classification," arXiv preprint arXiv:1408.5882 , Aug. 2014.
- Kyunghyun Cho et al., "Learning phrase representations using RNN encoder-decoder for statistical machine translation," arXiv preprintarXiv:1406.1078, Jun. 2014.
- Lucija Šikić et al., "Graph neural network for source code defect prediction," IEEE access, vol. 10 pp. 10402-10415, 2022. https://doi.org/10.1109/ACCESS.2022.3144598
- kaggle, "Vulnerable C Functions for Security Prediction" https://www.kaggle.com/datasets/furduisorinoctavian/vulnerable-c-functions-for-security-prediction, 2024.
- C. Ni, L. Shen, X. Yang, Y. Zhu, and S. Wang, "MegaVul: A Comprehensive C/C++ Code Vulnerability Dataset with Rich Representations," Proceedings of the 21st International Conference on Mining Software Repositories, pp. 738-742, Apr. 2024.
- Jiahao Fan, Yi Li, Shaohua Wang, and Tien N. Nguyen, "AC/C++ code vulnerability dataset with code changes and CVE summaries," Proceedings of the 17th International Conference on Mining Software Repositories, pp. 508-512, Jun. 2020.