關于r77-Rootkit
r77-Rootkit是一款功能強大的無文件Ring 3 Rootkit,并且帶有完整的安全工具和持久化機制,可以實現進程、文件和網絡連接等操作及任務的隱藏。
r77能夠在所有進程中隱藏下列實體:
文件、目錄、連接、命名管道、計劃任務;
進程;
CPU用量;
注冊表鍵&值;
服務;
TCP&UDP連接;
該工具兼容32位和64位版本的windows 7以及Windows 10。
通過前綴隱藏
所有以“$77”為前綴命名的實體都將被隱藏:
配置系統
動態配置系統允許廣大研究人員通過PID或抿成來隱藏進程,通過完整路徑來隱藏文件系統,或通過指定端口隱藏TCP&UDP連接:
配置信息存儲在“HKEY_LOCAL_macHINESOFTWARE$77config”中,并且可以在未提權狀態下由任何進程寫入。這個鍵的DACL被設置為可以給任意用戶授予完整訪問權。
“$77config”鍵在注冊表編輯器被注入了Rootkit之后會自動隱藏。
安裝工具
r77可以直接使用單獨的“Install.exe”進行安裝,安裝工具會將r77服務在用戶登錄之前開啟,后臺進程會向所有當前正在運行以及后續生成的進程中注入命令。這里需要使用兩個進程來分別注入32位和64位進程,這兩個進程都可以使用配置系統和PID來進行隱藏。
“Uninstall.exe”程序負責將r77從系統中卸載掉,并解除Rootkit跟所有進程的綁定關系。
無文件持久化
Rootkit將駐留在系統內存中,不會將任何文件寫入磁,這種機制是分多個階段實現的。
階段一
安裝程序為32位和64位r77服務創建兩個計劃任務。計劃任務確實需要存儲名為$77svc32.job和$77svc64.job的文件,這是無文件概念的唯一例外。但是,一旦Rootkit運行,計劃任務也會通過前綴隱藏。
計劃任務將使用下列命令開啟“powershell.exe”:
[Reflection.Assembly]::Load([Microsoft.Win32.Registry]::LocalMachine.OpenSubkey('SOFTWARE').GetValue('$77stager')).EntryPoint.Invoke($Null,$Null)
該命令是內聯的,不需要.ps1腳本。這里,使用PowerShell的.NET Framework功能從注冊表加載C#可執行文件并在內存中執行。由于命令行的最大長度為260(MAX_PATH),因此只有足夠的空間執行簡單的Assembly.Load().EntryPoint.Invoke()。
階段二
執行的C#代碼為stager,它將會使用Process Hollowing技術創建r77服務進程。r77服務是一個本地可執行文件,分別以32位和64位架構繼續寧編譯。父進程被設置為了winlogon.exe以增加欺騙性(模糊性)。另外,這兩個進程被ID隱藏,在任務管理器中不可見。
磁盤上從未存儲可執行文件或DLL。stager存儲在注冊表中,并從其資源加載r77服務可執行文件。
測試環境
測試控制臺可以用來向單獨進程注入r77,或接觸進程跟Rootkit的綁定關系:
項目地址
r77-Rootkit:https://github.com/bytecode77/r77-rootkit
參考資料
https://bytecode77.com/downloads/r77%20Rootkit%20Technical%20Documentation.pdf
https://bytecode77.com/r77-rootkit?