該黑客組織發起的攻擊事件的獨特之處在于如何安裝CARBANAK后門進行權限維持。Mandiant(美國麥迪安網絡安全公司)分析發現該組織利用shim數據庫在不同的系統環境下實現權限維持。shim將惡意的內存補丁注入到服務控制管理器(“services.exe”)進程中,然后產生一個CARBANAK后門進程。
Mandiant(美國麥迪安網絡安全公司)分析指出,FIN7還使用這種技術來安裝payment card采集工具用于權限維持。這是FIN7黑客組織以前的方法,為了注入惡意進程維持權限會先安裝一個惡意的Windows服務。
Shim功能概要(解決古老的程序兼容問題)
引用Microsoft的官方說明,程序兼容Shim(application compatibility shim)是一個可以通過hook透明攔截API的小型函數庫,可以篡改傳輸函數的參數值,可以處理一些自己的操作,也可以執行其他的操作(例如存儲在當前系統中的其他位置的代碼)。
現如今,Shim的存在主要解決的問題是處理一些古老應用程序的兼容性問題(譯者注:部分古老的應用程序采用一些過時或已被棄用的API,都過Shim可以hook這些API替換為較流行的函數,進而解決程序的兼容性問題)?梢钥吹剑琒him是一個合法的功能,出于一個善意的目的,去解決系統迭代產生的問題,由于技術的兩面性,其功能有可能被濫用執行一些惡意的操作。Mandiant(美國麥迪安網絡安全公司)的安全顧問曾經在BruCon和BlackHat討論過Shim數據庫被濫用可能產生的安全問題。
Shim數據庫注冊表
在當前操作系統上注冊shim數據庫有多種方式,其中一種方法就是使用系統內置的“sdbinst.exe”命令行工具。圖1展示的就是使用“sdbinst.exe”命令行工具注冊shim時創建的兩個注冊表鍵。

圖1:Shim數據庫注冊表鍵
一旦shim數據庫在系統上成功注冊,shim數據庫文件(后綴名為“.sdb”)將被復制到"C:\Windows\AppPatch\Custom"(32位shim)目錄下(64位shim將被復制到"C:\Windows\AppPatch\Custom\Custom64"目錄下)。
惡意Shim數據庫安裝
在操作系統上安裝和注冊惡意shim數據庫,FIN7使用自定義經過Base64編碼的PowerShell腳本,該腳本的功能是運行“sdbinst.exe”命令行工具注冊一個經過修改插入惡意代碼的shim數據庫,圖2為經過還原的FIN7 PowerShell腳本中解碼的部分截圖,列出了執行的命令及參數。

圖2:FIN7 PowerShell腳本安裝自定義Shim數據庫文件的部分截圖
FIN7黑客組織使用“sdbinst.exe”命令行工具在目標操作系統上創建和注冊不同命名規則的shim數據庫文件。但有一個共同點是,都會創建一個后綴名為“.tmp”的Shim數據庫文件(如圖3所示)。

圖3:惡意Shim數據庫文件示例
當前的惡意shim數據庫文件再操作系統上注冊后,一個后綴名為“.sdb”,文件名為隨機GUID值的shim數據庫文件(惡意文件)將在其64位的默認目錄("C:\Windows\AppPatch\Custom\Custom64")下創建,如圖4所示。該shim數據庫文件具有與最初在“C:\Windows\Temp”目錄下創建的文件具有相同的MD5 hash值。

圖4:注冊后的shim數據庫文件
除此之外,與之相關的注冊表鍵也將在shim數據庫注冊表中創建。圖5展示了與此shim安裝相關的注冊表鍵值關系。

圖5:注冊表鍵值關系
用于shim數據庫注冊表的數據庫描述(DatabaseDescription)“Microsoft KB2832077”是很有意思的,因為這個KB編號不是一個Microsoft官方發布的更新補丁編號。如圖6所示,該描述出現在受影響的操作系統中的Windows控制面板的已安裝程序列表中。

圖6:作為已安裝應用程序的Shim數據庫
惡意Shim數據庫細節分析
經過研究分析,Mandiant(美國麥迪安網絡安全公司)分析出FIN7黑客組織向全版本操作系統
(32位、64位)中的“services.exe”中注入自定義的Shim數據庫(將原生Shim數據庫文件植入CARBANAK后門payload)。當操作系統啟動“services.exe”進程執行時,CARBANAK后門payload將會執行。shim數據庫文件包含第一階段加載的shellcode,其余的shellcode payload存儲在注冊表鍵中。圖7列出了FIN7黑客組織利用的解析shim數據庫文件。

圖7:解析shim數據庫
對于第一階段加載的程序,FIN7黑客組織改寫了services.exe進程中相對虛擬地址 (RVA)“0x0001407c”對應“ScRegisterTCPEndpoint” 函數的代碼,執行帶有惡意shellcode的shim數據庫。新的“ScRegisterTCPEndpoint”函數(shellcode)包含了對“\REGISTRY\MACHINE\SOFTWARE\Microsoft\DRM”路徑的引用。該路徑下的內容為存貯在操作系統中其余的惡意shellcode和CARBANAK DLL(FIN7黑客組織使用的后門程序)payload。
圖8展示了在恢復的shim數據庫文件中解析補丁結構的部分截圖

圖8:從shim數據庫文件中解析補丁結構
存儲在注冊表“HKLM\SOFTWARE\Microsoft\DRM”中的shellcode可以利用ntdll中的API函數“RtlDecompressBuffer”進行解壓縮出payload。該程序在執行CARBANAK DLL(FIN7黑客組織使用的后門程序)payload的入口函數之前會休眠4分鐘。一旦payload加載進內存,就會創建一個包含CARBANAK DLL名為“svchost.exe”的新進程。
總結一下完整的攻擊過程
圖9是一個完整的行為流程圖,利用shim數據庫向64位的“services.exe”進程中注入shellcode最終實現權限維持。

圖9:Shim數據庫代碼注入過程
如何檢測電腦是否被該惡意代碼感染?
Mandiant(美國麥迪安網絡安全公司)推薦了以下幾種方式檢測操作系統是否受到這種惡意Shim數據庫的感染。
1.監控默認shim數據庫下新創建的shim數據庫文件:“C:\Windows\AppPatch\Custom”(32位),“C:\Windows\AppPatch\Custom\Custom64”(64位)
2.監控以下注冊表鍵的創建或修改事件:“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Custom”和“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\InstalledSDB”
3.監控進程執行事件和惡意使用“sdbinst.exe”命令行工具執行的參數的異常行為。
|