SolarWinds供应链攻击事件带来的启示
SolarWinds供應鏈攻擊事件帶來的啟示
- 一、概述
- 二、事件分析
- 1、SUNBURST后門
- 2、深入惡意軟件分析
- 傳播和安裝
- 初始化
- DGA和阻止列表
- 網絡命令和控制(C2)
- 支持的命令
- 3、行為分析和防御
- TEARDROP和BEACON惡意軟件
- 環境偽裝
- 受害者國家/地區的IP地址
- 橫向移動
- 臨時文件替換和臨時任務修改
- 4、解決辦法
- 三、啟示
一、概述
2020年12月13日,美國網絡安全公司FireEye發布分析報告稱,SolarWinds旗下的Orion基礎設施管理平臺的發布環境遭到黑客組織UNC2452入侵,黑客對文件SolarWinds.Orion.Core.BusinessLayer.dll的源碼進行篡改添加了后門代碼,該文件具有合法數字簽名會伴隨軟件更新下發,這些后門會執行命令,包括傳輸文件、執行文件、分析系統、重啟設備和禁用系統服務的功能。這項攻擊可能早在2020年年初就開始了。
FireEye稱已在全球多個地區檢測到攻擊活動,包括北美、歐洲、亞洲和中東的一些政府、咨詢、技術公司。SolarWinds已在其官方網站發布安全公告,公布受影響版本為2019.4 HF 5 - 2020.2.1,并提示用戶升級至2020.2.1 HF 1版本。
SolarWinds公司創辦于1999年,主要生產銷售網絡和系統監測管理類的軟件產品,為全球30萬家客戶服務,覆蓋了政府、軍事、教育等大量重要機構和超過9成的世界500強企業。Solarwinds Orion是一款功能強大的網絡性能監控程序。
二、事件分析
1、SUNBURST后門
通過HTTP與第三方服務器進行通信,此SolarWinds Orion插件的木馬版本叫SUNBURST。
后門安裝后它會檢索并執行稱為“作業(Jobs)”的命令,這些命令包括傳輸文件、執行文件、分析系統、重啟設備和禁用系統服務的功能。該惡意程序將其網絡流量偽裝成 Orion Improvement Program (OIP) 協議,并將監控結果存儲在合法的插件配置文件中,允許其融入合法的SolarWinds活動。后門使用了多種偽裝技術來逃避殺毒軟件等檢測工具。
從2020年3月到5月,多個更新文件被植入了木馬,并用數字簽名進行了簽名,發布到SolarWinds更新網站上,一旦安裝了更新文件,惡意的DLL將被合法的solarWind可執行文件SolarWind.BusinessLayerHost.exe或SolarWinds.BusinessLayerHostx64.exe(取決于系統配置)加載。
長達兩周的休眠期后,該惡意軟件將試圖解析avsvmcloud[.]com的一個域名。該域名返回一條CNAME記錄,里面包含命令和控制記錄(Command and Control 簡稱C2)。惡意通信被設計成模擬正常的SolarWinds API通信。在獲得最初的訪問權限之后,黑客使用各種技術來掩飾他們的操作,同時他們也在橫向移動(圖2)。他們很少用非法的命令和操作,而更喜歡用合法的憑證和遠程訪問來訪問受害者的環境。
2、深入惡意軟件分析
SolarWinds.Orion.Core.BusinessLayer.dll(b91ce2fa41029f6955bff20079468448)是Orion軟件框架中由SolarWinds簽名的插件組件,其中包含經過混淆的后門,該后門通過HTTP與第三方服務器進行通信。這個后門的主要特性如下:
- 執行子域域名生成算法(DGA)來改變DNS請求;
- CNAME響應指向惡意軟件要連接到的惡意域名;
- 通過代理服務器地址逃避工具對惡意軟件的檢測行為;
- 指揮和控制合法的“計劃任務”;
- 代碼通過使用偽裝的變量名和綁定合法組件來隱藏身份。
傳播和安裝
經過系統管理員配置SolarWinds網站的更新程序來進行下載和傳播,該更新程序做了合法的簽名,該文件最早簽署于2020年3月24日。
初始化
當被感染了木馬的更新程序更新后的12到14天后,才會執行該木馬程序;確切的閾值是從一個間隔中隨機選擇的。最初執行Initialize初始化方法,然后進行復雜的計算得到一個哈希值,此哈希與名為businesslayerhost.exe的進程匹配。從磁盤讀取并檢索XML字段appSettings之前,程序將創建執行一個管道來作為守護進程。惡意代碼將修改appSettings的值,重新進行持久化。然后檢查計算機是否加入域,然后通過一個復雜的算法生成一個用戶id,然后從config中讀取appSettings的ReportWatcherPostpone鍵來查找初始合法值。木馬最后調用方法Update完成初始化工作。
DGA和阻止列表
后門使用域生成算法(DGA)確定其控制服務器,以構造和解析avsvmcloud[.]com的子域名。Update方法負責初始化生成這些隨機控制子域的密碼,這些子域與以下內容之一串聯,以創建要解析的主機名:
- 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
下一步獲得本機的進程名稱、服務名稱和驅動程序的路徑列表,并通過算法對每個值進行哈希處理,并對照事先定義硬編碼進行檢查。如果找到了正在運行的進程在列表中,則更新進程將退出,然后木馬將繼續嘗試執行其他方式,直到執行通過為止。然后通過注冊表設置禁止啟動殺毒軟件啟動。如果在系統中找到安裝的軟件,則可能會影響DGA算法在生成的值方面的行為。如果有任何服務被轉換為禁用,則Update方法將退出并稍后重試。如果所有的列表測試都通過了,則示例嘗試解析http://api.solarwins.com來測試網絡的連接性。
網絡命令和控制(C2)
如果所有阻止列表和連接性檢查均通過,則樣本將通過其DGA在while循環中開始生成域。樣本將延遲生成域之間的間隔時間,時間是隨機的;此時間間隔可以是1到3分鐘,30到120分鐘或在錯誤條件下最長420到540分鐘(9小時)范圍內的任意隨機值。生成域的DNS A記錄根據控制惡意軟件行為的IP地址的硬編碼范圍列表進行檢查。以下范圍內的記錄將終止惡意軟件,并更新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響應中成功檢索到一個域,該樣本將通過調用HttpHelper.Initialize方法產生一個新的執行線程,該線程負責通信和調度。HTTP線程通過SetTime命令控制配置的時間開始。HTTP線程將在調用之間至少延遲1分鐘。惡意軟件在請求數據時使用HTTP GET或HEAD請求,在命令輸出數據發送到服務器時使用HTTP PUT或HTTP POST請求。當請求內容小于10000字節時使用PUT方法;否則使用POST方法。If-None-Match HTTP報頭包含先前計算的userID的XOR編碼表示,并附加一個長度相同的隨機字節數組。
所有HTTP POST和PUT請求都包含一個JSON包,并且包含 “userId”,“sessionId”和“steps”項。“steps”字段包含具有以下鍵的對象列表:“Timestamp”、“Index”、“EventType”、“EventName”、“DurationMs”、“Succeeded”和“Message”。發送到服務器的惡意軟件響應消息經過壓縮和單字節異或編碼,然后在“steps”數組中的“Message”字段中分割。每個“Message”值都是Base64單獨編碼的。并非“steps”數組中的所有對象都會導致惡意軟件消息,“Timestamp”字段中的整數必須設置為0x2位,以確定惡意軟件消息中使用了“message”字段的內容。時間戳字段中位0x2為空的Step對象包含隨機數據,在組裝惡意軟件響應時被丟棄。
在觀察到的惡意流量中,這些HTTP響應試圖進行偽裝,他們看起來像與.NET程序集相關的XML,但是命令數據實際上分布在許多GUID和HEX字符串中。通過使用以下正則表達式搜索HEX字符串,可以從HTTP響應主體中提取命令"{[0-9a-f-]}"|"[0-9a-f]"|"[0-9a-f]"。命令數據分布在多個字符串中,這些字符串偽裝成GUID和HEX字符串。響應中的所有匹配子字符串都將針對非HEX字符進行過濾,合并在一起并進行HEX解碼。第一個DWORD值顯示消息的實際大小,緊隨其后的是消息,其后是可選的其他垃圾字節。使用消息的第一個字節對提取的消息進行單字節XOR解碼,然后對其進行DEFLATE解壓縮。第一個字符是ASCII整數,它映射到JobEngine枚舉,并帶有由空格字符分隔的可選附加命令參數。
然后根據命令值將命令發送到JobExecutionEngine,如下所述。
支持的命令
可以通過MITRE ATT&CK技術進行對應檢查:
3、行為分析和防御
TEARDROP和BEACON惡意軟件
在得到的多個樣本中,發現了不同的手法,在最新的一個樣本中發現了以前沒有遇到過的只在內存中運行的程序,我們叫TEARDROP,運行在Cobalt Strike BEACON中。TEARDROP是一個只在內存中運行的一個程序,它生成一個線程,并讀“gracious_truth.jpg”文件,該文件可能是一個偽裝的JPG頭文件。接下來,它檢查HKU\SOFTWARE\Microsoft\CTF是否存在,使用自定義循環XOR算法進行解碼,然后使用類似于PE的自定義文件格式將嵌入代碼加載到內存中。TEARDROP的代碼是一種新型代碼,在之前的代碼中從來沒有遇見過。
檢測機會:
可以通過FireEye HX: MalwareGuard和WindowsDefender的告警信息來檢查是否有次木馬。
比如: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’環境偽裝
攻擊者先在受害者環境中找到合法的主機名,然后在其命令中加上合法的主機名信息。這使得攻擊者比較容易逃避檢查。
檢測機會:
攻擊者會在RDP SSL證書中會泄露其主機名,這樣可以在網上掃描數據中識別出來。這為防御者提供了一個檢測機會。通過查找發起網絡掃描的主機名中可以發現惡意IP地址(注意:IP掃描歷史記錄中通常顯示IP在默認的(WIN-*)主機名和受害者主機名之間切換)。將網上掃描數據中標識的IP列表與遠程訪問日志進行關聯分析可能會在環境中識別出攻擊。
受害者國家/地區的IP地址
攻擊者對IP地址的選擇也進行了優化,以逃避檢測。攻擊者主要利用虛擬服務器進行通訊,這些虛擬服務器和受害者通常來自同一個國家。
檢測機會:
如果合法用戶和攻擊者用不同的ip進行訪問的時候,兩個ip地址的傳輸速率是不一樣的。如果識別出一個惡意的登錄地址,可以檢查這個ip地址的其他操作,有助于發現其他問題。可以做登錄ip基線檢查(Aviation Safety Network ASN)。
橫向移動
一旦攻擊者使用入侵的憑據獲得對網絡的訪問權限,他們就會使用多個不同的憑據進行橫向移動,用于橫向移動的憑據始終與用于遠程訪問的憑據不同。
檢測機會:
防御可以檢查所有的登錄活動,并分析同一個源用不同賬號登錄的情況,這種情況在業務上不多見,不過在國內這種情況大多是堡壘機。
臨時文件替換和臨時任務修改
攻擊者使用臨時文件替換技術,他們用攻擊程序替換了合法程序,執行完成后還原了原始文件。他們通過更新現有的合法任務執行其工具,然后將計劃任務回復到原始的配置。在使用完后他們通常會刪除惡意的后門。
檢測機會:
防御者可以檢查SMB會話的日志,這些會話顯示對合法目錄的訪問,并在短時間內遵循delete-create-execute-delete-create模式。此外,防御者可以監視現有的計劃任務,通過檢查臨時任務和使用頻率來分析任務的異常。還可以監視任務后產生了新的或未知的二進制文件。
4、解決辦法
Solarwinds建議所有客戶立即升級到Orion最新版本,該版本目前可通過SolarWinds門戶獲得。
如果你無法使用solarwind的建議,則可以采用以下緩解技術:
1、確保solarwind服務器被隔離/控制,直到進行進一步的檢查和調查。這應該包括屏蔽Solarwinds服務器的所有互聯網出口。
2、如果Solarwinds基礎設施不是處于隔離狀態,可以考慮采取以下步驟:
2.1限制與solarwind服務器終端的連接范圍;
2.2限制在solarwind服務器上擁有本地管理員特權的帳戶的范圍;
2.3使用SolarWinds程序阻止來自服務器或其他終端的互聯網出口;
2.4更改有權訪問SolarWinds服務器/基礎結構的帳戶的密碼;
2.5如果solarwind用于管理網絡基礎設施,可以考慮對網絡設備配置進行檢查,以防止意外/未經授權的修改。
三、啟示
攻擊是不確定的,當遇到攻擊不要慌,并不是說收到攻擊者時完全束手無策,攻擊者進行執行惡意代碼行為時,DNS解析中,進程的創建時,任務的修改時,橫向移動的過程中等行為還是有可能會被發現。所以在日常工作中可以加強安全運營,檢查常用攻擊行為,尤其是登錄行為和橫向移動的行為,檢查本機的進程任務等;通過持久的運營來對抗不確定性的攻擊。供應鏈的安全問題,更加考驗運營人員的能力。普通的安全事件,我們可能根據進程上下文和域名訪問情況就能完全判定。但供應鏈類安全事件,我們需要觀察更多的行為才能得出判斷。當然,對于安全檢測系統而言,也需要提供更豐富的關聯來支持研判。
如何檢測安全威脅事件?需要安全管理分析平臺進行全面采集、分析及處理網絡中的日志、流量,找出問題所在,看清全部真相,讓網絡威脅無處遁形。通過海量日志及流量分析能有效發現安全威脅事件的蛛絲馬跡,防患于未然并可作為事后溯源取證分析的重要依據。分析的準確性取決于是否制定了行之有效的告警規則,告警規則與攻擊思路是否吻合。攻防一體,只有了解盡可能多的攻擊思路與攻擊方式,才能制定出合理的防御檢測思路,完善豐富的告警知識庫。針對SolarWinds供應鏈攻擊事件,我們根據FireEye對外發布的檢測思路細化了如下檢測規則:
參考及來源:FireEye《Highly Evasive Attacker Leverages SolarWinds Supply Chain to Compromise Multiple Global Victims With SUNBURST Backdoor》。
以上內容為南京賽克藍德網絡科技有限公司原創,如需轉載,保留原作者信息。
賽克藍德是一家提供日志分析軟件、綜合審計軟件、安全管理平臺等的專業安全廠商。
總結
以上是生活随笔為你收集整理的SolarWinds供应链攻击事件带来的启示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速了解必要的网络知识
- 下一篇: 开启系统事件监视服务器,Windows