Detecting Amadey malware with Wazuh
![Post icon](https://wazuh.com/uploads/2023/08/amadey-malware-circle.png)
Amadey is a malware that steals sensitive information from infected Windows endpoints. This malware was first discovered in 2018 and has maintained a persistent botnet infrastructure since then. It has the capability to download additional malware from a command and control (C2) server on the infected endpoints. The malware sends stolen information to a remote C2 server through HTTP POST requests.
Amadey malware can also add infected endpoints to a botnet that threat actors can use to launch distributed denial of service (DDOS) attacks. Threat actors usually distribute Amadey through cracked versions of legitimate software and keygens.
This blog post shows how we use Wazuh to detect Amadey malware on an infected Windows endpoint.
clip64.dll
and cred64.dll
files from a C2 server and saves these files in the C:\Users\<USER_NAME>\AppData\Roaming\<FOLDER>
folder. Amadey utilizes the Windows rundll32.exe
utility to execute these DLL files. It uses these DLL files to steal sensitive information from infected endpoints.id=101495022937&vs=3.86&sd=88c8bb&os=1&bi=1&ar =1&pc =Windows-10un =Administrator&dm=&av =13&lv=0&og=1 |
Startup
value of the HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
Windows registry key to maintain persistence upon system reboot.C:\Users\<USER_NAME>\AppData\Local\Temp\<FOLDER> and C:\Windows\System32\Tasks
folders.cmd.exe\\\" /k echo Y|CACLS \\\"{DROPPED_COPY_OF_AMADEY_MALWARE}\\" /P \\\"Administrator:N\\\"
Infrastructure
We use the following infrastructure to demonstrate how Wazuh can detect Amadey:
Detection with Wazuh
In this blog post, we use the following techniques to detect the malicious activities of Amadey on a Windows 10 endpoint:
We use Sysmon to monitor several system events and create rules on the Wazuh server to detect the malicious activities performed by Amadey.
In this section, we install Sysmon on the Windows endpoint and configure the Wazuh agent to collect Sysmon logs.
Follow the steps below to detect the malicious activities performed by Amadey malware on the Windows endpoint.
1. Download Sysmon and the configuration file sysmonconfig.xml.
2. Edit the sysmonconfig.xml
file and include the following configuration within the <EventFiltering>
block. This configuration records any file whose full path contains \AppData\Roaming\
:
<FileCreate onmatch="include"> <TargetFilename condition="contains">\AppData\Roaming\</TargetFilename> </FileCreate>
3. Launch PowerShell with administrative privilege, and install Sysmon as follows:
> .\Sysmon64.exe -accepteula -i .\sysmonconfig.xml
4. Edit the Wazuh agent C:\Program Files (x86)\ossec-agent\ossec.conf
file and include the following settings within the <ossec_config>
block.
<!-- Configure Wazuh agent to receive events from Sysmon --> <localfile> <location>Microsoft-Windows-Sysmon/Operational</location> <log_format>eventchannel</log_format> </localfile>
5. Restart the Wazuh agent for the changes to take effect:
> Restart-Service -Name wazuh
Perform the following steps to configure detection rules on the Wazuh server.
1. Create a new file /var/ossec/etc/rules/amadey_malware.xml
on the Wazuh server:
# touch /var/ossec/etc/rules/amadey_malware.xml
2. Edit the file /var/ossec/etc/rules/amadey_malware.xml
and include the following detection rules for Amadey malware:
<group name="windows,sysmon,amadey_detection_rule,"> <!-- Amadey downloads malicious DLL files on victim endpoint --> <rule id="100090" level="10"> <if_sid>61613</if_sid> <field name="win.eventdata.image" type="pcre2">(?i)\\\\.+(exe|dll|bat|msi)</field> <field name="win.eventdata.targetFilename" type="pcre2">(?i)\\\\appdata\\\\.+(clip64|cred64).+dll</field> <description>Possible Amadey malware detected. $(win.eventdata.targetFilename) was downloaded on $(win.system.computer).</description> </rule> <!-- Amadey loads malicious DLL files --> <rule id="100091" level="12"> <if_sid>61609</if_sid> <field name="win.eventdata.image" type="pcre2">(?i)\\\\rundll32.exe</field> <field name="win.eventdata.imageLoaded" type="pcre2">(?i)\\\\appdata\\\\.+(clip64|cred64)\.dll</field> <description>Possible Amadey malware detected. Malicious $(win.eventdata.imageLoaded) file loaded by $(win.eventdata.image).</description> <mitre> <id>T1574.002</id> </mitre> </rule> <!-- Amadey changes the permission of the dropped copy of itself --> <rule id="100092" level="8"> <if_sid>61603</if_sid> <field name="win.eventdata.image" type="pcre2">(?i)\\\\cacls.exe</field> <match type="pcre2">\\\\cmd.exe\\\" /k echo Y|CACLS \\\".+\.exe\\\" /P \\\"Administrator</match> <description>Possible Amadey malware detected. Malware changes the permission of the dropped copy of itself to read-only mode.</description> <mitre> <id>T1222.001</id> </mitre> </rule> <!-- Amadey achieves persistence --> <rule id="100093" level="12"> <if_sid>61615</if_sid> <field name="win.eventdata.image" type="pcre2">(?i)\\\\Users\\\\.+\\\\appdata\\\\local\\\\temp\\\\.+\.(exe|msi|dll|bat)</field> <field name="win.eventdata.targetObject" type="pcre2">(?i)HKU\\\\S.+\\\\software\\\\microsoft\\\\windows\\\\currentversion\\\\explorer\\\\user shell folders\\\\startup</field> <description>Possible Amadey malware detected. Malware changes the "Startup" value within the "User Shell Folders" Windows registry key to achieve persistence.</description> <mitre> <id>T1547</id> </mitre> </rule> </group>
Where:
100090
is triggered when Amadey malware downloads malicious DLL files on the victim endpoint.100091
is triggered when Amadey malware loads the downloaded malicious DLL files on the victim endpoint.100092
is triggered when Amadey changes the file permission of the dropped copy of itself to read-only mode.100093
is triggered when Amadey changes the Startup
value within the User Shell Folders
Windows registry key to achieve persistence upon system reboot.The alerts below are generated on the Wazuh dashboard when we run Amadey malware on the Windows endpoint.
Figure 1: Malicious DLL downloaded and loaded by Amadey malware.
Figure 2: Amadey changes the permission of a copy of itself and achieves persistence.
In this section, we install Suricata on an Ubuntu endpoint and integrate Suricata with the Wazuh server. Finally, we create a rule to detect the network connection Amadey makes to its C2 server.
Note: In this blog post, the Ubuntu endpoint is hosted on an Oracle VirtualBox with Promiscuous mode
set to Allow All
by navigating to Settings>Network>Advanced
. This setting allows Suricata to monitor all network traffic, therefore generating a high amount of alerts on the Wazuh dashboard.
1. Install Suricata on the Ubuntu endpoint to monitor network traffic within your environment:
sudo add-apt-repository ppa:oisf/suricata-stable sudo apt-get update sudo apt-get install suricata
2. Run the following command to obtain the interface name of the Ubuntu endpoint:
$ ip -brief a
In this case, the output shows that the interface name is enp0s3
:
lo UNKNOWN 127.0.0.1/8 ::1/128 enp0s3 UP 192.168.0.250/24 fe80::a00:27ff:feb6:d803/64
3. Add the network interface to monitor in the Suricata configuration file. Find the af-packet
section in the /etc/suricata/suricata.yaml
file, and replace eth0
with the interface name of the Ubuntu endpoint:
af-packet: - interface: eth0 # Number of received threads. "auto" uses the number of cores #threads: auto
4. Download the Emerging Threats Open ruleset:
$ sudo suricata-update
5. Test your Suricata configuration:
$ sudo suricata -T -c /etc/suricata/suricata.yaml -v
You should have a similar output if your configuration is valid:
Notice: suricata: This is Suricata version 7.0.0 RELEASE running in SYSTEM mode Info: cpu: CPUs/cores online: 2 Info: suricata: Running suricata under test mode Info: suricata: Setting engine mode to IDS mode by default Info: exception-policy: master exception-policy set to: auto Info: logopenfile: fast output device (regular) initialized: fast.log Info: logopenfile: eve-log output device (regular) initialized: eve.json Info: logopenfile: stats output device (regular) initialized: stats.log Info: detect: 2 rule files processed. 35230 rules successfully loaded, 0 rules failed Info: threshold-config: Threshold config parsed: 0 rule(s) found Info: detect: 35233 signatures processed. 1341 are IP-only rules, 5250 are inspecting packet payload, 28430 inspect application layer, 108 are decoder event only Notice: suricata: Configuration provided was successfully loaded. Exiting.
6. Run the commands to start Suricata, and also enable it to start at system reboot:
$ sudo systemctl enable suricata $ sudo systemctl start suricata
7. Edit the Wazuh agent /var/ossec/etc/ossec.conf
file and add the following configuration within the <ossec_config>
block:
<!-- Configure Wazuh agent to collect and forward the Suricata logs to the Wazuh server for analysis --> <localfile> <log_format>json</log_format> <location>/var/log/suricata/eve.json</location> </localfile>
8. Restart the Wazuh agent service for the changes to take effect:
$ sudo systemctl restart wazuh-agent
Perform the following steps to add a rule to detect when Amadey malware makes a connection to a C2 server.
1. Edit the file /var/ossec/etc/rules/amadey_malware.xml
on the Wazuh server and append the following configuration:
<group name="detect_amadey_c2_connection,"> <!-- Amadey connects to its C2 server to exfiltrate data from an infected endpoint --> <rule id="100094" level="10"> <if_sid>86601</if_sid> <field name="event_type">^alert$</field> <match>ET MALWARE Win32/Amadey Bot Activity (POST) M2</match> <description>Amadey malware detected. Possible data exfiltration to a command and control server.</description> <mitre> <id>T1041</id> </mitre> </rule> <!-- This rule ignores noisy Suricata alerts --> <rule id="100095" level="0"> <if_sid>86601</if_sid> <field name="event_type">^alert$</field> <match type="pcre2">(?i)(SURICATA stream packet with invalid timestamp)|(SURICATA applayer detect protocol only one direction)</match> <description>No Suricata alert.</description> </rule> </group>
Where:
100094
is triggered when Amadey malware connects to its C2 server to exfiltrate data from an infected endpoint.100095
is used to suppress noisy Suricata alerts.Note: Rule ID 100095
is specific to our setup. You can use a similar rule to suppress noisy Suricata alerts in your environment.
2. Restart the Wazuh manager for the changes to take effect:
$ sudo systemctl restart wazuh-manager
The below alerts are generated on the Wazuh dashboard when Amadey makes a network connection to its C2 server from an infected Windows endpoint.
Figure 3: Amadey connects to its C2 server to exfiltrate data from an infected endpoint.
Conclusion
In this blog post, we have successfully used Wazuh to detect the behavior of Amadey malware. Specifically, we used Sysmon and Suricata integration with Wazuh to detect Amadey malware on a Windows endpoint.
Wazuh is a free and open source enterprise-ready security solution for threat detection, incident response, and compliance. Wazuh integrates seamlessly with third-party solutions and technologies. Wazuh also has an ever-growing community where users are supported. To learn more about Wazuh, please check out our documentation and blog posts.
References