정적 분석의 진화: 패턴 기반에서 데이터 흐름 분석으로
정적 분석기는 sa-tests-db 코퍼스를 활용하여 C, C#, Go, Java, JavaScript, Python 등 6개 언어에 대해 GOST R 71207-2024 기준을 충족합니다. 이는 패턴 기반 검색에서 데이터 흐름 분석으로의 전환을 통해 이루어지며, 이는 프로시저 간 호출, 제어 흐름, 구조체 내 필드 민감도를 고려합니다. 이 접근 방식은 다양한 오류 유형에서 오탐과 미탐을 최소화합니다.
패턴 기반 검색의 한계
패턴 기반 분석은 몇 줄의 컨텍스트 내에서 sprintf, system, SPI_execute와 같은 위험한 호출을 찾습니다. 빠른 초기 스캔에는 효과적이지만 다음과 같은 한계가 있습니다:
- 데이터의 정의 지점과 사용 지점 간의 흐름을 고려하지 않습니다.
- 실제 연결 없이 의심스러운 코드가 우연히 근접해 있어 오탐이 발생합니다.
- 함수나 파일을 통과하는 긴 체인을 놓칩니다.
외부 sa-tests-db 코퍼스에서는 이러한 한계가 빠르게 드러나, 데이터 흐름 분석으로의 전환이 필요합니다.
데이터 흐름 분석
데이터 흐름으로의 전환은 다음과 같은 질문에 답합니다: getenv, recv, fgets와 같은 소스에서 나온 데이터가 위험한 싱크에 도달할 수 있을까요? 이는 값의 정의와 사용 사이의 연결 그래프를 구축합니다.
장점:
- 실제 경로를 검증하여 오탐을 줄입니다.
- 함수 간 경로를 발견합니다.
구현에서는 분석기가 관련 없는 값을 제외하며 오염 전파를 추적합니다.
프로시저 간 분석
함수 내 데이터 흐름만으로는 호출 체인을 통과하는 실제 취약점을 파악하기에 부족합니다. 프로시저 간 계층은 인수와 매개변수를 연결합니다:
- 반환 값 추적.
- 호출에서의 인수 분석.
- 파일 간 경로를 위한 호출 그래프 구축.
이 없이는 패턴이 로컬 블록만 보게 되어 시스템 컨텍스트를 잃습니다.
제어 흐름 고려
데이터 경로가 존재한다고 해서 취약점이 보장되지는 않습니다. 경로는 다음과 같은 요소에 의해 차단될 수 있습니다:
- 검증.
- 오류 처리.
- 권한 확인.
- 논리적으로 도달 불가능한 분기.
제어 흐름 분석을 통합하면 경로를 분류합니다:
- 무조건적(높은 우선순위).
- 조건적(수동 검토 필요).
이를 통해 노이즈를 걸러내어 보고서 정확도를 향상시킵니다.
구조체 내 필드 민감도
구조체에서는 한 필드의 오염이 전체 구조체로 확산되어서는 안 됩니다. 필드를 구분하면 오탐을 줄입니다:
- 각 필드에 대한 별도의
오염추적. - 싱크에 도달할 때 안전한 필드 제외.
이러한 세부 사항은 복잡한 데이터를 가진 프로덕션 코드에 중요합니다.
하이브리드 분석기 아키텍처
최적의 접근 방식은 단계를 결합합니다:
- 후보를 위한 패턴 기반 사전 스캔.
2- 안전한 경우를 간단히 필터링.
- 나머지에 대한 전체 데이터 흐름 분석.
- 확인된 경로 기반 우선순위 지정.
- 확인되지 않은 항목의 순위 하향 조정.
이로써 속도와 정확도의 균형을 맞춥니다.
개발에서 sa-tests-db의 역할
sa-tests-db 세트는 GOST R 71207-2024에 해당하는 오류 유형에 대한 외부 벤치마크 역할을 합니다. 변경 사항 동안 회귀를 감지합니다:
- 지표: 언어별 오탐, 미탐.
- 평균이 아닌, 범주별 세부 분류.
2026년 3월 23일 실행에서 C, C#, Go, Java, JS, Python에 대한 적격성을 확인했습니다.
핵심 요점
- 패턴은 빠른 필터링에만 적합하며, 정확성을 위해서는 데이터 흐름이 필수적입니다.
- 프로시저 간 + 제어 흐름 분석으로 실제 경로의 80%를 찾습니다.
- 필드 민감도로 구조체에서 노이즈를 30–50% 줄입니다.
- sa-tests-db는 일회성 데모가 아닌 회귀 테스트입니다.
- GOST는 일반 수치가 아닌 오류 유형별 지표를 요구합니다.
— Editorial Team
아직 댓글이 없습니다.