漏洞發(fā)現(xiàn):代碼分析引擎 CodeQL
codeql 是一門類似 SQL 的查詢語言,通過對源碼(C/C++、C#、golang、java、JavaScript、typescript、python)進(jìn)行完整編譯,并在此過程中把源碼文件的所有相關(guān)信息(調(diào)用關(guān)系、語法語義、語法樹)存在數(shù)據(jù)庫中,然后編寫代碼查詢該數(shù)據(jù)庫來發(fā)現(xiàn)安全漏洞(硬編碼 / XSS 等)。
CodeQL 本身包含兩部分解析引擎 +SDK
解析引擎用來解析我們編寫的規(guī)則,雖然不開源,但是可以直接在官網(wǎng)下載二進(jìn)制文件直接使用
SDK完全開源,里面包含大部分現(xiàn)成的漏洞規(guī)則,也可以利用其編寫自定義規(guī)則
CodeQL CLI 是一個可執(zhí)行的命令行工具,可以使用 CodeQL CLI運行 CodeQL 分析、創(chuàng)造 CodeQL 數(shù)據(jù)庫、開發(fā)和測試自定義 CodeQL 查詢。
https://github.com/github/codeql-cli-binaries/releases
下載時,根據(jù)具體操作系統(tǒng)下載不同版本的CodeQL CLI。下載下來是一個 zip 壓縮包,這里解壓到如下目錄
C:\jenkins\codeql-win64CodeQL CLI 的安裝路徑到添加到 PATH 環(huán)境變量中,方便調(diào)用 codeql 命令。
PATH=%PATH%;C:\jenkins\codeql-win64驗證安裝成功
C:\Users\2230>codeql version
CodeQL command-line toolchain release 2.8.2.
Copyright (C) 2019-2022 GitHub, Inc.
Unpacked in: C:\jenkins\codeql-win64
? Analysis results depend critically on separately distributed query and
? extractor modules. To list modules that are visible to the toolchain,
? use 'codeql resolve qlpacks' and 'codeql resolve languages'.2. 下載標(biāo)準(zhǔn)的掃描規(guī)則 CodeQL libraries and queries以下倉庫包含了標(biāo)準(zhǔn)的 CodeQL 庫和查詢語句
https://github.com/github/codeql下載后是一個 zip 壓縮包,解壓到如下目錄
C:\jenkins\codeql-main3. 安裝 VSCode CodeQL 插件VSCode 的安裝也是非常簡單的,直接下載下來也是一個 zip 壓縮包;直接解壓即可。下面在 VSCode 上安裝 CodeQL 的插件。

安裝成功后

配置安裝的codeql 引擎路徑

設(shè)置 CodeQL CLI 可執(zhí)行文件 codeql.exe 的安裝路徑

下載項目源碼
比如現(xiàn)在要對xxl-job這個項目進(jìn)行漏洞掃描
git clone https://gitee.com/xuxueli0323/xxl-job創(chuàng)建數(shù)據(jù)庫
進(jìn)入目標(biāo)代碼目錄,這里進(jìn)入
D:\xxl-job創(chuàng)建源碼數(shù)據(jù)庫
codeql database create xxljob --language=java --command="mvn clean install"--language要根據(jù)具體項目的編譯語言指定;另外--command參數(shù)如果不指定,會使用默認(rèn)的編譯命令和參數(shù)。language 對應(yīng)關(guān)系如下
| Language | Identity |
|---|---|
| C/C++ | cpp |
| C# | csharp |
| Go | go |
| Java | java |
| javascript/Typescript | javascript |
| Python | python |

在 VSCode 打開掃描規(guī)則 CodeQL libraries and queries

在 VSCode 添加數(shù)據(jù)庫

添加之后

執(zhí)行規(guī)則掃描
選擇具體語言的規(guī)則進(jìn)行掃描,例如:java語言的規(guī)則。ql后綴的文件是規(guī)則掃描文件
C:\jenkins\codeql-main\java\ql\src\Security\CWE
執(zhí)行掃描

可以一次選擇一條或者多條規(guī)則就行掃描;但是一次性不能超過 20 條規(guī)則。點擊CodeQL:Run Queries in Selected Files后,彈出一個對話框,選擇Yes;即可執(zhí)行掃描操作。
使用 VSCode 圖形化工具發(fā)現(xiàn)還不如直接使用命令快捷、方便
創(chuàng)建數(shù)據(jù)庫
codeql database create databaseName --source-root=D:/xxljob --language=java更新數(shù)據(jù)庫
codeql database upgrade databaseName執(zhí)行掃描規(guī)則
codeql database analyze databasePath codeql-repo/java --format=csv --output=result.csvcodeql-repo/java :java 掃描規(guī)則
--format:結(jié)果輸出格式
--output:結(jié)果文件輸出路徑

分享&在看
