歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

代碼分析平臺CodeQL學習手記(十二)

來源:本站整理 作者:佚名 時間:2020-01-22 TAG: 我要投稿

在前面的文章中,我們為讀者介紹了如何分析數據流,以及如何進行污點跟蹤和指向分析。在本文中,我們將為讀者詳細介紹如何利用CodeQL平臺的Visual Studio Code插件,即CodeQL for VS Code在本地編寫和運行查詢,并直接在工作區中展示查詢結果,同時,我們還將詳細介紹如何編寫路徑查詢。
概述
CodeQL for VS Code是CodeQL平臺的VS Code插件,通過它,我們可以在VS Code中分析各種語言編寫的代碼,從而挖掘代碼庫中的安全問題。這款插件的功能包括:
· 通過CodeQL查詢從源代碼生成的數據庫。
· 顯示路徑查詢結果中的數據流,該功能對于篩選安全結果來說至關重要。
· 提供了一種運行大型開源CodeQL安全查詢庫的各種查詢的簡便方法。
· 提供了IntelliSense(智能提示)功能,使得CodeQL查詢的編寫和編輯變得更加輕松。
在Visual Studio Code中搭建CodeQL分析環境
接下來,我們將為讀者詳細介紹如何為Visual Studio Code安裝和配置CodeQL插件,具體分三個步驟:
· 安裝插件。
· 可選:配置特定版本的CodeQL命令行接口。
· 設置工作區。
安裝插件
首先,要想安裝CodeQL插件,必須將Visual Studio Code 升級到1.39版本以上,否則的話,是無法安裝的。
安裝合適版本的Visual Studio Code軟件后,就可以通過下列方法來安裝這個插件了:
· 在瀏覽器中訪問Visual Studio Code Marketplace(地址為https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-codeql),然后,單擊相應的Install按鈕即可。
· 在Extensions視圖(可以通過Ctrl+Shift+X或Cmd+Shift+X組合鍵調出該視圖)中搜索CodeQL,然后,單擊相應的Install按鈕即可。
· 下載CodeQL VSIX文件(地址為https://github.com/github/vscode-codeql/releases)。然后,在Extensions視圖中,單擊More actions > Install from VSIX選項,選擇CodeQL VSIX文件即可。
配置CodeQL CLI
實際上,該擴展是通過CodeQL CLI來編譯和運行查詢的。所以,如果讀者此前已經安裝了該CLI并將其添加到相應的路徑中的好,該插件將會使用該版本的CodeQL CLI。對于創建了自己的CodeQL數據庫而不是從LGTM.com下載它們的讀者來說,通常就屬于這種情況。
如果尚未安裝CodeQL CLI,該插件將自動管理對CLI可執行文件的訪問情況。這樣做的好處是,可以確保CLI與CodeQL插件互相兼容。
需要注意的是,我們是無法從終端訪問該插件所管理的CLI的。如果想在該插件之外使用CLI(例如創建數據庫),最好安裝自己的CLI副本。為了避免機器上有兩個 CLI 副本,可以在 codeql.CLI.executablepath 設置中指定相應的 CLI 版本(詳情見下文)。
如果想讓該插件使用特定版本的 CodeQL CLI 可執行文件,請在 VS Code 用戶設置中將 CodeQL.CLI.executablepath 設置為相應的CLI 可執行文件的位置。通常來說,這個可執行文件在Linux/Mac平臺中名為 codeql ,在Windows平臺中名為codeql.cmd 。
配置CodeQL工作區
使用CodeQL時,通常都需要訪問標準CodeQL庫。這樣的話,我們就可以利用各種現成的查詢來分析目標代碼了。為此,我們可以通過兩種方式來訪問它們:
· 最簡單的方法就是使用“starter”工作區。它是作為一個Git存儲庫進行維護的,這使得庫更新變得更加容易。
· 更高級的訪問方法是,將CodeQL庫和查詢代碼添加到現有的工作區中。
需要注意的是,對于CLI用戶來說,實際上還有第三種選擇:如果已經使用CodeQL CLI創建了包含CodeQL庫的CodeQL目錄(例如CodeQL-home),那么可以直接在VS Code中打開該目錄,并訪問CodeQL庫。
使用“starter”工作區
“starter”工作區實際上就是一個Git存儲庫,包含下列內容:
· 用于存放分析C/C++、C#、Java、JavaScript和Python代碼的CodeQL庫和查詢的存儲庫。由于它是作為一個子模塊獨立存在的,因此,即使更新了這個存儲庫,也不會影響我們自定義的查。
· 用于存放分析Go代碼的CodeQL庫和查詢的存儲庫。它也是作為一個子模塊獨立存在的。
· 一系列名為codeql-custom-queries-
要使用“starter”工作區,我們需要:
· 將https://github.com/github/vscode-codeql-starter/repository克隆到我們自己的計算機上:
- 運行git clone-recursive命令,或在克隆后使用by git submodule update-init-remote命令,以確保已經包含了這些子模塊。
- 定期使用git submodule Update-Remote命令更新這些子模塊。
· 在VS Code中,使用File>Open Workspace選項從工作區存儲庫的簽出中打開vscode-codeql-starter.code-workspace文件。
更新 CodeQL 的現有工作區
實際上,我們也可以直接創建 CodeQL 存儲庫的本地克隆,從而將 CodeQL 庫添加到現有的工作區:https://github.com/semmle/ql。
要使這些標準庫可用于我們的工作區:
· 選擇File > Add Folder to Workspace,然后選擇Semmle/ql存儲庫的本地簽出。
· 為每種目標語言創建一個新文件夾,使用New Folder 或Add Folder to Workspace選項來保存自定義的查詢和庫。
· 在每個目標語言文件夾中創建一個qlpack.yml文件,以告訴CodeQL CLI 該文件夾的目標語言及其依賴項是什么。實際上,Semmle/ql的主分支也提供了這些文件。這樣的話,CodeQL就會在所有打開的工作區文件夾或用戶的搜索路徑中查找相關的依賴項。
例如,要使自定義 CodeQL 文件夾 my-custom-cpp-pack 依賴于C++的CodeQL 標準庫,需要創建一個包含以下內容的 qlpack.yml 文件:
name: my-custom-cpp-pack
version: 0.0.0
libraryPathDependencies: codeql-cpp
此外,關于為什么要添加qlpack.yml文件,請參閱這里的詳細解釋:https://help.semmle.com/codeql/codeql-cli/reference/qlpack-overview.html。還需要注意的是,用于分析Go語言編寫的代碼的CodeQL庫并沒有包含在Semmle/ql存儲庫中,而是單獨存儲的。在需要分析Go語言編寫的項目時,請通過https://github.com/github/codeql-go地址克隆存儲庫,并將其添加到我們的工作區中。

[1] [2] [3]  下一頁

【聲明】:黑吧安全網(http://www.650547.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        安徽快3自由的百科 股票跌破发行价 陕西快乐10分台子 一分赛车选号技巧 000659股票行情 吉林快3赌大小单双预测 家庭资产配置 云南11选5前3直 股票涨停是好的意思么 广东好彩1最新开奖 股票新股如何申购