CodeQL簡介
CodeQL
項目地址:https://github.com/github/codeql
CodeQL
官網:https://codeql.github.com/
截止到目前在github上有4.1k個star
該項目的歷史為:Semmle公司最早獨創性的開創了一種QL語言,Semmle QL,並且運行在自家LGTM平台上。
LGTM平台上存放的就是一些開源項目,用戶可以選擇分析的語言,編寫ql語句進行程序安全性查詢。
2019年,GitHub為了解決其托管的海量項目的安全性問題,收購了Semmle公司,並宣布開源CodeQL的部分規則,這樣全世界的安全工程師就可以貢獻高效的QL審計規則給github,幫助它解決托管項目的安全問題,而對於安全人員也多了一個非商業的開源代碼自動化審計工具。
簡單來說,CodeQL就是一種代碼分析平台。借助這個平台,安全研究人員可以實現變種分析的自動化。這里所謂的變種分析,就是以已知的安全漏洞作為參照物,在我們的目標代碼中尋找類似的安全問題的過程。CodeQL支持對C++,C#,Java,JavaScript,Python,go等多種語言進行分析,可用於分析代碼,查找代碼中控制流等信息。
CodeQL的核心引擎是不開源的,這個核心引擎的作用是將需要審計的代碼轉換成CodeQL能識別的中間層數據庫,然后我們只需要編寫QL查詢語句來獲取我們想要的數據,偷一張freebuf上的圖
圖中micro-service-seclab
是需要審計的項目,我們需要編寫的就是其中的QL查詢語句,要是不會寫查詢語句和規則怎么辦?CodeQL開源了所有的規則和規則庫部分,我們能夠進行學習參考,並編寫符合自己業務邏輯的QL規則,然后使用CodeQL引擎去跑我們的規則,從而輸出變種漏洞。
CodeQL環境搭建
在windows11環境下安裝CodeQL
CodeQL本身包含兩部分:解析引擎+SDK
解析引擎用來解析我們編寫的規則,雖然不開源,但是我們可以直接在官網下載二進制文件直接使用
SDK完全開源,里面包含大部分現成的漏洞規則,我們也可以利用其編寫自定義規則。
引擎安裝
下載 https://github.com/github/codeql-cli-binaries/releases/latest/download/codeql.zip
解析引擎支持主流的操作系統:Windows,Mac,Linux
下載解壓后將路徑添加到環境變量中,方便測試
SDK安裝
訪問之后下載壓縮包https://github.com/github/codeql
更改文件名為ql
目前的目錄結構為:
VScode插件安裝
VScode安裝codeql
插件
修改插件的配置,添加codeql
可執行文件的路徑
到這里codeql
的開發環境就配置完成了
使用
想要好好利用codeql
這個工具,ql
的相關語法也是我們需要學習的,不過ql
語法的知識我准備放到下一篇博客中進行介紹,這里先測試一下安裝好的codeql
環境。
以python
為例,建立分析數據庫,需要我們到等待審計源代碼的根目錄,執行
codeql database create codeqltest --language=python
為什么要建立數據庫。因為codeql
的處理對象並不是源代碼本身,而是中間生成的AST抽象語法樹數據庫,后續我們的查詢操作都是在這個數據庫中進行
--language="python"
指的是我們程序的語言
如果需要審計的源代碼不在當前目錄,可以通過 --source-root=
命令進行指定
還有其他的一些命令,這里就不再贅述。
隨便找一個flask
的項目進行測試
執行成功后會在當前目錄下生成一個codeqltest
的文件夾
用vscode
打開之前下載的ql
庫文件,在ql插件中添加剛才的數據庫文件,並設置為當前數據庫。
為了方便引入python
庫,在/ql/python/ql/src
下創建一個test.ql
來編寫我們的ql
查詢語句
編寫一段hello world
正確輸出則代表配置完成並正確
當然如果你覺得電腦上配置環境的過程太復雜了,我們也可以直接使用LGTM
,簡單把它看成是CodeQL平台的雲版本:https://lgtm.com/
在上面嘗試輸出hello world
一樣正確輸出
從而使用codeql
進行代碼審計
參考鏈接
END
建了一個微信的安全交流群,歡迎添加我微信備注進群
,一起來聊天吹水哇,以及一個會發布安全相關內容的公眾號,歡迎關注 😃

