GitHub開源代碼分析引擎CodeQL 同步啟動3000美元漏洞獎勵計劃
GitHub 在全球開發者大會上宣布啟動了一個名為“安全實驗室(Security Lab)”的新社區計劃。該計劃中,GitHub 不僅開源了代碼分析引擎CodeQL,還設置了獎勵金最高為3000 美元的漏洞獎勵計劃。
GitHub安全實驗室的任務是啟發並賦能全球安全研究社區,保護全球代碼的安全;意將進一步解決代碼安全難題,完善開源社區不足,為開源社區的優質代碼貢獻打下良好基礎。這一計劃也得到了很多大牛企業為代表的支持,包括Microsoft,Google,Intel等,現雷鋒網AI開發者將這一社區具體內容整理編輯如下。
安全漏洞的火眼金睛CodeQL
CodeQL 是GitHub 剛推出的一款新開源工具。這是一款語義代碼分析引擎,旨在查找大量代碼中同一漏洞的不同版本。
CodeQL 可以幫助我們跨代碼庫發現漏洞;允許我們像查詢數據一樣查詢代碼、編寫查詢以查找漏洞的所有變體,並將其永久消除;共享該查詢結果以幫助其他人消除漏洞。
其中,QL 是查詢語言,也是CodeQL 的基礎,專用於分析代碼。這是一種邏輯編程語言,因此它由邏輯公式組成。QL 使用公共邏輯連接詞(如and,or,和not)、量詞(如forall 和exists)、以及其他重要的邏輯概念。查詢語句示例如下(實現將null 添加到集合):
import java
from MethodAccess call, Method add
where
call.getMethod().overrides*(add) and
add.hasName(“add”) and
add.getDeclaringType().getSourceDeclaration().hasQualifiedName(“java.util”, “Collection”) and
call.getAnArgument() instanceof NullLiteral
select call
QL 還支持遞歸和聚合,這允許我們可以使用簡單的語法編寫複雜的遞歸查詢並直接使用函數庫,比如:count,sum 和average。
因此,使用CodeQL 編寫的查詢可以發現漏洞及重要安全漏洞的變體。而除了GitHub 平台外,CodeQL 也已經應用於其它平台的漏洞代碼掃描活動中,如Mozilla。
更多關於QL
CodeQL 該如何使用?
- 在線查詢
我們可以使用LGTM平台(https://lgtm.com/query/rule:1823453799/lang:java/)上的CodeQL查詢控制台,在流行的開源代碼庫上直接運行實際查詢。
LGTM 平台界面,直接編寫需要查詢的代碼
當了解發現有漏洞的模式後,我們就能在整個代碼庫中查找出類似的情況。在下面的示例中,我們使用了內置的CodeQL 庫對不安全的反序列化模式進行編碼,以進行數據流和污點跟踪。
UnsafeDeserialization.ql
from DataFlow::PathNode source, DataFlow::PathNode sink, UnsafeDeserializationConfig conf
where conf.hasFlowPath(source, sink)
select sink.getNode().(UnsafeDeserializationSink).getMethodAccess(), source, sink,
“Unsafe deserialization of $@.”, source.getNode(), “user input”
- 本地查詢
如果需要在本地編寫和運行查詢,可以通過安裝Visual Studio Code的CodeQL擴展而實現。
在Visual Studio 中寫入和運行查詢代碼
安裝CodeQL 擴展後,具體操作步驟為:
1. 獲取CodeQL 數據庫
在LGTM.com 上搜索要研究的開源項目,然後導入項目頁面;
將所下載的和項目本身的CodeQL 數據庫添加到VS 代碼中,實現對這些指令的使用;
2. 查詢代碼並查找漏洞
複製CodeQL starter 工作區並在VS Code 中打開它;
通過右鍵單擊查詢並選擇“運行查詢”來運行查詢;
有關詳細信息,請參閱文檔:
- 查詢開源代碼庫
根據OSI 批准的開源許可證相關規定,我們可以為符合條件的任何項目創建CodeQL 數據庫。
CodeQL分析依賴於從代碼中提取關係數據,並使用它來構建CodeQL數據庫(https://help.semmle.com/codeql/glossary.html#codeql-database)——該目錄包含在代碼上運行查詢所需的所有數據。
在生成CodeQL 數據庫之前,您需要:
安裝並設置CodeQL CLI。(有關更多信息,參見下面的CodeQL CLI 入門)
遷出要分析的代碼庫的版本。該目錄應已準備好建立,並已安裝所有依賴項。
查詢開源代碼庫示例
但需要注意的是,GitHub CodeQL 只能用於在OSI 批准的開源許可下發布的代碼庫,或者用於執行學術研究。它不能用於自動化分析、持續集成或持續交付,無論是作為正常軟件工程過程的一部分還是其他。
CodeQL 擴展詳細文檔:
https://help.semmle.com/codeql/codeql-for-vscode.html
本地查詢下載地址:
https://marketplace.visualstudio.com/items?itemName=github.vscode-codeql
CodeQL CLI 入門:
https://help.semmle.com/codeql/codeql-cli/procedures/get-started.html
CodeQL“捕獲標誌”挑戰
如果你想挑戰漏洞搜索技能并快速學習Semmle CodeQL,可以嘗試完成給出的任務,即通過使用CodeQL 來找到jQuery 插件的變體——這些變體會使客戶機暴露於未記錄的XSS(跨站點腳本)漏洞。
具體而言,jQuery 是一個非常流行的、但很舊的開源JavaScript 庫,旨在簡化HTML 文檔遍歷和操作、事件處理、動畫和Ajax 等工作。截至2019 年5 月,jQuery 在1000 萬最受歡迎網站中的使用率為73%。jQuery 庫支持模塊化插件,世界各地的開發人員已經實現了數千個插件,無縫地擴展了jQuery 的功能。
而Bootstrap 則是一個廣泛使用jQuery 插件機制的流行庫;但是Bootstrap 中的jQuery 插件過去是以一種不安全的方式實現,這可能會使Bootstrap 的用戶容易受到跨站點腳本(XSS)攻擊。
這是指攻擊者使用web 應用程序向其他最終用戶發送惡意代碼(通常是以瀏覽器端腳本的形式);而這些惡意腳本可以訪問瀏覽器保留並與該站點一起使用的任何cookie、會話標記或其他敏感信息。
因此,在整個查找過程中,你需要使用分步指南編寫查詢,從而查找引導中未安全實現的jQuery 插件。完成後將答案發送至ctf@github.com 則可獲得獲獎機會。GitHub 將選出2019 年12 月31 日前收到的兩個最佳CodeQL 查詢獲得大獎;還將選擇10 個額外的CodeQL 查詢來贏得其它獎品。
查看以前的挑戰:
提升安全的更廣泛計劃
另外,最近GitHub 還成為授權的CVE 編號發布機構,即它能夠為漏洞發布CVE 編號。這一功能已經增加至“安全建議”服務功能中。漏洞修復後,項目所有人就可以發布安全公告,而GitHub 將向所有使用原來維護人員的代碼的易受攻擊版本的上游項目所有人;但在發布安全公告前,項目所有人同時可以直接向GitHub請求並收到CVE 編號。
當然,除了代表榮譽的CVE 之外,Github 也發起了獎金機制,使用CodeQL 進行挖掘新漏洞的安全研究員可以最高獲得2500 美元的賞金;如果編寫的CodeQL 查詢代碼質量夠高,甚至還能被授予3000 美元的獎勵。
賞金詳細規則:
除了新推出的安全實驗室外,GitHub 還推出了“GitHub 安全公告數據庫”,用於收集平台上能找到的所有安全公告,可以為大家追踪在GitHub 託管項目中找到的安全漏洞問題提供更大的便利空間。
最後,GitHub 還更新了Token Scanning 自有服務。它能夠掃描用戶項目中不慎在源代碼中遺留的API 密鑰和令牌。該服務此前能夠為20 種服務檢測API 令牌,而新版本能夠檢測的格式又增加四個廠商:GoCardless、HashiCorp、Postman 和騰訊雲。
Github 地址: