Post

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

  1. Visual Studio Code 설치
  2. CodeQL extension for Visual Studio Code
  3. vscode-codeql-starter github repository clone.
    • Repository Clone 이후 git clone --recursivegit submodule update --init --remote 를 통해 서브모듈을 포함시킨다.
  4. VSCode를 실행하고 “File” > “Open Workspaces” 를 클릭하고, vscode-codeql-starter.code-workspace 를 선택한다.

https://github.com/github/vscode-codeql-starter

CodeQL CLI

CodeQL을 실제로 사용하기 위해서는 CodeQL CLI 바이너리가 필요하다.

Installation

  1. CodeQL CLI Release Page 접속.
  2. 가장 최근의 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"

Untitled

Reference

https://core-research-team.github.io/2021-05-01/Finding-bugs-with-CodeQL-Part-1

https://docs.github.com/ko/code-security/codeql-cli/getting-started-with-the-codeql-cli/preparing-your-code-for-codeql-analysis

https://github.com/spring-projects/spring-framework/wiki/Build-from-Source

This post is licensed under CC BY 4.0 by the author.