一段時間以來,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所示:
#加密
與其他使用VMProtect啟動程式的相同,有效載荷也要進行加密。此加密方式採用RC5演算法,金鑰由volumeID和字串"f@ukd!RCTO R$"組成。
持久性
與portreuse和shadowpad的一樣,啟動程式可能會透過利用dll劫持而持續存在,方法是將其安裝在c:\windows\system32\tsvipsrv.dll。這會讓系統啟動時標準的Windows SessionEnv服務會載入DLL。
打包器
嵌入有效負載的解密後,實際上是winnti群組的自訂打包程式。這個打包器與我們在白皮書中記錄的程式碼是相同的。該工具被用於打包PortReuse後門,並將負載嵌入到受損的視訊遊戲中。
設定
程式打包設定中包含解密二進位檔案所需的金鑰,以及原始檔案的名稱、大小和執行類型(exe或dll)。有效載荷配置如表1所示。
打包器配置可以看出,有效負載稱為內部裝載器。內部載入程式是一個注入器的名稱,它是winnti集團的武庫的一部分,用於將portreuse後門注入監聽特定連接埠的進程。
內部載入器
這是內部載入程式的變體,不是像注入portreuse後門時那樣尋找監聽特定連接埠的進程,而是尋找名為sqlserv.exe的進程,這是mssql server的常規進程名。如果找到,則內部載入程式會將有效負載注入此進程。此有效負載與自訂打包程式一起打包,該打包程式的配置列於表2中。
此註入負載的原始檔案名稱為skip-2.0.dll。
skip-2.0
在被內部載入程式註入並啟動之後,skip-2.0首先檢查它是否在sqlserv.exe進程中執行,如果是,則檢索sqllang.dll的句柄,該句柄由sqlserv.exe載入。然後繼續從該dll中尋找並掛接多個函數。圖2描述了skip-2.0的運作過程。
Hooking sqllang.dll
skip-2.0所使用的hook流程與netagent非常相似,netagent是負責安裝網路hook的portreuse模組。這個hook函式庫建立在開源的distorm反組譯器基礎上,多個開源的掛接框架也使用了這個反組譯器。需要一個反組譯函式庫來正確計算要hook的指令的大小。幾乎相同的hook過程被NetAgent和Skip-2.0使用,如下圖所示。
圖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所示的程序安裝鉤子。
然後,鉤子安裝成功後會在cleartext中記錄,該檔案位於硬編碼路徑c:\ windows\temp\ts\u 2ce1.tmp中,如圖5所示。
如果找不到目標函數,鉤子安裝程式將搜尋具有不同位元組模式集的回退函數。
透過匹配位元組序列來定位目標函數的位址,而不是使用靜態偏移量,再加上使用位元組的回退序列,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的日誌記錄函數將靜默傳回,而不呼叫其對應的原始函數,因此不會記錄操作。
如果使用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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3漢化版
中文版,非常好用

Dreamweaver Mac版
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載
最受歡迎的的開源編輯器