본문 바로가기
Hack/Web

CodeQL 설치 및 사용 방법

by Becoming a Hacker 2023. 8. 21.
반응형

CodeQL 설치 방법

※ 아래의 설치 방법은 Linux 및 Windows의 설치 방법이며, Mac은 이 링크를 참고

 

1. CodeQL CLI 설치를 위해 CodeQL Bundle을 다운로드합니다. 해당 Bundle에는 아래의 프로그램이 포함됩니다.

- CodeQL CLI

- CodeQL Queries 및 Libraries 호환 버전

- Bundle에 포함된 모든 Queries의 사전 컴파일 버전

 

2. 다운로드 받은 Bundle을 압축 해제한 뒤, 환경 변수 PATH에 등록해줍니다.

파일 이름에 Platform 정보가 있는 파일은 모든 Platform의 CLI가 포함되어 있습니다.

 

Releases · github/codeql-action

Actions for running CodeQL analysis. Contribute to github/codeql-action development by creating an account on GitHub.

github.com

 

3. 그리고 CodeQL Libirary을 다운로드 합니다.

$ git clone https://github.com/github/codeql.git
 

GitHub - github/codeql: CodeQL: the libraries and queries that power security researchers around the world, as well as code scan

CodeQL: the libraries and queries that power security researchers around the world, as well as code scanning in GitHub Advanced Security - GitHub - github/codeql: CodeQL: the libraries and queries ...

github.com

 

4. 그리고 Visual Studio Code에서 CodeQL 확장 플러그인을 다운로드 합니다.

 

CodeQL - Visual Studio Marketplace

Extension for Visual Studio Code - CodeQL for Visual Studio Code

marketplace.visualstudio.com

 

CodeQL 사용 방법 (왕기초편)

1. CodeQL에서 지원하고 있는 Langauge를 검색합니다.

$ codeql resolve languages
cpp (C:\Users\USER\.bin\codeql\cpp)
csharp (C:\Users\USER\.bin\codeql\csharp)
csv (C:\Users\USER\.bin\codeql\csv)
go (C:\Users\USER\.bin\codeql\go)
html (C:\Users\USER\.bin\codeql\html)
java (C:\Users\USER\.bin\codeql\java)
javascript (C:\Users\USER\.bin\codeql\javascript)
properties (C:\Users\USER\.bin\codeql\properties)
python (C:\Users\USER\.bin\codeql\python)
ruby (C:\Users\USER\.bin\codeql\ruby)
swift (C:\Users\USER\.bin\codeql\swift)
xml (C:\Users\USER\.bin\codeql\xml)
yaml (C:\Users\USER\.bin\codeql\yaml)

 

2. 지원하고 있는 언어를 사용하고 있는 분석 타겟을 다운로드 합니다.

저는 JS로 개발된 취약한 모듈인 Pixi를 다운로드 받았습니다.

$ git clone https://github.com/DevSlop/Pixi.git

 

3. codeql database create 명령어를 통해 Pixi에 대한 Javascript DB를 만들어줍니다.

$ codeql database create DATABASE_PATH --language=javascript --source-root=SOURCE_PATH

 

4. 이후 Visual Studio Code에서 사전에 다운로드 받은 CodeQL Library 폴더를 통째로 열어줍니다.

CodeQL Tab에서 From a folder 버튼을 클릭하여 위에서 생성한 Database 폴더를 선택해줍니다.

(정상적으로 선택이 되었다면, 아래와 같이 Pixi가 표시되어야 함)


5. 다시 탐색기 화면으로 넘어와서 Codeql Library에 있는 Example Query 파일을 선택한 뒤, 실행하게 되면 쿼리가 정상적으로 작동하는 것을 볼 수 있습니다.

ex : codeql\javascript\ql\src\NodeJS\UnusedDependency.ql

ex : codeql\javascript\ql\src\Security\CWE-079\ReflectedXss.ql

// routes
api.get('/api/search', function(req, res){
	//console.log('in search ' + req.query.query);
	if(req.query.query) {
		mongo.connect(dbname, function(err, db){
		db.collection('pictures').find({ $text : { $search: req.query.query } }) .toArray(function(err, search){
			if(err) { return err };

			if(search.length > 0) {
				console.log(search);
				res.status(200).json(search);
				
				}
			else {
				res.status(500).send('No photos found containing ' + req.query.query);
				console.log('no pics matched');
			}
			})
		})
	}
	else {
		res.status(202).json("You need to search something, /search?query=string");
	}
});

 

6. CodeQL Query를 직접 작성하여 원하는 조건에 맞는 로직을 찾을 수도 있습니다.

 

이번 포스팅에서는 딱 기본 설치 및 사용 방법을 알아봤습니다. CodeQL은 분석가의 역량에 따라 결과에 큰 차이가 있기 때문에 앞으로 많은 공부가 필요할 것 같네요....!

 

Reference

 

Setting up the CodeQL CLI - GitHub Docs

To get started with the CodeQL CLI, you need to download and set up the CLI so that it can access the tools and libraries required to create and analyze databases.

docs.github.com

 

#3 CodeQL - 기본 제공 Javascript QL 사용하기

Abstract 본 글은 GeekMasher라는 분이 작성한 CodeQL 소개글에 나온 Javascript CodeQL 스캔 방법을 따라한 게시글이다. Javascript는 Non-Compiled 언어이기 때문에 데이터베이스 구축이 쉽다(아직 C/C++ CodeQL 데이

geun-yeong.tistory.com

 

반응형

댓글