Xshellghost技術分析 – 入侵感染供應鏈軟體的大規模定向攻擊
近日,NetSarang旗下的Xmanager、Xshell、Xftp和Xlpd等在全球流行使用的伺服器遠程管理軟體曝出被多家殺毒軟體報毒查殺的情況,經過360科技集團追日團隊調查分析確認,NetSarang旗下多款軟體的關鍵模塊被植入了高級後門,這是一起入侵感染供應鏈軟體的大規模攻擊事件,我們將其命名為「XshellGhost」(xshell幽靈)。
概述
事件時間軸
2017年7月17日,NetSarang公司發布旗下多款產品的新版軟體,更新修復多處bug和增強了會話加密能力,用於對抗CIA木馬「BothanSpy」的密碼劫持功能。
2017年8月7日,NetSarang與卡巴斯基發布聯合聲明,聲稱7月18日發現軟體存在安全漏洞被攻擊。
2017年8月15日,NetSarang與卡巴斯基更新聯合聲明,發現在香港利用該軟體漏洞的案例。
攻擊形式
NetSarang系列軟體的關鍵網路通信組件nssock2.dll被植入了惡意代碼,廠商在發布軟體時並未發現惡意代碼,並給感染組件打上了合法的數字簽名隨新版軟體包一起發布,用戶機器一旦啟動軟體,將會載入組件中的惡意代碼,將主機的用戶信息通過特定DGA(域名生成演算法)產生的DNS域名傳送至黑客的遠程命令控制伺服器,同時黑客的伺服器會動態下發任意的惡意代碼至用戶機器執行。
攻擊影響面
使用被感染的軟體的用戶,將會被黑客竊取用戶信息,並在雲端下發任意的惡意代碼進行遠程控制,由於該系列軟體在國內的程序員和運維開發人員中被廣泛使用,多用於管理企事業單位的重要伺服器資產,所以黑客極有可能進一步竊取用戶所管理的伺服器身份驗證信息,秘密入侵用戶相關的伺服器,請相關軟體用戶和企事業單位提高警惕。
XshellGhost技術分析
「XshellGhost」(xshell幽靈)是一個精密的定向攻擊平台,所有的功能模塊實現均為shellcode形式,客戶端攻擊通過感染供應鏈軟體和各個shellcode模塊,實現了無自啟動項、無落地文件和多種通信協議的遠程控制,後門潛伏於受害者電腦等待黑客在雲控制平台下發shellcode數據執行,黑客在雲端甚至可能通過上傳的用戶信息進行選擇性的定向攻擊。
遠程控制邏輯分析
XshellGhost的遠程控制主要分為5個步驟:
1. 軟體啟動載入被感染組件nssock2.dll,解密shellcode1執行。
2. Shellcode1解密Shellcode2執行如下功能:
a) 創建註冊表項,上報數據到每月對應的DGA域名當中;
b) 通過發往知名的域名解析器當中上傳用戶信息給攻擊者;
c) 將接收的數據寫入到創建的註冊表項當中;
d) 通過獲取的key1和key2解密Shellcode 3並執行;
3. Shellcode3會創建日誌文件並寫入信息,啟動系統進程Svchost.exe,修改其oep處的代碼,並注入shellcode形式的Root模塊執行。
4. Root模塊的初始化過程中,會載入並初始化Plugins、Config、Install、Online和DNS等功能模塊,然後調用函數Install->InstallByCfg以獲取配置信息,監控註冊表並創建全局互斥體,調用Online-> InitNet;
5. 函數Online-> InitNet會根據其配置初始化網路相關資源,向指定服務地址發送信息,並等待雲端動態下發代碼進行下一步攻擊。
初始載入模塊分析
此次攻擊的所有模塊調度載入實現方式都是通過shellcode形式,採用了模塊化的方法進行統一管理。每個Shellcode的入口函數都會根據傳入的第2個參數的數值決定將其具體要執行的功能,參數數值和對應的功能列表如下所示:
編號
作用
1
| 初始化shellcode自身的相關信息 |
100 | 相關初始化,獲取shellcode Root的功能列表 |
101 | 釋放shellcode申請的資源 |
102 | 獲取shellcode的ID |
103 | 獲取shellcode的名稱 |
104 | 獲取shellcode的函數列表介面 |
根據Shellcode編號102、103和104所對應的功能,可以獲取每個Shellcode的信息列表:
ID
名稱
狀態
100 | Root | 已知 |
101 | Plugins | 已知 |
102 | Config | 已知 |
103 | Install | 已知 |
104 | Online | 已知 |
關鍵的網路通信模塊,除DNS協議通信,此後門還會利用其他5種網路協議進行遠程控制。
ID
名稱
狀態
200 | TCP | 未知 |
201 | HTTP | 未知 |
202 | UDP | 未知 |
203 | DNS | 已知 |
204 | HTTPS | 未知 |
205 | SSL | 未知 |
基礎管理模塊分析
Root模塊是該次攻擊的基礎管理模塊,其它各個模塊的功能的展開和運行都依賴於Root模塊提供的函數介面列表:
ID
名稱
作用
1 | 空指針 | |
2 | InsertShellcodeInfo | 獲取shellcode的信息,保存在全局shellcode信息鏈表當中 |
3 | ShellCodeQueryIncRef | 通過shellcode的地址在全局信息鏈表中查詢對應的信息指針,並增加引用 |
4 | ShellCodeQueryIncRef | 通過shellcode的ID在全局信息鏈表中查詢對應的信息指針,並增加引用 |
5 | ShellCodeQueryDecRef | 減少shellcode信息指針的引用計數。 |
6 | ShellCodeQueryDecRef | 先判斷shellcode的結構成員(0×18 0x1c)。如果都為0 ,則減少引用計數 |
7 | ShellCodeGetName | 獲取該shellcode的名稱 |
8 | EnterCriSec | 進入全局信息鏈表的臨界區 |
9 | LeaveCriSec | 離開全局信息鏈表的臨界區 |
10 | GetLastShellcodeInfo | 獲取最後一個被插入到全局鏈表的shellcode的信息 |
11 | GetNextShellcodeInfo | 獲取當前shellcode所指向的下一個shellcode指針 |
12 | LoadDll | 調用LoadDllEx |
13 | LoadDllEx | Shellcode以dll文件的形式存在,載入對應的dll文件,並將 Shellcode對應的信息保存到全局shellcode信息鏈表中 |
14 | LoadAndInsertShellcode | 調用LoadAndInsertShellcodeEx |
15 | LoadAndInsertShellcodeEx | 載入轉換後的shellcode,依次調用其功能號1、100 、102、104,然後將信息添加到全局shellcode 信息鏈表中 |
16 | LoadShellcode | 載入shellcode,並調用其功能號1 |
17 | InjectShellcode | 調用InjectShellcodeEx,第3個參數為0 |
18 | InjectShellcodeEx | 注入到指定的進程句柄當中,根據第3個參數決定啟動該shellcode的方式: 0 :更改進程oep處的代碼跳轉到載入處 1:直接遠程線程啟動 shellcode 的載入代碼 |
19 | TransDataInternal | 根據傳入的鍵值轉換數據的編碼格式 |
20 | TransDataInternal | 根據傳入的鍵值轉換數據的編碼格式 |
21 | Malloc | 申請空間 |
22 | TransDataByTime | 根據當前時間轉換數據的編碼格式 |
23 | TransDataEx | 根據數據頭轉換數據的編碼格式,並返迴轉換後的數據的相關信息 |
24 | TransData | 根據數據頭轉換數據的編碼格式 |
25 | Free | 釋放空間 |
26 | GetTimeSum | 獲取時間的總和 |
27 | TransChr | 對字元取模0x3E。餘數在區間[0x1a,0x34)中時,+0x47 ;餘數在區間左邊時,+0x41;否則-0x04 |
Root模塊的初始化邏輯如下圖所示:
插件功能模塊分析
Plugins模塊為其他插件提供介面,包括讀寫註冊表指定欄位的加密數據,載入DLL等,以及監控註冊表指定欄位變化並將其數據解密作為插件載入:
ID
名稱
作用
1 | OpByCmd | 根據命令提供向註冊表指定key寫入加密Value和刪除Value ,載入DLL等功能 |
2 | MonitorRegLoadShellocde | 監控註冊表指定key更改並載入插件。若參數為0,則不會創建註冊表鍵,否則會創建註冊表鍵 |
3 | RegOpenKeyAndQueryValue | 打開並查詢註冊表的鍵值 |
4 | RegCreateKeyAndSetValue | 創建並設置對應註冊表路徑的鍵值 |
5 | RegOpenKeyAndDeleteValue | 打開並刪除註冊表相應的鍵值 |
在調用Install模塊的InstallByCfg函數時,會調用Plugins模塊的MonitorRegLoadShellCode函數。該函數負責監控註冊表指定key,如果key值被改變,該函數將會讀取註冊表中的數據並調用Root模塊的LoadAndInsertShellcodeEx函數將其載入。
如果網路控制端下發調用Plugins模塊的OpByCmd函數的指令,將會設置其註冊表指定key的數據,過後MonitorRegLoadShellCode函數將會監控到key值發生改變,讀取註冊表數據動態載入下發的Shellcode代碼。
C&C配置模塊分析
配置模塊Config主要負責管理當前機器當中的配置文件以及對應機器的ID:
ID
名稱
作用
1 | OpByCmd | 根據Command執行對應的config操作,調用Online 模塊的SendTans進行反饋 |
2 | GetCfgCon | 讀取文件中的Config參數 |
3 | RandomStr | 根據VolumeSerialNumber生成隨機字元串,在同一個機器中固定 |
該模塊包含了一個大小最大為0x858的配置數據塊,其中配置數據塊是從文件中讀取的,文件位置是由該模塊的第三個函數RandomStr提供
隨機串生成的過程跟系統的卷序列號相關,所以在不同的機器上其位置並不相同。但是其有固定的格式,RandomStr均為大寫字母:
%ALLUSERSPROFILE%RandomStr RandomStr RandomStr RandomStr
配置信息是加密存儲在配置文件中的,通過調用該模塊的介面函數,可以獲取解密後的配置文件,配置數據塊的結構如下:
配置塊的頭部是一個OffsetTable,其中記錄了各項配置串相對於EncryptStringStub的偏移,
目前已知的配置位置:
OffsetTable [8]
OffsetTable
[0xC]
配置塊0×18CC
URL
地址和CC
類型原始串的前2個位元組為本串加密的Key,之後通過解密函數解密獲取解密後的串,所以解密後的串長度要比原始串的長度少2。經分析還原的解密函數如下:
通過對程序自身的配置文件進行分析:
注入程序路徑,加密前的字元:
x1FxE5x3Ax86xF4x31xFFxB8x9Fx64x81x96xAAxC4xB1xF0x02x5ExC5xB1x3ExAFx98x19xF6x00x21x39x20xC5xC4x39
解密後:
%
windir
%system32
svchost
.exe
CC遠程命令控制伺服器的 URL,加密前的串:
x7Bx3Cx1Fx9Fx7Ex01xA0x08xF0xF6x1Cx7Fx71x60xBDx63x66x95x7BxE6x62x4CxB3
解密後:dns://www.notped.com
DNS查詢地址:
8.8.8.8
8.8.4.4
4.2.2.1
4.2.2.2
代碼注入模塊分析
主體代碼注入模塊Install,負責將Root模塊代碼注入到指定的進程當中,以及調用Online模塊的相關初始化工作:
ID
名稱
作用
1 | OpByCmd | 如果數值為0x00006700,根據參數和shellcode信息調用Shellcode Online 的SendTrans 如果數值為0x01006700,根據參數和 shellcode信息調用Shellcode Online的SendTrans ,如果返回結果為 0,則休眠3秒。 如果全局ShellcodeInfo 信息結構體(Shellcode Root)中的Op選項不為4 ,則退出進程。 |
2 | InstallByCfg |
函數InstallByCfg的邏輯如下所示:
功能A:
1、 調用Plugins的MonitorRegLoadShellCode函數,創建並監控指定註冊表鍵,讀取註冊表數據載入shellcode執行;
2、 調用Config的RandomStr函數獲取字元串,用來創建全局互斥體
a) 如果全局互斥體已存且Root的Op數值為3,結束自身進程。
b) 調用 Online的 InitNet,初始化網路模塊
功能B:
1、 調用Plugins的MonitorRegLoadShellCode函數,打開並監控指定註冊表鍵, 讀取註冊表數據載入shellcode執行;
2、 查詢Shellcode 106,如果不存在,則休眠1秒繼續查詢
3、 調用Shellcode 106的第2個介面函數
功能C:
1、 調用Config的函數GetCfgCon獲取配置文件中保存的Pe路徑
2、 啟動Pe,修改Oep處的代碼,注入Shellcode Root
a) 如果失敗,則創建線程調用功能A
b) 如果成功,則結束自身
網路通信模塊分析
Online模塊是本次攻擊的網路通信管理模塊,在本次攻擊事件當中我們已經發現了DNS模塊,其它幾個網路模塊(TCP、HTTP、UDP、HTTPS、SSL)雖然在代碼當中有所體現,但是在shellcode當中尚未主動運行,各個網路模塊的函數介面及其作用如下表所示:
ID
名稱
作用
1 | 空指針 | |
2 | GetConObj | 返回該種網路通信時所使用到的對象 |
3 | Start | 發送初始化數據包 |
4 | Recv | 接受消息 |
5 | Send | 發送消息 |
6 | Shutdown | 發送shutdown數據包 |
7 | Close | 關閉連接 |
各個網路模塊的功能的展開和運行依賴於Online模塊提供的函數介面列表:
ID
名稱
作用
1 | OpByCmd | 根據命令實現收集機器的硬體信息等功能 |
2 | InitNet | 根據配置文件初始化網路模塊 |
3 | GetConPluginObj | 根據傳入的Shellcode的ID獲取對應的通信Shellcode 對象,調用通信對象的第2個介面函數GetConObj獲取該Shellcode 通信定義的對象 |
4 | Start | 調用傳入的Shellcode指針所對應的第3個函數(傳入的shellcode 為通信模塊,第3個函數統一為發送初始化數據包); |
5 | Recv | 調用傳入的Shellcode指針所對應的第4個函數(傳入的shellcode 為通信模塊,第4個函數統一為接收消息) |
6 | RecvLoop | 根據傳入的大小,多次調用Recv,獲取要接受的數據 |
7 | RecvTrans | 調用RecvLoop轉換後獲取到要接受的數據大小,循環調用RecvLoop獲取所有數據,最終調用 Root的TransDataEx |
8 | Send | 調用傳入的Shellcode指針所對應的第5個函數(傳入的shellcode 為通信模塊,第5個函數統一為發送消息) |
9 | SendLoop | 根據傳入的大小,多次調用Send,發送完所有數據 |
10 | SendTrans | 根據時間轉換數據格式,SendLoop |
11 | RecvSend | 創建線程進行對應Shellcode的(Recv和Send) 操作 |
12 | Shutdown | 調用傳入的Shellcode指針所對應的第6個函數(傳入的shellcode 為通信模塊,第6個函數統一為發送shutdown數據包) |
13 | Close | 調用傳入的Shellcode指針所對應的第7個函數(傳入的shellcode 為通信模塊,第7個函數統一為關閉連接);減少對應Shellcode的引用計數 |
14 | GetId | 獲取傳入的Shellcode所對應的ID |
InitNet在讀取網路代理配置以後每隔1秒調用功能A,如果功能A返回20000,則函數徹底結束,功能A邏輯:
功能B邏輯,用於等待雲端下發代碼執行:
此次攻擊已知使用的通信模塊是DNS模塊,該後門基於DNS隧道技術進行通信:
ID
名稱
作用
1 | 空指針 | |
2 | GetConObj | 返回自定義對象,DNS通信時使用 |
3 | Start | 發送初始化數據包,開啟線程等待數據結束 |
4 | Recv | 接受消息,有客戶端連接時設置Event1 |
5 | Send | 發送消息,有客戶端連接時設置Event2 |
6 | SendShutdown | 發送shutdown數據包 |
7 | CloseConnect | 關閉連接 |
該模塊發送的數據包有3種類型:
1.初始化數據包,大小為0x18
2.Data數據包,大小0x8+
3.關閉數據包, 大小0x8
其發送函數如下:
在調用DNS模塊2號函數返回自定義對象時,其調用了GetAdaptersAddresses獲取適配器的DNS
總結 總結最多收集0x10個DNS,隨後在調用該模塊第3號函數時,其使用收集到的DNS,合併Config文件中的4個DNS地址,循環往每一個DNS發送查詢,等到到任何一個返回數據,或者超時,並記錄下第一個返回應答的DNS數據包,以後再次發送的時候,只會給第一個返回應答的DNS發送數據。
在發送數據包時,會將數據嵌套到DNS協議中發送,其中數據會編碼成特定的字元串,添加在要配置文件中的CC DNS URL前,實現DNS隧道通訊。
總結
通過技術分析,我們發現「XshellGhost」(xshell幽靈)是一整套複雜的模塊化的精密木馬病毒,這是一起黑客入侵供應鏈軟體商後進行的有組織有預謀的大規模定向攻擊,我們仍將會持續關注此次攻擊的進一步發展,建議廣大用戶使用360安全衛士查殺「XshellGhost」(xshell幽靈)木馬病毒和防禦供應鏈軟體攻擊。
360追日團隊(Helios Team)
360 追日團隊(HeliosTeam)是360科技集團下屬的高級威脅研究團隊,從事APT攻擊發現與追蹤、互聯網安全事件應急響應、黑客產業鏈挖掘和研究等工作。團隊成立於2014年12月,通過整合360公司海量安全大數據,實現了威脅情報快速關聯溯源,獨家首次發現並追蹤了三十餘個APT組織及黑客團伙,大大拓寬了國內關於黑客產業的研究視野,填補了國內APT研究的空白,並為大量企業和政府機構提供安全威脅評估及解決方案輸出。
已公開APT相關研究成果
發布時間
報告名稱
組織編號
報告鏈接
2015.05.29 | 海蓮花:數字海洋的遊獵者 持續3年的網路空間威脅 | APT-C-00 | http://zhuiri.360.cn/report/index.php/2015/05/29/apt-c-00/ |
2015.12.10 | 007黑客組織及地下黑產活動分析報告 | https://ti.360.com/upload/report/file/Hook007.pdf | |
2016.01.18 | 2015年中國高級持續性威脅APT研究報告 | http://zhuiri.360.cn/report/index.php/2016/01/18/apt2015/ | |
2016.05.10 | 洋蔥狗:交通能源的覬覦者 潛伏3年的定向攻擊威脅 | APT-C-03 | http://zhuiri.360.cn/report/index.php/2016/05/10/apt-c-03/ |
2016.05.13 | DarkHotel定向攻擊樣本分析 | APT-C-06 | http://bobao.360.cn/learning/detail/2869.html |
2016.05.30 | 美人魚行動:長達6年的境外定向攻擊活動揭露 | APT-C-07 | http://zhuiri.360.cn/report/index.php/2016/05/30/apt-c-07/ |
2016.06.03 | SWIFT之殤:針對越南先鋒銀行的黑客攻擊技術初探 | http://bobao.360.cn/learning/detail/2890.html | |
2016.07.01 | 人面獅行動 中東地區的定向攻擊活動 | APT-C-15 | http://zhuiri.360.cn/report/index.php/2016/07/01/apt-c-15/ |
2016.07.21 | 台灣第一銀行ATM機「自動吐錢」 事件分析 | http://bobao.360.cn/news/detail/3374.html | |
2016.08.04 | 摩訶草組織 來自南亞的定向攻擊威脅 | APT-C-09 | http://zhuiri.360.cn/report/index.php/2016/08/04/apt-c-09/ |
2016.08.09 | 關於近期曝光的針對銀行SWIFT系統攻擊事件綜合分析 | http://zhuiri.360.cn/report/index.php/2016/08/25/swift/ | |
2016.11.15 | 蔓靈花攻擊行動(簡報) | http://zhuiri.360.cn/report/index.php/2016/11/04/bitter/ |
*本文作者:360追日團隊(郵箱:360zhuiri@360.cn),轉載請註明FreeBuf.COM
※《網路安全法》執法案例匯總
※「移花接木」偷換廣告:HTTPS劫匪木馬每天打劫200萬次網路訪問
※一周「BUF大事件」:2017CSS中國互聯網安全領袖峰會舉行;暴雪娛樂遊戲遭DDoS攻擊
※特別企劃 | 國內外頂級漏洞賞金計劃
※網吧營銷大師投放「QQ部落刷粉」病毒
TAG:FreeBuf |
※加密貨幣挖礦惡意軟體使用Windows installer繞過技術
※Lemnis旨在VR變焦技術推出新軟體和硬體平台Verifocal
※Malwarebytes對Mac惡意軟體通過攔截加密流量進行廣告注入的分析
※JasperLoader:主攻義大利的惡意軟體載入器
※Silexica加盟Renovo的AWare生態系統 提供SLX編程工具助力軟體的分析與優化
※惡意軟體針對Google的DoubleClick
※SynAck成首個使用Process Doppelg?nging代碼注入技術的勒索軟體
※黑客利用Excel文檔執行ChainShot惡意軟體攻擊
※一個可以動態分析惡意軟體的工具——Kernel Shellcode Loader
※如何用 iPad Pro 剪輯,移動端最強大的剪輯軟體 Lumafusion
※Phantom-Evasion:反病毒軟體繞過測試工具
※Waymo軟體工程總監Sacha Arnoud:Waymo還需在應用場景和語義理解方面繼續突破
※CrossRat遠程控制軟體的分析
※黑客利用Excel文檔來執行ChainShot惡意軟體攻擊
※惡意軟體利用Windows組件WMI和CertUtil攻擊巴西
※Cloud Next:Google Cloud Run將無伺服器基礎設施帶入軟體容器
※新型惡意軟體Nigelthorn通過Facebook和Chrome插件傳播
※基於DNS通信的Powershell惡意軟體DNSMessenger分析
※Electron 軟體框架漏洞影響眾多熱門應用:Skype、Signal、Slack、Twitch……
※AgileBits否認蘋果在收購密碼管理軟體1Password