1. 程式人生 > 資訊 >GitHub 免費提供機器學習掃描程式碼漏洞,現已支援 JavaScript / TypeScript

GitHub 免費提供機器學習掃描程式碼漏洞,現已支援 JavaScript / TypeScript

今天,GitHub 更新一項實驗版新功能。用上機器學習後,新版 CodeQL 程式碼掃描服務可以幫開發者發現更多安全漏洞。

目前在 JavaScript 和 TypeScript 儲存庫上開發測試,以後會逐步增加各種語言支援。

在測試期間,CodeQL 已經從 12,000 個儲存庫中發現了超過 20,000 個安全問題,包括遠端程式碼執行(RCE)、SQL 注入和跨站指令碼(XSS)漏洞。

如何使用

GitHub 的 CodeQL 程式碼掃描對於公共儲存庫是免費的

目前,新的 JavaScript / TypeScript 分析工具,已向 security-extended 和 security-and-quality 分析套件的所有使用者推出。

如果你已經在使用這些套件,那麼將自動使用新的機器學習技術進行分析。

如果你之前沒使用過,可按照以下步驟啟用 CodeQL。

1、在你的儲存庫主頁下,單擊 Security

3、在 Code scanning alerts 右側,點選 Set up code scanning。如果缺少這一項,需要由儲存庫管理員啟用 GitHub 高階安全性。

4、在“Get started with code scanning”下,單擊在 CodeQL Analysis 中的 Set up this workflow。

5、使用 Start commit 下拉選單,輸入檔名並提交。

6、選擇直接提交到預設分支,還是建立一個新分支並啟動拉取請求。

8、單擊提交新檔案。

程式碼掃描分析成功後,使用者將在“Security”選項卡中看到安全警報資訊

為何用 ML 能產生更好效果

為了檢測儲存庫中的漏洞,CodeQL 引擎首先構建了一個數據庫,對程式碼的特殊關係表示進行編碼,然後在資料庫上執行一系列 CodeQL 查詢。

但隨著開源生態系統的快速發展,長尾效應越來越明顯。

安全專家不斷擴充套件和改進這些查詢,對其他常見庫和已知模式進行建模。然而,手動建模很耗時,而且總會有一些無法手動建模的不太常見的庫和私有程式碼。

這時候機器學習就派上了用場。通過給定大量訓練程式碼片段,每個查詢都標記為正面或負面樣本,為每個片段提取特徵,並訓練深度學習模型對新示例進行分類。

GitHub 不是將每個程式碼片段簡單地視為一串單詞或字元,直接應用標準 NLP 技術對這些字串進行分類,而是利用 CodeQL 訪問有關底層原始碼的大量資訊,為每個程式碼片段生成一組豐富的 feature,然後像 NLP 那樣對它們進行標記和子標記。

由此從訓練資料中生成一個詞彙表,並將索引列表輸入到深度學習分類器中,輸出當前樣本是每種漏洞的概率。

雖然現在基於 ML 的漏洞掃描僅適用於 JavaScript / TypeScript,但 GitHub 承諾未來會支援更多語言,現在 CodeQL 已經支援了 Python、Go、C / C++ 在內的多種流行語言。

最後,GitHub 還強調,雖然全新工具可以發現更多漏洞,但也有可能提高誤報率(召回率約為 80%,精度約為 60%)。未來這項功能會隨著時間推移而改善。

參考連結:

[1]https://github.blog/2022-02-17-code-scanning-finds-vulnerabilities-using-machine-learning/

[2]https://github.blog/2022-02-17-leveraging-machine-learning-find-security-vulnerabilities/

[3]https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository