首頁  >  文章  >  運維  >  Winnti駭客組織MSSQL後門的範例分析

Winnti駭客組織MSSQL後門的範例分析

PHPz
PHPz轉載
2023-05-27 21:04:301401瀏覽

一段時間以來,ESET的研究人員一直在追蹤Winnti的活動,該組織從2012年起就開始活躍,並針對視訊遊戲和軟體產業供應鏈進行攻擊。最近發現一處以前未登記的後門,攻擊目標為Microsoft SQL(MSSQL)系統。這個後門與PortReuse後門有多處相似之處,PortReuse是Winnti Group使用的另一個工具,於2019年10月首次記錄。

Winnti組織成員發布了一個新的後門樣本,名為Skip-2.0,今年偵測到了該樣本。這個後門程式以MSSQL伺服器11和12為目標,攻擊者可以使用magic密碼連接到任何MSSQL帳戶,同時自動將這些連線隱藏在日誌中。攻擊者可以利用後門進入資料庫,複製、修改或刪除其中的內容,從而操縱遊戲內貨幣,以獲取經濟利益。根據了解,Skip-2.0是第一個被公開記錄的MSSQL伺服器後門。

本文將重點介紹mssql伺服器後門的技術細節和功能,以及skip.2-0與winnti已知武器庫(特別是portreuse後門和shadowpad)的技術相似性。

vmprotected啟動程式

我們在尋找vmprotected啟動程式時找到了skip-2.0,其有效負載通常是portreuse或shadowpad。

嵌入式有效載荷

與加密的portreuse和shadowpad有效負載一樣,skip-2.0嵌入到vmprotected啟動程式中,如圖1所示:

Winnti駭客組織MSSQL後門的範例分析

#加密

與其他使用VMProtect啟動程式的相同,有效載荷也要進行加密。此加密方式採用RC5演算法,金鑰由volumeID和字串"f@ukd!RCTO R$"組成。

持久性

與portreuse和shadowpad的一樣,啟動程式可能會透過利用dll劫持而持續存在,方法是將其安裝在c:\windows\system32\tsvipsrv.dll。這會讓系統啟動時標準的Windows SessionEnv服務會載入DLL。

打包器

嵌入有效負載的解密後,實際上是winnti群組的自訂打包程式。這個打包器與我們在白皮書中記錄的程式碼是相同的。該工具被用於打包PortReuse後門,並將負載嵌入到受損的視訊遊戲中。

設定

程式打包設定中包含解密二進位檔案所需的金鑰,以及原始檔案的名稱、大小和執行類型(exe或dll)。有效載荷配置如表1所示。

Winnti駭客組織MSSQL後門的範例分析

打包器配置可以看出,有效負載稱為內部裝載器。內部載入程式是一個注入器的名稱,它是winnti集團的武庫的一部分,用於將portreuse後門注入監聽特定連接埠的進程。

內部載入器

這是內部載入程式的變體,不是像注入portreuse後門時那樣尋找監聽特定連接埠的進程,而是尋找名為sqlserv.exe的進程,這是mssql server的常規進程名。如果找到,則內部載入程式會將有效負載注入此進程。此有效負載與自訂打包程式一起打包,該打包程式的配置列於表2中。

Winnti駭客組織MSSQL後門的範例分析

此註入負載的原始檔案名稱為skip-2.0.dll。

skip-2.0

在被內部載入程式註入並啟動之後,skip-2.0首先檢查它是否在sqlserv.exe進程中執行,如果是,則檢索sqllang.dll的句柄,該句柄由sqlserv.exe載入。然後繼續從該dll中尋找並掛接多個函數。圖2描述了skip-2.0的運作過程。

Winnti駭客組織MSSQL後門的範例分析

Hooking sqllang.dll

skip-2.0所使用的hook流程與netagent非常相似,netagent是負責安裝網路hook的portreuse模組。這個hook函式庫建立在開源的distorm反組譯器基礎上,多個開源的掛接框架也使用了這個反組譯器。需要一個反組譯函式庫來正確計算要hook的指令的大小。幾乎相同的hook過程被NetAgent和Skip-2.0使用,如下圖所示。

Winnti駭客組織MSSQL後門的範例分析

圖3Hex-Rays output comparison between the NetAgent (left) and skip-2.0 (right) hooking procedures

有一個顯著的差異就是skip- 2.0中的hooking函數將要安裝的鉤子的位址作為參數,而對於netagent,要安裝的鉤子的位址是硬編碼的。這是因為skip-2.0必須hooksqllang.dll中的多個函數才能正常運行,而netagent只針對一個函數。

要定位hook的每個sqllang.dll函數,skip-2.0首先透過解析pe頭來檢索載入到記憶體中的dll的大小(即其虛擬大小)。接著,需初始化sqllang.dll中需要匹配的位元組數組,參考圖4。一旦找到與位元組數組相符的第一個匹配項的位址,就會使用圖3所示的程序安裝鉤子。

Winnti駭客組織MSSQL後門的範例分析

然後,鉤子安裝成功後會在cleartext中記錄,該檔案位於硬編碼路徑c:\ windows\temp\ts\u 2ce1.tmp中,如圖5所示。

Winnti駭客組織MSSQL後門的範例分析

如果找不到目標函數,鉤子安裝程式將搜尋具有不同位元組模式集的回退函數。

透過匹配位元組序列來定位目標函數的位址,而不是使用靜態偏移量,再加上使用位元組的回退序列,skip-2.0可以更靈活地適應mssql更新,並可針對多個sqllang.dll更新。

密碼控制

skip-2.0的目標函數與驗證和事件日誌記錄相關。目標功能包括:

CPwdPolicyManager::ValidatePwdForLogin
CSECAuthenticate::AuthenticateLoginIdentity
ReportLoginSuccess
IssueLoginSuccessReport
FExecuteLogonTriggers
XeSqlPkg::sql_statement_completed::Publish
XeSqlPkg::sql_batch_completed::Publish
SecAuditPkg::audit_event::Publish
XeSqlPkg::login::Publish
XeSqlPkg::ual_instrument_called::Publish

其中最有趣的函數是第一個函數(cpwdpolicymanager::validatepwdforlogin),它負責驗證為給定使用者提供的密碼。

此函數的鉤子檢查使用者提供的密碼是否與magic密碼相符;如果是,則不會呼叫原始函數,鉤子將傳回0,從而允許連接。接下來,設立一個全域標識,由其他負責事件日誌記錄的鉤子函數進行檢查。對應的反編譯過程如圖6所示。在設定此全域標誌的情況下,hook的日誌記錄函數將靜默傳回,而不呼叫其對應的原始函數,因此不會記錄操作。

Winnti駭客組織MSSQL後門的範例分析

如果使用magic密碼登錄,reportloginsaccess和issueloginsuccessreport掛鉤將不會呼叫原始函數。 feexecutelogontriggers也適用於同樣的行為。其他日誌記錄功能,如xesqlpkg::sql_completed::publish或xesqlpkg::sql_batch_completed::publish,在使用者使用魔法密碼登入的情況下也會停用。也停用了多個審核事件,包括secauditpkg::audit_event::publish、xesqlpkg::login::publish和xesqlpkg::uau instrument_called::publish。

這一系列hook不僅允許攻擊者透過特殊密碼在受害者的mssql伺服器中獲得持久控制,而且使用該密碼時禁用了多個日誌,因此無法偵測到攻擊者。

研究人員對多個MSSQL Server版本測試了Skip-2.0,發現能夠使用MSSQL Server 11和12的密碼成功登入。為了檢查skip-2.0是否針對特定的sqllang.dll版本,創建了一個yara規則,該規則可以在github庫中找到。

與Winnti的聯繫

skip-2.0和來自winnti的其他工具有很多相似之處。 vmprotected啟動程式、自訂打包程式、內部載入程式和hook框架是winnti工具集的一部分。

以上是Winnti駭客組織MSSQL後門的範例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除