逆向分析实战-揭开 AsyncRAT 的复杂性

admin 2024年3月6日00:42:16评论16 views字数 18029阅读60分5秒阅读模式

介绍

AsyncRAT 是一种复杂的远程访问木马 (RAT),使用 C# 编程语言复杂开发。它的设计以异步操作框架为中心,该框架为网络攻击者提供了对目标系统的广泛远程访问和控制功能。这种高级别的控制支持执行各种恶意活动,包括数据泄露、系统操纵和监视。

AsyncRAT的使用主要与被称为Blind Eagle(也称为APT-C-36)的网络组织有关。该组织自 2018 年 4 月以来一直活跃,据信起源于南美洲。Blind Eagle 的运营特点是持续性和针对性,专注于各个关键领域的高价值目标。值得注意的是,他们的活动包括对哥伦比亚主要实体的系统性网络攻击,包括政府机构、金融部门、石油工业和专业制造公司。

该小组的方法展示了先进的战术、技术和程序 (TTP),利用 AsyncRAT 的能力精确地渗透和破坏系统。他们的方法通常涉及鱼叉式网络钓鱼活动、利用软件漏洞以及使用复杂的社会工程技术来获得初始访问权限。入侵后,他们部署 AsyncRAT 以保持持久性、进行侦察并最终实现其恶意目标。

鉴于 Blind Eagle 带来的重大威胁及其对 AsyncRAT 的熟练使用,其目标范围内的组织必须采取强大的网络安全措施。这包括定期系统审计、员工意识培训以及高级威胁检测和响应系统的实施。

该课程包括更深入地探索 AsyncRAT 的功能、Blind Eagle 的运营策略以及对目标行业网络安全的更广泛影响。Blind Eagle 在其活动中主要使用 NjRAT、AsyncRAT、Remcos RAT、LimeRAT 和 QuasarRAT。Blind Eagle 的作案手法自出现以来一直保持不变,这表明它在鱼叉式网络钓鱼活动继续击中目标时很自在。

能力

·AsyncRAT 在用户目录中创建文件

·AsyncRAT 创建和修改系统进程

·AsyncRAT 使用计划任务 (if-admin) 创建持久性

·AsyncRAT 使用注册表创建持久性(如果非管理员)

·AsyncRAT 利用伪装防御规避技术

·AsyncRAT 利用虚拟化/沙盒规避技术

·AsyncRAT 利用了反分析和反调试技术。

·AsyncRAT 使用 AES-256 加密配置文件

·AsyncRAT 使用进程操作技术来逃避防御

·AsyncRAT 使用命令和控制 (C2) 服务器来泄露和安装插件。

技术细节和链流

文件信息:

逆向分析实战-揭开 AsyncRAT 的复杂性

AsyncRAT也被安全供应商称为:

逆向分析实战-揭开 AsyncRAT 的复杂性

攻击和执行流程:

调查显示,Blind Eagle APT 网络钓鱼活动的初始阶段涉及传播欺骗性电子邮件。这封电子邮件的主题行是西班牙语,并包含一个附件:受密码保护的 PDF。PDF 旨在通过看似紧急的请求来吸引收件人查看所谓的待处理税务文件。打开PDF后,用户会看到一个与国家税务和海关总署官方网站非常相似的URL。但是,此链接是欺诈性的。单击后,它会将用户重定向到替代网站。该站点负责部署辅助有效负载,从公共 Discord 服务器谨慎地检索。这种次要有效载荷是网络攻击最后阶段的前兆。它有助于安装 AsyncRAT,完成感染过程。这种方法的复杂性凸显了保持警惕和采取强有力的网络安全措施的必要性,特别是在识别和响应网络钓鱼企图方面。 在这份报告中,我得到了一个样本,该样本是通过单击网络钓鱼链接下载的,我尝试对样本进行技术分析并提取了盲鹰威胁组织使用的 TTP。

逆向分析实战-揭开 AsyncRAT 的复杂性

工具与环境

Tools and Environment

· Flare-VM (Windows 10)

· REMnux (Simulator)

· dnSpy

· Cutter

· Detect-it-easy

· RegShot

· ExeInfoPE

· De4dot

· Capa

· Procmon

· Process Hacker

· TcpView

· PE Bear

· PE Studio

· Wireshark

Stage (async.exe)

基本和高级静态分析

基本信息

async.exe:

SHA256: 79068b82bcf0786b6af1b7cc96de1bf4e1a66b0d95e7e72ed1b1054443f6c5e3

MD5: c0b9838ff7d2ddecbfe296eae947e5d6

CPU: 32-bits

Language: .Net programming language (c#)

Compiler-stamp: Sun May 10 05:24:51 2020 UTC

Interesting Strings:

· “ /c schtasks /create /f /sc onlogon /rl highest /tn “

· “Select * from AntivirusProduct”, “Select * from Win32_ComputerSystem”

· “CfXpd10bbWOrMPUDu4xOQVkVoERQrspS5I5RrSBc3XPr6/l12WdhfLjn9IUpy8mtbVoZq8Nl2UitCoQT8mAlLQ==”

· “5xU2z25Rov7slOLBtk+8+vn4pnps2wv04q8onR2M1PeHt+fevvgEpJ9uqUq8M6BdaI5lNbuF3jAHGdE7FovjtQ==”

· “” /tr ‘“”’ & exitnuRnoisreVtnerruCswodniWtfosorciMerawtfoS”

· “nuRnoisreVtnerruCswodniWtfosorciMerawtfoS”

Inspection: LoadModule, MemoryStream, ToBase64String, FileAccess, RSACryptoServiceProvider, RtlSetProcessIsCritical

检测

使用 detect-it-easy 工具打开样本后,它向我显示二进制文件没有打包,但在某种程度上,我认为它可能有点混淆,并且会有一些随机字符串和垃圾数据,使分析人员难以理解。

逆向分析实战-揭开 AsyncRAT 的复杂性

Capa-Output

当我对恶意软件的第一阶段 (WinDir.exe) 执行 CAPA 分析时,它表明二进制文件未打包。详细分析还告诉二进制文件是混淆的,它触发了大多数规则,这些规则表明二进制文件正在根据 MITRE ATT&CK 框架使用这些策略和技术。CAPA 分析还表明,二进制文件正在执行系统发现、文件发现和防御规避,例如混淆和伪装文件。Capa 输出还表明,该示例具有反 VM 和反行为分析技术,使分析人员更难进行恶意软件分析。Capa 输出触发恶意软件使用的多个 TTP,目前我不确定这些 TTP。在执行行为和动态分析后,我可以说出恶意软件的实际行为。

逆向分析实战-揭开 AsyncRAT 的复杂性
逆向分析实战-揭开 AsyncRAT 的复杂性

静态分析

在执行动态分析和首次引爆恶意软件之前,我在 dnSpy-x86 中打开了恶意软件以执行一些高级静态分析。因为二进制文件是 .NET,并且它不是由任何自定义或商业打包器打包的,所以我使用反编译器和调试器获得了明文代码。在逐行调试代码并执行动态分析之前,我开始研究函数并尝试了解恶意软件的工作原理。在浪费任何时间之前,我只是去入口点,这是主要功能,在第一行有“for”循环,从 0-3 运行 4 次,每次睡眠 1 秒。简而言之,在执行任何事情之前,它都处于睡眠状态 4000 毫秒。威胁参与者可以利用这种技术来绕过防御机制。

逆向分析实战-揭开 AsyncRAT 的复杂性

在循环之后,有一个“if”条件,用于检查函数返回值。如果函数 InitializeSettings() 返回 true,则它执行其余的工作,如果布尔值为 false,则在此处退出程序。

逆向分析实战-揭开 AsyncRAT 的复杂性

当我打开该函数以检查此函数的实际操作时,我发现了 AsyncRAT 配置。这些配置包含端口、主机、版本、安装、MTX、证书以及其他使用 AES-256 加密的内容。在这个阶段,我不知道这些配置的值。

逆向分析实战-揭开 AsyncRAT 的复杂性

下一步,它创建了 MUTEX,在这个阶段,我不知道它使用的是什么值,因为 MUTEX 值是用 AES-256 加密的。

逆向分析实战-揭开 AsyncRAT 的复杂性

如果 MUTEX 创建成功,则它会执行下一个指令,否则它将退出程序。接下来的指令是执行反分析、反调试和反沙盒技术。我将在我的高级分析中向您展示这些技术,以及如何绕过这些检查以继续分析。

逆向分析实战-揭开 AsyncRAT 的复杂性

在上述检查之后,恶意软件正在自行安装并执行这些操作。如果上述所有检查都返回 true,则它正在执行安装和一些持久性技术。

逆向分析实战-揭开 AsyncRAT 的复杂性

在安装并执行一些持久性之后,它检查恶意软件是否以管理员权限执行,并且公共静态变量 (BDOS) 的值为 true,然后我通过利用来自ntdll.dll的本机 API 调用将自己作为一个关键进程。我已经分析了很多使用这种技术来逃避 AV/EDR 的恶意软件,因为只有有限的 Windows 合法进程作为关键进程运行,通过终止这些进程,您将获得 BSOD(蓝屏死机)。也许该变量表示相同的名称,但威胁参与者拼写错误。

逆向分析实战-揭开 AsyncRAT 的复杂性

在我静态分析的最后一步中,有一个循环被设计用于在客户端-服务器模型中维护网络连接。以下是其功能的细分:

v for (; 逆向分析实战-揭开 AsyncRAT 的复杂性 — 这是一个无限循环。它将继续运行,直到程序被手动停止或外部条件导致它退出。

v try — 此块用于处理在执行其中的代码期间可能发生的任何异常。这是确保程序不会意外崩溃的常见做法。

v 如果 (!ClientSocket.IsConnected) — 此条件检查客户端套接字是否未连接。

v ClientSocket.Reconnect();— 如果客户端套接字未连接,则此行尝试将客户端重新连接到服务器。

v ClientSocket.InitializeClient();— 此方法可能会初始化客户端套接字,为连接设置必要的参数或配置。

v Thread.Sleep(5000);— 此行暂停当前线程的执行 5000 毫秒(或 5 秒)。此处可能用于防止环路因连续连接尝试而使 CPU 或网络不堪重负。

逆向分析实战-揭开 AsyncRAT 的复杂性

此代码片段是客户端-服务器网络上下文中名为 InitializeClient() 的方法的更详细实现。该方法的结构是与服务器建立TCP连接,可能涉及通过SSL/TLS进行安全通信。以下是细分:

v 套接字初始化:创建一个具有指定缓冲区大小的 TCP 套接字,用于发送和接收数据。SocketType.Stream 和 ProtocolType.Tcp 指示它是 TCP 套接字,适用于连续数据流。

v 服务器连接逻辑:该方法包括用于选择服务器地址和端口的逻辑。如果 Settings.Pastebin 设置为“null”,它将从 Settings.Hosts 和 Settings.Ports 中定义的列表中随机选择服务器地址和端口。如果 Settings.Pastebin 不为 null,它将从 Pastebin URL 获取服务器地址和端口。

v 域名验证:代码检查所选服务器地址是否为有效域名。如果是,它会将域名解析为 IP 地址并尝试连接到该地址。如果没有,它将直接尝试连接到提供的地址。

v Catch Blocks:有几个空的 catch 块不处理异常。这可能会导致未记录或解决错误的静默故障。

v SSL/TLS 设置:如果连接成功,它将设置一个 SSL/TLS 流进行安全通信,验证服务器的证书。此处配置了 SSL/TLS 协议版本和其他参数的细节。

v 数据传输设置:客户端准备发送和接收数据。这包括设置数据缓冲区、启动保持活动数据包机制以及启动用于发送 ping 的计时器。

v 读取服务器数据:客户端开始使用 SSL 流上的 BeginRead 方法从服务器异步读取数据。

连接状态:客户端的连接状态 (IsConnected) 会根据连接是否成功建立而更新。

逆向分析实战-揭开 AsyncRAT 的复杂性

基本动态分析

Procmon 和 Process Hacker

作为一名进攻性安全研究人员,在我分析的第一次恶意软件引爆样本中,我总是更喜欢 Procmon、进程黑客、TcpView 和 Wireshark。当我执行示例并使用 Wireshark 捕获所有流量,使用 Procmon 捕获整个基于主机的活动并使用 TcpView 捕获网络连接时,我注意到 Procmon 上有一些感兴趣的活动。我在 Procmon 上应用了过滤器来检查 AsyncRAT 在运行时写入任何文件或下载磁盘上的任何文件。我注意到该示例编写了两个文件,一个在 %APPDATA% 中名为“Runtime Broker”,第二个在临时文件夹中创建了名为“tmp8BAF.tmp.bat”的批处理文件。当我检查注册表更改时,我注意到恶意软件正在设置注册表值,其名称与它在 %APPDATA% 中创建的 EXE 名称相同。此注册表项用于在系统上创建持久性,因此此时我确定恶意软件正在通过在注册表路径“HKCUSOFTWAREMicrosoftWindowsCurrentVersionRunRuntime Broker”中添加“运行时Broker.exe”来创建持久性

逆向分析实战-揭开 AsyncRAT 的复杂性

我注意到一些通过 TCP 的连接请求,在这个阶段,我可以说恶意软件可能试图使用不同的端口(如 217、8808 和 7707)与此 IP 地址“6606.197.70”连接。恶意软件试图创建套接字。

逆向分析实战-揭开 AsyncRAT 的复杂性

为了确保网络活动以及哪个进程负责在上述 IP 地址上建立连接,我使用我最喜欢的工具之一 TcpView 检查了所有进程网络活动。我注意到具有相同名称“Runtime Broker.exe”的进程正在尝试在我上面提到的相同端口上通过TCP连接相同的IP地址。这是不断发送同步数据包以启动 TCP 连接。在这一点上,我确信此进程负责其余的恶意软件活动并与命令和控制服务器连接。

逆向分析实战-揭开 AsyncRAT 的复杂性

在我第一次引爆样品后,我对恶意软件有一些想法,它正在创建两个文件,一个是批处理文件,另一个是.exe文件。此外,它还为持久性添加了一些注册表值,并尝试在不同端口上创建与命令和控制服务器的TCP连接。当我检查这个IP的病毒总数时,大多数供应商都将其指示为恶意IP地址,而病毒总数显示该IP来自土耳其,根据ASN。

逆向分析实战-揭开 AsyncRAT 的复杂性

当我检查进程树时,我注意到该进程正在执行cmd.exe、timeout.exe和相同的文件运行时Broker.exe其子层次结构中。在这一点上,我不知道什么是运行时Broker.exe的完整工作和代码结构,以及谁负责运行其他进程。在对恶意软件进行调试和高级动态分析后,我会更加清楚。

逆向分析实战-揭开 AsyncRAT 的复杂性

高级动态分析

以管理员身份运行

我开始使用 dnSpy-x86 对样本进行高级动态分析。Dnspy 是 .NET 二进制文件的最佳调试器和反编译器之一。AsyncRAT.exe是 .NET 二进制文件,所以我使用 dnSpy 打开它,在我的静态分析中,我注意到该程序也在寻找管理员权限,所以我决定将我的分析分解为两部分,第一部分以管理员身份运行并检查所有行为,第二部分以正常权限运行,并检查有什么不同以及恶意软件在这两种情况下的行为方式。条目的流程与我在静态分析中提到的相同。首先创建一些睡眠,然后初始化其配置,创建互斥锁,检查虚拟化环境,安装,将进程设置为关键,最后不断尝试与服务器连接。因此,让我们开始调试,在每个步骤上设置断点,并尝试解密配置并查看恶意软件的行为。

逆向分析实战-揭开 AsyncRAT 的复杂性

断点:

我开始逐步分析并放置断点。首先,我想知道它正在初始化的配置文件并检查是否一切正常,然后转到下一步。因此,我在检查函数返回 true 或 false 的条件中放置了断点。

逆向分析实战-揭开 AsyncRAT 的复杂性

按照执行流程,我进入了这个功能,此时有一些配置,所有配置都用 AES-256 加密。因此,我在返回所有配置的解密值的解密函数上放置了断点,并执行流程并提取解密值,让我们一一检查实际配置是什么。

逆向分析实战-揭开 AsyncRAT 的复杂性

成功启动程序后,我逐个解密了值,以便清楚地了解恶意软件的工作原理。当我解密恶意软件试图通过 TCP 与 C2 服务器通信的端口时,这些端口与我们在第一次爆炸中分析的端口相同。

逆向分析实战-揭开 AsyncRAT 的复杂性

当我执行时,我发现它正在尝试使用我们在 TcpView 中找到的相同 IP 地址进行连接。这意味着恶意软件对 c2 服务器 IP 和端口进行了硬编码,但以加密形式尝试创建套接字。

逆向分析实战-揭开 AsyncRAT 的复杂性

解密下一个值(即名称为版本的变量)后,它正在解密版本值。也许在与 C2 服务器建立连接时正在使用此值。

逆向分析实战-揭开 AsyncRAT 的复杂性

当我解密下一个名为 install 的变量时,该变量正在使用恶意软件安装功能。这是在解密后重新调整布尔值“true”。默认情况下,当恶意软件初始化其配置时,此变量的声明值为 true。

逆向分析实战-揭开 AsyncRAT 的复杂性

现在,我解密了用于创建 MUTEX 的配置的下一个值。恶意软件将互斥锁用于不同的目的,例如实例同步,或者如果同一实例已经在运行或运行,则关闭程序等。该示例正在创建值为

“AsyncMutex_6SI8OkPnk”

逆向分析实战-揭开 AsyncRAT 的复杂性

之后,有一个名为 Pastebin 的变量,它在解密后返回 null,也许这是在建立连接时填充的内容。

逆向分析实战-揭开 AsyncRAT 的复杂性

下一个值用于反 VM 和反沙盒。解密值后,它返回布尔值“false”。在这一点上我很惊讶,也许默认情况下这个值应该为 true,以检查虚拟化或沙盒。无论如何,我都必须将此值设置为 false 才能执行分析,此步骤称为修补恶意软件。

逆向分析实战-揭开 AsyncRAT 的复杂性

之后,有一个BDOS变量,解密后,默认情况下返回值false。这是用来使过程变得至关重要的东西。也许所有这些值在该恶意软件以“运行时Broker.exe”的名称创建的其他.exe中都是正确的。

逆向分析实战-揭开 AsyncRAT 的复杂性

最后,有名称为 Serversignature 和 ServerCertificate 的变量。解密值后,我获得了用于通过 TLS/SSL 与 c2 服务器连接的证书。所有数据都通过加密形式发送和接收。我附上了两个屏幕截图,以便你们可以看到在连接创建期间使用的证书和签名值。

逆向分析实战-揭开 AsyncRAT 的复杂性
逆向分析实战-揭开 AsyncRAT 的复杂性

在此函数的末尾,有一个 verifyHash() 函数,该函数在返回 true 或 false 之前检查服务器证书和签名的完整性。如果证书值相同,则返回 true。

逆向分析实战-揭开 AsyncRAT 的复杂性

完成初始化功能后,我转发到下一个指令,其中有 if 语句,该语句正在检查互斥锁是否已成功创建。如果未创建互斥锁,它将停止程序的执行。因此,我设置了 CreateMutex() 函数的断点并查看返回值以继续程序执行流程。

逆向分析实战-揭开 AsyncRAT 的复杂性
逆向分析实战-揭开 AsyncRAT 的复杂性

在成功创建具有我在上面的分析中提到的值的互斥锁后,程序现在检查并执行 RunAntiAnalysis(),它正在检查不同的检查,无论是恶意软件是在虚拟环境中还是在沙盒环境中运行,然后它将退出。让我们检查此恶意软件示例部署的每种反 VM 和反沙盒技术。

逆向分析实战-揭开 AsyncRAT 的复杂性

在此函数中,有 5 个函数正在执行。所有这些函数都在检查不同的条件,并根据恶意软件运行的环境返回 true 或 false 的值。让我们一一讨论条件。

逆向分析实战-揭开 AsyncRAT 的复杂性

名为 IsSmallDisk 的 C# 方法,用于检查系统驱动器的总大小是否小于或等于 61,000,000,000 字节(大约 61 GB)。

定义大小限制:long num = 61000000000L;设置被视为“小磁盘”的大小限制 (61 GB)。

获取系统驱动器大小:Path.GetPathRoot(Environment.SystemDirectory) 获取系统目录(通常是安装操作系统的驱动器)的根路径。

新的 DriveInfo(...)。TotalSize 为系统驱动器创建一个 DriveInfo 对象,并检索其总大小。

大小比较:if (new DriveInfo (Path.GetPathRoot(Environment.SystemDirectory))。TotalSize <= num) 检查系统驱动器的总大小是否小于或等于 61 GB。如果条件为 true,则返回 true;,表示磁盘被视为“小”。

逆向分析实战-揭开 AsyncRAT 的复杂性

检查计算机的操作系统是否为 Windows XP 的 IsXP 方法

检查操作系统:new ComputerInfo()。OSFullName.ToLower() 创建 ComputerInfo 的实例并检索操作系统的全名,并将其转换为小写。.Contains(“xp”) 检查操作系统名称是否包含子字符串“xp”。

对于 Windows XP,返回 True:如果条件 if (new ComputerInfo()。OSFullName.ToLower()。Contains(“xp”)) 为 true,表示操作系统名称包含 “xp”,方法返回 true。这表示操作系统是 Windows XP。

逆向分析实战-揭开 AsyncRAT 的复杂性

之后,DetectManufacturer 方法旨在根据计算机的制造商和型号确定计算机是否为虚拟机。

使用语句进行资源管理:使用查询“Select * from Win32_ComputerSystem”实例化 ManagementObjectSearcher。此对象用于查询 WMI (Windows Management Instrumentation) 以获取有关计算机系统的信息。

ManagementObjectCollection 是从 ManagementObjectSearcher 对象获取的,该对象包含 WMI 查询的结果。

循环访问管理对象:该方法循环访问 ManagementObjectCollection 中的每个 ManagementBaseObject。它检索 Manufacturer 属性并将其转换为小写,并将其存储在 text 变量中。还会检索 Model 属性以进行进一步检查。

检查虚拟机制造商:该方法检查制造商是否为“Microsoft Corporation”,并且模型是否包含“VIRTUAL”(指示 Microsoft 虚拟机,如 Hyper-V)。它还会检查制造商的名称是否包含“vmware”,或者型号是否为“VirtualBox”。如果满足这些条件中的任何一个,该方法将返回 true,指示系统可能是虚拟机。

逆向分析实战-揭开 AsyncRAT 的复杂性

DetectDebugger 方法旨在检查当前进程是否正在调试。NativeMethods.CheckRemoteDebuggerPresent(Process.GetCurrentProcess()。句柄,ref 标志);被调用。此方法可能是自定义类 NativeMethods 的一部分,并且应该执行检查以查看当前进程 (Process.GetCurrentProcess() 是否。Handle) 正在调试中。此检查的结果存储在标志中。调用后,flag2 设置为 flag 的值。如果 CheckRemoteDebuggerPresent 方法确定正在调试进程,则 flag 将为 true,因此 flag2 也将设置为 true。

逆向分析实战-揭开 AsyncRAT 的复杂性

最后,DetectSandboxie 方法旨在检测应用程序是否在流行的沙盒软件 Sandboxie 中运行。NativeMethods.GetModuleHandle(“SbieDll.dll”)。调用 ToInt32() 来获取模块“SbieDll.dll”的句柄,该模块是 Sandboxie 的已知组件。.ToInt32() != 0 检查句柄是否为非零。非零值表示该模块存在于进程的地址空间中,表明应用程序正在 Sandboxie 中运行。如果找到该模块,则将 flag 设置为 true。否则,将其设置为 false。

逆向分析实战-揭开 AsyncRAT 的复杂性

之后,有一个条件是检查安装变量是否为 true,然后它调用名为“Install()”的函数。我决定逐步调试这个函数,因为这是负责创建持久性和执行其他步骤的核心函数。

逆向分析实战-揭开 AsyncRAT 的复杂性

上面提到的所有检查都是为了初始化配置文件并检查恶意软件是否在虚拟化环境中运行。如果一切正常,则此功能负责安装恶意软件。在函数中,首先它获取 fileInfo,该路径与恶意软件创建“运行时Broker.exe”的路径相同,并且还获取当前正在运行的进程的名称。

逆向分析实战-揭开 AsyncRAT 的复杂性

在得到这两个之后,它正在检查正在运行的进程和 APPDATA 中的文件名是否相同,然后它会尝试杀死正在运行的程序并退出代码。

逆向分析实战-揭开 AsyncRAT 的复杂性

之后,它检查程序是否以管理员权限运行,然后启动进程并安排具有最高权限的任务以创建持久性。

逆向分析实战-揭开 AsyncRAT 的复杂性

执行指令后,当我检查任务计划时,看到有一个名为 Runtime Broker 的任务以最高权限创建,并在每次用户登录时从 APPDATA 执行 Runtime Broker.exe。因此,这是使用计划的任务创建持久性,如果程序以管理员权限执行。

逆向分析实战-揭开 AsyncRAT 的复杂性

如果程序以正常权限执行,则恶意软件使用注册表项来创建持久性,而不是计划任务。因此,在执行流中,这是两种不同的持久性技术,具体取决于权限。“HKCUSoftwareMicrosoftWindowsCurrentVersionRun”

逆向分析实战-揭开 AsyncRAT 的复杂性

字符串值是相反的形式,并且有一个函数将注册表值作为输入并以实际形式进行设置。威胁参与者使用这些技术来绕过防御机制。之后,恶意软件从正在运行的文件中获取字节,并在 APPDATA 文件夹中使用名称“Runtime Broker.exe”写入相同的字节。这意味着它在 APPDATA 中复制了自己。

逆向分析实战-揭开 AsyncRAT 的复杂性

之后,有一些指令在临时文件夹中创建了一个批处理文件。此批处理脚本正在执行命令超时 3 > null 并启动复制的文件“Runtime Broker.exe”,在完成所有操作后也会自行销毁。

逆向分析实战-揭开 AsyncRAT 的复杂性

执行指令后,我们可以清楚地看到它在临时文件夹中创建了一个名为“tmpB21A.tmp.bat”的批处理文件,并在该批处理文件中编写了一些命令。

逆向分析实战-揭开 AsyncRAT 的复杂性
逆向分析实战-揭开 AsyncRAT 的复杂性

之后,它开始进程并执行批处理文件。批处理文件是执行运行时代理的文件,它正在做其他事情。在那之后,这个程序就退出了。

逆向分析实战-揭开 AsyncRAT 的复杂性
逆向分析实战-揭开 AsyncRAT 的复杂性

这是使用管理员权限执行时的进程树。不同之处在于,使用管理员权限,它会执行任务计划以创建持久性,但在正常情况下,它会执行 CMD 以创建注册表项。

逆向分析实战-揭开 AsyncRAT 的复杂性

运行时Broker.exe

现在我决定分析复制的文件,也许任何加载模块的这个二进制文件中都会有一些不同的东西。因此,我在 dnSpy-x86 中打开了这个二进制文件并开始对其进行分析。但这是相同的 exe,但这次完全负责在上述 IP 地址上创建套接字并尝试下载和加载新插件以进行进一步活动。在循环中,它不断尝试检查连接请求。InitializeClient() 方法执行两个主要步骤:一个是检查 Pastebin 变量是否为 null,然后获取 IP 和端口并尝试通过 TCP 创建套接字。

逆向分析实战-揭开 AsyncRAT 的复杂性

下一步,它使用 Web 客户端类在创建的连接服务器上下载和上传数据,但它也检查证书和签名以进行完整性检查。

逆向分析实战-揭开 AsyncRAT 的复杂性

因为服务器处于离线状态,所以我无法获取其他加载的模块,所以我不得不在这里停止我的分析。但这几乎是一个分析,以了解针对哥伦比亚政府实体的 AsyncRAT 的工作和流程。

加载的 .NET 程序集

CLR v4.0.30319.0, 8, CONCURRENT_GC, ManagedExe, “C:UsersshaddyAppDataRoamingRuntime Broker.exe”,

AppDomain: Runtime Broker.exe, 19897800, Default, Executable,,

aB, 20068920, , C:UsersshaddyAppDataRoamingRuntime Broker.exe,

Microsoft.VisualBasic, 87782856, , C:WindowsMicrosoft.NetassemblyGAC_MSILMicrosoft.VisualBasicv4.0_10.0.0.0__b03f5f7f11d50a3aMicrosoft.VisualBasic.dll,

System, 20081984, Native, C:WindowsMicrosoft.NetassemblyGAC_MSILSystemv4.0_4.0.0.0__b77a5c561934e089System.dll, C:WindowsassemblyNativeImages_v4.0.30319_32System4ce1bb4828b69fa433f6f012636c5d27System.ni.dll

System.Configuration, 87806360, Native, C:WindowsMicrosoft.NetassemblyGAC_MSILSystem.Configurationv4.0_4.0.0.0__b03f5f7f11d50a3aSystem.Configuration.dll, C:WindowsassemblyNativeImages_v4.0.30319_32System.Configuration7f3b1084571309437a152226b37b6f28System.Configuration.ni.dll

System.Core, 88645400, Native, C:WindowsMicrosoft.NetassemblyGAC_MSILSystem.Corev4.0_4.0.0.0__b77a5c561934e089System.Core.dll, C:WindowsassemblyNativeImages_v4.0.30319_32System.Core617d43135fd67b6370a09fbe5fb2e5f7System.Core.ni.dll

System.Xml, 87803728, Native, C:WindowsMicrosoft.NetassemblyGAC_MSILSystem.Xmlv4.0_4.0.0.0__b77a5c561934e089System.Xml.dll, C:WindowsassemblyNativeImages_v4.0.30319_32System.Xmlbe1f06a790a86342db4dbd229ca727a3System.Xml.ni.dll

AppDomain: SharedDomain, 1939592416, Shared, ,

mscorlib, 20027728, DomainNeutral, Native, C:WindowsMicrosoft.NetassemblyGAC_32mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dll, C:WindowsassemblyNativeImages_v4.0.30319_32mscorlibf6ce2e529a5784970d9443aaca3aac4emscorlib.ni.dll

加载的模块

Runtime Broker.exe, 72 kB, , 0xbe0000

advapi32.dll, 492 kB, Advanced Windows 32 Base API, 0x75bf0000

apphelp.dll, 640 kB, Application Compatibility Client Library, 0x74430000

bcrypt.dll, 100 kB, Windows Cryptographic Primitives Library (Wow64), 0x77ce0000

bcryptprimitives.dll, 380 kB, Windows Cryptographic Primitives Library, 0x76d60000

clr.dll, 7.73 MB, Microsoft .NET Runtime Common Language Runtime — WorkStation, 0x73270000

clrjit.dll, 504 kB, Microsoft .NET Runtime Just-In-Time Compiler, 0x74140000

combase.dll, 2.5 MB, Microsoft COM for Windows, 0x76dc0000

crypt32.dll, 1 MB, Crypto API32, 0x77660000

crypt32.dll.mui, 40 kB, Crypto API32, 0x2e10000

cryptbase.dll, 40 kB, Base cryptographic API DLL, 0x74710000

cryptsp.dll, 76 kB, Cryptographic Service Provider API, 0x75170000

gdi32.dll, 144 kB, GDI Client DLL, 0x777c0000

v gdi32full.dll, 928 kB, GDI Client DLL, 0x760a0000

imm32.dll, 148 kB, Multi-User Windows IMM32 API Client DLL, 0x77d00000

kernel.appcore.dll, 60 kB, AppModel API Host, 0x75140000

kernel32.dll, 960 kB, Windows NT BASE API Client DLL, 0x77910000

KernelBase.dll, 2.23 MB, Windows NT BASE API Client DLL, 0x771b0000

KernelBase.dll.mui, 1.25 MB, Windows NT BASE API Client DLL, 0x55f0000

locale.nls, 804 kB, , 0xfc0000

Microsoft.VisualBasic.dll, 624 kB, Visual Basic Runtime Library, 0x5550000

msasn1.dll, 56 kB, ASN.1 Runtime APIs, 0x74700000

mscoree.dll, 328 kB, Microsoft .NET Runtime Execution Engine, 0x743c0000

mscoreei.dll, 544 kB, Microsoft .NET Runtime Execution Engine, 0x74330000

mscorlib.ni.dll, 20.3 MB, Microsoft Common Language Runtime Class Library, 0x71e20000

msvcp_win.dll, 492 kB, Microsoft® C Runtime Library, 0x76ce0000

msvcrt.dll, 764 kB, Windows NT CRT DLL, 0x75e40000

mswsock.dll, 328 kB, Microsoft Windows Sockets 2.0 Service Provider, 0x70a80000

ntdll.dll, 1.64 MB, NT Layer DLL, 0x77d50000

ntdll.dll, 1.97 MB, NT Layer DLL, 0x7fff327f0000

ole32.dll, 908 kB, Microsoft OLE for Windows, 0x75d50000

oleaut32.dll, 600 kB, OLEAUT32.DLL, 0x77a40000

profapi.dll, 112 kB, User Profile Basic API, 0x75150000

psapi.dll, 24 kB, Process Status Helper, 0x75f00000

rpcrt4.dll, 764 kB, Remote Procedure Call Runtime, 0x75c70000

rsaenh.dll, 188 kB, Microsoft Enhanced Cryptographic Provider, 0x71b80000

sechost.dll, 472 kB, Host for SCM/SDDL/LSA Lookup APIs, 0x775e0000

SHCore.dll, 540 kB, SHCORE, 0x770c0000

shell32.dll, 5.71 MB, Windows Shell Common Dll, 0x76720000

shlwapi.dll, 276 kB, Shell Light-weight Utility Library, 0x76190000

SortDefault.nls, 3.22 MB, , 0x5070000

sspicli.dll, 132 kB, Security Support Provider Interface, 0x75090000

System.Configuration.ni.dll, 1.02 MB, System.Configuration.dll, 0x73ef0000

System.Core.ni.dll, 8.09 MB, .NET Framework, 0x68810000

System.ni.dll, 10.11 MB, .NET Framework, 0x71160000

System.Xml.ni.dll, 7.42 MB, .NET Framework, 0x680a0000

ucrtbase.dll, 1.13 MB, Microsoft® C Runtime Library, 0x777f0000

ucrtbase_clr0400.dll, 716 kB, Microsoft® C Runtime Library, 0x74250000

user32.dll, 1.61 MB, Multi-User Windows USER API Client DLL, 0x773f0000

vcruntime140_clr0400.dll, 84 kB, Microsoft® C Runtime Library, 0x74310000

version.dll, 32 kB, Version Checking and File Installation Libraries, 0x75350000

win32u.dll, 96 kB, Win32u, 0x75d30000

windows.storage.dll, 6.07 MB, Microsoft WinRT Storage API, 0x755d0000

wldp.dll, 148 kB, Windows Lockdown Policy, 0x755a0000

wow64.dll, 356 kB, Win32 Emulation on NT64, 0x7fff31ca0000

wow64cpu.dll, 40 kB, AMD64 Wow64 CPU , 0x77d40000

wow64win.dll, 524 kB, Wow64 Console and Win32 API Logging, 0x7fff316e0000

ws2_32.dll, 396 kB, Windows Socket 2.0 32-Bit DLL, 0x77ae0000

提取的 TTP

MITRE ATT&CK 映射

Technique

Kill chain phase

Diamond vertex

Comments

T1566.001 — Phishing: Spearphishing Attachment

Delivery

Capability

Email with ZIP file attached

T1547.001 — Boot or Logon AutoStart Execution: Registry Run Keys / Startup Folder

Installation

Capability

Set registry key if non-privileged user executes the payload

T1053.005 — Scheduled Task/Job: Scheduled Task

Installation

Capability

Creates new scheduled task if privileged user executes the payload

T1543 — Create or Modify System Process

Installation

Capability

Create Mutex to check another instance is running.

T1036.S004 — Masquerading: Masquerade Task or Service

Installation

Capability

Set the process critical to evade detection

T1036.005 — Masquerading: Match Legitimate Name or Location

Execution

Capability

Writes itself as a file named Runtime Broker.exe saved in %APPDATA%

T1059.003 — Command and Scripting Interpreter: Windows Command Shell

Execution

Capability

Executes batch file created previously

T1497.001 — Virtualization/Sandbox Evasion: System Checks

Execution

Capability

Anti-VM and Sandboxes checks

娱乐和安全控制验证

作为一名进攻性安全研究人员,我的主要职责是对真实世界的样本进行细致的分析,以提取战术、技术和程序 (TTP)。一旦确定,我将这些 TTP 映射到 MITRE ATT&CK 框架上,从而全面了解对手的行为。为了验证安全控制的有效性,我采用了仿真技术,使用在分析样本中观察到的相同方法重新创建已识别的 TTP。此仿真过程可确保对对手的行为进行逼真的模拟,从而对现有安全措施进行全面验证。为此,我利用专有的仿真工具,确保在复制复杂攻击场景时具有精确性和适应性。我的角色超出了安全运营中心 (SOC) 第 3 级的典型范围,因为我不仅分析,而且还重新创建相同的行为以进行主动仿真,然后提供缓解策略,包括开发 YARA 规则、Sigma 检测签名和入侵指标 (IoC)。这种全面的方法对于增强组织抵御不断变化的网络威胁的能力至关重要。

这是我工作的整体流程:

逆向分析实战-揭开 AsyncRAT 的复杂性

缓解

YARA

rule AsyncRAT{meta:description = “AsyncRAT by Blind Eagle”author = “Usman Sikander”reference = “https://izoologic.com/phishing/blind-eagle-apt-reemerges-to-target-colombian-organisations/hash1 = “c0b9838ff7d2ddecbfe296eae947e5d6”hash2 = “76af794b85e4a4ba75c5703df1207b7a6798bf2e”hash3 = “79068b82bcf0786b6af1b7cc96de1bf4e1a66b0d95e7e72ed1b1054443f6c5e3”strings:$s1 = “1DB2A1F9902B35F8F880EF1692CE9947A193D5A698D8F568BDA721658ED4C58B” fullword ascii$s2 = “87639126EA77B358F26532367DBA67C5310EF50A8D9888ED070CD40E1F605A8F” fullword ascii$s3 = “1DB2A1F9902B35F8F880EF1692CE9947A193D5A698D8F568BDA721658ED4C58B” fullword ascii$s4 = “87639126EA77B358F26532367DBA67C5310EF50A8D9888ED070CD40E1F605A8F” fullword wide$s5 = “clFxcHJwbUJWSEtHY2ROUXpoNHV6clBMeDVqenpWYmk=” fullword ascii$s6 = “17aNgmElc4ng6An/6hq+YMrQTx4uJ1++c0SSk3rYvCFbeHnycL4Jrp01hWoAOenn/eMKIGT83dY3efMDWsGKWA==” fullword wide$s7 = “iMXtaH3RD4azCnEK+bHLyPMPIs2a4cPQifNyYsmtfBqSShS+aUobqLJXmoGtNAqfb9jYeBC+T49Ryr3fHwzGOQ==” fullword wide$s8 = “RyFgiEdGhARXpc6DAhvpqJxjU2yLAALheNVzc/+ZTvM9/YPPPcCarzgxl7jgHKrgmjxe7l1pingy2PObWnzMZg==” fullword wide$s9 = “CfXpd10bbWOrMPUDu4xOQVkVoERQrspS5I5RrSBc3XPr6/l12WdhfLjn9IUpy8mtbVoZq8Nl2UitCoQT8mAlLQ==” fullword wide$s10 = “clFxcHJwbUJWSEtHY2ROUXpoNHV6clBMeDVqenpWYmk=” fullword wide$op0 = {BF EB 1E 56 FB CD 97 3B B2 19 02 24 30 A5 78 43 00 3D 56 44 D2 1E 62 B9 D4 F1 80 E7 E6 C3 39 41}$op1 = {48 61 73 68 00 56 65 72 69 66 79 48 61 73 68 00}$op2 = {41 00 6E 00 74 00 69 00 76 00 69 00 72 00 75}condition:( uint16(0) == 0x5a4d andfilesize < 49KB and(6 of them) and all of ($op*)) or (all of them)}

结论

传统的基于签名的检测方法通常难以识别这种多态恶意软件,因为它能够快速更改和逃避检测。

这一分析强调了现代网络安全战略中对行为检测机制的迫切需求。行为检测由机器学习和人工智能提供支持,专注于识别行为模式,而不是仅仅依赖已知的特征。这种方法使安全系统能够适应和识别 AsyncRAT 等新兴威胁,即使它们不断发展以逃避传统防御。通过持续监控和分析系统行为,配备行为检测功能的安全解决方案可提供主动防御,提供关键保护层,抵御传统方法可能遗漏的新威胁。

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月6日00:42:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   逆向分析实战-揭开 AsyncRAT 的复杂性http://cn-sec.com/archives/2550058.html

发表评论

匿名网友 填写信息