코드큐엘(CodeQL)로 보안 취약점 분석, 이제 더 쉽고 강력하게!
깃허브 코드 스캐닝(GitHub Code Scanning)의 정적 분석 엔진인 코드큐엘(CodeQL)이 모델 기반 데이터 확장(Models-as-Data)을 지원
C/C++, C#, Go, Java/Kotlin, JavaScript/TypeScript, Python, Ruby, Rust 등 다양한 언어에서 커스텀 새니타이저(Sanitizer) 및 밸리데이터(Validator) 정의 가능
YAML 데이터 확장 파일을 통해 새니타이저(Sanitizer) 및 밸리데이터(Validator)를 선언적(Declarative)으로 정의하여 분석 범위 확장
코드큐엘(CodeQL) 모델 팩(Model Pack)을 활용하여 자체적인 보안 검증 기능(Security Validation Function)을 손쉽게 추가할 수 있음
모델 기반 데이터 확장(Models-as-Data)의 작동 원리
코드큐엘(CodeQL)은 정적 분석 엔진으로, 코드 내 잠재적 보안 취약점을 탐지한다. 이번 업데이트를 통해 모델 기반 데이터 확장(Models-as-Data)을 지원하며, 이는 개발자가 YAML 형식의 데이터 파일로 새니타이저(Sanitizer) 및 밸리데이터(Validator)를 정의할 수 있게 해준다.
barrierModel: 특정 쿼리 종류에 대해 모델링된 요소에서 데이터 흐름(Data Flow)을 차단
barrierGuardModel: 조건부 검사가 예상 값을 반환할 때 데이터 흐름을 차단
이러한 방식으로 코드큐엘(CodeQL)은 데이터 흐름 분석(Data Flow Analysis)을 커스터마이징(Customizing)하여, 개발자가 정의한 보안 규칙을 적용한다.
기존 방식 대비 모델 기반 데이터 확장(Models-as-Data)의 장점
기존에는 코드큐엘(CodeQL)의 새니타이저(Sanitizer) 및 밸리데이터(Validator)를 정의하려면 커스텀 코드(Custom Code)를 작성해야 했다. 이는 분석 규칙 추가의 진입 장벽으로 작용했다.
선언적 정의: YAML 파일 기반으로 변경하여 코드 작성 없이 설정만으로 기능 확장 가능
유지보수 용이성: 코드 대신 데이터 기반으로 관리하므로, 유지보수 비용(Maintenance Cost) 절감
분석 범위 확장: 프로젝트의 특정 함수나 메서드에 대한 보안 검증 규칙(Security Validation Rule)을 손쉽게 추가하여 분석 범위를 넓힐 수 있다.
코드큐엘(CodeQL) 모델 팩(Model Pack)을 활용한 생태계 확장
코드큐엘(CodeQL)은 모델 팩(Model Pack)을 통해 분석 규칙을 공유하고 재사용할 수 있는 생태계를 구축했다. 이번 업데이트는 모델 팩(Model Pack)의 활용성을 더욱 높인다.
코드 재사용성: 공통적인 보안 취약점(Security Vulnerability)에 대한 모델을 공유하여 개발 생산성 향상
커뮤니티 기여: 오픈 소스(Open Source) 모델 팩(Model Pack)을 통해 다양한 보안 규칙(Security Rule)을 지속적으로 업데이트
GitHub Code Scanning 통합: 깃허브 코드 스캐닝(GitHub Code Scanning)과의 연동을 통해 자동화된 보안 검사(Automated Security Check) 환경 구축
결과적으로 코드큐엘(CodeQL)은 개발자 중심의 보안 분석 환경(Security Analysis Environment)을 제공한다.
모델 기반 데이터 확장(Models-as-Data) 도입 시 고려사항
모델 기반 데이터 확장(Models-as-Data)은 코드큐엘(CodeQL)의 유연성을 높이지만, 몇 가지 고려 사항이 존재한다.
YAML 파일 관리: YAML 파일의 구문 오류(Syntax Error)는 분석 결과에 치명적인 영향을 미칠 수 있으므로, 꼼꼼한 검토 필요
모델의 정확성: 모델링된 새니타이저(Sanitizer) 및 밸리데이터(Validator)의 정확성에 따라 분석 결과의 신뢰도가 달라짐
성능 영향: 과도한 모델링은 분석 속도 저하를 유발할 수 있으므로, 최적의 모델링 전략(Modeling Strategy) 수립 필요
결론적으로, 모델 기반 데이터 확장(Models-as-Data)은 코드큐엘(CodeQL)의 강력한 기능이지만, 신중한 설계와 관리가 요구된다.