• 您的位置:首頁 >聚焦 >

    漏洞發現:代碼分析引擎 CodeQL

    2022-04-05 05:47:28    來源:程序員客棧

    codeql 是一門類似 SQL 的查詢語言,通過對源碼(C/C++、C#、golang、java、JavaScript、typescript、python)進行完整編譯,并在此過程中把源碼文件的所有相關信息(調用關系、語法語義、語法樹)存在數據庫中,然后編寫代碼查詢該數據庫來發現安全漏洞(硬編碼 / XSS 等)。

    CodeQL 本身包含兩部分解析引擎 +SDK

    解析引擎用來解析我們編寫的規則,雖然不開源,但是可以直接在官網下載二進制文件直接使用

    SDK完全開源,里面包含大部分現成的漏洞規則,也可以利用其編寫自定義規則

    1. 安裝 CodeQL CLI

    CodeQL CLI 是一個可執行的命令行工具,可以使用 CodeQL CLI運行 CodeQL 分析、創造 CodeQL 數據庫、開發和測試自定義 CodeQL 查詢。

    https://github.com/github/codeql-cli-binaries/releases

    下載時,根據具體操作系統下載不同版本的CodeQL CLI。下載下來是一個 zip 壓縮包,這里解壓到如下目錄

    C:\jenkins\codeql-win64

    CodeQL CLI 的安裝路徑到添加到 PATH 環境變量中,方便調用 codeql 命令。

    PATH=%PATH%;C:\jenkins\codeql-win64

    驗證安裝成功

    C:\Users\2230>codeql versionCodeQL 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. 下載標準的掃描規則 CodeQL libraries and queries

    以下倉庫包含了標準的 CodeQL 庫和查詢語句

    https://github.com/github/codeql

    下載后是一個 zip 壓縮包,解壓到如下目錄

    C:\jenkins\codeql-main

    3. 安裝 VSCode CodeQL 插件

    VSCode 的安裝也是非常簡單的,直接下載下來也是一個 zip 壓縮包;直接解壓即可。下面在 VSCode 上安裝 CodeQL 的插件。

    安裝成功后

    配置安裝的codeql 引擎路徑

    設置 CodeQL CLI 可執行文件 codeql.exe 的安裝路徑

    4. 進行項目漏洞掃描

    下載項目源碼

    比如現在要對xxl-job這個項目進行漏洞掃描

    git clone https://gitee.com/xuxueli0323/xxl-job

    創建數據庫

    進入目標代碼目錄,這里進入

    D:\xxl-job

    創建源碼數據庫

    codeql database create xxljob --language=java --command="mvn clean install"

    --language要根據具體項目的編譯語言指定;另外--command參數如果不指定,會使用默認的編譯命令和參數。language 對應關系如下

    LanguageIdentity
    C/C++cpp
    C#csharp
    Gogo
    Javajava
    javascript/Typescriptjavascript
    Pythonpython

    在 VSCode 打開掃描規則 CodeQL libraries and queries

    在 VSCode 添加數據庫

    添加之后

    執行規則掃描

    選擇具體語言的規則進行掃描,例如:java語言的規則。ql后綴的文件是規則掃描文件

    C:\jenkins\codeql-main\java\ql\src\Security\CWE

    執行掃描

    可以一次選擇一條或者多條規則就行掃描;但是一次性不能超過 20 條規則。點擊CodeQL:Run Queries in Selected Files后,彈出一個對話框,選擇Yes;即可執行掃描操作。

    5. 附

    使用 VSCode 圖形化工具發現還不如直接使用命令快捷、方便

    創建數據庫

    codeql database create databaseName --source-root=D:/xxljob --language=java

    更新數據庫

    codeql database upgrade databaseName

    執行掃描規則

    codeql database analyze databasePath codeql-repo/java --format=csv --output=result.csv

    codeql-repo/java :java 掃描規則

    --format:結果輸出格式

    --output:結果文件輸出路徑

    分享&在看

    關鍵詞: 結果文件 二進制文件 進入目標

    相關閱讀

    BB电子