GitHub 免費提供機器學習掃描代碼漏洞,現已支持 JavaScript / TypeScript
目前在 JavaScript 和 TypeScript 存儲庫上開發測試,以后會逐步增加各種語言支持。
在測試期間,CodeQL 已經從 12,000 個存儲庫中發現了超過 20,000 個安全問題,包括遠程代碼執行(RCE)、SQL 注入和跨站腳本(XSS)漏洞。
如何使用
GitHub 的 CodeQL 代碼掃描對于公共存儲庫是免費的。
目前,新的 JavaScript / TypeScript 分析工具,已向 security-extended 和 security-and-quality 分析套件的所有用戶推出。
如果你已經在使用這些套件,那么將自動使用新的機器學習技術進行分析。
如果你之前沒使用過,可按照以下步驟啟用 CodeQL。
1、在你的存儲庫主頁下,單擊 Security。
2、在 Code scanning alerts 右側,點擊 Set up code scanning。如果缺少這一項,需要由存儲庫管理員啟用 GitHub 高級安全性。
3、在“Get started with code scanning”下,單擊在 CodeQL Analysis 中的 Set up this workflow。
4、使用 Start commit 下拉菜單,輸入文件名并提交。
5、選擇直接提交到默認分支,還是創建一個新分支并啟動拉取請求。
6、單擊提交新文件。
代碼掃描分析成功后,用戶將在“Security”選項卡中看到安全警報信息。
為何用 ML 能產生更好效果
為了檢測存儲庫中的漏洞,CodeQL 引擎首先構建了一個數據庫,對代碼的特殊關系表示進行編碼,然后在數據庫上執行一系列 CodeQL 查詢。
但隨著開源生態系統的快速發展,長尾效應越來越明顯。
安全專家不斷擴展和改進這些查詢,對其他常見庫和已知模式進行建模。然而,手動建模很耗時,而且總會有一些無法手動建模的不太常見的庫和私有代碼。
這時候機器學習就派上了用場。通過給定大量訓練代碼片段,每個查詢都標記為正面或負面樣本,為每個片段提取特征,并訓練深度學習模型對新示例進行分類。
GitHub 不是將每個代碼片段簡單地視為一串單詞或字符,直接應用標準 NLP 技術對這些字符串進行分類,而是利用 CodeQL 訪問有關底層源代碼的大量信息,為每個代碼片段生成一組豐富的 feature,然后像 NLP 那樣對它們進行標記和子標記。
由此從訓練數據中生成一個詞匯表,并將索引列表輸入到深度學習分類器中,輸出當前樣本是每種漏洞的概率。
雖然現在基于 ML 的漏洞掃描僅適用于 JavaScript / TypeScript,但 GitHub 承諾未來會支持更多語言,現在 CodeQL 已經支持了 Python、Go、C / C++ 在內的多種流行語言。
最后,GitHub 還強調,雖然全新工具可以發現更多漏洞,但也有可能提高誤報率(召回率約為 80%,精度約為 60%)。未來這項功能會隨著時間推移而改善。