[논문 리뷰] A Language-Independent Analysis Platform for Source Code
이 논문은 코드를 통합된 코드 속성 그래프(CPG)로 변환하여 정적 분석을 위한 언어에 종속되지 않는 소스 코드 분석 시스템인 CPG 분석 플랫폼을 제시한다. 퍼지 파싱과 그래프 기반 표현을 활용함으로써, 이질적인 코드베이스 전반에서 정밀한 언어 간 분석이 가능하며, 평가 결과 소형에서 중형 레포지토리의 분석이 수용 가능한 시간 내에 수행됨을 보여준다.
In this paper, we present the CPG analysis platform, which enables the translation of source code into a programming language-independent representation, based on a code property graph. This allows security experts and developers to capture language level semantics for security analyses or identify patterns with respect to code compliance. Through the use of fuzzy parsing, also incomplete or non-compilable code, written in different programming languages, can be analyzed. The platform comprises an analysis library and interfaces to query, interact with or visualize source code graphs. This set of CPG tools allows finding common weaknesses in heterogeneous software environments, independently of the underlying programming language.
연구 동기 및 목표
- 이질적인 소프트웨어 시스템을 위한 보안적이고 언어 간 분석이 가능한 소스 코드 분석을 가능하게 한다.
- 초기 개발 및 감사 과정에서 완전하거나 컴파일 불가능한 코드의 분석을 지원한다.
- CI/CD 파이프라인과 보안 감사에 활용 가능한 재사용성과 확장성이 뛰어난 정적 분석 플랫폼을 제공한다.
- 분석 정밀도를 향상시키기 위해 세밀한 언어 의미론을 모델링한다.
- 다양한 언어 간 데이터 플로우, 컨트롤 플로우, 타입 상태 분석을 지원하는 통합된 그래프 기반 표현을 제공한다.
제안 방법
- Java, C/C++, Go, Python, TypeScript, LLVM-IR 등 여러 언어의 소스 코드를 언어 간 분석이 가능한 코드 속성 그래프(CPG)로 변환한다.
- 부분 입력으로부터 구문적 구조를 복원함으로써, 완전하지 않거나 컴파일 불가능한 코드를 처리하기 위해 퍼지 파싱을 사용한다.
- 구문적 요소를 노드로, 관계(예: 제어 흐름, 데이터 흐름, 호출 관계)를 간선으로 가지는 레이블이 부여된 방향성 다중 그래프로 코드를 표현한다.
- 노드 유형의 의미적 계층 구조(예: Expression, CallExpression, MemberCallExpression)와 간선 색인을 사용하여 순서와 맥락을 유지한다.
- 표현식에서의 부작용(예: a() + b() 또는 삼항 연산자)을 포함한 세밀한 실행 순서를 캡처하기 위해 평가 순서 그래프(EOG)를 구축한다.
- 언어 간 분석이 가능한 그래프 패assing을 적용하여 의미를 풍부하게 하고(예: 호출 해결, 데이터 흐름), 표준화된 API를 통한 쿼리 기반 분석을 가능하게 한다.
실험 결과
연구 질문
- RQ1통합된 언어 간 분석이 가능한 그래프 표현이 다양한 프로그래밍 언어의 구조를 정적 분석에 효과적으로 모델링할 수 있는가?
- RQ2퍼지 파싱을 통해 완전하지 않거나 컴파일 불가능한 소스 코드를 얼마나 정확하게 재구성하고 분석할 수 있는가?
- RQ3플랫폼이 언어에 종속되지 않으면서도 정밀한 언어 인식 분석을 얼마나 잘 지원하는가?
- RQ4실제 코드베이스를 다중 언어로 분석할 때 플랫폼의 성능은 어떠한가?
- RQ5플랫폼이 이질적인 시스템의 CI/CD 파이프라인과 보안 감사에 효과적으로 통합될 수 있는가?
주요 결과
- Java 211,541 SLoC와 C++ 148,036 SLoC의 코드가 각각 1,042초와 687초 내에 분석되었으며, 소형에서 중형 레포지토리에 대한 실현 가능성을 입증했다.
- C++ 코드 분석은 Java보다 SLoC당 빠르게 이루어졌지만, 커버리지 지표상 이는 C++에서 약간 낮은 코드 커버리지 때문일 수 있음을 시사한다.
- 그래프 강화 패assing(예: 제어 흐름, 데이터 흐름)은 Java의 경우 총 시간의 37%, C++의 경우 46%를 차지하여 내부 프로시저 연산이 성능에 지배적임을 나타낸다.
- 커버리지 지표는 처리되지 않은 AST 노드로 인해 상한선이 되며, Java의 경우 최대 99%, C++의 경우 최대 96%로, 일반적인 언어 기능에 우선순위를 두었음을 반영한다.
- 211,541과 148,036 SLoC가 각각 1,042초와 687초 내에 분석되어 CI/CD 및 감사 시나리오에 적합한 성능을 보였다.
- 200개의 레포지토리가 평가되었으며, 그 중 14개(Java 3개, C++ 12개)가 5분 타임아웃을 초과하여, 매우 큰 코드베이스에 대한 확장성 문제를 시사한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.