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倉庫

  1. 下載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
    確保包含需要的子模組
    截圖使用的是第一種方法

子模組需要定期更新

  1. 在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規則

查看結果

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