SolarWinds供應鏈攻擊事件爆發以來,受害組織名單逐漸增長。微軟上周宣布將其檢查軟體程式碼有無問題的CodeQL查詢方法開源出來,讓所有企業也能用來檢查自家產品或系統的安全性。

CodeQL是一個開源的程式碼語義分析引擎,可供開發商以QL語言撰寫查詢,以檢查程式碼中是否有漏洞及變種,也期望開發商將查詢分享給其他人。CodeQL專案現在代管在GitHub上。

微軟指出,這次開源出來的CodeQL C#查詢是該公司大規模分析其程式碼,最後排除和SolarWinds(微軟稱之為Solorigate)有關的程式碼層級的入侵指標(Indicators of Compromise,IoC)及程式碼編碼模式,讓別的單位也能執行類似分析。

SolarWinds事件爆發之初,微軟就揭露在內部伺服器發現惡意二進位檔,之後也坦承駭客曾存取其程式碼、並下載了Azure、Intune與Exchange元件程式碼。但微軟強調,這些並未影響該公司提供給客戶的產品或服務。

微軟指出,SolarWinds/Solorigate攻擊的重要特徵,是讓攻擊者得以修改SolarWinds公司的Orion產品的二進位檔,這些二進位檔再以合法更新途徑散布到SolarWinds客戶端,使攻擊者可遠端執行惡意活動,像是竊取登入憑證、升級權限、橫向移動以竊取敏感資訊。

相較於其他許多分析工具,CodeQL的處理分成兩部份。第一步,它將原始程式碼組譯成二進位檔的模型建立起資料庫。針對直譯語言,它會分析來源,並建立自有的抽象語法樹(abstract syntax tree)模型的資料庫。第二步,資料庫建好後,就能像其他資料庫一樣提供反覆查詢。CodeQL語言是為了從資料庫中輕易挑選出複雜的程式條件而設計。微軟說, CodeQL特別好用,是因為這兩階段分析法有許多用途,例如,可在開發階段及開發完成後的程式碼檢查中,都能夠使用靜態分析。

微軟安全團隊把整個公司產生的多套組建系統或管線(pipeline)的CodeQL資料庫,集結起來成為單一、集中的架構,以便擴大CodeQL資料庫的查詢廣度。集結CodeQL資料庫讓他們得以對多套codebase進行語意搜尋,根據某個組建版本當中的特定程式碼搜尋跨多個組件(assembly)、程式庫(libraries)或模組等程式碼條件(code condition)。微軟透過這個方法分析幾千個儲存庫(repositories),並在漏洞變種揭露幾個小時內找到它們,也因此快速調查出Solorigate惡意嵌入程式的樣態。

現在微軟的CodeQL C#查詢已經在GitHub上線,其中的Solorigate-Readme.md包含每種查詢及程式碼層級IoC的詳細描述,也為其他查詢作者提供設定或調整查詢提供指引。

但微軟也提醒這些查詢有其限制。首先,這批查詢方法僅適用於和SolarWinds/Solorigate嵌入程式在語意元素(如名稱、字元或字串等)或功能相近的程式碼。這偶爾也會出現在良性程式碼中,因此所有查詢結果都必須進一步檢查。此外,攻擊者也可能採用其他功能或程式碼編寫型態的程式碼進行攻擊,如果嵌入程式和Solorigate中的嵌入程式差太多,微軟的查詢方法就幫不上忙了。微軟提醒,這次公開的查詢只能作為安全稽核的一部份措施。

此外,GitHub不久後也會公布相關資訊,提供現有CodeQL客戶部署這些查詢的指引說明。

美國政府表示,SolarWinds的惡意程式已駭入9個聯邦政府單位及100家民間企業,包括微軟、FireEye、Malwarebytes等。

熱門新聞

Advertisement