머신러닝과 신호 처리로 소스 코드 취약점 탐지하기
초록
본 논문은 오픈소스 MARF 프레임워크 기반의 MARFCAT 도구를 소개합니다. 이 도구는 머신러닝과 신호 처리, 자연어 처리 기술을 결합해 소스 코드를 정적 분석하여 보안 및 소프트웨어 공학적 취약점과 약점을 지문 추출, 탐지, 분류합니다. NIST SATE2010 워크샵의 CVE 데이터셋을 지식 베이스로 활용한 개념 검증 도구입니다.
상세 분석
이 논문이 제시하는 MARFCAT의 접근법은 기존 구문 분석 기반 정적 분석 도구와 근본적으로 다릅니다. 핵심 방법론은 소스 코드 파일 자체를 일종의 ‘신호’로 간주한다는 점입니다. 구체적으로, 소스 코드의 문자나 바이트를 n-gram(현재 n=2)으로 나누고, 이를 신호의 샘플 진폭 값으로 변환합니다. 이후 MARF의 신호 처리 파이프라인(예: 푸리에 변환 등)을 통해 스펙트럼 특징을 추출하고, 이를 머신러닝으로 학습시켜 취약점의 ‘지문’ 또는 특징 벡터를 생성합니다.
이 방법의 가장 큰 장점은 속도입니다. 복잡한 파싱이나 의미 분석 없이 파일 전체를 빠르게 스캔할 수 있습니다. CVE/CWE 데이터베이스에서 알려진 취약한 코드 샘플을 학습한 후, 새로운 코드의 신호 패턴이 학습된 패턴과 얼마나 유사한지 거리 측정을 통해 판단합니다. 이는 악성코드 시그니처 탐지나 네트워크 침입 탐지 시스템(IDS)의 원리와 유사합니다.
그러나 명확한 단점도 존재합니다. 첫째, 신호 처리 과정에서 소스 코드의 행 번호 정보가 필터링되어 손실됩니다. 논문은 이를 보완하기 위해 파일의 총 라인 수, 바이트 크기, 단어 수 등을 변수로 한 수학적 함수를 통해 행 번호를 추정하는 방법론(예: 3D/4D 확률 행렬 학습)을 제안하지만, 이는 근사치에 불과합니다. 둘째, 파일 전체를 하나의 신호로 보기 때문에 정밀도가 낮습니다. 특정 함수나 코드 블록 내의 미세한 취약점을 정확히 찾아내기 어려울 수 있습니다. 이는 탐지율은 높을 수 있지만 오탐지율도 상승할 수 있음을 의미합니다.
결과적으로 이 연구는 파싱에 의존하지 않는 새로운 패러다임의 정적 분석 가능성을 탐구한 개념 검증(Proof-of-Concept) 단계의 연구입니다. 실용화를 위해서는 행 번호 정확도 향상, 더 정교한 특징 추출 알고리즘, 그리고 코드 세그먼트(함수 단위) 분석 등 추가 발전이 필요합니다.
댓글 및 학술 토론
Loading comments...
의견 남기기