다국어 취약점 탐지를 위한 대형 언어 모델과 사전학습 모델의 비교 연구
초록
본 논문은 7개 프로그래밍 언어와 30,000여 개의 실제 취약점 패치를 포함한 REEF 데이터셋을 활용해, 함수‑레벨과 라인‑레벨 두 가지 세분화된 관점에서 최신 사전학습 언어 모델(PLM)과 대형 언어 모델(LLM)의 취약점 탐지 성능을 종합적으로 평가한다. 실험 결과, 인스트럭션 튜닝과 few‑shot 프롬프트를 적용한 GPT‑4o가 모든 비교 모델 중 최고 정확도(함수‑레벨 0.7196)와 최고 F1 점수(라인‑레벨 0.6641)를 기록했으며, 특히 고위험 CWE와 높은 CVSS 점수의 취약점을 탐지하는 데 강점을 보였다. 모델 규모와 추론 능력은 성능에 큰 영향을 미치지 않는 것으로 나타났다.
상세 분석
이 연구는 기존 연구가 C/C++와 같은 단일 언어에 국한된 점을 보완하고, 다국어·다중 granularity 상황에서 PLM과 LLM의 실제 적용 가능성을 검증한다는 점에서 의의가 크다. 데이터 전처리 단계에서는 패치 파일에서 함수 정의를 추출하고, 512 토큰 이하로 제한함으로써 모델 입력 길이 제약을 고려하였다. 함수‑레벨 데이터는 20,165개, 라인‑레벨 라벨은 DIFFLIB을 이용해 변형된 코드 라인만을 정확히 매핑함으로써 높은 라벨 신뢰도를 확보했다.
모델 구성은 CodeT5‑P와 같은 최신 PLM을 포함해, OpenAI의 GPT‑3.5‑Turbo, GPT‑4, GPT‑4o 등 다양한 LLM을 zero‑shot, retrieval‑augmented few‑shot, 인스트럭션 튜닝 방식으로 실험하였다. 특히 GPT‑4o는 instruction‑tuning 후 5‑shot 프롬프트를 적용했으며, 이는 모델이 코드 컨텍스트와 취약점 정의를 보다 명확히 이해하도록 돕는다.
성능 평가에서는 함수‑레벨 정확도와 라인‑레벨 F1 점수를 주요 지표로 삼았으며, 언어별 성능 차이도 상세히 분석했다. Go 언어에서 0.8082의 최고 정확도를 보인 반면, Python에서는 0.6626으로 가장 낮았다. 라인‑레벨에서는 JavaScript가 0.7815의 최고 F1을 기록했으며, C#은 0.4348로 저조했다. 이러한 차이는 각 언어의 특성(메모리 관리 vs. 비즈니스 로직)과 데이터 분포 차이에 기인한다는 해석이 가능하다.
또한, 상위 25개 위험 CWE‑ID에 대한 정확도와 CVSS 기반 고위험(critical, high) 취약점 탐지율을 별도로 측정한 결과, LLM이 PLM보다 일관되게 우수한 성능을 보였다. 이는 LLM이 복잡한 논리 추론과 코드 의미 파악에 강점을 갖는다는 점을 시사한다.
모델 규모와 추론 능력에 대한 추가 실험에서는, 파라미터 수가 큰 모델이 반드시 더 좋은 결과를 내지는 않으며, 체계적인 프롬프트 설계와 튜닝이 성능 향상의 핵심 요인임을 확인했다. 추론형(LM‑based reasoning) 모델도 별다른 성능 향상을 보이지 않아, 현재 취약점 탐지 과제에서는 순수 생성형 LLM이 충분히 효과적임을 보여준다.
마지막으로, 연구자는 LLM 기반 시스템의 배포 비용(추론 시간, GPU 메모리)과 PLM 대비 비용 효율성을 논의했으며, 오픈소스 코드와 재현 패키지를 공개함으로써 향후 연구의 투명성과 확장성을 확보했다. 전체적으로, 이 논문은 다국어·다중 granularity 환경에서 LLM이 PLM을 능가하는 근거를 실험적으로 제시하고, 실무 적용을 위한 구체적인 가이드라인을 제공한다는 점에서 학술 및 산업계 모두에 중요한 참고 자료가 될 것이다.
댓글 및 학술 토론
Loading comments...
의견 남기기