Winnti黑客組織MSSQL后門的示例分析

一段時(shí)間以來(lái),eset的研究人員一直在跟蹤winnti的活動(dòng),該組織從2012年起就開(kāi)始活躍,并針對(duì)視頻游戲和軟件行業(yè)供應(yīng)鏈進(jìn)行攻擊。最近發(fā)現(xiàn)一處以前未被登記的后門,其攻擊目標(biāo)為microsoft sqlmssql)系統(tǒng)。這個(gè)后門與portreuse后門有多處相似之處,portreuse是winnti group使用的另一個(gè)工具,于2019年10月首次記錄。

Winnti組織成員發(fā)布了一個(gè)新的后門樣本,名為Skip-2.0,今年檢測(cè)到了該樣本。這個(gè)后門程序以MSSQL服務(wù)器11和12為目標(biāo),攻擊者可以使用magic密碼連接到任何MSSQL帳戶,同時(shí)自動(dòng)將這些連接隱藏在日志中。攻擊者可以利用后門進(jìn)入數(shù)據(jù)庫(kù),復(fù)制、修改或刪除其中的內(nèi)容,從而操縱游戲內(nèi)貨幣,以獲取經(jīng)濟(jì)利益。根據(jù)了解,Skip-2.0是第一個(gè)被公開(kāi)記錄的MSSQL服務(wù)器后門。

本文將重點(diǎn)介紹mssql服務(wù)器后門的技術(shù)細(xì)節(jié)和功能,以及skip.2-0與winnti已知武器庫(kù)(特別是portreuse后門和shadowpad)的技術(shù)相似性。

vmprotected啟動(dòng)程序

我們?cè)诓檎襳mprotected啟動(dòng)程序時(shí)找到了skip-2.0,其有效負(fù)載通常是portreuse或shadowpad。

嵌入式有效載荷

與加密的portreuse和shadowpad有效負(fù)載一樣,skip-2.0嵌入到vmprotected啟動(dòng)程序中,如圖1所示:

Winnti黑客組織MSSQL后門的示例分析

加密

與其他使用VMProtect啟動(dòng)程序的相同,有效載荷也要進(jìn)行加密。該加密方式采用RC5算法,密鑰由volumeID和字符串”f@ukd!RCTO R$”組成。

持久性

與portreuse和shadowpad的一樣,啟動(dòng)程序可能會(huì)通過(guò)利用dll劫持而持續(xù)存在,方法是將其安裝在c:windowssystem32tsvipsrv.dll。這會(huì)使得系統(tǒng)啟動(dòng)時(shí)標(biāo)準(zhǔn)的Windows SessionEnv服務(wù)加載DLL。

打包器

嵌入有效負(fù)載的解密后,實(shí)際上是winnti組的自定義打包程序。這個(gè)打包器與我們?cè)诎灼杏涗浀拇a是相同的。該工具被用于打包PortReuse后門,并將負(fù)載嵌入到受損的視頻游戲中。

配置

程序打包配置中包含解密二進(jìn)制文件所需的密鑰,以及原始文件的名稱、大小和執(zhí)行類型(exe或dll)。有效載荷配置如表1所示。

Winnti黑客組織MSSQL后門的示例分析

打包器配置可以看出,有效負(fù)載稱為內(nèi)部裝載器。內(nèi)部加載程序是一個(gè)注入器的名稱,它是winnti集團(tuán)的武庫(kù)的一部分,用于將portreuse后門注入監(jiān)聽(tīng)特定端口的進(jìn)程。

內(nèi)部加載器

這是一種內(nèi)部加載程序的變體,不是像注入portreuse后門時(shí)那樣尋找監(jiān)聽(tīng)特定端口的進(jìn)程,而是尋找名為sqlserv.exe的進(jìn)程,這是mssql server的常規(guī)進(jìn)程名。如果找到,則內(nèi)部加載程序會(huì)將有效負(fù)載注入此進(jìn)程。此有效負(fù)載與自定義打包程序一起打包,該打包程序的配置列于表2中。

Winnti黑客組織MSSQL后門的示例分析

此注入負(fù)載的原始文件名為skip-2.0.dll。

skip-2.0

在被內(nèi)部加載程序注入并啟動(dòng)之后,skip-2.0首先檢查它是否在sqlserv.exe進(jìn)程中執(zhí)行,如果是,則檢索sqllang.dll的句柄,該句柄由sqlserv.exe加載。然后繼續(xù)從該dll中查找并掛接多個(gè)函數(shù)。圖2描述了skip-2.0的運(yùn)行過(guò)程。

Winnti黑客組織MSSQL后門的示例分析

Hooking sqllang.dll

skip-2.0使用的hook過(guò)程與netagent非常相似,netagent是負(fù)責(zé)安裝網(wǎng)絡(luò)hook的portreuse模塊。該hook庫(kù)建立在開(kāi)源的distorm反匯編程序基礎(chǔ)上,多個(gè)開(kāi)源的掛接框架也使用了該反匯編程序。需要一個(gè)反匯編庫(kù)來(lái)正確計(jì)算要hook的指令的大小。幾乎相同的hook過(guò)程被NetAgent和Skip-2.0使用,如下圖所示。

Winnti黑客組織MSSQL后門的示例分析

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

有一個(gè)顯著的區(qū)別就是skip-2.0中的hooking函數(shù)將要安裝的鉤子的地址作為參數(shù),而對(duì)于netagent,要安裝的鉤子的地址是硬編碼的。這是因?yàn)閟kip-2.0必須hooksqllang.dll中的多個(gè)函數(shù)才能正常運(yùn)行,而netagent只針對(duì)一個(gè)函數(shù)。

要定位hook的每個(gè)sqllang.dll函數(shù),skip-2.0首先通過(guò)解析pe頭來(lái)檢索加載到內(nèi)存中的dll的大小(即其虛擬大小)。接著,需初始化sqllang.dll中需要匹配的字節(jié)數(shù)組,參照?qǐng)D4。一旦找到與字節(jié)數(shù)組匹配的第一個(gè)匹配項(xiàng)的地址,就會(huì)使用圖3所示的過(guò)程安裝鉤子。

Winnti黑客組織MSSQL后門的示例分析

然后,鉤子安裝成功后會(huì)在cleartext中記錄,該文件位于硬編碼路徑c: windowstemptsu 2ce1.tmp中,如圖5所示。

Winnti黑客組織MSSQL后門的示例分析

如果找不到目標(biāo)函數(shù),鉤子安裝程序?qū)⑺阉骶哂胁煌止?jié)模式集的回退函數(shù)。

通過(guò)匹配字節(jié)序列來(lái)定位目標(biāo)函數(shù)的地址,而不是使用靜態(tài)偏移量,再加上使用字節(jié)的回退序列,skip-2.0可以更靈活地適應(yīng)mssql更新,并可針對(duì)多個(gè)sqllang.dll更新。

密碼控制

skip-2.0的目標(biāo)函數(shù)與身份驗(yàn)證和事件日志記錄相關(guān)。目標(biāo)功能包括:

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

其中最有趣的函數(shù)是第一個(gè)函數(shù)(cpwdpolicymanager::validatepwdforlogin),它負(fù)責(zé)驗(yàn)證為給定用戶提供的密碼。

此函數(shù)的鉤子檢查用戶提供的密碼是否與magic密碼匹配;如果是,則不會(huì)調(diào)用原始函數(shù),鉤子將返回0,從而允許連接。接下來(lái),設(shè)立一個(gè)全局標(biāo)識(shí),由其他負(fù)責(zé)事件日志記錄的鉤子函數(shù)進(jìn)行檢查。相應(yīng)的反編譯過(guò)程如圖6所示。在設(shè)置此全局標(biāo)志的情況下,hook的日志記錄函數(shù)將靜默返回,而不調(diào)用其對(duì)應(yīng)的原始函數(shù),因此不會(huì)記錄操作。

Winnti黑客組織MSSQL后門的示例分析

如果使用magic密碼登錄,reportloginsaccess和issueloginsuccessreport掛鉤將不會(huì)調(diào)用原始函數(shù)。feexecutelogontriggers也適用于同樣的行為。其他日志記錄功能,如xesqlpkg::sql_completed::publish或xesqlpkg::sql_batch_completed::publish,在用戶使用魔法密碼登錄的情況下也將被禁用。還禁用了多個(gè)審核事件,包括secauditpkg::audit_event::publish、xesqlpkg::login::publish和xesqlpkg::uau instrument_called::publish。

這一系列hook不僅允許攻擊者通過(guò)特殊密碼在受害者的mssql服務(wù)器中獲得持久控制,而且使用該密碼時(shí)禁用了多個(gè)日志,因此無(wú)法檢測(cè)到攻擊者。

研究人員對(duì)多個(gè)MSSQL Server版本測(cè)試了Skip-2.0,發(fā)現(xiàn)能夠使用MSSQL Server 11和12的密碼成功登錄。為了檢查skip-2.0是否針對(duì)特定的sqllang.dll版本,創(chuàng)建了一個(gè)yara規(guī)則,該規(guī)則可以在github庫(kù)中找到。

與Winnti的聯(lián)系

skip-2.0和來(lái)自winnti的其他工具有很多相似之處。vmprotected啟動(dòng)程序、自定義打包程序、內(nèi)部加載程序和hook框架是winnti工具集的一部分。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊14 分享