Contents
MITRE ATT&CK coverage — 9 techniques across 5 tactics
| Tactic / Technique | Name | Rules |
|---|---|---|
| Persistence / T1547.001 | Registry Run Keys / Startup Folder | KAIDO Install as svchost.exe by Non-System Parent Process (SIGMA, Hunting) |
| Stealth / T1036.005 | Match Legitimate Resource Name or Location | KAIDO Install as svchost.exe by Non-System Parent Process (SIGMA, Hunting) |
| Stealth / T1497 | Virtualization/Sandbox Evasion | KAIDO Anti-Analysis Sleep Obfuscation + Config Crypto Framing (YARA, Detection) |
| Defense Impairment / T1553.005 | Mark-of-the-Web Bypass | KAIDO Zone.Identifier ADS Self-Deletion (MOTW Bypass) (SIGMA, Hunting) |
| Collection / T1113 | Screen Capture | KAIDO HVNC DXGI Named-Pipe Transport (YARA, Detection); KAIDO HVNC DXGI Named-Pipe Creation (SIGMA, Hunting) |
| Command and Control / T1071.001 | Web Protocols | KAIDO TeamKAIDO C2 TLS Certificate Issuer (SURICATA, Detection) |
| Command and Control / T1095 | Non-Application Layer Protocol | KAIDO Quasar Binary Protocol on TCP 4782 (SURICATA, Hunting) |
| Command and Control / T1219 | Remote Access Tools | KAIDO Quasar-Fork Namespace + Costura Asset (YARA, Detection); KAIDO HVNC DXGI Named-Pipe Transport (YARA, Detection); KAIDO HVNC DXGI Named-Pipe Creation (SIGMA, Hunting) |
| Command and Control / T1573.001 | Symmetric Cryptography | KAIDO Anti-Analysis Sleep Obfuscation + Config Crypto Framing (YARA, Detection); KAIDO TeamKAIDO C2 TLS Certificate Issuer (SURICATA, Detection) |
Campaign: KAIDO-EvilSoul-Engine-MaaS-144.172.103.98 Date: 2026-07-03 Author: The Hunters Ledger License: CC BY 4.0 Reference: https://the-hunters-ledger.com/reports/kaido-quasar-rat-144-172-109-203/
Detection Coverage Summary
Scope note: this file covers only the KAIDO Quasar-fork RAT product line (PART A of the parent investigation). The EvilSoul-Engine stealer-builder line is covered in a separate detection file. No rules are duplicated here.
KAIDO is a rebranded 64-bit fork of the open-source Quasar RAT carrying an HVNC (Hidden-VNC) module that clones the victim’s entire browser profile and drives their already-authenticated session on a hidden desktop.
| Rule Type | Detection | Hunting | MITRE Techniques Covered | Atomics → feed |
|---|---|---|---|---|
| YARA | 3 | 0 | T1219, T1113, T1497, T1573.001 | 0 |
| Sigma | 0 | 3 | T1553.005, T1219, T1113, T1036.005, T1547.001 | 0 |
| Suricata | 1 | 1 | T1071.001, T1573.001, T1095 | 1 |
Detection vs Hunting: Detection rules are high-fidelity and evasion-resilient, safe to alert on. Hunting rules are broader, for scoping and threat-hunting. Expect to review the hits.
Highest-confidence anchors:
- Namespace root
Kaido.Common.Messagesand Costura assetcostura.kaido.common.dll, survive obfuscation, near-zero FP (YARA Detection). - Raw TCP/4782 Quasar binary protocol +
TeamKAIDO/kaido-c2TLS certificate issuer + JA4Xbbd6cc0fca29_bbd6cc0fca29_795797892f9c, fleet-enumeration-grade (Suricata Detection).
Atomics routed to the IOC feed: the primary C2 domain kaidoo.com.br (and its c2./www. siblings) is a transient indicator. It lives in kaido-quasar-rat-iocs.json rather than as a standalone DNS signature (removing the domain leaves nothing to detect). Block it via the feed.
Coverage note on HVNC runtime behavior: the HVNC module (hidden-desktop creation, browser-profile clone, DXGI capture) is fully recovered from static analysis (DEFINITE/HIGH), but the malware is C2-gated and withholds all post-connection behavior (persistence, HVNC activation, credential collection) until a valid Quasar handshake completes (T1480). Behavioral rules for the named-pipe transport and install path are written from static/structural evidence; see Coverage Gaps for what would raise the HVNC-specific rules to DEFINITE.
YARA Rules
Detection Rules
KAIDO Quasar-Fork Namespace + Costura Asset
Tier: Detection
Robustness: 3
ATT&CK Coverage: T1219 (Remote Access Software)
Confidence: HIGH
Rationale: Kaido.Common.Messages is the namespace root of the rebranded Quasar fork and survives the sample’s obfuscation pass intact (no literal Quasar string remains); paired with the Costura-embedded asset name and the HVNC hidden-desktop literal, this combination is unique to this build lineage and to something the operator cannot rename without re-architecting the codebase.
False Positives: None known — Kaido.Common.Messages and costura.kaido.common.dll are distinctive compiled identifiers not present in legitimate .NET software; fullword further reduces substring-collision risk.
Blind Spots: A full rebrand that renames the Kaido.* namespace root would evade this rule; a memory-only variant that never lands on disk needs the memory-scan deployment path.
Validation: Scan a KAIDO sample (e.g. hash1 below) — the namespace + Costura asset must match; a benign Costura-packed .NET application must NOT fire.
Deployment: Endpoint AV/EDR file scan, memory scanning of svchost.exe-masquerading processes, static triage of unknown MSIL binaries.
/*
Yara Rule Set
Identifier: KAIDO Quasar-Fork RAT
Author: The Hunters Ledger
Source: https://the-hunters-ledger.com/
License: CC BY 4.0 - https://creativecommons.org/licenses/by/4.0/
*/
rule RAT_KAIDO_Quasar_Fork_Namespace {
meta:
description = "Detects the KAIDO Quasar-fork RAT via its rebranded namespace root Kaido.Common.Messages and Costura-embedded costura.kaido.common.dll asset, both of which survive the sample's obfuscation pass"
license = "CC BY 4.0 - https://creativecommons.org/licenses/by/4.0/"
author = "The Hunters Ledger"
reference = "https://the-hunters-ledger.com/hunting-detections/kaido-quasar-rat-detections/"
date = "2026-07-03"
hash1 = "c7542e8265f70d6c1dbf2e3cf6e81a90198cd157d3d6693c6d2a8a49d99a5b8d"
hash2 = "928f2ffa7fc84b74941fb714455d7bc14847b3af"
hash3 = "20989b06f7c670ab973da6609855bcf9"
family = "KAIDO"
malware_type = "RAT"
campaign = "KAIDO-EvilSoul-Engine-MaaS-144.172.103.98"
id = "3c4d70e9-aaaf-50e7-b58b-a4b3595386e9"
strings:
$ns1 = "Kaido.Common.Messages" ascii wide fullword
$ns2 = "Kaido.Client.Helper.HVNC.ProcessController" ascii wide
$cost = "costura.kaido.common.dll" ascii wide nocase
$desk = "Default_runhost" ascii wide fullword
condition:
uint16(0) == 0x5A4D and
filesize < 5MB and
2 of ($ns1, $ns2, $cost, $desk)
}
KAIDO HVNC DXGI Named-Pipe Transport
Tier: Detection
Robustness: 3
ATT&CK Coverage: T1219 (Remote Access Software), T1113 (Screen Capture — MODERATE, static-only)
Confidence: HIGH
Rationale: The DXGI-hook HVNC frame transport uses a distinctive pipe-name prefix, environment variable, frame magic value, and reader-thread name — none generic Windows or .NET runtime terms. The rule requires two of these (or the frame magic plus one), so no single renameable literal carries it.
False Positives: None known — KAIDO_DXGI_PIPE, kaido_dxgi_, and the paired thread names are family-specific compiled strings; the hex frame magic is combined with string context rather than used alone.
Blind Spots: Misses a variant that renames all four HVNC transport strings and changes the frame magic; the DXGI capture path only exists in builds carrying the HVNC module.
Validation: Scan a KAIDO HVNC-capable sample — ≥2 transport strings must match; a benign screen-capture or remote-desktop tool must NOT fire.
Deployment: Endpoint AV/EDR file scan, memory scanning during suspected HVNC activity.
rule RAT_KAIDO_HVNC_DXGI_Pipe {
meta:
description = "Detects the KAIDO RAT HVNC module via its DXGI-hook named-pipe transport strings (pipe prefix, env var, frame magic, reader-thread name) used to stream the hidden-desktop capture to the operator"
license = "CC BY 4.0 - https://creativecommons.org/licenses/by/4.0/"
author = "The Hunters Ledger"
reference = "https://the-hunters-ledger.com/hunting-detections/kaido-quasar-rat-detections/"
date = "2026-07-03"
hash1 = "385d20ca574976e3ba3f4f3079420f8a1c3935c0ab4a3f87063beea27d41e254"
hash2 = ""
hash3 = ""
family = "KAIDO"
malware_type = "RAT"
campaign = "KAIDO-EvilSoul-Engine-MaaS-144.172.103.98"
id = "eb4ef7d6-e3f0-5eea-8211-654d9ccff6fa"
strings:
$pipe = "kaido_dxgi_" ascii wide nocase
$envvar = "KAIDO_DXGI_PIPE" ascii wide fullword
$rdr = "DXGI FrameReader" ascii wide
$fbk = "HVNC Capture Loop" ascii wide
$clone = "[BrowserClone] Using handle hijacking for locked files..." ascii wide
$magic = { 4B 81 3F 44 }
condition:
uint16(0) == 0x5A4D and
filesize < 5MB and
(2 of ($pipe, $envvar, $rdr, $fbk, $clone) or ($magic and 1 of ($pipe, $envvar)))
}
KAIDO Anti-Analysis Sleep Obfuscation + Config Crypto Framing
Tier: Detection
Robustness: 2
ATT&CK Coverage: T1497 (Virtualization/Sandbox Evasion), T1573.001 (Symmetric Cryptography — MODERATE)
Confidence: MODERATE
Rationale: The developer-left anti-analysis debug string is distinctive but stands alone as a single string; the rule pairs it with the family namespace so both must be present. A secondary/corroborating anchor — the debug string could be stripped from a cleaned build, hence Robustness 2 rather than 3.
False Positives: None known — the debug string is family-specific; the rule requires it and the namespace, and the AES-GCM framing pattern (12-byte nonce + 16-byte tag) is never a sole anchor.
Blind Spots: A release build that removes the developer debug string evades this rule (the namespace rule above still fires); the crypto-framing pattern is common to many AES-GCM implementations and carries no weight alone.
Validation: Scan a KAIDO sample carrying the [ANTI] debug string — must match; a benign binary embedding a stock AES-GCM library must NOT fire.
Deployment: Endpoint AV/EDR file scan; secondary/corroborating rule, not primary detection.
rule RAT_KAIDO_AntiAnalysis_SleepObfuscation {
meta:
description = "Detects the KAIDO RAT via its developer-left anti-analysis debug string referencing sleep obfuscation with mutex and stack detection, used to evade sandbox timing-based detonation checks"
license = "CC BY 4.0 - https://creativecommons.org/licenses/by/4.0/"
author = "The Hunters Ledger"
reference = "https://the-hunters-ledger.com/hunting-detections/kaido-quasar-rat-detections/"
date = "2026-07-03"
hash1 = "022944768c4326d611fa3edb100eb8277228717a220580e7ffce143341aa39fa"
hash2 = ""
hash3 = ""
family = "KAIDO"
malware_type = "RAT"
campaign = "KAIDO-EvilSoul-Engine-MaaS-144.172.103.98"
id = "683cd96b-bebc-5bcc-8d4c-3aa380acd5d6"
strings:
$anti = "[ANTI] Sleep obfuscation ENABLED (fixed: mutex + stack detection + 32MB cap)" ascii wide
$ns = "Kaido.Common.Messages" ascii wide fullword
condition:
uint16(0) == 0x5A4D and
filesize < 5MB and
$anti and $ns
}
Sigma Rules
Hunting Rules
KAIDO Zone.Identifier ADS Self-Deletion (MOTW Bypass)
Tier: Hunting
Robustness: 2
ATT&CK Coverage: T1553.005 (Mark-of-the-Web Bypass)
Confidence: HIGH (behavior) / triage required (attribution)
Rationale: The malware reads then deletes its own Zone.Identifier alternate data stream shortly after launch, a MOTW bypass. Anchored on the deletion event (category: file_delete) rather than file creation — a plain :Zone.Identifier file-event selector would match every downloaded file (the ADS is created on every download) and is pure baseline noise. Scoping to deletion turns it into a genuine Hunting lead for MOTW-clearing behavior, but self-updating software also clears its own MOTW, so an analyst triages the hits.
False Positives:
- Self-updating legitimate software (browsers, some installers) that clears its own Zone.Identifier stream after a user-consented first run.
- Administrative scripts that bulk-clear MOTW on downloaded files. Deployment: Endpoint EDR / Sysmon-fed SIEM (FileDelete telemetry), correlated with process creation for the same image.
title: KAIDO RAT Self-Deletion of Zone.Identifier Alternate Data Stream
id: d428415f-5926-466a-abcb-5cb91be4d187
status: experimental
description: >-
Detects a process deleting its own Zone.Identifier alternate data
stream shortly after launch, a Mark-of-the-Web bypass technique used
by the KAIDO Quasar-fork RAT to suppress SmartScreen re-checks on
subsequent executions. Anchored on the file-delete event rather than
file creation to avoid matching every downloaded file.
references:
- https://the-hunters-ledger.com/hunting-detections/kaido-quasar-rat-detections/
author: The Hunters Ledger
date: 2026-07-03
tags:
- attack.defense-impairment
- attack.t1553.005
- detection.emerging-threats
logsource:
category: file_delete
product: windows
detection:
selection:
TargetFilename|endswith: ':Zone.Identifier'
filter_legit_installer:
Image|contains:
- '\Windows\System32\'
- '\Program Files\Windows Defender\'
condition: selection and not filter_legit_installer
falsepositives:
- >-
Self-updating legitimate software (browsers, some installers) that
clears its own Zone.Identifier stream after a user-consented first run
- Administrative scripts that bulk-clear MOTW on downloaded files
level: medium
KAIDO HVNC DXGI Named-Pipe Creation
Tier: Hunting
Robustness: 1
ATT&CK Coverage: T1219 (Remote Access Software), T1113 (Screen Capture — static/structural evidence)
Confidence: HIGH (structural anchor); underlying HVNC runtime behavior itself MODERATE (C2-gated, not dynamically triggered)
Rationale: The kaido_dxgi_ named-pipe prefix is a family-specific transport artifact with no known legitimate collision, so today’s FP is near-zero — but it is a single operator-chosen literal that a rebuild renames trivially. Durability governs over as-written precision, so this is a Hunting anchor, not a Detection one. The YARA HVNC rule (which requires a multi-string combination) carries the Detection-grade coverage for the same capability.
False Positives: Unlikely — the kaido_dxgi_ pipe-name prefix has not been observed in any legitimate Windows or third-party software to date.
Deployment: Endpoint EDR with named-pipe telemetry (Sysmon Event ID 17/18).
title: KAIDO RAT HVNC DXGI Named-Pipe Creation
id: 6fadc50c-a64b-4120-b02e-f22516b0c815
status: experimental
description: >-
Detects creation of a named pipe matching the kaido_dxgi_ prefix used
by the KAIDO Quasar-fork RAT's HVNC module to stream DXGI-captured
hidden-desktop frames from the swap-chain hook to the operator's
reader thread. This pipe is created only when the HVNC capability is
actively invoked by the operator over C2.
references:
- https://the-hunters-ledger.com/hunting-detections/kaido-quasar-rat-detections/
author: The Hunters Ledger
date: 2026-07-03
tags:
- attack.command-and-control
- attack.t1219
- attack.collection
- attack.t1113
- detection.emerging-threats
logsource:
category: pipe_created
product: windows
detection:
selection:
PipeName|contains: '\kaido_dxgi_'
condition: selection
falsepositives:
- >-
Unlikely — the kaido_dxgi_ pipe-name prefix has not been observed
in any legitimate Windows or third-party software to date
level: medium
KAIDO Install as svchost.exe by Non-System Parent Process
Tier: Hunting
Robustness: 2
ATT&CK Coverage: T1036.005 (Match Legitimate Name or Location), T1547.001 (Registry Run Keys / Startup Folder — related persistence, MODERATE)
Confidence: MODERATE (install routine recovered from static analysis, not dynamically observed — the malware is C2-gated)
Rationale: The RAT installs into %AppData%\<subdir>\svchost.exe, masquerading as the Windows service host from a user-writable path. The svchost-in-AppData masquerade is a durable technique pattern, but it is used by many unrelated families and carries a meaningful benign FP, so it is a generic masquerade hunting indicator, not a KAIDO-specific detection on its own.
False Positives:
- Rare legitimate portable or sideloaded applications that ship a binary literally named
svchost.exein a user profile path (unusual but not impossible for poorly-vetted freeware). - Other unrelated malware families that reuse the same masquerade pattern. Deployment: Endpoint EDR / Sysmon-fed SIEM; pair with the YARA/Suricata KAIDO anchors for family attribution before high-confidence alerting.
title: Process Named svchost.exe Executing from AppData Path
id: 08e75208-eb8e-473d-9827-5a59ef4192db
status: experimental
description: >-
Detects a process named svchost.exe launching from a user-writable
%AppData% subdirectory rather than the legitimate %SystemRoot%\System32
location. Observed as the install pattern used by the KAIDO Quasar-fork
RAT to masquerade as the Windows service host process, but this naming
and path pattern is also used by other unrelated malware families and
should be treated as a generic masquerade indicator rather than a
KAIDO-specific signal on its own.
references:
- https://the-hunters-ledger.com/hunting-detections/kaido-quasar-rat-detections/
author: The Hunters Ledger
date: '2026-07-03'
tags:
- attack.stealth
- attack.t1036.005
- attack.persistence
- attack.privilege-escalation
- attack.t1547.001
- detection.emerging-threats
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\svchost.exe'
Image|contains: '\AppData\'
filter_parent_system:
ParentImage|startswith:
- 'C:\Windows\System32\'
- 'C:\Windows\SysWOW64\'
condition: selection and not filter_parent_system
falsepositives:
- >-
Rare legitimate portable or sideloaded applications that ship a
binary literally named svchost.exe in a user profile path
(unusual but not impossible for poorly-vetted freeware)
- Other unrelated malware families that reuse the same masquerade pattern
level: medium
Suricata Signatures
Detection Rules
KAIDO TeamKAIDO C2 TLS Certificate Issuer
Tier: Detection
Robustness: 2
ATT&CK Coverage: T1071.001 (Web Protocols), T1573.001 (Symmetric Cryptography — TLS transport)
Confidence: HIGH
Rationale: The live C2 host presents a TLS certificate with Issuer O=TeamKAIDO (subject CN=kaido-c2) paired with JA4X bbd6cc0fca29_bbd6cc0fca29_795797892f9c. The issuer org string is operator-branded, sits in the right app-layer buffer (tls.cert_issuer), and survives infrastructure rotation — the highest-value fleet-enumeration pivot in the investigation (Censys/Shodan support cert-issuer and JA4X search).
False Positives: None known — TeamKAIDO as a certificate issuer organization string is a distinctive operator-branded value not shared with legitimate CAs or common self-signed certificate generators.
Blind Spots: Evaded if the operator re-issues certificates under a different (or empty) issuer O= string; misses plaintext or non-TLS channels.
Validation: Replay a PCAP of a KAIDO TLS handshake presenting the TeamKAIDO issuer — must alert; ordinary TLS to a public CA must NOT.
Deployment: Network IDS/IPS with TLS certificate inspection (JA3/JA4 fingerprinting recommended as a complementary passive pivot).
alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:"THL KAIDO-EvilSoul-MaaS TeamKAIDO C2 TLS Certificate Issuer (RAT C2 Fleet Indicator)"; flow:established,to_server; tls.cert_issuer; content:"TeamKAIDO"; threshold:type limit,track by_src,count 1,seconds 3600; classtype:trojan-activity; sid:1000002; rev:1; metadata:author The_Hunters_Ledger, date 2026-07-03, reference https://the-hunters-ledger.com/hunting-detections/kaido-quasar-rat-detections/;)
Hunting Rules
KAIDO Quasar Binary Protocol on TCP 4782
Tier: Hunting
Robustness: 2
ATT&CK Coverage: T1095 (Non-Application Layer Protocol)
Confidence: HIGH for the port/protocol pairing; the rule itself is a port-anchored lead
Rationale: The RAT’s primary C2 channel is a raw Quasar binary protocol over TCP/4782 with no HTTP layer. TCP/4782 is the Quasar-family default port — a tool-family artifact — but the rule carries no content anchor (the protocol is non-standard and unparseable by Suricata’s app-layer engine), so it is a port-based hunting lead rather than an alerting-grade signature: anything else on 4782 will also fire.
False Positives: Any legitimate or unrelated service that happens to use TCP/4782 (uncommon but not impossible); the threshold limits alert volume per source.
Deployment: Network IDS/IPS at perimeter and internal segmentation points; hunt-tune before alerting.
alert tcp $HOME_NET any -> $EXTERNAL_NET 4782 (msg:"THL KAIDO-EvilSoul-MaaS Quasar Binary Protocol C2 on TCP 4782 (RAT C2 Channel)"; flow:established,to_server; dsize:>0; threshold:type limit,track by_src,count 1,seconds 3600; classtype:trojan-activity; sid:1000001; rev:1; metadata:author The_Hunters_Ledger, date 2026-07-03, reference https://the-hunters-ledger.com/hunting-detections/kaido-quasar-rat-detections/;)
Coverage Gaps
Primary C2 domain routed to the IOC feed, not a rule. kaidoo.com.br (and the c2. / www. siblings, plus the current A-record 179.43.150.50) are transient atomic indicators: a dns_query signature keyed solely on the domain stops detecting the moment the operator rotates it, and removing the literal leaves no behavior to match. They are carried in kaido-quasar-rat-iocs.json (BLOCK action) instead. The secondary c2.kaidoo.com.br:443 channel is covered there as well. No separate signature is warranted.
HVNC runtime behavioral rule (hidden-desktop capture chain). The HVNC module, hidden-desktop creation via SetThreadDesktop without SwitchDesktop, wholesale browser-profile clone via handle duplication, and DXGI swap-chain capture, is fully recovered from static analysis (DEFINITE/HIGH) but was not triggered in the wild during observation: the RAT withholds all post-connection behavior until a valid Quasar handshake completes (T1480). A precise Sysmon/EDR behavioral rule for the desktop-switch API sequence (CreateDesktop("Default_runhost") → SetThreadDesktop with no matching SwitchDesktop call) cannot be written with DEFINITE confidence from static evidence alone, since API-call-sequence telemetry requires the sequence to actually execute. What would raise confidence: observing the HVNC command execute would capture the exact API call sequence and process/thread telemetry for the desktop-switch pattern.
Persistence mechanism (Registry Run key / Scheduled Task / Windows Service). The install routine references HKCU\...\Run registry writes, a scheduled-task install path, and a Windows service install path (T1547.001, T1053.005, T1543.003, all MODERATE), but none were observed because the RAT never reached the persistence stage. Writing a Sigma rule for a specific registry value name or scheduled task name would require guessing an unobserved parameter, risking either false negatives or unjustified specificity. What would raise confidence: observing the RAT past the C2 handshake, long enough for the actual persistence artifact names/paths to be written.
Process injection into cloned browser processes (T1055, MODERATE). Decompiled code indicates HVNC reflectively injects a capture DLL into the cloned browser process running on the hidden desktop, but the specific injection API sequence (CreateRemoteThread, QueueUserAPC, or another technique) was not confirmed. What would raise confidence: capturing the injection sequence during HVNC execution via debugger or EDR API-hook telemetry.
Embedded pinned-certificate SHA1 thumbprint (0acd8c90641e6e8b085aaf5a541c7ac050a65a4a). This value functions as the Quasar AUTHKEY across all three analyzed builds and is a strong static anchor, but is intentionally not a Suricata TLS-fingerprint rule. It is the client-embedded pinned cert used for the RAT’s own outbound pinning validation, not the server-presented certificate an IDS observes on the wire. It is carried in the IOC feed as a static anchor.
License
Detection rules are licensed under Creative Commons Attribution 4.0 International (CC BY 4.0).
Free to use, including commercially, with attribution to The Hunters Ledger.