AsyncRAT is a Remote Access Trojan (RAT) designed to remotely monitor and control infected systems. It is free, open-source, and often used by cybercriminals for malicious purposes, such as stealing sensitive information, installing more malware, or performing DDoS attacks.
AsyncRAT was published as an open source remote administration tool project on GitHub in January 2019.
AsyncRAT is a regular malware product and set of tools utilized by attackers and APT organizations. Threat actors and adversaries utilized a variety of intriguing script injectors and spear phishing attachments to deliver AsyncRAT to targeted hosts or networks across multiple campaigns.
In this small research we are detailed investigate the source code of AsyncRAT and highlights the main features.
AsyncRAT has been included in app.any.run’s weekly TOP 10 malware trends tracker for the past few months.
When executed, the AsyncRat GUI allows criminals to control the infected machine. The code is open-source and can be modified to suit the purposes of criminals:
AsyncRAT implements a client-server architecture. The client side is the infected machine, whereas the server side is the attacker-operated control interface. The client establishes a connection with the server using asynchronous TCP sockets, which permits multiple simultaneous connections without interference.
AsyncRAT includes several functionalities that permit a high degree of control over infected systems:
Remote Desktop - The client captures screenshots of the desktop and sends them to the server, allowing the attacker to see the victim’s activities in real time.
AsyncRAT uses the
.NET Framework’s built-in libraries to capture screenshots from the victim’s machine. The following is a more technical breakdown of how this feature works in the AsyncRAT client.
In the AsyncRAT’s source code, you would find a function responsible for capturing screenshots. This function is typically invoked when the server sends a specific command to the client.
To capture the screenshot, AsyncRAT leverages the
System.Drawing namespace in the
.NET Framework, which provides access to
GDI+ basic graphics functionality. More specifically, it uses the
Graphics classes to capture and store the screenshot(
This code does the following:
Creates a new
Bitmapobject with the same size as the screen. The
Screen.PrimaryScreen.Boundsproperty is used to determine the size of the screen.
Graphicsobject from the bitmap. This object is used to perform the screenshot operation.
Graphics.CopyFromScreenmethod to take the screenshot. This method copies the pixels from the screen and stores them in the bitmap.
After the screenshot is captured and stored in the bitmap, AsyncRAT then usually converts the bitmap to a byte array and sends it to the server. The server can then reconstruct the bitmap from the byte array to view the screenshot. It’s worth noting that the screenshot is usually compressed before being sent to reduce network usage.
Keylogger - AsyncRAT logs keystrokes and periodically sends the data to the server. This feature can capture sensitive information like passwords and credit card numbers.
AsyncRAT captures keystrokes by using the
SetWindowsHookEx function, which is part of the Windows API. This function allows the application to install a “hook” that monitors the message traffic in the system and retrieves specific types of messages, such as keypresses.
The following is a code of how AsyncRAT implement a keylogger in
C# using the
SetWindowsHookEx function (
SetHook function installs the keyboard hook by calling
SetWindowsHookEx with the
LowLevelKeyboardProc delegate. The hook is then uninstalled using
File Explorer - The client can navigate the filesystem, upload files to the server, download files from the server, and execute files.
To accomplish these tasks, AsyncRAT uses standard
.NET Framework libraries. Let’s break down each function separately.
Navigating the File System. The
System.IO namespace in the
.NET Framework contains classes for manipulating files and directories. For example, AsyncRAT retrieve a list of files in a directory using the
Directory.GetFiles method (
And get subdirectories with
Directory.GetDirectories method (
Uploading Files To the Server. To read the contents of a file, AsyncRAT uses the
File.ReadAllBytes method, which reads a file and returns its contents as a byte array (for example in
Downloading Files from the Server. When the server sends a file, it is usually in the form of a byte array. The client can save this byte array to a file using the
File.WriteAllBytes method (for example in:
Executing Files. To execute a file, AsyncRAT uses the
Process.Start method from the
System.Diagnostics namespace (
Process Manager - The client retrieves a list of running processes and can kill or start processes.
AsyncRAT utilizes the
System.Diagnostics namespace in the
.NET Framework to interact with system processes.
Retrieving a List of Running Processes. The
Process class in the
System.Diagnostics namespace has a static method
GetProcesses that returns an array of
Process objects, which represent all the processes currently running on the system. Here is how it’s used (
SELECT ProcessId, Name, ExecutablePath FROM Win32_Process query:
Starting a Process. To start a new process, AsyncRAT uses the
Process.Start method, which starts a process resource by specifying the name of an application or document:
Note that all these operations require sufficient permissions. If the AsyncRAT client doesn’t have the necessary permissions, these operations will fail.
Remote Shell - The client can execute shell commands from the server, enabling an even greater degree of control.
The ability to execute shell commands remotely is a powerful feature of AsyncRAT. This feature allows the attacker to execute virtually any command, as if they were physically present at the victim’s machine.
AsyncRAT executes shell commands by using the
System.Diagnostics.Process class in the
.NET Framework. This class provides the
Start method, which can start a new process. To execute a shell command, AsyncRAT starts a new instance of
cmd.exe with the shell command as a parameter (
Stealth and Persistence
To evade detection, AsyncRAT uses several techniques:
Process Injection - AsyncRAT injects its core functionality into a separate process to hide its malicious activities.
The injector is used to load into the memory the AsyncRAT file by taking advantage of the Process Hollowing technique. As demonstrated, a new thread is created, put in a suspended state (pause), the target file mapped into the memory, and then executed:
Anti-Analysis - The client employs various anti-analysis techniques, including the detection of virtual machines and sandbox environments.
Malware often employs anti-analysis techniques to evade detection, avoid being analyzed in a controlled environment, and ultimately to make reverse-engineering more challenging. This includes checks for virtual machines (VMs) and sandbox environments, which are commonly used tools for malware analysis.
Analyzing the source code of AsyncRAT, you may find various techniques that it employs to achieve this (
Client/Helper/Anti_Analysis.cs). While specific implementation details could vary depending on the version or variant of the RAT, here’s an example of what these anti-analysis checks might look like in practice.
Here is how AsyncRAT check for a VM and a sandbox:
As you can see, just check if
Sbiedll.dll is loaded, which is a module of sandboxie sandbox.
Also check disk size:
The logic is simple, determine if a compromised host is operating in a malware lab or sandbox by examining the size of its hard drive.
Another method is
IsXP: check if its process is running in
XP Windows Operating System:
Check if remote debugger exist:
The following image depicts the code that drops a
.bat script in the
%temp% folder to delete itself as part of a defense evasion technique to clear its trace after execution and drop a copy of itself on the compromised host:
Persistence - The client installs itself to the registry or startup folder to maintain persistence after system reboots.
The AsyncRAT client will verify that its code executes with administrative permissions. If so, it will add Windows Scheduled Tasks using
schtasks.exe with the highest runlevel permissions to execute a duplicate of itself, if AsyncRAT is not running with administrative privileges, it will use Registry Run Key
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run for its persistence:
Connection and Control
On execution, the client initiates a connection to the server. After a successful connection, the client sends detailed system information to the server, including the computer name, user name, operating system, processor, and installed antivirus software. The client also downloads a small
.NET assembly DLL file from the server, which is injected into a newly created process. This is where the AsyncRAT’s core functionality is executed.
AsyncRAT will decrypt its AES encrypted configuration data including the port and C2 IP address that will be used for C2 communication:
This is the code snippet for C2 server communication and C2 downloads:
Updating and Uninstalling
AsyncRAT allows for the updating and uninstalling of the client directly from the server.
The uninstall functionality would typically involve the server sending a command to the client, telling it to remove itself from the infected machine. This might involve deleting the client binary, as well as any other files created by the client. The client might also remove any registry keys it has created, and undo any other changes it has made to the system.
Given its open-source nature and availability on GitHub since January 2019, AsyncRAT is accessible to a wide range of threat actors, including both individual malicious actors and sophisticated APT groups. This availability, combined with its powerful features, makes it a popular choice for cybercriminals.
The observed campaigns leveraging spear-phishing attacks and script loaders, such as the one using a Microsoft OneNote attachment to load a
.HTA file, demonstrate that attackers can employ a variety of methods to deliver AsyncRAT to targeted hosts or networks. This underlines the importance of a comprehensive security posture, encompassing not just malware detection and removal, but also employee training and robust email security measures to combat spear-phishing attacks.
By Cyber Threat Hunters from MSSPLab:
MITRE ATT&CK: Process Hollowing
Thanks for your time happy hacking and good bye!
All drawings and screenshots are MSSPLab’s
Article Link: Malware source code investigation: AsyncRAT - MSSP Lab