发布于2022年11月8日3年前 0x00 前言 Asynrat是使用C Sharp开发的C2工具。本文仅分析Asynrat的技术细节,从技术研究的角度介绍检测方法。 注: 本文选取的AsyncRAT更新日期为2020年5月9日。 0x01 简介 异步捕获的优势 AsyncRAT的技术细节 检测方法 0x02 AsyncRAT的优点 AsyncRAT由C Sharp开发,应用于Windows系统。它具有以下优点: 支持从Pastebin.com读取C2服务器的配置信息 支持在内存中加载PE文件 支持C#或VB代码的动态编译和执行 支持u盘感染,可以感染所有用开发的exe文件。NET在u盘里。 支持自动读取保存在Firefox和Chrome浏览器中的密码 通过欺骗用户点击,UAC被绕过来要求权力。 通过C#接口技术,提高了程序的可扩展性。在程序实现中,每个函数对应一个类,这个类被编译成一个dll文件。当需要加载时,服务器将它发送给客户端。客户端通过Activator实例化该类。CreateInstance,然后调用该类的方法。 0x03 AsyncRAT的技术细节 根据异步控制面板上的功能,对该部分逐一进行分析,如下图所示 1.SendFile (1)记忆 加载内存exe文件,它支持以下两种类型: 反射 使用装配。加载到加载C#程序 详情请参考之前的文章《从内存加载.NET程序集(Assembly.Load)的利用分析》。 朗佩 通过替换进程内存来加载exe文件 可以选择以下程序作为注入程序: aspnet _编译器. exe RegAsm.exe MSBuild.exe RegSvcs.exe vbc.exe 注: 以上5个exe文件位于Microsoft.NET框架的安装目录中,与AsyncClient.exe的位数一致。 随着会话被32位AsyncClient.exe弹回,默认会找到32位Microsoft.NET框架的安装目录,例如:C:\ Windows \ Microsoft.net \ Framework \ v 4 . 0 . 30319 随着会话被64位AsyncClient.exe弹回,默认会找到64位Microsoft.NET框架的安装目录,例如:C:\ Windows \ Microsoft.net \ Framework 64 \ v 4 . 0 . 30319 RunPE操作会启动上述五个exe文件中的一个,通过ReadProcessMemory、VirtualAllocEx、WriteProcessMemory和ResumeThread修改进程内存,替换为要加载的exe文件。 这里需要注意的是,要加载的exe文件需要与AsyncClient.exe的位数一致。 由于会话被32位AsyncClient.exe弹回,RunPE操作只能加载32位exe文件。 由于会话被64位AsyncClient.exe弹回,RunPE操作只能加载64位exe文件。 详情请参考之前的文章《傀儡进程的实现与检测》。 (2)磁盘 将exe文件上传到目标主机的%Temp%目录,将其重命名为随机字符串,然后用Powershell启动exe文件。执行后,不会删除%Temp%目录中的exe文件。 2. Monitoring (1)远程桌面 监控屏幕实时获取目标桌面的内容(只监控,不操作) 调用Graphics类的CopyFromScreen实现屏幕截图 关于Python实现的监控屏幕的详细内容,请参考之前的文章《Pupy利用分析——Windows平台下的屏幕控制》。 (2)键盘记录器 获取实时目标主机键盘输入的消息和进程名。 用钩子实现键盘录音 (3)密码恢复 获取保存在Firefox和Chrome浏览器中的密码。 技术细节请参考之前的文章《渗透技巧——导出Firefox浏览器中保存的密码》和《渗透技巧——导出Chrome浏览器中保存的密码》。 (4)文件管理器 文件管理,还支持7zip的隐蔽安装和文件的压缩解压。 如何隐藏7zip安装: 在%Temp%目录下创建一个新的文件夹7-Zip并释放文件7z.exe和7z.dll。 (5)流程经理 流程管理,支持查看和关闭流程。 (6)报告窗口 监控重要流程。当指定的进程在目标主机上运行时,控制终端会弹出提示信息。 (7)网络摄像头 打开摄像机 3.Miscellaneous (1)机器人黑仔 清除注册表HKLM和HKCU中\ software \ Microsoft \ windows \ current version \ run和software \ Microsoft \ windows \ current version \ runonce中其自身进程保存的条目。 (2)USB扩展 当目标主机连接到USB闪存驱动器时,它会感染USB闪存驱动器中的文件。 将木马客户端复制到u盘并隐藏。默认保存的名称是LimeUSB.exe。 修改所有用。NET在u盘中,通过CSharpCodeProvider更改程序运行过程,并添加以下代码: 使用系统; 使用系统。诊断; 使用系统。反思; 使用系统运行时。InteropServices [assembly:assembly商标(' % Lime % ')] [程序集:Guid(“% Guid %”) 静态类%LimeUSBModule% { 公共静态void Main() { 尝试 { 系统诊断。过程。开始(@“% File %”); } 抓住{ } 尝试 { 系统诊断。过程。开始(@“%有效负载%”); } 抓住{ } } } 用户在启动正常文件的同时会隐蔽执行U盘中的木马客户端 (3)种子洪流 向目标主机发送种子文件并下载 目标主机需要安装尤特朗特或者比特流 (4)远程外壳 弹出一个交互式的煤矿管理局窗口 (5)拒绝服务攻击 向指定域名持续发送超文本传送协议数据包 (6)执行。网络代码 在目标主机上动态编译C#或者动词代码并执行 模板文件包含弹框和下载执行的功能 我提取出了其中编译C#代码并执行的功能,代码示例如下: 使用系统; 使用系统100 . CodeDom 使用系统CodeDom。编译器; 使用系统。反思; 命名空间CodeDomProviderTest { 班级计划 { 静态void Main(string[] args) { string source=@ ' 使用系统; 使用系统窗户。形式 命名空间异步 { 公开课程 { 公共静态void Main(string[] args) { 尝试 { 消息框.show(' Hello World ' '); } 抓住{ } } } }'; codedom provider codedom provider=codedom provider .创建提供程序(“cs harp”); 尝试 { var编译器选项='/target:winexe/platform:any CPU/optimize-'; 定义变量编译器参数=新编译器参数(); 编译器参数引用程序集。添加('系统。dll’); 编译器参数引用程序集。添加('系统。窗户。表格。dll’); 编译器参数GenerateExecutable=true 编译器参数GenerateInMemory=true 编译器参数编译器选项=编译器选项; 编译器参数TreatWarningsAsErrors=false 编译器参数IncludeDebugInformation=false var编译器结果=codedom提供程序.CompileAssemblyFromSource(编译器参数,源代码); 如果(编译器结果。错误。计数0) { foreach(编译器错误编译器结果中的编译器错误。错误) { 控制台WriteLine(字符串。格式("{ 0 } \行:{1} -列:{ 2 } \文件:{3}",编译器错误。错误文本, 编译器错误。行,编译器错误。列,编译器错误。文件名)); 打破; } } 其他 { 装配装配=编译器结果。已编译的程序集; MethodInfo methodInfo=程序集。入口点; object injObj=assembly .CreateInstance(methodInfo .姓名); 对象[]参数=新对象[1]; if (methodInfo .GetParameters().长度==0) { 参数=空 } 方法信息.Invoke(injObj,parameters); } } 接住(例外ex) { 控制台WriteLine(例如。消息); } } } } (7)文件搜索器 搜索指定后缀名的文件并打包成活力文件 4.Extra (1)访问网站 启动默认浏览器并访问指定URL,界面不隐藏 发送MessageBox 在目标主机上弹出对话框 (3)聊天 在目标主机上弹出对话框,实时显示输入的内容 (4)获得管理员权限 使用cmd.exe以管理权限重新启动木马客户端,这个操作会在用户桌面弹出UAC框,需要用户选择允许后才能运行 如果用户未选择允许,会一直弹出UAC对话框 UAC对话框的程序位置将暴露木马客户端的路径。 如果想伪造一个更可信的UAC对话框(不暴露程序的位置),可以参考之前文章《A dirty way of tricking users to bypass UAC》中的思路。 (5)空白屏幕 运行功能: 通过WinAPI CreateDesktop()创建一个随机名称的虚拟桌面,内容为空。当切换到这个空的虚拟桌面时,用户无法操作该桌面。 停止功能: 通过WinAPI SwitchDesktop()切换到原始桌面 (6)禁用Windows Defender 通过修改注册表关闭Windows Defender,通常在Win10系统上使用。 (7)设置壁纸 设置用户的桌面。 5.Server 阻止客户端 指定拒绝IP回拨的特洛伊木马客户端。 6.Builder (1)连接 DNS:指定C2服务器的IP,可以设置多个。 端口:指定C2服务器的端口,可以设置多个端口。 Pastebin:从Pastebin.com读取C2服务器信息,包括DNS和端口。 内容示例: 127.0.0.1:6606:7707:8808 (2)安装 用作配置木马客户端自启动的功能。 开启此功能后,木马客户端会被复制到指定位置。 文件名可以重命名。 您可以选择%AppData%或%Temp%目录作为文件路径。 木马客户端以普通用户权限执行时,会在注册表HKCU \软件\微软\ Windows \当前版本\运行中添加条目,以新的木马客户端名称作为注册表项的名称,以新的木马客户端路径作为注册表项的数据。 当特洛伊木马客户端以管理员权限执行时,它将使用schtasks命令创建计划任务。该命令的示例: schtasks/create/f/sc on登录/rl最高/tn /tr 预设任务的名称是新的木马客户端名称,预设任务将在用户登录时执行。 (3)杂项 组:对木马客户端进行分类。 互斥:设置互斥,避免木马客户端重复启动。 反分析: 包括以下功能: DetectManufacturer,通过WMI获取系统信息(select * from Win32 _ ComputerSystem),检查制造商是否包含字符VIRTUAL、vmware或VirtualBox。 DetectDebugger,使用WinAPI CheckRemoteDebuggerPresent()检查是否是调试器。 检测沙箱,使用WinApi GetModuleHandle()检查SbieDll.dll是否存在。 IsSmallDisk,检查硬盘大小是否小于60Gb。 Isxp,检查系统名是否包含字符xp。 工艺标准: 将进程设置为保护进程。如果保护进程意外关闭,将导致BSOD。 详情请参考之前的文章《结束进程导致BSOD的利用分析》。 延迟:延迟执行的时间。 (4)组装 您可以手动设置文件属性,也可以复制指定文件的文件属性。 (5)图标 设置文件图标 (6)建造 简单混淆器:简单混淆是通过重命名实现的。 关键代码: 私有静态ModuleDefMD重命名混淆(Module中的ModuleDefMD) { ModuleDefMD module=inModule IRenaming rnm=new namespaces rename(); 模块=rnm。重命名(模块); rnm=新类重命名(); 模块=rnm。重命名(模块); rnm=新方法重命名(); 模块=rnm。重命名(模块); rnm=新属性重命名(); 模块=rnm。重命名(模块); rnm=新字段重命名(); 模块=rnm。重命名(模块); 返回模块; } } 0x04 检测方法 1.查找可疑文件 路径:%AppData%和%Temp%目录 2.使用自动运行来检查可疑的启动项目。 (1)注册地 HKLM \软件\微软\ Windows \当前版本\运行 HKCU \软件\微软\ Windows \当前版本\运行 (2)计划任务清单 3.后台可疑流程 AsyncRAT的木马客户端只是exe文件形式,运行时会产生可疑进程。 4.通信流程 检查可疑进程的外部通信流量。 5.使用防病毒软件 目前杀毒软件会拦截AsyncRAT。 0x05 小结 本文从技术研究的角度分析了AsyncRAT的技术细节,并介绍了检测方法。 留下回复
创建帐户或登录后发表意见