CodeQL 설치 방법
※ 아래의 설치 방법은 Linux 및 Windows의 설치 방법이며, Mac은 이 링크를 참고
1. CodeQL CLI 설치를 위해 CodeQL Bundle을 다운로드합니다. 해당 Bundle에는 아래의 프로그램이 포함됩니다.
- CodeQL CLI
- CodeQL Queries 및 Libraries 호환 버전
- Bundle에 포함된 모든 Queries의 사전 컴파일 버전
2. 다운로드 받은 Bundle을 압축 해제한 뒤, 환경 변수 PATH에 등록해줍니다.
파일 이름에 Platform 정보가 있는 파일은 모든 Platform의 CLI가 포함되어 있습니다.
3. 그리고 CodeQL Libirary을 다운로드 합니다.
$ git clone https://github.com/github/codeql.git
4. 그리고 Visual Studio Code에서 CodeQL 확장 플러그인을 다운로드 합니다.
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
'Hack > Web' 카테고리의 다른 글
[go-and-dont-return] Github Security Lab CodeQL CTF (0) | 2023.08.21 |
---|---|
[2020 Hitcon] Discover Vulnerabilities with CodeQL 번역 (0) | 2023.07.25 |
[CVE-2023-0842] xml2js Prototype Pollution (0) | 2023.05.13 |
BitB (Browser in the Browser) 공격 (1) | 2023.04.23 |
[CVE-2023-20860] Spring Framework Improper Access Control (0) | 2023.03.26 |
댓글