CodeQL

#2 CodeQL - CodeQL CLI 구성

geunyeong 2021. 7. 28. 20:47

CodeQL CLI는 CodeQL DB를 만들고 DB에 쿼리하는 Command Line 프로그램이다. VS Code의 확장기능(Extension)으로도 사용가능하다. CodeQL CLI는 아래와 같은 명령 구조를 가진다.

codeql [command] [subcommand]

 

#CodeQL CLI 다운로드

우선 CodeQL CLI 프로그램을 다운로드 해야한다. CodeQL CLI는 github 계정의 codeql-cli-binaries 레포지토리에서 공개하고 있다.

https://github.com/github/codeql-cli-binaries/releases

 

본인 운영체제에 맞는 버전을 다운로드한 후 적당한 위치에 압축을 푼다. 본 서에서는 ~/Documents/CodeQL/codeql-cli에 압축을 풀었다. 그 후 압축을 푼 위치를 환경 변수에 등록하면 CodeQL CLI를 사용할 수 있다. CMD 창을 띄우고 codeql이라고 입력했을 때 아래 그림과 같이 codeql help 메시지가 나타나면 된다.

다음은 CodeQL 분석에 필요한 쿼리와 라이브러리를 다운로드 해야한다. 라이브러리는 github 계정의 codeql 레포지토리를 클론하면 된다.

https://github.com/github/codeql

 

본 서에서는 위 codeql 레포지토리를 codeql-repo라는 이름으로 클론한다. 입력한 명령어는 아래와 같다.

> git clone git@github.com:github/codeql.git codeql-repo

위 CodeQL 라이브러리에는 C/C++, C#, Java, JS, Python 등 CodeQL이 지원하는 언어들의 분석에 필요한 라이브러리와 기본적으로 제공하는 쿼리들이 들어있다. CodeQL CLI의 Built-in search 작업은 모든 Sibling directories에서 데이터베이스를 생성하거나 분석에 사용되는 파일을 자동으로 검색한다고 한다. 그러므로 codeql-cli와 codeql-repo 폴더는 형제 관계에 있어야 한다.

CodeQL/codeql-cli
CodeQL/codeql-repo

Go 언어에 대한 CodeQL 라이브러리는 레포지토리가 별도로 존재한다. Go 언어에 대한 데이터베이스를 만들고자 한다면 아래 레포지토리를 클론하면 된다. 앞서 codeql-repo와 마찬가지로 codeql-cli와 형제 관계에 놓이도록 한다.

https://github.com/github/codeql-go/

 

#CodeQL CLI 설정 확인

CMD 창에서 codeql resolve languages를 입력하면 CodeQL 데이터베이스를 만들 수 있는 언어 종류를 나열한다.

> codeql resolve languages

codeql resolve qlpacks를 입력하면 CodeQL 레포지토리에 포함된 QL pack의 이름들이 표시된다. 이 때 앞서 클로닝한 codeql-repo 폴더를 잘 찾아가면 된다.

 

 

 

 

ref. https://codeql.github.com/docs/codeql-cli/