跳過主内容

Solorigate 受攻擊DLL文件引發的複雜網路攻擊剖析及 Microsoft Defender 防護之道

Microsoft 365 Defender Research Team

Microsoft Threat Intelligence Center (MSTIC)

微軟與安全產業及合作夥伴持續調查Solorigate攻擊的影響程度。在調查過程中,微軟希望持續提供影響範圍、內容、補救指南,以及產品偵測和防護情報給相關人員。

受害文件上的數位簽章顯示攻擊者足以存取公司軟體開發或發行管道。有證據指出,早在2019年9月,攻擊者就在測試透過添加空白類別插入程式碼的可能性。攻擊者在最終軟體開發完成,進行數位簽章前的早期階段就將惡意程式碼插入 SolarWinds.Orion.Core.BusinessLayer.dll 之中這導致帶有惡意程式碼的 DLL 文件上具數字簽章,進而強化運行特殊權限動作的能力。

攻擊者在多數行動中都會保持低調,例如插入的惡意程式碼,其任務只會在平行執行序運行惡意方式,不會改變 DLL 的正常運作或中斷流程。這個方法是某個類別的一部分,攻擊者將它命名為OrionImprovementBusinessLayer,並混合在其他程式碼中。此類別包含所有後門程式功能,包括13個子類別和16個方法,以混亂的字串方法進一步隱藏惡意程式碼。

載入後,後門程式會進行一連串的檢查,以確保它是在實際的企業網路,而不是在分析人員的電腦上運行。接著,它會收集受害裝置的部分資訊,並使用從中生成的子網域連結命令與控制(C2)伺服器,這代表每個受影響的網域都有特定的子網域。這是攻擊者逃避偵測的另一種方式。

由於後門程式有許多功能,因此攻擊者可以藉此執行各種動作。正如微軟在過去的人為攻擊中所見,攻擊者一旦成功在網路內運作,就可以開始進行偵察、提升權限和橫向移動。攻擊會在網路上持續移動,直到他們達成網路間諜活動或經濟利益的目標為止。

圖1 Solorigate惡意程式感染鏈
圖1 Solorigate惡意程式感染鏈

企業在偵測此類攻擊時,最大的挑戰需要除了強大的預防性保護措施之外,組織還需要可從網路營運各方面著手的解決方案,以偵測已經存在網路內部的攻擊。

起始點:受感染的程式庫

攻擊者將惡意程式碼插入了 SolarWinds Orion 平台的 SolarWinds.Orion.Core.BusinessLayer.dll 這個程式碼庫。攻擊者必須在此 DLL 文件中找到合適的位置來插入程式碼。理想情況下,他們會選擇一個位置,讓惡意程式碼定期被啟用,並確保惡意程式碼維持在運行狀態。這個合適的位置被命名為 RefreshInternal 方法。

圖2:後門程式遭受引導程式感染的方式
圖2:後門程式遭受引導程式感染的方式
圖3:原始程式碼
圖3:原始程式碼

修改這個程式相當容易,也導致它經常被忽略。它所做的只是在平行執行序執行OrionImprovementBusinessLayer.Initialize,因此不會更改 RefreshInternal 的常態執行流程。

為什麼選擇這種方法呢?快速瀏覽此 DLL 的架構,可以發現 RefreshInternal 是SolarWinds.Orion.Core.Business.Layer.BackgroundInventory.InventoryManager 類別的一部分,且當中利用了CoreBusinessLayerPlugin 類別延伸的一系列方法。此類別使用了名為 Start 的方式(大多是在 DLL 已經載入的早期階段)開始執行,目的是初始化其他元件與計劃執行多個任務。 這些任務包括 Background Inventory,最終啟動惡意程式碼。

圖4:惡意程式碼在平行執行序當中運行
圖4:惡意程式碼在平行執行序當中運行

後門程式功能存在 OrionImprovementBusinessLayer 類別中,包括13個子類別和16個方法。它的名稱與其他合法程式碼融合在一起。惡意威脅行為者狡猾地避免使用諸如「後門程式」、「鍵盤記錄」等字詞,轉而選擇了較不引人注目的話語。乍看之下,這個 DLL 的程式碼看起來相當正常,特別是若該 DLL 的代碼不經常更新的話,也不會受到懷疑,這可能是幾個月以來都未偵測到惡意程式碼的部分因素。

為了成功混淆視聽,後門程式中的字串都在 Base64 中進行壓縮和編碼,或者使用其雜湊代替。

圖5:混淆視聽的字串範例
圖5:混淆視聽的字串範例

初始偵查

Initialize 方法是後門程式實際執行的入口。它會執行幾項檢查,以驗證後門程式是在受害者的環境中運行:

  • 驗證裝載惡意 DLL 的過程名稱是否為 solarwinds.businesslayerhost.exe
  • 驗證惡意 DLL 的最後寫入時間至少為12至14天前。
  • 隨機延遲執行時間
  • 驗證目前裝置的網域名稱是否符合以下條件:
    • 網域中不得包含特定字串,這些字串會藉由雜湊檢查,而此時無法得知被列出的網域名稱
    • 網域不得包含「solarwinds」
    • 網域不得符合正規表達式(?i)([^a-z]|^)(test)([^a-z]|$),或簡化詞句,且不得看似測試網域
  • 檢查確認無安全軟體相關過程運行(如:WindbgAutorunsWireshark
  • 確認無安全軟體下載的驅動程式(如: groundling32.sys
  • 屬於安全軟體的特定服務狀態是否符合特定條件(如:windefendsensecavp
  • 檢查主機「api.solarwinds.com」是否為預期地IP位置

若當中任何一個檢查未通過,後門程式將終止運作。這些檢查都是為了避免將惡意功能暴露在錯誤的環境(例如測試網路或屬於 SolarWinds 的裝置)中。

後門程式

經過上述驗證後,後門程式就能進入主要執行階段。其核心是從 C2 伺服器接收指令、執行這些指令,並送回資訊。可執行的指令類型包括操控註冊檔、建立流程以及刪除文件等,且因為它是從受信任、被簽署過的二進位檔案中執行,能有效地提供攻擊者完全存取裝置的權限。

在第一步中,後門程式將連接到預定 C2 服務器,以提供受感染系統的基本資訊,並接收第一個指令。C2 網域由四個不同的部分組成:三個來自在後門程式中以常數編寫的字串,另一個是根據從裝置獲取資訊產生的。這代表每個受影響的裝置都會生成不同的子網域(可能不止一個)以進行連接。以下是產生網域的範例:

圖6:動態產生的C2網域
圖6:動態產生的C2網域

動態生成的網域相當有趣,它透過將下數資料雜湊化進行計算:

  • 網路介面的實體位置
  • 裝置的網域名稱
  • 來自 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography 註冊檔的 MachineGuid 內容

後門程式也會在 C2 網域上產生偽隨機 URI。像網域一樣,URI 是使用一組撰寫的關鍵字和路徑所組成的,這些關鍵字和路徑有一部分是隨機選擇的,其他部分則是根據要發送的 HTTP 請求類型選擇。透過下述格式,微軟可以產生 URL:

  • pki/crl/<random components>.crl, swip/upd/<random components>,在這裡,<random components>可能是以下字串的之一(或更多):
    • “-root”
    • “-cert”
    • “-universal_ca”
    • “-ca”
    • “-primary_ca”
    • “-timestamp”
    • “-global”
    • “-secureca”
  • fonts/woff/<random components>-webfont<random component>.woff2或fonts/woff/<random components>.woff2,在這裡,<random components>可能是以下字串的之一(或更多):
    • “Bold”
    • “BoldItalic”
    • “ExtraBold”
    • “ExtraBoldItalic”
    • “Italic”,
    • “Light”
    • “LightItalic”
    • “Regular”
    • “SemiBold”
    • “SemiBoldItalic”
    • “opensans”
    • “noto”
    • “freefont”
    • “SourceCodePro”
    • “SourceSerifPro”
    • “SourceHanSans”
    • “SourceHanSerif”
  • swip/upd/<random components>,在這裡,<random components>可能是以下字串的之一(或更多):
    • “SolarWinds”
    • “.CortexPlugin”
    • “.Orion”
    • “Wireless”
    • “UI”
    • “Widgets”
    • “NPM”
    • “Apollo”
    • “CloudMonitoring”
    • “Nodes”,
    • “Volumes”,
    • “Interfaces”,
    • “Components”
  • swip/Upload.ashx
  • swip/Events

以下為由後門程式產生的最終 URL 範例:

  • hxxps://3mu76044hgf7shjf[.]appsync-api[.]eu-west-1[.]avsvmcloud[.]com /swip/upd/Orion[.]Wireless[.]xml
  • hxxps://3mu76044hgf7shjf[.]appsync-api[.]us-east-2[.]avsvmcloud[.]com /pki/crl/492-ca[.]crl
  • hxxps://3mu76044hgf7shjf[.]appsync-api[.]us-east-1[.]avsvmcloud[.]com /fonts/woff/6047-freefont-ExtraBold[.]woff2

最後,後門程式會組成了一個 JSON 檔案,在其中加入前述使用者的 ID、session ID 和一組其他無關的資料欄位。並將此 JSON 檔案送至 C2 伺服器。

圖7:惡意軟體產生的資料範例
圖7:惡意軟體產生的資料範例

如果通訊成功,則 C2 會使用編碼後的壓縮資料緩衝區回應,裡面包含後門程式需執行的指令,C2 也可能會回報其他 C2 的資訊。後門程式接受以下指令:

  • Idle
  • Exit
  • SetTime
  • CollectSystemDescription
  • UploadSystemDescription
  • RunTask
  • GetProcessByDescription
  • KillTask
  • GetFileSystemEntries
  • WriteFile
  • FileExists
  • DeleteFile
  • GetFileHash
  • ReadRegistryValue
  • SetRegistryValue
  • DeleteRegistryValue
  • GetRegistrySubKeyAndValueNames
  • Reboot
  • None

總而言之,這些指令讓攻擊者能夠運行、停止和列舉分析整個流程、讀取、寫入和列舉分析檔案和註冊檔、蒐集和上傳裝置資訊,並重新啟動裝置、等待或退出。CollectSystemDescription 指令將會取出下列資訊:

  • Local Computer Domain name
  • Administrator Account SID
  • HostName
  • Username
  • OS Version
  • System Directory
  • Device uptime
  • Information about the network interfaces

實際攻擊

當取得後門程式存取權後,攻擊者會根據標準來提升權限、竊取憑證與橫向移動,來找到更有價值的帳戶或資產。為了避開偵測,攻擊者會重新命名 Windows 系統管理工具(如 adfind.exe),並用它進行網路列舉分析。

微軟透過遠端建立 PowerShell,發現橫向移動,這在 FireEye和 Volexity中有詳細解說。

透過不同技術部署後門程式可以提升持續潛伏的時間:

    1. PowerShell:
    2. Rundll32:

使用 Rundll32,每個受感染的裝置都可以接收唯一的二進位檔案、唯一的本機檔案系統路徑,偽造唯一的輸出以及唯一的 C2 網域。

後門程式還允許攻擊者提供第二階段的負載,這是 Cobalt Strike 軟體的一部分。隨著情況發展,微軟將持續調查這些負載(偵測為Trojan:Win32 / Solorigate.A!dha)。

Microsoft Defender for Endpoint product產品與強化指南

供應鏈攻擊是安全產業持續關注的重點。Solorigate 事件提醒微軟此類攻擊能夠對受害網路造成極大的影響。微軟將持續呼籲客戶

      • 隔離並調查這些被偵測到惡意二進位檔案的裝置
      • 辨識在裝置上使用的帳戶,並將他們視為已經受攻擊的帳戶
      • 調查受害的端點如何受到威脅
      • 調查受害裝置的時程,並找出橫向移動的時間

防禦組織最基本的方式,是通過減少攻擊面來強化網路,並建立強大的預防性防護。系統和網路活動的可見性,能夠協助安全分析人員在早期偵測時,就察覺異常行為和潛在危害。更重要的是,透過AI連結信號能夠讓隱藏起來的攻擊者活動浮出水面。

Microsoft Defender for Endpoint 能夠全面偵測 Solorigate 攻擊鏈。這些偵測會觸發警報,通知安全團隊此事件的活動和相關工具。因為這個攻擊危害到合法軟體無法使用自動修補來防止服務中斷。但是,這些偵測可以提供攻擊的可見性,讓分析師能透過 Microsoft Defender Endpoint 中的調查和補救工具深入調查和搜捕威脅。

Microsoft 365 Defender 整合跨領域(身份、資料、雲端應用程式以及端點)的威脅資料,提供了端點之外的可見性,以防禦該威脅。跨領域可見性讓 Microsoft 365 Defender 可以連結信號並解決整個攻擊鏈。而安全團隊可以利用豐富的威脅資料搜捕威脅,並深入了解細節,以避免網路遭受威脅。

圖8:Microsoft Defender for Endpoint在Solorigate攻擊鏈中偵測
圖8:Microsoft Defender for Endpoint在Solorigate攻擊鏈中偵測

新一代防護

Microsoft Defender Antivirus 是 Windows10 預設的預防惡意軟體解決方案,它能夠偵測並封鎖惡意的 DLL 及其影響。就算在運行階段,它也可以隔離這個惡意軟體。

偵測 SolarWinds.Orion.Core.BusinessLayer.dll 文件:

偵測記憶體過程中的 Cobalt Strike 片段並停止流程:

在偵測第二階段的負載時,cobalt strike 信號可能會連接到 infinitysoftwares.com。

從資料庫中獲取雜湊與 SolarWinds 密碼以及裝置 PowerShell 負載的資訊:

圖9:Microsoft Defender for Endpoint阻止惡意二進位檔案
圖9:Microsoft Defender for Endpoint阻止惡意二進位檔案

端點偵測與回應

在 Microsoft Defender Security Center 與 Microsoft 365  Security Center 中,下述警報標題代表在您的網路上有威脅活動:

  • SolarWinds Malicious binaries associated with a supply chain attack
  • SolarWinds Compromised binaries associated with a supply chain attack
  • Network traffic to domains associated with a supply chain attack

在 Microsoft Defender Security Center 與 Microsoft 365 Security Center 中,下述警報標題代表這個威脅活動可能正在發生或即將發生。這些警報也可能和其他惡意威脅相關:

  • ADFS private key extraction attempt
  • Masquerading Active Directory exploration tool
  • Suspicious mailbox export or access modification
  • Possible attempt to access ADFS key material
  • Suspicious ADFS adapter process created
圖10:Microsoft Defender for Endpoint偵測可疑的LDAP並試圖取出ADFS私密金鑰
圖10:Microsoft Defender for Endpoint 偵測可疑的 LDAP 並試圖取出 ADFS 私密金鑰
圖11:Microsoft Defender for Endpoint警報說明與回應嘗試存取ADFS金鑰工具的建議動作
圖11:Microsoft Defender for Endpoint警報說明與回應嘗試存取ADFS金鑰工具的建議動作

微軟通過安全技術提供的防護能力獲得安全專家的支持,他們立即調查了這種攻擊,並在事件發展時繼續進行調查。在這種情況下,由專家進行嚴密的監控常重要,因為微軟正在與一個積極且高度複雜的威脅參與者打交道。就像微軟的產品相整合以合併和關聯信號一樣,Microsoft的安全專家和威脅研究人員正在共同努力解決這種進階攻擊並確保客戶受到保護。

威脅分析報告

微軟發佈了有關此事件的全面威脅分析報告,內容提供了技術資訊、偵測細節和建議修復措施,希望讓防禦者了解攻擊、評估影響並檢視防護力。

圖12:Solorigate攻擊威脅分析報告
圖12:Solorigate攻擊威脅分析報告

進階搜捕

Microsoft 365 Defender 和 Microsoft Defender for Endpoint 的客戶可以使用進階搜捕來找到這個攻擊中使用到的相似 TTP。

將惡意DLL載入記憶體

若要找到載入記憶體的惡意DLL位置,請執行以下指令

在系統中或本機上建立的惡意DLL

若要找到在系統或本機中建立的惡意 DLL 位置,請執行以下指令

透過 Base64 在 SolarWinds 流程中啟動 PowerShell

若要找到產生 Base64 編碼 PowerShell 指令的 SolarWinds 流程,請執行以下指令

透過 echo 在 SolarWinds 過程中啟動 CMD

若要找到透過 echo 在 SolarWinds 過程中啟動 CMD 的位置,請執行以下指令

C2溝通

若要找到透過 echo 在 SolarWinds 過程中啟動 CMD 的位置,請執行以下指令

若要透過網域名稱系統查詢惡意攻擊者的網域位置,請執行以下指令

在企業內部找到 SolarWinds Orion 軟體

若要透過威脅和漏洞管理資料來找到依產品名稱組織,及安裝該軟體的裝置數量排序的 SolarWinds Orion 軟體,請執行以下指令

ADFS Adapter 產生流程

附錄

MITRE ATT&CK技術

這個威脅利用了MITER ATT&CK框架中記錄的攻擊者技術。

初始存取

T1195.001供應鏈攻擊

執行

T1072軟體部署工具

指令與控制

T1071.004 Application Layer Protocol: DNS

T1017.001 Application Layer Protocol: Web Protocols

T1568.002 Dynamic Resolution: Domain Generation Algorithms

T1132資料編譯

持續性

T1078有效帳戶

躲避防禦

T1480.001 Execution Guardrails: Environmental Keying

T1562.001修復防禦:停用或修正工具

系列

T1005本地系統的資料

其他惡意軟體

有趣的是,在針對 SolarWinds 威脅的調查中,微軟發現了另一種惡意軟體。它影響了 SolarWinds Orion 產品,但與 SolarWinds 威脅無關,是其他惡意執行者使用的軟體。這個惡意軟體由App_Web_logoimagehandler.ashx.b6031896.dll 的 DLL 檔案持續性後門程式組成,當將這個後門程式安裝在”inetpub \ SolarWinds \ bin \” 資料夾中,可以允許透過 SolarWinds Web 應用程式伺服器執行遠端程式碼。這個惡意 DLL 與 Solorigate 不同,沒有數位簽章,顯示它和供應鏈攻擊無關。然而受感染的 DLL 僅包含一種方法(DynamicRun),可以從網路請求接收 C#指令檔,即時對其進行編譯並執行。

圖13:原始DLL
圖13:原始DLL
圖14:觸發ynamicRun的惡意添加字串
圖14:觸發ynamicRun的惡意添加字串

這個程式碼讓攻擊者能夠將任意的 C# 程式送到受害者的裝置上執行。Microsoft Defender Antivirus 會將受害的 DLL 偵測為 Trojan:MSIL/Solorigate.G!dha

若欲瞭解原文,請至微軟官方部落格參考。

告訴微軟

關於這個故事有問題、顧慮或見解?加入Microsoft Threat Protection和 Microsoft Defender ATP 技術討論社區

閱讀更多關於 Microsoft security intelligence的文章

追蹤微軟的 Twitter @MsftSecIntel

延伸資料: