Skip to content

MDRFCKR - a (almost) decade old botnet

Between May 3 and June 3, 2026, a threat actor operating under the handle "mdrfckr" conducted a sustained SSH credential-stuffing campaign against my internet-facing SSH honeypots. The campaign deployed 3,929 successful authentication events from 1,702 unique source IPs across 32+ countries. Upon gaining access, the attacker deployed a persistent SSH public key bearing the "mdrfckr" comment - a classic botnet recruitment / persistence mechanism.

Campaign Overview

Metric Value
Campaign duration May 3 - June 3, 2026 (32 days)
Total successful auth events 3,929
Unique attacker IPs 1,702
Countries observed 32+
ASNs observed 100+
Unique credential pairs tried 102+
Peak daily volume 350 events (May 27)
Honeypot type Cowrie (SSH)
SSH key fingerprint SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw
SSH key comment mdrfckr

Threat Actor Background

The "mdrfckr" handle is not new. The same RSA public key - identical byte-for-byte to the one deployed in this campaign - was first observed on July 5, 2018, making this one of the longest-running persistent SSH backdoor keys known to the security community.1

Attribution: Outlaw (Dota)

The mdrfckr key is a confirmed indicator of the Outlaw threat group, also tracked as "Dota". First documented by Trend Micro in 2018, Outlaw is a financially motivated threat actor primarily targeting Linux servers via SSH brute-force attacks. Their end goal is Monero (XMR) cryptomining and building a persistent botnet for hire.2

Outlaw is believed to operate from or have strong ties to Asia, based on infrastructure overlap and tooling patterns.

Post-Exploitation Kill Chain

After gaining SSH access, the Outlaw kill chain follows a consistent pattern:

  1. Reconnaissance - collects CPU info, memory, running processes (w, top)
  2. Persistence via SSH key injection - overwrites authorized_keys with the mdrfckr key
  3. Defense removal - clears /etc/hosts.deny, kills defensive scripts (/tmp/secure.sh, /tmp/auth.sh), and removes file immutability flags (chattr -ia .ssh, lockr -ia .ssh) to prevent defenders from locking the backdoor out
  4. Payload download - fetches a tarball via wget/curl from attacker-controlled infrastructure
  5. Malware deployment - extracts components into a hidden directory (.configrc5)

Deployed Malware Components

Component Description
IRC botnet client (Perl) Disguises as rsync; connects over port 443 to hardcoded C2 servers; supports command execution, DDoS attacks, port scanning, and HTTP file transfers
kswapd0 UPX-packed modified XMRig 6.19.0; CPU-only Monero miner; named to mimic a kernel memory management process
Port scanner Scans for additional SSH targets to expand the botnet

The Perl botnet client is obfuscated via perlobfuscator.com and kills any high-CPU processes except its own whitelist (kswapd0, tsm, rsync, tor, httpd) to avoid resource contention.

The Monero wallet receiving mined funds:

483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS

Scale and Reach

According to port22.dk's analysis over a two-month observation window, the mdrfckr botnet was linked to approximately 13,000 unique compromised hosts across 152 countries.1 Later analysis of variant waves identified 28,000+ unique source IPs in a single campaign variant.3 The botnet's top victim countries are the United States (~21%), Singapore (~9%), India, and Germany.

Network Fingerprint

The scanner consistently identifies itself with:

  • SSH client string: SSH-2.0-libssh-0.6.3 (evolved to libssh-0.9.x in later variants)
  • HASSH: 51cba57125523ce4b9db67714a90bf6e (99.1% correlation with mdrfckr activity)

Activity Timeline

Period Notes
July 2018 mdrfckr SSH key first observed in the wild
2018-2022 Sustained low-level operations; key deployed across ~13,000 hosts
Dec 2022 New command chain variant detected; evolution to libssh 0.9.x
Dec 2024-Feb 2025 Apparent dormancy period
March 2025 Significant resurgence documented by Kaspersky2
May-Jun 2026 This campaign - 3,929 events against my Watchtower honeypots

Attack Timeline

The campaign ran in distinct waves with notable gaps, suggesting operator-controlled scheduling rather than an automated worm:

MDRFCKR Events per Day

Phase Days Total Events Intensity
Phase 1 (initial probing) May 3 - 5 184 Low
Phase 2 (escalation) May 6 - 14 872 Medium
Phase 3 (peak volume) May 15 - 19 1,160 High
Pause May 20 - 25 0 -
Phase 4 (resurgence) May 27 - Jun 3 1,713 Very High

A 6-day pause between May 20-25 suggests the operator temporarily halted the campaign, possibly to rotate infrastructure or avoid detection.

Geographic Distribution

Attack infrastructure was heavily concentrated in China and United States, together accounting for ~32% of all events:

Events by Country (Top 10)

Country Events % of Total
China 647 16.5%
United States 606 15.4%
Hong Kong 323 8.2%
South Korea 179 4.6%
Vietnam 172 4.4%
Indonesia 137 3.5%
Brazil 137 3.5%
India 135 3.4%
Russia 108 2.7%
Singapore 108 2.7%

The heavy presence of Chinese and Hong Kong ASNs in the top 10 (Tencent Cloud, UCloud, Byteplus, Volcano Engine) suggests the operator may be based in or have strong operational ties to the Greater China region.

Hosting Infrastructure / ASN Distribution

The attacker primarily used cloud hosting providers and bulletproof hosting services, not residential IPs:

Top 10 ASNs by Attack Volume

ASN Organization Events Cloud Type
AS132203 Tencent Cloud (CN) 457 Public Cloud
AS135377 UCloud HK (HK) 191 Public Cloud
AS8075 Microsoft Corp 181 Public Cloud
AS4766 Korea Telecom 122 ISP
AS14061 DigitalOcean 117 Public Cloud
AS16276 OVH (FR) 61 Public Cloud
AS150436 Byteplus (SG) 48 Public Cloud
AS137718 Volcano Engine (CN) 45 Public Cloud
AS31898 Oracle Cloud 41 Public Cloud
AS53667 PonyNet (US) 38 VPS / Low-cost

The mix of major cloud providers (Tencent, Microsoft Azure, DigitalOcean, Oracle, OVH) with smaller Asian providers (UCloud, Byteplus, Volcano Engine) suggests the attacker is likely operating compromised cloud instances or using fraudulently acquired accounts rather than their own bare-metal infrastructure.

Technical Analysis

SSH Key

All successful authentications deployed the same SSH RSA-2048 public key for persistent backdoor access:

2048 SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw
     mdrfckr (RSA)

The key operation executed on each compromised host:

cd ~ && \
rm -rf .ssh && \
mkdir .ssh && \
echo "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckr" >> .ssh/authorized_keys && \
chmod -R go= ~/.ssh && \
cd ~

This overwrites any existing .ssh/authorized_keys, granting the attacker exclusive SSH key‑based access.

Credential Targeting (Top 15)

Username Password Attempts
admin fjbdfdjkdsfs541544 157
systemd Voidsetdownload.so 58
root warnightkardesim 51
ubuntu fjbdfdjkdsfs541544AA@@ 44
linux linux123 36
zhxnephu zXXUKpvydMqzp1quBItn 33
pakchoi Kermit123@ 30
root linux123 27
root 20192019 24

The attacker used both common weak passwords (linux123, 20192019) and unique, likely pre‑compromised credentials (fjbdfdjkdsfs541544, warnightkardesim), suggesting a hybrid approach: brute‑force dictionary attacks combined with credential stuffing from prior breaches.

MITRE ATT&CK Mapping

Tactic Technique ID
Initial Access SSH Brute Force / Credential Stuffing T1110.001
Persistence SSH Authorized Keys T1098.004
Command and Control Remote Access via SSH T1021.004
Discovery System Information Discovery T1082

Indicators of Compromise (IOCs)

SSH Key

  • Fingerprint: SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw
  • Comment: mdrfckr
  • Key type: RSA 2048

Network

  • 1,702 unique source IPs across 32 countries
  • Predominantly cloud-hosted (Tencent Cloud AS132203, UCloud AS135377, Microsoft AS8075)

Personal Take-Aways

The most terrifying thing was that within 1 minute of opening port 22, the first brute-force attacks hit my honeypots. Not hours, not days - one minute. There's something out there, constantly scanning, waiting for any open SSH port. When working on firewalls or opening new ports, I first try it out on a non-internet facing server or Linux box so I can test things without the worry of misconfiguring a firewall or ssh configuration to allow everyone on my machines.

What I'm unsure about is the 6-day pause between May 20 and May 25. Watching the graph flatline was almost more unsettling than the activity. Did one of their infrastructure providers get shut down? Was law enforcement involved? Or is there actually a human somewhere in this automated scan, deciding when to lie low and when to press go?

The mdrfckr key has been in the wild since 2018. Almost a decade, same key, same playbook, and it's still working.

For this reason, I use only SSH key pairs (private/public) for authentication - both on my servers in the cloud and at home in my homelab.