DPRK APTs: Ted backdoor and curlRAT target South Korean media and automotive sectors

DPRK APTs: Ted backdoor and curlRAT target South Korean media and automotive sectors
Rapid7 Labs uncovered a previously undocumented Linux toolkit using a trojanized HAProxy build and modified system daemons to target South Korean automotive and media organizations for long-term espionage. The campaign used the ted backdoor, CurlRAT, and an SSH keylogger to steal credentials, inject malicious web content, and maintain stealthy control, with infrastructure and tactics suggesting possible DPRK-linked actors such as APT37 and Kimsuky. #HAProxy #ted #CurlRAT #APT37 #Kimsuky #Rapid7 #SouthKorea

Keypoints

  • Rapid7 identified a new Linux toolkit that targeted organizations in South Korea’s automotive and media sectors.
  • The operation relied on a trojanized HAProxy 2.8.12 build named the ted backdoor, plus modified crond, agetty, atd, sshd, and polkitd binaries.
  • The malware enabled remote command execution, traffic interception, credential harvesting, and long-term surveillance while blending into normal HAProxy load balancing.
  • CurlRAT provided C2, command execution, reverse shell, file transfer, and host reconnaissance, while also monitoring HAProxy status through a watchdog thread.
  • An SSH keylogger captured plaintext passwords and stored them in an encrypted log file on disk.
  • The toolkit used custom XOR, substitution, and Base64-based encoding to hide configuration, payloads, and communications.
  • Attribution is assessed with medium confidence to DPRK-linked threat actors, with overlap noted with APT37, Kimsuky, and Lazarus-style tradecraft.

MITRE Techniques

  • [T1190] Exploit Public-Facing Application – The actors likely gained the first foothold by exploiting an exposed groupware portal or mail service (‘the threat actor begins by exploiting a vulnerability in the Groupware login portal’).
  • [T1059.004] Unix Shell – Commands were executed through popen and shell-based handlers, including reverse shell and PTY shell functions (‘executes commands via popen’, ‘full interactive PTY shell’).
  • [T1106] Native API – The toolkit used native process and HAProxy APIs for threaded execution and traffic handling (‘pthread_create’, ‘task_wakeup’, ‘native filter API’).
  • [T1574.006] Hijack Execution Flow: Dynamic Linker Hijacking – The implant was compiled as part of HAProxy and loaded as a shared-library-style filter at process start (‘compiled as part of the victim’s existing HAProxy version’).
  • [T1543] Create or Modify System Process – Legitimate services were overwritten in place and restarted, such as crond (‘decrypted the trojanized crond binary in memory, overwrites the system’s legitimate daemon, and restarts the service’).
  • [T1548] Abuse Elevation Control Mechanism – The RAT and reverse shell attempted root-level execution using setuid/setreuid (‘calls setuid(0) and setreuid(0, 0)’).
  • [T1036.005] Masquerade: Match Legitimate Name or Location – Malware binaries and functions were disguised as legitimate system components (‘crond, polkitd, agetty, atd’, ‘masquerade as atd_ routines’).
  • [T1070.002] Clear Linux or Mac System Logs – The stager removed traces from shell and system logs (‘filtering out keywords such as tmp, wget cron and crond’).
  • [T1070.006] Timestomp – The backdoored crond binary was timestamped to match /usr/bin/ssh (‘same creation timestamp of /usr/bin/ssh’).
  • [T1562.006] Disable or Modify System Firewall – HAProxy connection counters and related telemetry were scrubbed to hide activity (‘beconn/feconn and the global actconn’).
  • [T1027] Obfuscated Files or Information – Configs, payloads, and C2 traffic were protected with XOR, substitution ciphers, and Base64 (‘simple xor-based encryption’, ‘Base64 encoding’).
  • [T1497.001] Virtualization/Sandbox Evasion – CurlRAT checked for virtualization artifacts before running (‘checks the presence of the file /usr/lib/libvirtlog.so.0’).
  • [T1480] Execution Guardrails – The stager and RAT only proceeded under specific environmental conditions (‘only if HAProxy or cron are running’, ‘validates victim token before handler dispatch’).
  • [T1556.003] Pluggable Authentication Modules – The SSH keylogger intercepted plaintext credentials from authentication flows (‘intercepts legitimate users’ plaintext passwords’).
  • [T1539] Steal Web Session Cookie – The backdoor captured session-related web data such as cookies and headers (‘steal session cookies’, ‘capture engine intercepts HTTP sessions’).
  • [T1082] System Information Discovery – The malware profiled hostname, distro, kernel, CPU, and UUID to select payloads (‘profiles the OS checking system hostname, OS distribution and version’).
  • [T1057] Process Discovery – CurlRAT monitored HAProxy process status through /proc and PID files (‘reads the pid at /var/run/haproxy.pid and monitors the status’).
  • [T1185] Browser Session Hijacking – The implant rewrote or appended response bodies to deliver malicious content (‘response body replaced or appended with decrypted payload script’).
  • [T1119] Automated Collection – The capture logic automatically logged selected HTTP request data and metadata (‘selectively logs and victims are identified’).
  • [T1071.001] Application Layer Protocol: Web Protocols – C2 traffic was tunneled over HTTP/HTTPS to blend with normal web traffic (‘polls C2 over HTTPS with libcurl fallback to HTTP’).
  • [T1132.001] Data Encoding: Standard Encoding – Payloads and commands were encoded with Base64 and XOR before transmission (‘Base64+XOR encoding/decoding applied to the payload’).
  • [T1102] Web Service – Backup infrastructure used image-like web domains for C2 and configuration retrieval (‘img.darklights.store’, ‘img.monderhouse.space’).
  • [T1572] Protocol Tunneling – Interactive shell traffic was relayed through HAProxy pipes and raw sockets (‘tunnelled through HAProxy HTTP pipeline via named FIFOs’).
  • [T1568] Dynamic Resolution – The victim ID was derived from system attributes and used in authenticated requests (‘concatenating… system hostname, ipv4 address, and hardware/OS UUID’).
  • [T1041] Exfiltration Over C2 Channel – Stolen passwords, command output, and telemetry were sent back through the same C2 channel (‘sends the result back’, ‘credentials exfiltrated via CurlRAT C2’).
  • [T1560] Archive Collected Data – The keylogger and RAT stored captured data in encrypted logs before exfiltration (‘saved them to an encrypted log file’).

Indicators of Compromise

  • [File hash ] Stager/CurlRAT/Credential-related binaries – 5db1b6d52faf60b4f32d6fd0c7c938e4d05d29a14c32ded4a9668357c08b6a91, 4bb923eb040aa13ca8fd409c31ee4729c60ddff32e350efe1c5a4a9168a065f5
  • [File hash ] Other named samples and variants – 8f30b57928934ae67478d0e690c91d046e35a638da098d02922a4a88a0fdb66c, 94630b96f628c96a6bff7904b40ffc9ad67c86f8a4ff6080c3b524831c93f402
  • [File path ] Stager and keylogger storage paths – /var/lib/snapd/g580, /var/lib/sshd/c8c68e629bba773a10ac80012d10bf19
  • [File path ] HAProxy backdoor cache/config paths – ~/cache/haproxy-1000.cache, ~/cache/haproxy-1001.cache, /tmp/jasper-log
  • [File name / domain ] C2 and fallback infrastructure – img.darklights.store, img.monderhouse.space, img.smartnords.site
  • [File name / domain ] Additional observed infrastructure – img.responsive.pstatic.autos, img.socialteams.store, img.worksongo.store
  • [File name ] Trojanized or masqueraded binaries – crond, agetty, atd, polkitd, sshd
  • [Header / token ] C2 authentication and telemetry fields – User-token, api_token/ecd427ea8330a4ff73618483e00b9b41


Read more: https://www.rapid7.com/blog/post/tr-dprk-apts-ted-backdoor-curlrat-target-south-korean-media-automotive-sectors