■개요
CodeQL은 GitHub 보안기능 중 하나로 개발자가 보안 검사를 자동화하고 취약점 진단을 수행하는데 사용되는 분석엔진이다.
CodeQL은 소스코드 컴파일을 모니터링하여 소스코드 내 데이터 흐름이나 변수등을 자체 DB에 저장하고, 전용 쿼리문을 통해 DB에서 원하는 결과를 도출 할 수 있다.
■관련 링크
https://codeql.github.com/docs/codeql-overview/
https://codeql.github.com/docs/codeql-language-guides/codeql-for-cpp/
https://dev.to/aws-builders/find-source-code-vulnerabilities-with-codeql-before-you-commit-2hof
https://github.com/github/codeql-cli-binaries/releases
■라이선스
1. 학문적 연구 또는 개인 사용 가능
2. GitHub.com에 등재된 오픈 소스 가능
3. GitHub Advanced Security 라이선스를 구매한 유료 고객 사용 가능
그 외 사용 금지.
■지원 언어
c++, c#, csv, go, html, java, javascript, properties, python, ruby, swift, xml, yaml
■설치
1. CodeQL CLI용 바이너리 다운로드 (https://github.com/github/codeql-cli-binaries/releases)
2. 설치 (codeql 실행파일 경로를 PATH 환경 변수에 추가)
■테스트
1. 준비물
webgoat 소스코드, CodeQL, ant, java 1.8
2. webgoat 소스코드 컴파일 준비
# build.xml javac 항목에 encoding="ISO-8859-1" 추가
<javac srcdir="${src.home}"
destdir="${build.home}/WEB-INF/classes"
debug="${compile.debug}"
deprecation="${compile.deprecation}"
optimize="${compile.optimize}"
encoding="ISO-8859-1">
3. 지원 언어 확인
codeql resolve languages
4. Java 언어 쿼리문 다운로드 및 설치
codeql pack download codeql/java-queries
5. 컴파일을 하며 데이터베이스 생성
※이 과정은 Fortify SCA가 MBS를 생성하는 과정으로 이해.
# DB 디렉토리 생성
rmdir /s /q d:\0_tmp\codeql-dbs
mkdir d:\0_tmp\codeql-dbs\webgoat
# 소스코드 디렉토리로 이동
cd /d d:\0_tmp\webgoat1
# ant clean 후 컴파일 실행
ant clean
codeql database create d:\0_tmp\codeql-dbs\webgoat --overwrite --language=java --command="ant -buildfile build.xml"
...
Successfully created database at D:\0_tmp\codeql-dbs\webgoat.
메세지가 나오면 성공.
6. 쿼리를 실행하여 결과 출력
※이 과정은 Fortify SCA가 FPR을 생성하는 과정으로 이해.
지원하는 결과 포맷: csv, sarif-latest, sarifv2.1.0, dgml, dot
codeql database analyze d:\0_tmp\codeql-dbs\webgoat --format="csv" --output=d:\0_tmp\codeql-output\scan.csv
...쿼리문인 qlx 파일들을 로드 후 실행하는 과정...