由一個名黑客發起的全球性攻擊行動
Solarwinds Orion是一款功能強大的網絡性能監控程序,這就是目前為什么全球有超過45000用戶,不論是小公司還是全球500強企業,都信任和使用Solarwinds來探索、配置、監控和管理日趨復雜的系統和構建網絡基礎構架的流程。
FireEye最近發現了一個名叫UNC2452 的攻擊者利用Solarwinds的監控框架來發起全球性攻擊,這項攻擊可能早在2020年年初就開始了。
SUNBURST后門
SolarWinds.Orion.Core.BusinessLayer.dll是Solarwinds Orion程序框架的SolarWinds數字簽名組件,其中包含一個后門,該后門通過HTTP與第三方服務器進行通信,此SolarWinds Orion插件的木馬版本,即SUNBURST。
攻擊者通過該后門會檢索并執行稱為“作業”的命令,這些命令包括傳輸文件、執行文件、分析系統、重啟設備和禁用系統服務的功能。該惡意程序將其網絡流量偽裝成 Orion Improvement Program (OIP) 協議,并將監控結果存儲在合法的插件配置文件中,允許其融入合法的Solarwinds活動。后門使用多個模糊的黑名單來識別作為進程、服務和驅動程序運行的取證和殺毒程序工具。
SolarWinds數字簽名程序的后門
從2020年3月到5月,多個被木馬化的更新被數字簽名并發布到Solarwinds更新網站上。
被木馬化的更新文件是一個標準的Windows安裝程序修復文件,包括與更新相關的壓縮資源,包括被木馬化 的SolarWinds.Orion.Core.BusinessLayer.dll組件。一旦更新被安裝,惡意的DLL將被合法的solarwind可執行文件SolarWind.BusinessLayerHost.exe或SolarWindws.BusinessLayerHostx64.exe(取決于系統配置)加載。
攻擊影響
FireEye已經在全球多個企業中檢測到這種活動,受害者包括北美、歐洲、亞洲和中東的政府、咨詢、技術、電信等企業。
通過跟蹤分析,此攻擊活動是一個名為UNC2452的攻擊組織發起的。在獲得最初的訪問權限后,攻擊便會使用各種技術逃避檢測。
攻擊過程
(1) 使用了TEARDROP和BEACON惡意軟件
在分析的樣本中,攻擊者使用了TEARDROP和BEACON惡意軟件,TEARDROP是一個內存刪除器,它作為一個服務運行,生成一個線程并從文件“gracious_truth.jpg”中讀取,該文件可能有一個偽裝的JPG標頭文件。接下來,它檢查HKU\SOFTWARE\Microsoft\CTF是否存在,使用自定義滾動XOR算法解碼嵌入式有效載荷,并使用類似于PE的自定義文件格式將嵌入式有效載荷手動加載到內存中。 TEARDROP的代碼與之前看到的任何惡意程序都沒有重疊。
(2) 處理信息
- file_operation_closed
- file-path*: “c:\\windows\\syswow64\\netsetupsvc.dll
- actor-process:
- pid: 17900
Windows Defender Exploit Guard保護日志如下:
- Process”\Device\HarddiskVolume2\Windows\System32\svchost.exe” (PID XXXXX) would have been blocked from loading the non-Microsoft-signed binary
- ‘\Windows\SysWOW64\NetSetupSvc.dll’
(3) 攻擊者的主機名與受害者的環境匹配
攻擊者在其命令和控制基礎設施上設置主機名,以匹配在受害者環境中找到的合法主機名。這使得攻擊者能夠逃避檢查。
攻擊者基礎結構會在RDP SSL證書中泄漏其已配置的主機名,這可以在網上掃描數據中識別出來。這為防御者提供了一個檢測機會,查詢整個網上的掃描數據源中組織的主機名可以發現可能偽裝成組織的惡意IP地址。 將網上掃描數據中標識的IP列表與遠程訪問日志進行交叉引用可能會在環境中識別出攻擊。
(4) 對受害者國家/地區的IP地址進行分析
攻擊者對IP地址的選擇也進行了優化,以逃避檢測。攻擊者主要利用虛擬專用服務器使用與受害者來自同一國家的IP地址。
(5) 使用不同憑據進行感染
一旦攻擊者使用受攻擊的憑據獲得對網絡的訪問權限,他們就會使用多個不同的憑據進行橫向移動,用于橫向移動的憑據始終與用于遠程訪問的憑據不同。
(6) 臨時文件替換和臨時任務修改
攻擊者使用臨時文件替換技術來遠程執行攻擊程序,他們用攻擊程序替換了合法程序,執行了有效載荷,然后還原了合法原始文件。他們通過更新現有合法任務以執行其工具,然后將計劃任務返回到它的原始配置來操縱計劃任務。他們通常會刪除他們的工具,包括一旦實現合法的遠程訪問就刪除后門。
深入惡意軟件分析
SolarWinds.Orion.Core.BusinessLayer.dll(b91ce2fa41029f6955bff20079468448)是Orion軟件框架中由SolarWinds簽名的插件組件,其中包含經過混淆的后門,該后門通過HTTP與第三方服務器進行通信。經過長達兩周的初始休眠期后,它會檢索并執行稱為“作業”的命令,這些命令包括傳輸和執行文件,對系統進行配置文件以及禁用系統服務的功能。后門的行為和網絡協議與合法的SolarWinds活動融為一體,例如偽裝成Orion改進程序(OIP)協議并將檢測結果存儲在插件配置文件中。后門程序使用多個阻止列表,以通過進程、服務和驅動程序識別取證和殺毒軟件工具。
攻擊能力
- 執行子域域名生成算法(DGA)來改變DNS請求;
- CNAME響應指向惡意軟件要連接到的C2域;
- 記錄響應的IP阻止控制惡意軟件的行為;
- 指揮和控制偽裝為合法的“Orion改進程序計劃”;
- 代碼通過使用偽裝的變量名和綁定合法組件隱藏在普通站點中。
傳播和安裝
經過授權的系統管理員可以通過SolarWinds網站傳播的程序包獲取并安裝SolarWinds Orion更新。更新包CORE-2019.4.5220.20574-SolarWinds-Core-v2019.4.5220-Hotfix5.msp(02af7cec58b9a5da1c542b5a32151ba1)包含此報告中描述的SolarWinds.Orion.Core.BusinessLayer.dll。安裝后,Orion程序框架執行.NET程序SolarWinds.BusinessLayerHost.exe來加載包括SolarWinds.Orion.Core.BusinessLayer.dll的插件。該插件包含許多在Orion框架內實現功能的合法名稱空間、類和例程。清晰可見的類SolarWinds.Orion.Core.BusinessLayer.OrionImprovementBusinessLayer實現了基于HTTP的后門。邏輯上不相關的例程SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.InventoryManager.RefreshInternal中的代碼在加載庫存管理器插件時調用后門代碼。
SolarWinds.Orion.Core.BusinessLayer.dll由SolarWinds簽名,使用序列號為0f:e9:73:75:20:22:a6:06:ad:f2:a3:6e:34:5d:c0:ed的證書。該文件簽署于2020年3月24日。
初始化:
在執行惡意的SolarWinds.Orion.Core.BusinessLayer.OrionImprovementBusinessLayer.Initialize方法后,該樣本將驗證其小寫進程名稱的哈希值是否為17291806236368054941。此哈希值計算為標準FNV-1A 64位哈希,并帶有附加值計算FNV-1A之后,通過6605813339339102567進行XOR,此哈希與名為businesslayerhost.exe的進程匹配。
DGA和阻止列表
后門使用域生成算法(DGA)確定其C2服務器,以構造和解析avsvmcloud[.]com的子域。Update方法負責初始化生成這些隨機C2子域的密碼助手,這些子域與下面的一個連接在一起,創建要解析的主機名:
- appsync-api.eu-west-1[.]avsvmcloud[.]com
- appsync-api.us-west-2[.]avsvmcloud[.]com
- appsync-api.us-east-1[.]avsvmcloud[.]com
- appsync-api.us-east-2[.]avsvmcloud[.]com
獲得進程名稱、服務名稱和驅動程序路徑列表,并通過FNV-1a + XOR算法對每個值進行哈希處理,并對照硬編碼的阻止列表進行檢查。在此分析過程中,其中一些哈希已被暴力逆向,這表明這些例程正在掃描分析工具和殺毒引擎組件。如果找到阻止列表的進程,則更新例程將退出,并且樣本將繼續嘗試執行該例程,直到阻止列表通過為止。通過將其列入名單的服務的HKLM \ SYSTEM \ CurrentControlSet \ services \< service_name >\Start注冊表項設置為值4來停止禁用。
如果在系統中找到服務列表中的某些條目,則可能會影響DGA算法在生成的值方面的行為。停止服務的列表將被位打包到appSettings條目的ReportWatcherPostpone鍵中,用于示例的配置文件。如果有任何服務被轉換為禁用,則Update方法將退出并稍后重試。該示例通過WMI查詢Select*從Win 32_SystemDriver檢索驅動程序列表。如果看到任何塊列表驅動程序,則Update方法退出并重試。如果所有的塊列表測試都通過了,則示例嘗試解析api.solarwins.com來測試網絡的連接性。
網絡命令和控制(C2)
如果所有阻止列表和連接性檢查均通過,則樣本將通過其DGA在while循環中開始生成域。本文的樣本將延遲域生成之間的隨機間隔;此時間間隔可以是1到3分鐘,30到120分鐘或在錯誤條件下最長420到540分鐘(9小時)范圍內的任意隨機值。根據控制惡意程序行為的IP地址塊的硬編碼列表檢查生成的域的DNS A記錄。以下范圍內的記錄將終止惡意程序,并將配置項ReportWatcherRetry更新為阻止進一步執行的值:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
- 224.0.0.0/3
- fc00:: - fe00::
- fec0:: - ffc0::
- ff00:: - ff00::
- 20.140.0.0/15
- 96.31.172.0/24
- 131.228.12.0/22
- 144.86.226.0/24
一旦在CNAME DNS響應中成功檢索到域,該樣本將產生一個新的執行線程,調用該方法負責所有C2通信和調度的HttpHelper.Initialize方法。 HTTP線程通過延遲由SetTime命令控制的可配置時間開始。兩次調用之間,HTTP線程將至少延遲1分鐘。當請求數據時,該惡意程序使用HTTP GET或HEAD請求,而當C2輸出數據發送到服務器時,則使用HTTP PUT或HTTP POST請求。當有效載荷小于10000字節時,將使用PUT方法,否則將使用POST。 If-None-Match HTTP標頭將先前計算出的userID的XOR編碼表示形式保留為值,并附加一個長度相同的隨機字節數組。
JSON有效載荷適用于所有HTTP POST和PUT請求,并且包含 “userId”,“sessionId”和“steps”項。 “steps”字段包含具有以下項的對象列表:“時間戳”,“索引”,“事件類型”,“事件名稱”,“持續時間”,“成功”和“消息”。 JSON項“EventType”被硬編碼為值“Orion”,而“EventName”被硬編碼為“EventManager”。將發送到服務器的惡意程序響應消息進行DEFLATE壓縮和單字節XOR編碼,然后在“steps”數組的“消息”字段之間進行拆分。每個“消息”值均經過Base64編碼。并非“steps”數組中的所有對象都構成了惡意程序消息,“時間戳”字段中的整數必須設置為0x2位,以指示惡意程序消息中使用了“消息”字段的內容。
逃避方法
在觀察到的流量中,這些HTTP響應對象試圖看起來像與.NET程序集相關的良性XML,但是命令數據實際上分布在存在的許多GUID和HEX字符串中。通過使用以下正則表達式搜索HEX字符串,從HTTP響應主體中提取命令"\{[0-9a-f-]{36}\}"|"[0-9a-f]{32}"|"[0-9a-f]{16}"。命令數據分布在多個字符串中,這些字符串偽裝成GUID和HEX字符串。響應中的所有匹配子字符串都將針對非HEX字符進行過濾,合并在一起并進行HEX解碼。第一個DWORD值顯示消息的實際大小,緊隨其后的是消息,其后是可選的其他垃圾字節。使用消息的第一個字節對提取的消息進行單字節XOR解碼,然后對其進行DEFLATE解壓縮。第一個字符是ASCII整數,它映射到JobEngine枚舉,并帶有由空格字符分隔的可選附加命令參數。
然后根據命令值將命令發送到JobExecutionEngine,如下所述。
支持的命令
緩解辦法
Solarwinds建議所有客戶立即升級到Orion最新版本,該版本目前可通過SolarWinds客戶門戶獲得。此外,你可以點此了解SolarWinds發布的其他緩解和強化說明。
如果你無法使用solarwind的建議,則可以采用以下緩解技術:
(1) 確保solarwind服務器被隔離/控制,直到進行進一步的檢查和調查。這應該包括屏蔽Solarwinds服務器的所有互聯網出口。
(2) 如果Solarwinds基礎設施不是處于隔離狀態,可以考慮采取以下步驟:
- 限制與solarwind服務器終端的連接范圍;
- 限制在solarwind服務器上擁有本地管理員特權的帳戶的范圍;
- 使用SolarWinds程序阻止來自服務器或其他終端的互聯網出口;
- 更改有權訪問SolarWinds服務器/基礎結構的帳戶的密碼;
- 如果solarwind用于管理網絡基礎設施,可以考慮對網絡設備配置進行檢查,以防止意外/未經授權的修改。