CodeQL使用流程
前言
好久沒用CodeQL了,看了自己之前寫的文章發現竟然沒有做過相關記錄
然後就不知道怎麼用了hhh
使用流程
0x1 生成資料庫
我們拿到一套源碼,首先需要使用CodeQL生成資料庫
執行命令:
codeql database create <database> --language=<language-identifier>
參數說明:
<database>:創建資料庫的路徑,目錄會在執行命令的時候被創建
--language: 指定資料庫語言,輸入標識符。當和--db-cluster一起使用時,可以指定多個,用','分隔,也可以進行多次指定。
--db-cluster:為多種語言創建資料庫
--command:創建一個或多個編譯語言資料庫的時候使用。python和JavaScript/TypeScript不需要該參數,如果編譯語言不帶該參數,codeql會自動檢測並編譯
--no-run-unnecessary-builds:為多語言創建資料庫,且包括編譯和非編譯語言時,可以利用 --no-run-unnecessary-builds來幫助非編譯語言跳過command選項
更多參數說明
CodeQL支援以下語言
| 語言 | 標識符 |
|---|---|
| C/C++ | cpp |
| C# | csharp |
| GO | go |
| Java | java |
| JavaScript/TypeScript | javascript |
| Python | python |
| Ruby | ruby |
案例:
codeql database create xxx-database --language="java" --command="mvn clean install --file pom.xml" --source-root=文件目錄

成功之後

然後在當前目錄下會生成一個名為「xxx-database」的文件夾
0x2導入codeql規則
這裡使用『starter workspace』,也就是git倉庫
- 下載starter
git clone --recursive //github.com/github/vscode-codeql-starter/
或者
git clone //github.com/github/vscode-codeql-starter/
項目下載完成後,進入項目目錄
git submodule update --init
git submodule update --remote
確保包含需要的子模組
截圖使用的是第一種方法

子模組需要定期更新

- 在VS Code中打開starter workspace


注意:
starter子模組中包括C/C++, C#, Java, JavaScript, Python, Ruby以及GO的規則,在vscode-codeql-starter\ql下
CodeQL暫時無法掃描php程式碼
0x3 導入資料庫
我們生成的資料庫為文件夾,那我們就選擇 "From a folder"

運行規則
點開項目文件,我們可以看見ql下有很多規則

因為示例源碼為java語言,我們選擇java下的規則文件夾
右鍵選擇"CodeQL:RunQueries in Selected Files"
裡面有81個CWE規則

查看結果
點擊左側的一條規則,可以看到對應規則運行的結果在右側




