SolarWinds供應鏈攻擊事件爆發以來,受害組織名單逐漸增長。 微軟上週宣佈 將其檢查軟體程式碼有無問題的CodeQL查詢方法開源出來,讓所有企業也能用來檢查自家產品或系統的安全性。
CodeQL 是一個開源的程式碼語義分析引擎,可供開發商以QL語言撰寫查詢,以檢查程式碼中是否有漏洞及變種,也期望開發商將查詢分享給其他人。CodeQL專案現在代管在GitHub上。
微軟指出,這次開源出來的CodeQL C#查詢是該公司大規模分析其程式碼,最後排除和SolarWinds(微軟稱之為Solorigate)有關的程式碼層級的入侵指標(Indicators of Compromise,IoC)及程式碼編碼模式,讓別的單位也能執行類似分析。
SolarWinds事件爆發之初,微軟就揭露在內部伺服器發現惡意二進位檔, 之後也坦承 駭客曾存取其程式碼、 並下載了 Azure、Intune與Exchange元件程式碼。但微軟強調這些並沒有影響該公司提供給客户的產品或服務。
微軟指出,SolarWinds/Solorigate攻擊的重要特徵,是讓攻擊者得以修改SolarWinds公司的Orion產品的二進位檔,這些二進位檔再以合法更新途徑散佈到SolarWinds客户端,使攻擊者可遠端執行惡意活動,像是竊取登入憑證、升級權限、橫向移動以竊取敏感資訊。SolarWinds攻擊規模之大, 微軟認為 至少有1000名以上的工程師牽涉其中。
微軟指出,和其他許多分析工具不同,CodeQL的分析分成兩部份。第一步,它將原始程式碼組譯成二進位檔的模型建立起資料庫。針對直譯語言(interpreted languages),它會分析來源,並建立一個自有的抽象語法樹(abstract syntax tree)模型的資料庫。第二步,資料庫建好後,就能像其他資料庫一樣提供反覆查詢。CodeQL語言是為了從資料庫中輕易挑選出複雜的程式條件而設計。微軟説, CodeQL特別好用是因為這兩階段分析法有許多用途,包括可在開發階段以及開發完成後的程式碼檢查中都使用靜態分析。
微軟安全團隊把全微軟產生的多套build系統或pipeline的CodeQL資料庫,集結起來成為單一、中央化架構,以便擴大CodeQL資料庫的查詢廣度。集結CodeQL資料庫讓他們得以對多套codebase進行語意搜尋,根據build的部份特定程式碼搜尋跨多個程式集(assembly)、函式庫(libraries)或模組(module)的程式條件(code condition)。微軟透過這個方法分析幾千個儲存庫(repositories),並在漏洞變種揭露幾個小時內找到它們,也因此快速調查出Solorigate惡意嵌入程式的樣態。
現在微軟的CodeQL C#查詢已經 在Github上線 ,其中的Solorigate-Readme.md包含每種查詢及程式碼層級IoC的詳細描述,也為其他查詢作者提供設定或調整查詢提供指引。
但微軟也提醒這些查詢有其限制。首先,這批查詢方法僅適用於和SolarWinds/Solorigate嵌入程式在語意元素(如名稱、字元或字串等)或功能相近的程式碼。這偶爾也會出現在良性程式碼中,因此所有查詢結果都必須進一步檢查。此外,攻擊者也可能採用其他功能或程式碼編寫型態的程式碼進行攻擊,如果嵌入程式和Solorigate中的嵌入程式差太多,微軟的查詢方法就幫不上忙了。微軟提醒,這次公開的查詢只能作為安全稽核的一部份措施。
GitHub不久後也會公佈如何為現有CodeQL客户部署這些查詢的指引説明。
美國政府表示,SolarWinds的惡意程式已駭入9個聯邦政府單位及100家民間企業,包括微軟、FireEye、Malwarebytes等。