史無前例:微軟 SQL Server 被黑客組織安上了後門 skip-2.0

(轉自奇安信代碼衛士)

ESET 一段時間以來都在追蹤 Winnti Group 的攻擊活動情況。Winnti Group 至少活躍於2012年並發動了多起高級別的針對視頻遊戲和軟件行業的供應鏈攻擊。最近,我們發現了針對微軟 SQL (MSSQL) 的後門,可導致攻擊者在受攻陷的組織機構內站穩腳跟。該後門和 Winnti Group 在2019年10月使用過的另外一款工具 PortReuse 後門之間存在很多相似之處,如使用了同樣的自定義數據包和 VMProtected 啟動器,這也是我們為什麼認為該後門是 Winnti Group 安的原因所在。

今年年初,我們收到了作者開發的新後門 skip-2.0 的樣本,它也是 Winnti Group 武器庫的一部分。該後門針對的是 MSSQL Server 11 和12,可使攻擊者通過使用一個魔力密碼隱秘地連接至任何 MSSQL 賬戶,同時自動將這些連接對日誌隱藏不可見。這類後門可導致攻擊者隱秘地複製、修改或刪除數據庫內容。例如,該後門可用於操縱遊戲幣獲取金錢利益。該黑客組織曾被指操縱遊戲幣數據庫。就我們所知,skip-2.0 是首個公開記錄的 MSSQL Server後門。注意,即使MSSQL Server 11 和12 並非最新版本(分別發佈於2012年和2014年),但根據 Censys 的數據可看出,這兩個版本是最常用的版本。

最近,我們發佈一份白皮書(見文末地址),說明了 Winnti Group 的武器庫,其中暴露了此前從未公開過的一個後門 PortReuse。該後門使用的打包程序和ESET 公司在2019年3月在受攻陷視頻遊戲中內嵌的 payload 使用的打包程序一樣。VMProtected 啟動器釋放 PortReuse 後門,還被用於啟動最新的 ShadowPad 版本。在當時的上下文,我們找到了一款被開發人員命名為 skip.2-0 的新工具。它使用了相同的 VMProtected 啟動器和 Winnti Group 的自定義打包程序並與該黑客組織工具集的其它樣本之間存在很多相似之處。這也讓我們認為 skip-2.0 屬於該工具集。

本文主要討論這個MSSQL Server 後門的技術詳情和功能,同時說明 skip.2-0 和 Winnti Group 已知的武器庫之間存在的技術相似之處,特別是與 PortReuse 後門和 ShadowPad之間存在的相似之處。

VMProtected 啟動器

我們是在查找VMProtected 啟動器時發現的 skip-2.0,它的payload 通常要麼是 PortReuse 要麼是 ShadowPad。

嵌入式payload

和加密的PortReuse 和 ShadowPad payload 一樣,skip-2.0 也內嵌在 VMProtected 啟動器的疊加層上,如下圖1所示:

史無前例:微軟 SQL Server 被黑客組織安上了後門 skip-2.0

加密

該Payload 加密和其它VMProtected 啟動器中使用的加密機制一樣,都是RC5加密算法,由 VolumeID 派生的 key 和字符串 f@Ukd!rCto R$組成。

持久性

在PortReuse 和 ShadowPad 案例中,啟動器很可能通過利用被安裝在 C:\\Windows\\System32\\TSVIPSrv.DLL 的一個 DLL 劫持漏洞實現持久性。結果,標準的 Windows SessionEnv 服務在系統啟動時加載 DLL。

Winnti Group 的自定義打包程序

解密之後,內嵌的payload 實際上就是Winnti Group 的自定義打包程序。該打包程序用於打包 PortReuse 後門以及內嵌在受攻陷視頻遊戲中的 payload。

打包程序配置

該打包程序配置包含打包二進制的解密密鑰以及其原始文件名稱、大小以及執行類型(EXE 或 DLL)。該 payload 的打包程序配置如下表1所示:


史無前例:微軟 SQL Server 被黑客組織安上了後門 skip-2.0


從打包程序配置可看出,該 payload 被稱為 Inner-Loader。Inner-Loader 是該黑客組織武器庫中一款注入器的名稱,用於將 PortReuses 後門注入到偵聽某個特定端口的進程中。除了具有相同的名稱外,通過分析這個 payload 得出,它是 Inner-Loader 注入器的另外一個變體。

Inner-Loader 注入器

這個Inner-Loader 的變體並沒有查找偵聽某個特定端口的進程(如注入 PortResuse 後門時的情況那樣),而是查找 MSSQL Server 的一個常規進程名稱 sqlserv.exe。如找到,則 Inner-Loader 將 payload 注入此進程中。而該 payload 也與自定義打包程序打包。Payload 的打包程序配置如下表2:

史無前例:微軟 SQL Server 被黑客組織安上了後門 skip-2.0


這個被注入的payload 的原始文件名稱是 skip-2.0.dll。

Skip-2.0

由Inner-Loader 注入並啟動後,skip-2.0首先檢查它是否在 sqlserv.exe 進程中執行,如是,則檢索由 sqlserv.exe 加載的 sqllang.dll 的處理程序。之後繼續查找並從該 DLL 中鉤出多個函數。如下圖2說明的是skip-2.0 的攻陷鏈。


史無前例:微軟 SQL Server 被黑客組織安上了後門 skip-2.0

鉤 sqllang.dll

Skip-2.0 使用的鉤子程序和 NetAgent 使用的非常相似。NetAgent 是安裝網絡鉤子的PortReuse模塊。這個鉤子庫基於多個開源鉤子框架所使用的 disorm 開源反彙編程序。具體而言,反彙編庫用於正確地計算被鉤的指令的大小。如下圖3所示,NetAgent和skip-2.0 所使用的鉤子程序幾乎是一樣的。


史無前例:微軟 SQL Server 被黑客組織安上了後門 skip-2.0

這是其中一處顯著的不同之處:skip-2.0的鉤子函數提取鉤子的地址並安裝為一個參數,而對於 NetAgent 而言,鉤子安裝的地址是硬編碼的。產生不同的原因在於,skip-2.0必須鉤出 sqllang.dll 中的多個函數才能正常運行,而 NetAgent 只是針對單個函數。

要定位每個被鉤的sqllang.dll 函數,skip-2.0 首先通過解析 PE 頭部信息馬上檢索被加載到內存中的 DLL 的大小(其真實大小)。之後需要在 sqllang.dll 中匹配的字節數組被初始化,如下圖4所示。一旦找到第一個匹配該字節的地址,該鉤子就會使用圖3所示的程序。


史無前例:微軟 SQL Server 被黑客組織安上了後門 skip-2.0

隨後,成功的鉤子安裝就會以明文形式記錄在位於硬編碼路徑C:\\Windows\\Temp\\TS_2CE1.tmp 上的一個日誌文件中,如下圖5所示。


史無前例:微軟 SQL Server 被黑客組織安上了後門 skip-2.0

如果未找到目標函數,則鉤子安裝程序將使用一組不同的字節模式搜索後備函數。

使用匹配字節序列而非使用靜態偏移量以定位目標函數的地址,加上使用備用字節序列,可使 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)最耐人尋味,它的作用是驗證既定用戶的密碼。該函數的鉤子檢查用戶提供的密碼是否和魔力密碼匹配,如不匹配,則原始函數不會被調用且鉤子返回0,使得即使在未提供正確密碼的情況下也能進行連接。然後設置一個全局標誌,接受負責事件日誌的其它鉤子函數檢查。對應的反彙編程序如圖6所示。在設置全局標誌的情況下,鉤子日誌函數將在不調用其相應的原始函數的情況下靜默返回,因此該動作不會被記錄。如提供的是其它密碼,則會調用原始函數。

史無前例:微軟 SQL Server 被黑客組織安上了後門 skip-2.0

從硬編碼密碼來看,ESET 在此前發現的 SSH 後門中也使用了類似的後門技術。區別在於,skip-2.0 被安裝在內存中,而SSH 後門中,sshd可執行文件在執行前遭修改。

另外,CSECAuthenticate::AuthenticateLoginIdentity 會被從鉤子代碼中調用但鉤子總是返回0。如果使用了魔力密碼登錄,則鉤子ReportLoginSucess 和IssueLoginSuccessReport 不會調用原始函數。同樣的行為也適用於FEExecuteLogonTriggers。其它的日誌函數如XeSqlPkg::sql_statement_completed::Publish或XeSqlPkg::sql_batch_completed::Publish 也會在用戶使用魔力密碼登錄的情況下被禁用。多個審計事件也會遭禁用,包括SecAuditPkg::audit_event::Publish、XeSqlPkg::login::Publish 和XeSqlPkg::ual_instrument_called::Publish。

這一系列鉤子使攻擊者不僅能夠通過使用一個特殊的密碼在受害者 MSSQL Server 11 和12上獲得持久性。為了查看某個特定的 sqllang.dll 版本是否遭 skip-2.0 攻擊(即匹配字節模式),我們創建了一個 YARA 規則(具體見文末 GitHub 地址)。

和 Winnti Group 的關聯

我們看到 skip-2.0 和 Winnti Group 武器庫其它工具之間的很多相似指出。Skip-2.0後門的 VMProtected 啟動器、自定義打包程序、Inner-Laoder 注入器和鉤子框架都是 Winnti Group 已知工具集的一部分。因此我們認為 skip-2.0 是Winnti Group 工具集的一部分。

結論

Skip-2.0後門是Winnti Group 武器庫的一部分,和該組織已知的工具集之間存在很多相似之處,可使攻擊者在 MSSQL Server 上實現持久性。鑑於安裝這些鉤子需要具備管理員權限,因此必須在已遭攻陷的 MSSQL Server 上安裝 skip-2.0 才能實現持久性和隱秘性。

妥協指標(IoCs)


史無前例:微軟 SQL Server 被黑客組織安上了後門 skip-2.0

MITREATT&CK 技術

史無前例:微軟 SQL Server 被黑客組織安上了後門 skip-2.0


ESET 此前發佈的Winnti Goup 武器庫白皮書 URL:

https://www.welivesecurity.com/wp-content/uploads/2019/10/ESET_Winnti.pdf

YARA 規則的GitHubURL:

https://github.com/eset/malware-ioc/tree/master/winnti_group

"


分享到:


相關文章: