您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Winnti黑客組織MSSQL后門的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Winnti黑客組織MSSQL后門的示例分析”這篇文章吧。
一段時間以來,ESET的研究人員一直在跟蹤Winnti的活動,該組織從2012年起就開始活躍,并針對視頻游戲和軟件行業供應鏈進行攻擊。最近,發現了一個以前未經記錄的后門,其目標是Microsoft SQL(MSSQL)。這個后門與PortReuse后門有多處相似之處,PortReuse是Winnti Group使用的另一個工具,于2019年10月首次記錄。
今年檢測到了一個新后門的樣本,skip-2.0,作者是winnti組織成員。這個后門程序以MSSQL服務器11和12為目標,攻擊者可以使用magic密碼連接到任何MSSQL帳戶,同時自動將這些連接隱藏在日志中。后門允許攻擊者復制、修改或刪除數據庫內容,可以用來操縱游戲中的貨幣以獲取經濟利益。據了解,skip-2.0是第一個公開記錄的mssql服務器后門。
本文將重點介紹mssql服務器后門的技術細節和功能,以及skip.2-0與winnti已知武器庫(特別是portreuse后門和shadowpad)的技術相似性。
我們在查找vmprotected啟動程序時找到了skip-2.0,其有效負載通常是portreuse或shadowpad。
與加密的portreuse和shadowpad有效負載一樣,skip-2.0嵌入到vmprotected啟動程序中,如圖1所示:
有效負載加密與其他vmprotected啟動程序中使用的相同。它是RC5加密的,密鑰來自volumeID和字符串f@ukd!RCTO R$。
與portreuse和shadowpad的一樣,啟動程序可能會通過利用dll劫持而持續存在,方法是將其安裝在c:\windows\system32\tsvipsrv.dll。這將導致標準Windows SessionEnv服務在系統啟動時加載DLL。
一旦解密,嵌入的有效負載實際上是winnti group的自定義打包程序。這個打包器與我們在白皮書中記錄的代碼是相同的。它被用來打包portreuse后門以及嵌入在受損視頻游戲中的負載。
打包程序配置包含打包二進制文件的解密密鑰及其原始文件名、大小和執行類型(exe或dll)。有效載荷配置如表1所示。
打包器配置可以看出,有效負載稱為內部裝載器。內部加載程序是一個注入器的名稱,它是winnti集團的武庫的一部分,用于將portreuse后門注入監聽特定端口的進程。
這是一種內部加載程序的變體,不是像注入portreuse后門時那樣尋找監聽特定端口的進程,而是尋找名為sqlserv.exe的進程,這是mssql server的常規進程名。如果找到,則內部加載程序會將有效負載注入此進程。此有效負載還與自定義打包程序打包在一起,該有效負載的打包程序配置如表2所示。
此注入負載的原始文件名為skip-2.0.dll。
在被內部加載程序注入并啟動之后,skip-2.0首先檢查它是否在sqlserv.exe進程中執行,如果是,則檢索sqllang.dll的句柄,該句柄由sqlserv.exe加載。然后繼續從該dll中查找并掛接多個函數。圖2描述了skip-2.0的運行過程。
skip-2.0使用的hook過程與netagent非常相似,netagent是負責安裝網絡hook的portreuse模塊。這個hook庫基于distorm開源反匯編程序,該反匯編程序由多個開源掛接框架使用。需要一個反匯編庫來正確計算要hook的指令的大小。在下圖中可以看到,NetAgent和Skip-2.0使用的hook過程幾乎相同。
圖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,從而允許連接。然后設置一個全局標志,該標志將由負責事件日志記錄的其他hook函數進行檢查。相應的反編譯過程如圖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庫中找到。
skip-2.0和來自winnti的其他工具有很多相似之處。vmprotected啟動程序、自定義打包程序、內部加載程序和hook框架是winnti工具集的一部分。
以上是“Winnti黑客組織MSSQL后門的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。