CodeQL 데이터베이스 만들기 (.feat SpringFramework)
Environment
- OS : Ubuntu 22.04 LTS
- Spring Framework Version : Spring Framework 5.3.31
- JDK Version : jdk1.8.0_192
- gradle Version : gradle 7.5.1
Get Spring Framework Source Code
git clone
을 사용해서 코드를 가져오게 되면 항상 최신 버전 소스코드를 가져오게 되는데, 특정 버전으로 릴리즈된 소스코드를 가져오고 싶을 때는 다음 -b
옵션을 사용하여 다음과 같이 버전을 명시해 주면 된다.
1
git clone -b 5.3.31 https://github.com/spring-projects/spring-framework.git
CodeQL Plugin (VSCode)
Visual Studio Code 용 CodeQL WorkSpace Plugin 이다. Visual Studio Code에서 쿼리를 작성하고 실행하는 것을 도와준다.
Installation
- Visual Studio Code 설치
- CodeQL extension for Visual Studio Code
- vscode-codeql-starter github repository clone.
- Repository Clone 이후
git clone --recursive
나git submodule update --init --remote
를 통해 서브모듈을 포함시킨다.
- Repository Clone 이후
- VSCode를 실행하고 “File” > “Open Workspaces” 를 클릭하고,
vscode-codeql-starter.code-workspace
를 선택한다.
https://github.com/github/vscode-codeql-starter
CodeQL CLI
CodeQL을 실제로 사용하기 위해서는 CodeQL CLI 바이너리가 필요하다.
Installation
- CodeQL CLI Release Page 접속.
- 가장 최근의 CodeQL Binary 파일 다운로드.
- 현재 시스템에 맞는 zip 파일을 다운로드 받는다.
- ex) Linux 환경 일 때 :
codeql-linux64.zip
https://github.com/github/codeql-cli-binaries
JDK 8 Install
CodeQL을 이용해서 분석하기 위해서는 Spring Framework의 소스코드를 빌드해야 한다. 이 때 JDK 버전 issue로 인해 JDK 8을 사용해야 되는데, JDK 8에서도 jdk1.8.0_331
이전 버전의 JDK를 사용해야 오류 없이 빌드가 가능하다.
그 이유는 Spring Framework 내에서 JMC 모듈을 사용하는데 해당 모듈이 jdk1.8.0_331
부터는 포함되지 않고 분리가 되어 별도로 다운로드 받아주어야 하기 때문이다.
This version of the JDK no longer includes a copy of Java Mission Control (JMC). JMC is now available as a separate download. Please visit https://www.oracle.com/javase/jmc for more information.
Build
아래의 명령어를 사용하면 코드 데이터에 대한 데이터베이스가 만들어 진다.
1
codeql database create spring-db --language=java-kotlin --command='gradle --no-daemon clean test'
CodeQL 실행
테스트를 위해서 아래와 같이 간단한 Query 문을 작성하고 실행한다.
1
2
3
import java
select "hello world"
Reference
https://core-research-team.github.io/2021-05-01/Finding-bugs-with-CodeQL-Part-1
https://github.com/spring-projects/spring-framework/wiki/Build-from-Source