Operation DragonReturn
A signed Indian tax-utility executable side-loads
nvdaHelperRemote.dll, driving a six-stage in-memory chain that injects a Gh0st/DcRAT derivative and an AsyncRAT/Quasar-family .NET implant into svchost.exe across every logged-in session, over two separate C2 channels.Executive Summary
Naming: this pack is filed under Operation DragonReturn (Seqrite Labs' name). The same campaign is reported elsewhere as the fake Indian ITR notice chain (Cyderes Howler Cell) and as the fake Indian tax filing utility / DcRAT campaign (The Hacker News). All three names describe one operation — same COU_ITR lure, same nvdaHelperRemote.dll side-load, same kkxqbh[.]top and 118.107.0.197 infrastructure. Both names are recorded here deliberately so future triage does not treat them as two threats.
Two vendors independently documented the same campaign against India's tax-filing ecosystem during the AY2026-27 season. Seqrite Labs published it as Operation DragonReturn (first observed 2026-05-18, spear-phishing PDFs linking to govtop[.]one/incometax), and Cyderes' Howler Cell published a deeper reverse-engineering writeup on 2026-07-07 covering a parallel set of lure domains. The two clusters are the same operation: they share the stage-1 DLL hash 2c0de3d5…, the polyglot host 118[.]107[.]0[.]197, and the C2 domain kkxqbh[.]top.
Victims reach a fake Income Tax Department page that abuses Government of India branding, are routed through a bogus "Microsoft Edge Secure Gateway" verification screen, and are served Common_Offline_Utility_ITR-1_to_4_AY2026-27.zip. The archive holds a legitimate, digitally signed executable, COU_ITR-1_to_4_AY2026-27.exe, alongside a malicious companion DLL, nvdaHelperRemote.dll — a name borrowed from the NVDA screen reader. Windows' default DLL search order does the rest: the trusted, signed process loads attacker code with no exploit and no unsigned parent.
From there a six-stage chain runs. Stage 2 checks for Administrators-group membership and re-launches itself with the runas verb to force a UAC prompt; it then stages under C:\Program Files\Windows Media Player\, copies itself to Mixed Reality.exe, and installs an auto-start service MixedSvc with the display name "Windows Mixed Reality Service". It fetches a polyglot JPEG to C:\Windows\background.jpg — a file that renders as a valid image in any browser but carries at least three distinct encrypted payloads appended at different byte offsets. Stages 3 through 5 move entirely into memory via reflective loading, and stage 5 is session-aware: it enumerates every active terminal session and spawns a suspended svchost.exe under a token whose session ID has been reassigned, injecting into each one. The malware therefore reaches every logged-in user, not just the service session.
The two final implants split their C2 deliberately. Stage 6A is a Gh0st RAT derivative reaching kkxqbh[.]top on port 6666, carrying reflectively-loaded zlib, CameraUtil, libturbojpeg and a custom VTCP.dll stack for a self-contained screen-capture-to-JPEG exfil pipeline plus a piped cmd.exe reverse shell. Stage 6B patches AMSI (AmsiOpenSession +0x1C overwritten with 0xFEEB), hosts the CLR from native code, and loads a Quasar/AsyncRAT-family .NET assembly in memory that reaches ouewop[.]com on port 6351. Blocking one channel does not end the intrusion.
Attribution is SUSPECTED, not confirmed. Seqrite assesses with medium-to-high confidence that this is a China-aligned cluster, based on Chinese-language strings in the infrastructure, a Chinese-language DCRat web panel on 223.26.63[.]40, kkxqbh[.]top resolving into ChinaNet AS4134 (Nanchang, Jiangxi), and infrastructure/TTP overlaps with Silver Fox — a Chinese cybercrime group previously tied to tax-themed ValleyRAT phishing. Seqrite itself notes that hosting geography alone is not definitive attribution. Treat "China-nexus" and "Silver Fox overlap" as an analytic assessment, not established fact, in any reporting derived from this pack.
Defender priority: run Q3 first — any PE written into C:\Program Files\Windows Media Player\ is the campaign's highest-fidelity, lowest-false-positive artifact. Windows Media Player is a frozen legacy component; nothing legitimate drops executables there. Pair it with Q4 (the MixedSvc service) and Q8 (svchost.exe egress on 6666/6351) for staging-through-C2 coverage that survives hash and domain rotation.
Source Review & Web Hunter Notes
Eight sources were fetched and snapshotted verbatim to OperationDragonReturn-Hunt-sources/. Every atomic indicator shipped in section 10 traces to one of those snapshots; nothing was inferred, reconstructed, or carried from memory.
| Tier | Source | Key finding | Carry forward |
|---|---|---|---|
| 1 · Vendor | Cyderes Howler Cell — "The Tax Trap" (2026-07-07) | Full six-stage reverse engineering, polyglot offsets, host artifacts, named kernel objects, 10 SHA256, C2 ports, EDR detection methodology | Yes — primary basis for the hunt logic |
| 1 · Vendor | Seqrite Labs — Operation DragonReturn (2026-06-26) | The pack's namesake and the origin of the v0.1 release. Attribution assessment, campaign timeline, second infrastructure cluster, full ATT&CK table, DCRat panel, and the full 34-hash sample set plus the jiayingjing[.]com / simaqz[.]com / 1kkkkddd[.]com C2 domains | Yes — attribution, hashes + additional infrastructure |
| 1 · Vendor | Gurucul Threat Research — Operation DragonReturn (2026-06-29) | Independent corroboration of the multi-stage DcRAT / ValleyRAT deployment and the China-nexus assessment via infrastructure and language overlaps | Partial — corroboration and attribution weight |
| 2 · Press | The Hacker News (2026-07-06) | Ties the Seqrite and Cyderes clusters together; restates the Silver Fox / ValleyRAT lineage argument | Partial — cluster linkage and attribution framing |
| 2 · Press | CSO Online (2026-07) | Independent confirmation of the dual-malware tax-season campaign | Partial — corroboration only |
| 2 · Press | Cybersecurity News (2026-07) | Independent restatement of the six-stage chain; lists the tqkat[.]rest lure domain | Partial — one additional lure domain |
| 2 · Press | GBHackers (2026-07) | Confirms Gh0st RAT and AsyncRAT implant pairing | Partial — corroboration only |
| 2 · Press | Cyberpress (2026-07) | Confirms signed-binary abuse framing | Partial — corroboration only |
Research notes and deliberate exclusions
93dd8b7b…ships asdetect, neverprevent. That hash is the legitimate, digitally signed Income Tax Department offline utility (also seen renamed toMixed Reality.exe). It is abused, not malicious. Setting it to prevent would break the genuine ITR filing tool for any Indian-market user and would be a self-inflicted outage. Detect-only, and triage on where it runs from — see Q1 and Q10.- C2 ports 6666 and 6351 are not shipped in the import CSV. Falcon IOC Management has no port indicator type. They are carried in the behavioural block and are enforced through Q8 instead.
- The AES-128 key
3343f6a8…is not shipped as an MD5. It is a 16-byte hardcoded decryption key from the stage-6B loader that happens to be 32 hex characters. Labelling it a hash would produce a permanently-zero-hit IOC. It lives in the behavioural block as a reverse-engineering aid. - Host artifacts
c:\kkooPPP,c:\ouewo,c:\kkqqexitandc:\debug.txtare behavioural, not CQL-queryable. Falcon file-write telemetry covers PE, ELF, archive and document writes; these are extension-less, non-PE lock and kill files, so no*FileWrittenevent fires. They are handled in the native audit-log hunts (section 7) and flagged as a coverage gap (section 15). - Named kernel objects are not blockable.
Global\kkctsbnn,Global\ShitSetupOn26126kand the AsyncRAT mutex5sGEm6Q4eTNvare excellent DFIR confirmation pivots on a live host but have no Falcon indicator type and no standard sensor event. Behavioural block plus section 7. - Perishability: the five IPv4 addresses and the lure domains rotate fastest and carry the shortest expiry. The 43 SHA256 values are durable.
kkxqbh[.]topandouewop[.]comare the highest-value network indicators because both vendor clusters converge on them. - Both
1kkkkddd[.]com(digit one) andikkkkddd[.]com(letter i) ship — this is not a typo. Seqrite documents them as two separately-registered look-alike domains:ikkkkddd.comappears as an in-memory C2 string, and1kkkkddd.comis listed among the associated infrastructure domains. Correcting either one into the other would silently drop a live indicator, so both are carried verbatim. Anyone hand-transcribing this blocklist should double-check the first character. MixedRealityPortal.exeis not an indicator and is deliberately absent from the import CSV. It is the genuine Microsoft Mixed Reality Portal binary that ships under System32 — no cited source associates it with this campaign, and it is neither attacker-supplied nor the side-load host here (the side-load host is the signedCOU_ITR-1_to_4_AY2026-27.exe). It appears in this pack only as a benign-baseline discriminator: it is the legitimate name that makes the campaign'sMixed Reality.exein the Windows Media Player directory recognisably fake. Shipping it as a blockable atomic IOC would generate pure false positives against a stock Windows component. See Q1 and Q10.- No MD5 or SHA1 values are published by any cited source. Rather than compute or infer them, the CSV ships a labelled
REPLACE_WITH_placeholder row.
Hunt Brief & Attack Chain
| # | Stage | What happens | Telemetry | Hunt angle |
|---|---|---|---|---|
| 0 | Lure | Fake Income Tax Department page on /incometax; fake "Microsoft Edge Secure Gateway" interstitial; ZIP auto-download | DnsRequest, NetworkConnectIP4, ZipFileWritten | Q5, Q6 |
| 1 | Side-load | Signed COU_ITR-1_to_4_AY2026-27.exe loads companion nvdaHelperRemote.dll from its own directory; DLL decodes shellcode in memory | ProcessRollup2, PeFileWritten | Q1, Q2 |
| 2 | Downloader | Admin-group check → runas UAC relaunch; single-instance global events; stages under C:\Program Files\Windows Media Player\; fetches polyglot to C:\Windows\background.jpg; copies self to Mixed Reality.exe; creates auto-start service MixedSvc | ProcessRollup2, PeFileWritten, RegGenericValueUpdate, NetworkConnectIP4 | Q3, Q4, Q7, Q11 |
| 3 | Loader | MixedSvc starts; staged host side-loads the dropped DLL again; shellcode unpacks stage 4 and maps it reflectively — no disk write | ProcessRollup2 only | Q10 · partial gap |
| 4 | Injector | Dynamic API resolution (XOR 0x18 / 0x02); carves a second payload region from the polyglot at offset 0x1587D; injects into svchost.exe via CreateRemoteThread | — | Gap · see section 15 |
| 5 | Session-aware injector | Guarded by Global\kkctsbnn; carves two more payloads (offsets 0x52C04 and 0x165A04); enumerates all terminal sessions and spawns a suspended svchost.exe per session under a re-assigned token; writes c:\debug.txt; watches for kill file c:\kkqqexit | ProcessRollup2 | Q9 |
| 6A | Gh0st RAT derivative | Lock file c:\kkooPPP; reflective zlib / CameraUtil / libturbojpeg / VTCP modules; screen capture, piped cmd.exe reverse shell, file ops; C2 kkxqbh[.]top:6666 | DnsRequest, NetworkConnectIP4, ProcessRollup2 | Q6, Q7, Q8 |
| 6B | AsyncRAT/Quasar .NET | Lock file c:\ouewo; AMSI patch at AmsiOpenSession+0x1C; AES-128 decrypt; in-memory CLR hosting via ICLRMetaHost → Load_3; mutex 5sGEm6Q4eTNv; C2 ouewop[.]com:6351 | DnsRequest, NetworkConnectIP4 | Q6, Q7, Q8 |
Hunt hypotheses (ordered by fidelity)
| # | Hypothesis | MITRE | Conf | Expected FP source |
|---|---|---|---|---|
| H1 | A PE was written into the Windows Media Player program directory — the campaign's staging path | T1036.005 | High | Effectively none; WMP is a frozen component |
| H2 | An auto-start service named MixedSvc / displayed as "Windows Mixed Reality Service" was registered | T1543.003 | High | None — genuine Mixed Reality uses different service names |
| H3 | nvdaHelperRemote.dll was written outside a genuine NVDA screen-reader install | T1574.002 | High | Legitimate NVDA installs and portable NVDA copies |
| H4 | svchost.exe is egressing to a non-Microsoft destination on port 6666 or 6351 | T1571, T1095 | High | Rare; some legacy IRC-era tooling uses 6666 |
| H5 | svchost.exe was created by a parent other than services.exe | T1055.002 | Med | Some EDR/backup agents and installers spawn svchost |
| H6 | A host resolved or connected to campaign lure or C2 infrastructure | T1071.001 | High | Security-tooling detonation and researcher lookups |
| H7 | The ITR utility binary ran from a user-writable path (Downloads / Temp / extracted ZIP) rather than a genuine install | T1204.002 | Med | Genuine users running the real utility from Downloads |
| H8 | An ITR-themed ZIP was written to disk by a browser process | T1566.002 | Med | Genuine taxpayers downloading the real utility |
Consolidated IOC Table
| Type | Value | Conf | Action | Context | Expiry |
|---|---|---|---|---|---|
| SHA256 | 52c19cfd…84330 | High | Prevent | Delivery ZIP Common_Offline_Utility_ITR-1_to_4_AY2026-27.zip | 2027-01-19 |
| SHA256 | 93dd8b7b…f2a8 | High | Detect only | Legitimate signed ITR utility, also renamed Mixed Reality.exe — do not block | 2027-01-19 |
| SHA256 | 2c0de3d5…2148e | High | Prevent | nvdaHelperRemote.dll stage 1 — appears in both vendor clusters | 2027-01-19 |
| SHA256 | 60ad81d7…1853f | High | Prevent | Stage 2 downloader | 2027-01-19 |
| SHA256 | 3dd5148c…6d1ed | High | Prevent | nvdaHelperRemote.dll stage 3 (dropped) | 2027-01-19 |
| SHA256 | 030b9066…4cbb | High | Prevent | Stage 4 injector | 2027-01-19 |
| SHA256 | 7ee61469…9fb92 | High | Prevent | Stage 5 session-aware injector | 2027-01-19 |
| SHA256 | fd062b40…dc2fa | High | Prevent | background.jpg polyglot payload container | 2027-01-19 |
| SHA256 | fb520caa…19e112 | High | Prevent | Decrypted .NET AsyncRAT assembly (stage 6B) | 2027-01-19 |
| SHA256 | a1521585…0a6a1 | High | Prevent | Injected PE-1, Gh0st RAT derivative (stage 6A) | 2027-01-19 |
| SHA256 ×33 | 2f2f8f92…, 1787d111…, 19ca5fe0… … (full set in section 10) | High | Detect | Seqrite DragonReturn sample set — 33 further samples published with the original DragonReturn report. 2c0de3d5… above is the 34th and is the hash both vendor clusters share. | 2027-01-19 |
| Domain | kkxqbh[.]top | High | Detect / block | Gh0st RAT C2, port 6666 — converged across both vendor clusters | 2026-10-19 |
| Domain | ouewop[.]com | High | Detect / block | AsyncRAT C2, port 6351 | 2026-10-19 |
| Domain | ikkkkddd[.]com | Med | Detect | Additional C2 (Seqrite cluster) — in-memory C2 string. Letter i | 2026-10-19 |
| Domain | 1kkkkddd[.]com | Med | Detect | Associated C2 infrastructure (Seqrite cluster). Digit one — a separate registration from ikkkkddd[.]com, not a typo of it | 2026-10-19 |
| Domain | simaqz[.]com | Med | Detect | Associated C2 infrastructure (Seqrite cluster) | 2026-10-19 |
| Domain | jiayingjing[.]com | Med | Detect | Associated C2 infrastructure (Seqrite cluster) | 2026-10-19 |
| Domain | govtop[.]one | High | Detect / block | Lure host, /incometax path (Seqrite cluster) | 2026-10-19 |
| Domain | import[.]mom, tqhaq[.]rest, generate[.]lat, meoou[.]rest, kattp[.]homes, tqkat[.]rest | Med | Detect / block | Lure hosting, all on the /incometax path | 2026-10-19 |
| IPv4 | 118[.]107[.]0[.]197 | High | Detect / block | Polyglot hosting — appears in both vendor clusters | 2026-10-19 |
| IPv4 | 204[.]194[.]48[.]250 | Med | Detect | Polyglot host (lllyd.jpg), Seqrite cluster | 2026-10-19 |
| IPv4 | 223[.]26[.]63[.]40 | Med | Detect | DCRat C2 with exposed Chinese-language panel (port 2671) | 2026-10-19 |
| IPv4 | 27[.]50[.]54[.]191 | Med | Detect | Campaign infrastructure (Seqrite cluster) | 2026-10-19 |
| IPv4 | 117[.]44[.]201[.]119 | Med | Detect | kkxqbh[.]top resolution — ChinaNet AS4134, Nanchang | 2026-10-19 |
| URL | hxxp[://]118[.]107[.]0[.]197/ouewo[.]jpg | High | Detect / block | Polyglot download URL | 2026-10-19 |
| Port | 6666, 6351 | High | Hunt only | Gh0st and AsyncRAT C2 ports — no Falcon indicator type; see Q8 | — |
| Service | MixedSvc / "Windows Mixed Reality Service" | High | Hunt only | Persistence; see Q4 | — |
| Mutex / Event | 5sGEm6Q4eTNv, Global\kkctsbnn, Global\ShitSetupOn26126k | High | Hunt only | Live-host DFIR confirmation; see section 7 | — |
Affected Surface & Telemetry Matrix
| Surface | Exposure | Required telemetry | Priority | Gap risk |
|---|---|---|---|---|
| Windows endpoints — India-facing finance / tax staff | Direct. The lure targets taxpayers, tax professionals and corporate finance teams during filing season | ProcessRollup2, PeFileWritten, ZipFileWritten | Critical | Low |
| Any Windows host where users install their own software | Direct. No exploit required; the chain needs only a user double-click plus one UAC approval | ProcessRollup2 | High | Low |
| Multi-session hosts (RDS, Citrix, shared workstations) | Amplified. Stage 5 injects into every active terminal session, so one infection reaches every logged-in user | ProcessRollup2 with UserName / UserSid | Critical | Medium — session attribution can be noisy |
| Egress / perimeter | Two independent C2 channels on non-standard TCP ports | NetworkConnectIP4, DnsRequest | High | Medium — depends on egress filtering maturity |
| Local administrator model | Stage 2 aborts unless it can obtain admin. Users who are not local admins face a UAC credential prompt they cannot satisfy — the chain stops at stage 2 | ProcessRollup2, UserIsAdmin | Critical | Low — this is the single strongest control |
| In-memory stages 3–6 | Reflective loading, in-memory CLR hosting and remote-thread injection leave no file artifacts | Memory scanning / AMSI (degraded by the stage-6B patch) | Medium | High — documented gap |
ATT&CK Mapping
Merged from the ATT&CK tables published by Cyderes and Seqrite. Coverage column reflects this pack's queries.
| Tactic | ID | Technique | Observed behaviour | Coverage |
|---|---|---|---|---|
| Initial Access | T1566.002 | Phishing: Spearphishing Link | Fake ITR pages on /incometax; PDF-embedded link to govtop[.]one | Q5, Q6 |
| Initial Access | T1566.001 | Phishing: Spearphishing Attachment | PDF attachment carrying the lure link (Seqrite cluster) | Q5 |
| Execution | T1204.002 | User Execution: Malicious File | User extracts the ZIP and runs the signed ITR utility | Q1, Q5 |
| Execution | T1059.003 | Windows Command Shell | Gh0st implant's piped cmd.exe reverse shell | Q9 (contextual) |
| Execution | T1106 | Native API | CreateProcessA, VirtualAllocEx, WriteProcessMemory, CreateRemoteThread resolved at runtime | Gap |
| Persistence / Def. Evasion | T1574.002 | Hijack Execution Flow: DLL Side-Loading | Signed ITR utility loads companion nvdaHelperRemote.dll | Q1, Q2, Q3 |
| Persistence | T1543.003 | Create or Modify System Process: Windows Service | Auto-start service MixedSvc, display name "Windows Mixed Reality Service" | Q4 |
| Persistence | T1547.001 | Registry Run Keys / Startup Folder | Reported in the Seqrite cluster | Q4 (variant) |
| Priv. Escalation | T1548.002 | Abuse Elevation Control: UAC / runas | Stage 2 relaunches itself with runas to force a UAC prompt | Q11 |
| Priv. Escalation | T1134.002 | Access Token Manipulation: Create Process with Token | Stage 5 spawns svchost.exe under a duplicated, session-reassigned token | Q9 |
| Defense Evasion | T1055.002 | Process Injection: PE Injection | Remote-thread injection into svchost.exe across all sessions | Q9 |
| Defense Evasion | T1620 | Reflective Code Loading | Stages 4–6 mapped in memory; in-memory CLR hosting | Gap |
| Defense Evasion | T1562.001 | Impair Defenses: Disable or Modify Tools | AMSI patched at AmsiOpenSession+0x1C with 0xFEEB | Gap — IOA candidate |
| Defense Evasion | T1027.009 | Obfuscated Files: Embedded Payloads | Polyglot JPEG carrying 3+ payloads at distinct offsets | Q7 |
| Defense Evasion | T1027.007 | Obfuscated Files: Dynamic API Resolution | XOR-decoded (0x18 / 0x02) API name strings | Gap |
| Defense Evasion | T1140 | Deobfuscate/Decode Files or Information | XOR and AES-128 payload decryption | Gap |
| Defense Evasion | T1036.005 | Masquerading: Match Legitimate Name or Location | Mixed Reality.exe in the Windows Media Player directory; nvdaHelperRemote.dll borrows an NVDA name | Q2, Q3, Q10 |
| Defense Evasion | T1564.001 | Hide Artifacts: Hidden Files and Directories | Hidden/system lock files at the filesystem root | Gap — section 7 |
| Defense Evasion | T1070.004 | Indicator Removal: File Deletion | Prior-run artifacts and services removed before re-staging | Gap |
| Discovery | T1057 / T1033 / T1082 | Process, Owner and System Discovery | Process enumeration to locate svchost.exe; terminal-session enumeration | Gap |
| Collection | T1113 | Screen Capture | CameraUtil + libturbojpeg screen-capture-to-JPEG pipeline | Gap |
| Command and Control | T1071.001 | Application Layer Protocol: Web Protocols | Polyglot retrieval over HTTP | Q6, Q7 |
| Command and Control | T1095 | Non-Application Layer Protocol | Custom VTCP.dll TCP stack to kkxqbh[.]top:6666 | Q8 |
| Command and Control | T1571 | Non-Standard Port | TCP 6666 and 6351 | Q8 |
| Command and Control | T1573 | Encrypted Channel | AES-256-CBC encrypt-then-HMAC AsyncRAT config and traffic | Gap |
| Exfiltration | T1041 | Exfiltration Over C2 Channel | Screen frames and files exfiltrated over the implant channels | Q8 |
Native Audit-Log Hunts
These cover the artifacts Falcon telemetry does not surface — extension-less lock files, named kernel objects, and the service registration itself. Run them on any host that hits a section-8 query. All are read-only.
1 · Root-level lock, kill and debug artifacts (hidden + system attributes)
Get-ChildItem -Path C:\ -Force -File |
Where-Object { $_.Name -in @('kkooPPP','ouewo','kkqqexit','debug.txt') } |
Select-Object Name, Length, CreationTime, LastWriteTime, Attributes
Any hit is high-confidence. kkooPPP means the Gh0st implant (6A) is or was resident; ouewo means the AsyncRAT loader (6B) is or was resident; kkqqexit is the injector's shutdown signal.
2 · The persistence service
Get-CimInstance Win32_Service |
Where-Object { $_.Name -eq 'MixedSvc' -or $_.DisplayName -like '*Mixed Reality*' } |
Select-Object Name, DisplayName, PathName, StartMode, State, Description
A PathName under C:\Program Files\Windows Media Player\ confirms compromise. Genuine Windows Mixed Reality does not register a service called MixedSvc.
3 · Staging directory contents
Get-ChildItem 'C:\Program Files\Windows Media Player\' -Force |
Where-Object { $_.Name -in @('Mixed Reality.exe','nvdaHelperRemote.dll') } |
Select-Object Name, Length, CreationTime, VersionInfo
Get-Item C:\Windows\background.jpg -Force -ErrorAction SilentlyContinue |
Select-Object FullName, Length, CreationTime, LastWriteTime
A background.jpg substantially larger than a plain wallpaper JPEG is the polyglot container. Cyderes documented embedded payload regions at offsets 0x1587D, 0x52C04 and 0x165A04.
4 · Named kernel objects (live hosts only)
Get-ChildItem \\.\GLOBALROOT\BaseNamedObjects\ -ErrorAction SilentlyContinue |
Where-Object { $_.Name -match 'kkctsbnn|ShitSetupOn26126k|5sGEm6Q4eTNv' } |
Select-Object Name
These vanish on reboot, so a clean result on a rebooted host proves nothing. Present = active infection.
5 · Service-creation events in the System log
Get-WinEvent -FilterHashtable @{ LogName='System'; Id=7045 } -MaxEvents 400 |
Where-Object { $_.Message -match 'MixedSvc|Mixed Reality|Windows Media Player' } |
Select-Object TimeCreated, Id, Message
Event ID 7045 records service installation and is the most reliable timestamp for when stage 2 completed.
CrowdStrike LogScale CQL Hunt Queries
Looks for: execution of the signed ITR utility under either of its two observed names. Mixed Reality.exe is the stage-2 self-copy and is always malicious in this context; the COU_ITR name may be a genuine taxpayer. Triage on ImageFileName: a run from Downloads, Temp or an extracted-archive path is the campaign pattern.
Do not confuse this with the real Windows component. Genuine Microsoft Mixed Reality Portal is MixedRealityPortal.exe under System32 — one word, no space, and a Microsoft-signed stock binary. The campaign's file is Mixed Reality.exe — with a space — staged under C:\Program Files\Windows Media Player\. The regex above is anchored so it matches only the spaced malicious name; MixedRealityPortal.exe will never hit it, and it must never be added to a blocklist.
// HUNT: Indian ITR offline-utility binary / Mixed Reality.exe execution // MITRE: T1204.002, T1036.005, T1574.002 // CONF: high | FP: medium | COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: genuine Indian taxpayers running the real offline utility // TUNING: the "Mixed Reality" name has no benign form here — alert on it separately #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^(COU_ITR-1_to_4_AY2026-27|Mixed Reality)(\.exe)?$/i | table([ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData], limit=200)
Looks for: the side-loaded DLL landing on disk. The malware borrows the filename from the NVDA screen reader, so the discriminator is location, not name — the negative filter removes real NVDA installs and leaves only the abusive copies.
// HUNT: nvdaHelperRemote.dll dropped outside a real NVDA screen-reader install // MITRE: T1574.002, T1036.005 // CONF: high | FP: low | COST: low // REQUIRES: PeFileWritten or NewExecutableWritten // FALSE POSITIVES: legitimate NVDA installs and portable NVDA copies on USB media // TUNING: add any approved portable-NVDA directory to the negated regex below #event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/ | TargetFileName=/nvdaHelperRemote\.dll$/i | TargetFileName!=/\\NVDA\\/i | table([ComputerName, UserName, TargetFileName, ContextBaseFileName, FileName, SHA256HashData], limit=200)
Looks for: the campaign's staging directory. Windows Media Player is a frozen legacy component that receives no vendor updates — a new executable or DLL appearing there is anomalous regardless of this campaign. This is the pack's highest-fidelity query and survives hash, filename and domain rotation.
// HUNT: PE written into C:\Program Files\Windows Media Player (campaign staging dir) // MITRE: T1036.005, T1574.002 // CONF: high | FP: low | COST: low // REQUIRES: PeFileWritten or NewExecutableWritten // FALSE POSITIVES: effectively none — WMP is frozen and receives no vendor updates // TUNING: none expected; investigate every hit #event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/ | TargetFileName=/\\Windows Media Player\\/i | table([ComputerName, UserName, TargetFileName, ContextBaseFileName, FileName, SHA256HashData], limit=200)
Looks for: the auto-start service registration under HKLM\SYSTEM\CurrentControlSet\Services\, matched on the service key name or on any service whose image path points into the Windows Media Player directory. The second clause is the durable form — the service name is trivially changed, the staging path is structural.
// HUNT: MixedSvc service registration / any service imaged from Windows Media Player // MITRE: T1543.003, T1036.005 // CONF: high | FP: low | COST: low // REQUIRES: RegGenericValueUpdate or AsepValueUpdate // FALSE POSITIVES: none known — genuine Mixed Reality does not register MixedSvc // TUNING: if your tenant emits ServiceInstalled, run the ServiceImagePath variant too #event_simpleName=/^(RegGenericValueUpdate|AsepValueUpdate)$/ | RegObjectName=/CurrentControlSet\\Services\\/i | RegObjectName=/MixedSvc/i or RegStringValue=/\\Windows Media Player\\/i | table([ComputerName, UserName, RegObjectName, RegValueName, RegStringValue], limit=200)
Looks for: the delivery archive landing in Downloads. Genuine taxpayers also download an identically-named utility from the real Income Tax portal, so this is a scoping query, not an alert — correlate every hit against Q6 to see whether the host also resolved a lure domain.
// HUNT: Common_Offline_Utility ITR archive written to disk // MITRE: T1566.002, T1204.002 // CONF: high | FP: medium | COST: low // REQUIRES: ZipFileWritten // FALSE POSITIVES: genuine taxpayers downloading the real utility from incometax.gov.in // TUNING: correlate with Q6 — a lure-domain resolution on the same host confirms it #event_simpleName=/^(ZipFileWritten|PeFileWritten|NewExecutableWritten)$/ | TargetFileName=/Common_Offline_Utility|COU_ITR-1_to_4/i | table([ComputerName, UserName, TargetFileName, ContextBaseFileName, FileName, SHA256HashData], limit=200)
Looks for: DNS resolution of any published lure or C2 domain across both vendor clusters. kkxqbh[.]top and ouewop[.]com are the two implant channels; ikkkkddd[.]com, 1kkkkddd[.]com, simaqz[.]com and jiayingjing[.]com are additional C2 infrastructure from the Seqrite cluster; the rest are lure hosting. A resolution of a C2 domain is a confirmed post-exploitation event, not just a click.
Read the first character carefully. 1kkkkddd[.]com begins with the digit one and ikkkkddd[.]com begins with the letter i. Both are genuine, separately-registered domains named in the Seqrite report — the regex intentionally contains both. Neither is a transcription error to be tidied up.
// HUNT: DNS resolution of Operation DragonReturn lure or dual-RAT C2 infrastructure // MITRE: T1071.001, T1568 // CONF: high | FP: low | COST: low // REQUIRES: DnsRequest // FALSE POSITIVES: sandbox detonation hosts and researcher workstations // TUNING: exclude your malware-analysis subnet by aid before alerting // NOTE: 1kkkkddd.com (digit one) and ikkkkddd.com (letter i) are BOTH real, separately // registered domains. Do not "correct" either one — you would drop a live C2. #event_simpleName=DnsRequest | DomainName=/^(kkxqbh\.top|ouewop\.com|ikkkkddd\.com|1kkkkddd\.com|simaqz\.com|jiayingjing\.com|govtop\.one|import\.mom|tqhaq\.rest|tqkat\.rest|generate\.lat|meoou\.rest|kattp\.homes)$/i | table([ComputerName, UserName, DomainName, ContextBaseFileName, ContextProcessId, aid], limit=200)
Looks for: direct IP connections to published infrastructure. 118.107.0.197 serves the polyglot and appears in both vendor clusters, making it the strongest single network indicator. 223.26.63.40 hosts the Chinese-language DCRat panel on port 2671.
// HUNT: outbound connections to Operation DragonReturn campaign infrastructure // MITRE: T1071.001, T1027.009 // CONF: high | FP: low | COST: low // REQUIRES: NetworkConnectIP4 // FALSE POSITIVES: threat-intel enrichment appliances that actively probe indicators // TUNING: exclude your TI-enrichment host aids before promoting to an alert #event_simpleName=NetworkConnectIP4 | in(RemoteAddressIP4, values=["118.107.0.197", "204.194.48.250", "223.26.63.40", "27.50.54.191", "117.44.201.119"]) | table([ComputerName, UserName, ContextBaseFileName, RemoteAddressIP4, RemotePort, Protocol, aid], limit=max)
Looks for: the infrastructure-independent form of the C2 detection. Both implants live inside injected svchost.exe processes and both use fixed, non-standard ports — 6666 for the Gh0st derivative, 6351 for the AsyncRAT loader. svchost.exe has no legitimate reason to reach either port. This query keeps working after every domain and IP in this pack is burned.
// HUNT: svchost.exe outbound on TCP 6666 / 6351 (Gh0st + AsyncRAT C2 ports) // MITRE: T1571, T1095, T1041 // CONF: high | FP: low | COST: medium // REQUIRES: NetworkConnectIP4 // FALSE POSITIVES: rare; legacy IRC-era or game tooling occasionally uses 6666 // TUNING: drop RFC1918 destinations first, then baseline remaining externals by aid // TUNING: if RemotePort is unpopulated in your tenant, swap in RemotePort_decimal (gate G4) #event_simpleName=NetworkConnectIP4 | ContextBaseFileName=/^svchost(\.exe)?$/i | in(RemotePort, values=["6666", "6351"]) | !cidr(RemoteAddressIP4, subnet=["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "127.0.0.0/8"]) | groupBy([ComputerName, RemoteAddressIP4, RemotePort], function=count(as=Connections), limit=500) | sort(Connections, order=desc, limit=100)
Looks for: stage 5 spawning suspended svchost.exe processes under duplicated, session-reassigned tokens. On a healthy Windows host essentially every svchost.exe is a child of services.exe. FP: some EDR, backup and imaging agents legitimately spawn svchost — baseline the surviving parent list before alerting.
// HUNT: svchost.exe spawned by a parent other than services.exe // MITRE: T1055.002, T1134.002 // CONF: medium | FP: medium | COST: medium // REQUIRES: ProcessRollup2 // FALSE POSITIVES: EDR / backup / imaging agents and some installers spawn svchost // TUNING: baseline ParentBaseFileName over 30d, then add survivors to the negated list #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^svchost(\.exe)?$/i | ParentBaseFileName!=/^(services|svchost|MsMpEng)(\.exe)?$/i | groupBy([ComputerName, ParentBaseFileName, UserName], function=count(as=Spawns), limit=500) | sort(Spawns, order=desc, limit=100)
Looks for: the execution counterpart to Q3 — the staged Mixed Reality.exe running from the staging directory when MixedSvc starts. Negating the genuine WMP binaries leaves only intruders.
Benign baseline for triage: the only executables that legitimately live in C:\Program Files\Windows Media Player\ are wmplayer.exe, setup_wm.exe, wmpshare.exe, wmpnscfg.exe and wmpnetwk.exe, all Microsoft-signed and all negated above. Note that the real Mixed Reality Portal binary, MixedRealityPortal.exe, lives under System32 — not here, so it is not part of this query's baseline and is not an indicator; a hit named Mixed Reality.exe (with a space) in this directory is the campaign, not Microsoft.
// HUNT: execution from C:\Program Files\Windows Media Player (excluding real WMP binaries) // MITRE: T1036.005, T1543.003 // CONF: high | FP: low | COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: very low — only wmplayer.exe and setup_wm.exe legitimately live here // TUNING: none expected; investigate every hit #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | ImageFileName=/\\Windows Media Player\\/i | FileName!=/^(wmplayer|setup_wm|wmpshare|wmpnscfg|wmpnetwk)(\.exe)?$/i | table([ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData], limit=200)
Looks for: the stage-2 privilege check — the binary re-launches itself with the runas verb, producing a parent/child pair with the same image name where the child is elevated. Comparing the reported IntegrityLevel between the two rows confirms the escalation.
// HUNT: ITR utility spawning a same-named elevated child (runas UAC relaunch) // MITRE: T1548.002 // CONF: medium | FP: low | COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: installers that legitimately self-elevate on first run // TUNING: compare IntegrityLevel across the parent and child rows to confirm elevation #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | ParentBaseFileName=/^(COU_ITR-1_to_4_AY2026-27|Mixed Reality)(\.exe)?$/i | table([ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, IntegrityLevel, CommandLine], limit=200)
Looks for: any of the 43 published SHA256 values across process and file telemetry — the 10 samples reverse-engineered by Cyderes plus the 33 further samples published with the original Seqrite DragonReturn report. Note: 93dd8b7b… is the legitimate signed ITR utility — a hit on that hash alone is not compromise. Correlate against Q3 or Q10 before escalating.
// HUNT: Operation DragonReturn published SHA256 sweep (43 samples, both vendor clusters) // MITRE: T1204.002, T1574.002 // CONF: high | FP: low | COST: low // REQUIRES: ProcessRollup2, PeFileWritten // FALSE POSITIVES: 93dd8b7b... is the LEGITIMATE signed utility — corroborate before escalating // TUNING: none; treat every non-93dd8b7b hit as a confirmed compromise #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/ | in(SHA256HashData, values=[ "52c19cfdc25bd1c1be3386493d60ded19e2fe35e053d81dda2b212d8dde84330", "93dd8b7b393289f88493596faa4ae70054d9eb4fe47f2dd334f0c6bb5262f2a8", "2c0de3d5432d5a14cb03936a460ceb633b53a51881c4fa4f3dfa87fedef2148e", "60ad81d75bd59e12b43392f7abf95bcb66a6e27091a46f9bf5cca51a6c01853f", "3dd5148cf3cfc7fe2196d066ef39d8f03d07022dd5e917227164abc8d6c6d1ed", "030b90666a581934de0683ef9232f137867db804f6100c0479958826dc2e4cbb", "7ee61469f1c171d1631a72720ecaa0516598b4671e320287674f5d6817a9fb92", "fd062b4096f22c47bf6124a5b58322940ff676cb8d8fccd40af4d110f93dc2fa", "fb520caa54b7e498708a6ebd0029c2492134c87c85324a3301ab450caa19e112", "a1521585d54fe29675f906b538d86a6d3b5804db637b714ab1fbf6fb01d0a6f1", "03d2b73ecde0575a1e5ea24d6e4f12987cc081c0bc22dadf8c4219e8e38ca6e0", "133e4d3f1dcd99a35fec92ad13bafa3790b6d585f8ec46527fe0ae01da98ad22", "1787d1119cd3b40e0e5f19d62821958b7d5c2bbe0518bf1e3fb2e44fdeb4fa58", "19ca5fe04ca45a18c5bad9658ff73a8f39fe20ced78f690595f1b4c5a90af324", "2f2f8f92af86fb962c30c4c1c9d673f9d94886373d0fcf78f8d105c051ffc643", "2f72f4b71e33c80f122dbe5360a8d687577260567d4b59cf8c07ee2182e8ceba", "34d1231a3bf1e13a9b90daecb5c74d52aea94ca54427b203d77e1adc61a5c4f9", "40593369e14c9ab7b5e2fd186a580dbcd790ebb902f3aedc12c92cd617302960", "4a040770fd81d0db9e04cb8dbd2e07e61969072962bb4e736b7c7001444cc2fa", "589aa1f7252cae74538343cd35443c0a8f58ed280f2016918b6e539a0c09529a", "590a75978ab33a97280be1e2ae62a2e416ada45a11bc3f1cb77c99f3eb542b4e", "5a00485968679dc0ed6d80b659f48287603864c223e952918d2c2aaddfa2d280", "5e97f7c17bf0466355be0438c7cc3e2e4d125e31368f2fbcb8e1d79cb97f137a", "6751ad8d0aeb6ac67cd54ea42657ce1f16addc3e3111f9e60b11931ebf58e77d", "696f6a1a0fbf7b4ff977cc36382f6d2bc6d7813ed84b0195d925d1f46c24568c", "6c774188a54ae07ae896abdf1ea6695cc29f529388888665e05322af3e9178e1", "6c9ae8a979ad18da2927ae4fdbd73d3c870ead4ea3d437656a3bdcc81b85a050", "7e142c8fa614cc39d0453aa648b12209821c6bcbb77ee02094f70161b40d50ae", "8673ce317876e6c3fe868c98524a3b2ae86a79b737536b865f044a52d16a7193", "879cfe23a96e822f3873fd90a37d548d7975ba0552ce28527d3d1e292000c59b", "8ed95259300ca268279867d2999d9c4f6585c6c45308635fc39af87da27546b5", "9e73cd733707e5f7c9091147b029a6974b985d6c90a9cc2cb47bc0ae8a0f9245", "a8614dfad5fd2a79302a7c4829a0fed6f3a0a46b11beb28f89531cdfa83d32b3", "b0fcd7d9396e70b89e8292f6b80f933607b6fc9a9d3d4dd4ca69b408a2625932", "b4fb231356254426e340ab1dba50fa37a69859fc4e8a2dbdfc3e1db082006847", "c6651d6ce31c3a00357e579981d48c0da942b5bbe1582bf3d612a07dc3bc0ff6", "c6fc06db6a1318152c09200352b40c8fa794f1089988835c1df92174347be8ec", "db946f3f2b409370d14a6e69cf029f2818985f19320fa09b63bd3268dc830b02", "e6346e3087db2bfba4551fcf89d94ae49aa92dc22f0ec2b718187a96e3a3b83c", "ec5d4103b3d97885e9575ad045b2ef5467bf9fccf71828e418e6488d78983146", "eccff5c026a01cbe91db45cd0289f8822985aa5183f096d8add69762696d100d", "fc17d5b4d64cb61a5aa8fb6bbe1e94885f129b2bf8ee91bca1ccca2b537f6616", "fdd9752f4bb03762828e2e2bb6ec26c5f05a664dc28e02457685ddb3650d3e95"]) | table([ComputerName, UserName, FileName, ImageFileName, TargetFileName, SHA256HashData, CommandLine], limit=max)
CrowdStrike Custom IOA Recommendations
Three queries are strong enough to promote from hunt to Custom IOA. The rest stay Investigate-only.
| From | IOA rule | Type | Action | Severity | Rationale |
|---|---|---|---|---|---|
| Q3 | PE file written under \Windows Media Player\ | File Creation | Detect → Block after 14d baseline | Critical | Zero legitimate writers. Catches the campaign at staging, before persistence or any C2. |
| Q10 | Process executing from \Windows Media Player\ excluding wmplayer.exe / setup_wm.exe | Process Creation | Detect | Critical | Catches the persisted service host on every boot even if the file-write event was missed. |
| Q8 | svchost.exe network connection to a non-RFC1918 address on TCP 6666 or 6351 | Network Connection | Detect | High | Infrastructure-independent; survives full domain and IP rotation. |
| Investigate-only Q1, Q2, Q4, Q5, Q6, Q7, Q9, Q11, Q12 — either FP-medium (Q1, Q5, Q9, Q11) or better served by IOC Management import than by an IOA (Q6, Q7, Q12). | |||||
Alert package — IOA-1 (from Q3)
Scheduled Search name: DETECT — PE Written to Windows Media Player Dir (Operation DragonReturn)
Description: Fires when any executable or DLL is written into C:\Program Files\Windows Media Player\. This is the staging directory used by the fake Indian ITR notice dual-RAT campaign; Windows Media Player is a frozen component with no legitimate writers.
Email subject: [CRITICAL] Detection: Operation DragonReturn — PE staged in Windows Media Player directory
Email body: A PE file was written into the Windows Media Player program directory on <ComputerName> by <ContextBaseFileName>. This directory is the documented staging path for a China-nexus-suspected campaign that side-loads a malicious DLL through a signed Indian tax utility and deploys two remote-access implants into svchost.exe across every logged-in session. Treat as an active intrusion until disproven. Isolate the host via Falcon RTR network containment before further triage — the campaign's stage 5 re-injects continuously and reaches every user session.
Triage checklist
- Contain the host in Falcon (network containment) before any on-host action — both implants re-inject on a loop.
- Record the writing process (
ContextBaseFileName) and the written filename.Mixed Reality.exeornvdaHelperRemote.dllconfirms this campaign. - Run Q4 scoped to the host to confirm or exclude the
MixedSvcservice registration. - Run native hunt 1 (section 7) for
c:\kkooPPP,c:\ouewo,c:\kkqqexit,c:\debug.txt— these tell you which implant(s) landed. - Check for
C:\Windows\background.jpgand preserve it — it is the polyglot payload container and the single most useful forensic artifact. - Run Q8 and Q6 scoped to the host over full retention to establish whether C2 was reached and when.
- Run Q9 to enumerate injected
svchost.exeinstances and identify which user sessions were reached. - Identify the delivery vector: Q5 for the ZIP write, then Q6 for the lure domain, then pull the browser history for the
/incometaxURL. - If C2 was reached, treat every credential used on the host — and every credential visible in a screen capture — as compromised.
Pivot queries
// Host-scoped: full campaign artifact sweep for one endpoint #event_simpleName=/^(ProcessRollup2|PeFileWritten|NewExecutableWritten|DnsRequest|NetworkConnectIP4)$/ | ComputerName=/^REPLACE_WITH_HOSTNAME$/i | TargetFileName=/Windows Media Player|nvdaHelperRemote|background\.jpg/i or ImageFileName=/Windows Media Player/i or DomainName=/kkxqbh\.top|ouewop\.com|ikkkkddd\.com/i | table([ComputerName, UserName, FileName, ImageFileName, TargetFileName, DomainName, RemoteAddressIP4]) // Environment-wide: which sessions did stage 5 reach? #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^svchost(\.exe)?$/i | ParentBaseFileName!=/^(services|svchost|MsMpEng)(\.exe)?$/i | groupBy([ComputerName, UserName, UserSid], function=count(as=Instances), limit=500)
Machine-Readable IOC Appendix
type,value,action,severity,expiration,description,tags sha256,52c19cfdc25bd1c1be3386493d60ded19e2fe35e053d81dda2b212d8dde84330,prevent,critical,2027-01-19,Delivery ZIP Common_Offline_Utility ITR-1 to 4 AY2026-27,campaign:DragonReturn sha256,93dd8b7b393289f88493596faa4ae70054d9eb4fe47f2dd334f0c6bb5262f2a8,detect,low,2027-01-19,LEGITIMATE signed ITR utility abused for side-loading - DO NOT BLOCK,campaign:DragonReturn sha256,2c0de3d5432d5a14cb03936a460ceb633b53a51881c4fa4f3dfa87fedef2148e,prevent,critical,2027-01-19,nvdaHelperRemote.dll stage 1 side-loaded DLL,campaign:DragonReturn sha256,60ad81d75bd59e12b43392f7abf95bcb66a6e27091a46f9bf5cca51a6c01853f,prevent,critical,2027-01-19,Stage 2 downloader and service installer,campaign:DragonReturn sha256,3dd5148cf3cfc7fe2196d066ef39d8f03d07022dd5e917227164abc8d6c6d1ed,prevent,critical,2027-01-19,nvdaHelperRemote.dll stage 3 dropped loader,campaign:DragonReturn sha256,030b90666a581934de0683ef9232f137867db804f6100c0479958826dc2e4cbb,prevent,critical,2027-01-19,Stage 4 injector,campaign:DragonReturn sha256,7ee61469f1c171d1631a72720ecaa0516598b4671e320287674f5d6817a9fb92,prevent,critical,2027-01-19,Stage 5 session-aware injector,campaign:DragonReturn sha256,fd062b4096f22c47bf6124a5b58322940ff676cb8d8fccd40af4d110f93dc2fa,prevent,critical,2027-01-19,background.jpg polyglot payload container,campaign:DragonReturn sha256,fb520caa54b7e498708a6ebd0029c2492134c87c85324a3301ab450caa19e112,prevent,critical,2027-01-19,Decrypted .NET AsyncRAT Quasar family assembly stage 6B,campaign:DragonReturn sha256,a1521585d54fe29675f906b538d86a6d3b5804db637b714ab1fbf6fb01d0a6f1,prevent,critical,2027-01-19,Injected PE-1 Gh0st RAT derivative stage 6A,campaign:DragonReturn sha256,03d2b73ecde0575a1e5ea24d6e4f12987cc081c0bc22dadf8c4219e8e38ca6e0,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,133e4d3f1dcd99a35fec92ad13bafa3790b6d585f8ec46527fe0ae01da98ad22,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,1787d1119cd3b40e0e5f19d62821958b7d5c2bbe0518bf1e3fb2e44fdeb4fa58,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,19ca5fe04ca45a18c5bad9658ff73a8f39fe20ced78f690595f1b4c5a90af324,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,2f2f8f92af86fb962c30c4c1c9d673f9d94886373d0fcf78f8d105c051ffc643,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,2f72f4b71e33c80f122dbe5360a8d687577260567d4b59cf8c07ee2182e8ceba,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,34d1231a3bf1e13a9b90daecb5c74d52aea94ca54427b203d77e1adc61a5c4f9,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,40593369e14c9ab7b5e2fd186a580dbcd790ebb902f3aedc12c92cd617302960,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,4a040770fd81d0db9e04cb8dbd2e07e61969072962bb4e736b7c7001444cc2fa,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,589aa1f7252cae74538343cd35443c0a8f58ed280f2016918b6e539a0c09529a,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,590a75978ab33a97280be1e2ae62a2e416ada45a11bc3f1cb77c99f3eb542b4e,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,5a00485968679dc0ed6d80b659f48287603864c223e952918d2c2aaddfa2d280,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,5e97f7c17bf0466355be0438c7cc3e2e4d125e31368f2fbcb8e1d79cb97f137a,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,6751ad8d0aeb6ac67cd54ea42657ce1f16addc3e3111f9e60b11931ebf58e77d,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,696f6a1a0fbf7b4ff977cc36382f6d2bc6d7813ed84b0195d925d1f46c24568c,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,6c774188a54ae07ae896abdf1ea6695cc29f529388888665e05322af3e9178e1,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,6c9ae8a979ad18da2927ae4fdbd73d3c870ead4ea3d437656a3bdcc81b85a050,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,7e142c8fa614cc39d0453aa648b12209821c6bcbb77ee02094f70161b40d50ae,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,8673ce317876e6c3fe868c98524a3b2ae86a79b737536b865f044a52d16a7193,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,879cfe23a96e822f3873fd90a37d548d7975ba0552ce28527d3d1e292000c59b,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,8ed95259300ca268279867d2999d9c4f6585c6c45308635fc39af87da27546b5,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,9e73cd733707e5f7c9091147b029a6974b985d6c90a9cc2cb47bc0ae8a0f9245,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,a8614dfad5fd2a79302a7c4829a0fed6f3a0a46b11beb28f89531cdfa83d32b3,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,b0fcd7d9396e70b89e8292f6b80f933607b6fc9a9d3d4dd4ca69b408a2625932,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,b4fb231356254426e340ab1dba50fa37a69859fc4e8a2dbdfc3e1db082006847,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,c6651d6ce31c3a00357e579981d48c0da942b5bbe1582bf3d612a07dc3bc0ff6,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,c6fc06db6a1318152c09200352b40c8fa794f1089988835c1df92174347be8ec,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,db946f3f2b409370d14a6e69cf029f2818985f19320fa09b63bd3268dc830b02,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,e6346e3087db2bfba4551fcf89d94ae49aa92dc22f0ec2b718187a96e3a3b83c,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,ec5d4103b3d97885e9575ad045b2ef5467bf9fccf71828e418e6488d78983146,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,eccff5c026a01cbe91db45cd0289f8822985aa5183f096d8add69762696d100d,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,fc17d5b4d64cb61a5aa8fb6bbe1e94885f129b2bf8ee91bca1ccca2b537f6616,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn sha256,fdd9752f4bb03762828e2e2bb6ec26c5f05a664dc28e02457685ddb3650d3e95,detect,high,2027-01-19,DragonReturn sample set published with the original Seqrite report,campaign:DragonReturn domain,kkxqbh.top,detect,high,2026-10-19,Gh0st RAT derivative C2 on port 6666 - in both vendor clusters,campaign:DragonReturn domain,ouewop.com,detect,high,2026-10-19,AsyncRAT Quasar family C2 on port 6351,campaign:DragonReturn domain,ikkkkddd.com,detect,high,2026-10-19,Additional C2 reported in the Seqrite cluster - LETTER i,campaign:DragonReturn domain,1kkkkddd.com,detect,high,2026-10-19,Associated C2 infrastructure Seqrite cluster - DIGIT ONE - separate registration from ikkkkddd.com not a typo,campaign:DragonReturn domain,simaqz.com,detect,high,2026-10-19,Associated C2 infrastructure Seqrite cluster,campaign:DragonReturn domain,jiayingjing.com,detect,high,2026-10-19,Associated C2 infrastructure Seqrite cluster,campaign:DragonReturn domain,govtop.one,detect,high,2026-10-19,Lure hosting on the /incometax path - Seqrite cluster,campaign:DragonReturn domain,import.mom,detect,high,2026-10-19,Lure hosting on the /incometax path,campaign:DragonReturn domain,tqhaq.rest,detect,high,2026-10-19,Lure hosting on the /incometax path,campaign:DragonReturn domain,tqkat.rest,detect,high,2026-10-19,Lure hosting on the /incometax path,campaign:DragonReturn domain,generate.lat,detect,high,2026-10-19,Lure hosting on the /incometax path,campaign:DragonReturn domain,meoou.rest,detect,high,2026-10-19,Lure hosting on the /incometax path,campaign:DragonReturn domain,kattp.homes,detect,high,2026-10-19,Lure hosting on the /incometax path,campaign:DragonReturn ipv4,118.107.0.197,detect,high,2026-10-19,Polyglot hosting server - appears in both vendor clusters,campaign:DragonReturn ipv4,204.194.48.250,detect,high,2026-10-19,Polyglot hosting server - Seqrite cluster,campaign:DragonReturn ipv4,223.26.63.40,detect,high,2026-10-19,DCRat C2 with exposed Chinese-language panel on port 2671,campaign:DragonReturn ipv4,27.50.54.191,detect,high,2026-10-19,Campaign infrastructure - Seqrite cluster,campaign:DragonReturn ipv4,117.44.201.119,detect,medium,2026-10-19,kkxqbh.top resolution in ChinaNet AS4134 Nanchang,campaign:DragonReturn url,http://118.107.0.197/ouewo.jpg,detect,high,2026-10-19,Polyglot payload download URL,campaign:DragonReturn url,govtop.one/incometax,detect,high,2026-10-19,Lure landing page path,campaign:DragonReturn md5,REPLACE_WITH_MD5_IF_YOUR_TOOLING_REQUIRES_IT,detect,high,2026-10-19,No cited source publishes MD5 - do not infer or compute,campaign:DragonReturn sha1,REPLACE_WITH_SHA1_IF_YOUR_TOOLING_REQUIRES_IT,detect,high,2026-10-19,No cited source publishes SHA1 - do not infer or compute,campaign:DragonReturn
# Operation DragonReturn behavioural signatures (no atomic IOC form)
# aka fake Indian ITR notice / DcRAT dual-RAT campaign
# Staging and persistence
Any PE written into C:\Program Files\Windows Media Player\
Staged host binary named "Mixed Reality.exe"
Auto-start service key name: MixedSvc
Service display name: Windows Mixed Reality Service
Polyglot container at C:\Windows\background.jpg (embedded payloads at 0x1587D, 0x52C04, 0x165A04)
# Host artifacts (extension-less - no Falcon FileWritten event fires)
c:\kkooPPP lock file, Gh0st RAT derivative (stage 6A)
c:\ouewo lock file, AsyncRAT .NET loader (stage 6B)
c:\kkqqexit kill file, shutdown signal to the injector
c:\debug.txt hidden + system debug log holding the client PID
# Named kernel objects (live host only - lost on reboot)
Global\kkctsbnn single-instance guard, stages 2 and 5
Global\ShitSetupOn26126k setup-phase guard, stage 2
5sGEm6Q4eTNv AsyncRAT mutex
# Injection and evasion behaviour
svchost.exe created by a parent other than services.exe
CreateRemoteThread / NtCreateThreadEx targeting svchost.exe from a non-system process
Suspended svchost.exe spawned per terminal session under a re-assigned token
VirtualProtect against amsi.dll AmsiOpenSession immediately before CLR load
Native (non-.NET) process loading clrjit.dll with no registered .NET service
# Benign baseline - NOT indicators, never block these
MixedRealityPortal.exe genuine Microsoft Mixed Reality Portal, lives under System32.
One word, no space, Microsoft-signed. It is the LEGITIMATE
name the campaign's "Mixed Reality.exe" (with a space, under
Windows Media Player) is masquerading against. Use it to tell
the two apart during triage - do NOT add it to a blocklist.
wmplayer.exe, setup_wm.exe, wmpshare.exe, wmpnscfg.exe, wmpnetwk.exe
the only executables that legitimately live in the Windows
Media Player directory. Anything else there is the campaign.
# Reverse-engineering aids (NOT hashes - do not import)
AES-128 key for the stage 6B .NET assembly: 3343f6a8885a308da11ae0d18cd4a7f5
Quasar default PBKDF2 salt: BFEB1E56FBCD973BB219022430A57843003D5644D21E62B9D4F180E7E6C33941
AsyncRAT config version string: Reach 2.0.1
AMSI patch: two bytes at AmsiOpenSession+0x1C overwritten with 0xFEEB
XOR keys for stage 4 API string decoding: 0x18 (most), 0x02 (one)
# NOTE: ikkkkddd.com starts with the LETTER i; 1kkkkddd.com starts with the DIGIT ONE. # Both are real, separately registered domains. Do not merge or "correct" them. kkxqbh.top ouewop.com ikkkkddd.com 1kkkkddd.com simaqz.com jiayingjing.com govtop.one import.mom tqhaq.rest tqkat.rest generate.lat meoou.rest kattp.homes 118.107.0.197 204.194.48.250 223.26.63.40 27.50.54.191 117.44.201.119
{
"campaign": "Operation DragonReturn",
"aliases": [
"Fake Indian ITR Notice - Dual RAT Deployment",
"Fake Indian Tax Filing Utility / DcRAT campaign",
"The Tax Trap"
],
"alias_note": "Seqrite named it Operation DragonReturn; Cyderes and The Hacker News reported the same activity under the ITR-notice / DcRAT names. One campaign - match on TTPs (COU_ITR lure, nvdaHelperRemote.dll side-load, kkxqbh.top, 118.107.0.197), not on vendor name.",
"attribution": {
"assessment": "SUSPECTED China-nexus",
"confidence": "medium-to-high (Seqrite)",
"overlaps": ["Silver Fox"],
"basis": [
"Chinese-language strings in campaign infrastructure",
"Chinese-language DCRat web panel on 223.26.63.40",
"kkxqbh.top resolving into ChinaNet AS4134 Nanchang Jiangxi",
"infrastructure and TTP overlap with prior tax-themed ValleyRAT activity"
],
"caveat": "NOT CONFIRMED - hosting geography alone is not attribution"
},
"first_observed": "2026-05-18",
"implants": [
{ "family": "Gh0st RAT derivative", "stage": "6A", "c2": "kkxqbh.top", "port": 6666 },
{ "family": "AsyncRAT / Quasar family", "stage": "6B", "c2": "ouewop.com", "port": 6351 }
],
"delivery": {
"archive": "Common_Offline_Utility_ITR-1_to_4_AY2026-27.zip",
"signed_host": "COU_ITR-1_to_4_AY2026-27.exe",
"sideloaded_dll": "nvdaHelperRemote.dll",
"lure_path": "/incometax"
},
"persistence": { "service_name": "MixedSvc", "display_name": "Windows Mixed Reality Service" },
"sha256": [
"52c19cfdc25bd1c1be3386493d60ded19e2fe35e053d81dda2b212d8dde84330",
"93dd8b7b393289f88493596faa4ae70054d9eb4fe47f2dd334f0c6bb5262f2a8",
"2c0de3d5432d5a14cb03936a460ceb633b53a51881c4fa4f3dfa87fedef2148e",
"60ad81d75bd59e12b43392f7abf95bcb66a6e27091a46f9bf5cca51a6c01853f",
"3dd5148cf3cfc7fe2196d066ef39d8f03d07022dd5e917227164abc8d6c6d1ed",
"030b90666a581934de0683ef9232f137867db804f6100c0479958826dc2e4cbb",
"7ee61469f1c171d1631a72720ecaa0516598b4671e320287674f5d6817a9fb92",
"fd062b4096f22c47bf6124a5b58322940ff676cb8d8fccd40af4d110f93dc2fa",
"fb520caa54b7e498708a6ebd0029c2492134c87c85324a3301ab450caa19e112",
"a1521585d54fe29675f906b538d86a6d3b5804db637b714ab1fbf6fb01d0a6f1",
"03d2b73ecde0575a1e5ea24d6e4f12987cc081c0bc22dadf8c4219e8e38ca6e0",
"133e4d3f1dcd99a35fec92ad13bafa3790b6d585f8ec46527fe0ae01da98ad22",
"1787d1119cd3b40e0e5f19d62821958b7d5c2bbe0518bf1e3fb2e44fdeb4fa58",
"19ca5fe04ca45a18c5bad9658ff73a8f39fe20ced78f690595f1b4c5a90af324",
"2f2f8f92af86fb962c30c4c1c9d673f9d94886373d0fcf78f8d105c051ffc643",
"2f72f4b71e33c80f122dbe5360a8d687577260567d4b59cf8c07ee2182e8ceba",
"34d1231a3bf1e13a9b90daecb5c74d52aea94ca54427b203d77e1adc61a5c4f9",
"40593369e14c9ab7b5e2fd186a580dbcd790ebb902f3aedc12c92cd617302960",
"4a040770fd81d0db9e04cb8dbd2e07e61969072962bb4e736b7c7001444cc2fa",
"589aa1f7252cae74538343cd35443c0a8f58ed280f2016918b6e539a0c09529a",
"590a75978ab33a97280be1e2ae62a2e416ada45a11bc3f1cb77c99f3eb542b4e",
"5a00485968679dc0ed6d80b659f48287603864c223e952918d2c2aaddfa2d280",
"5e97f7c17bf0466355be0438c7cc3e2e4d125e31368f2fbcb8e1d79cb97f137a",
"6751ad8d0aeb6ac67cd54ea42657ce1f16addc3e3111f9e60b11931ebf58e77d",
"696f6a1a0fbf7b4ff977cc36382f6d2bc6d7813ed84b0195d925d1f46c24568c",
"6c774188a54ae07ae896abdf1ea6695cc29f529388888665e05322af3e9178e1",
"6c9ae8a979ad18da2927ae4fdbd73d3c870ead4ea3d437656a3bdcc81b85a050",
"7e142c8fa614cc39d0453aa648b12209821c6bcbb77ee02094f70161b40d50ae",
"8673ce317876e6c3fe868c98524a3b2ae86a79b737536b865f044a52d16a7193",
"879cfe23a96e822f3873fd90a37d548d7975ba0552ce28527d3d1e292000c59b",
"8ed95259300ca268279867d2999d9c4f6585c6c45308635fc39af87da27546b5",
"9e73cd733707e5f7c9091147b029a6974b985d6c90a9cc2cb47bc0ae8a0f9245",
"a8614dfad5fd2a79302a7c4829a0fed6f3a0a46b11beb28f89531cdfa83d32b3",
"b0fcd7d9396e70b89e8292f6b80f933607b6fc9a9d3d4dd4ca69b408a2625932",
"b4fb231356254426e340ab1dba50fa37a69859fc4e8a2dbdfc3e1db082006847",
"c6651d6ce31c3a00357e579981d48c0da942b5bbe1582bf3d612a07dc3bc0ff6",
"c6fc06db6a1318152c09200352b40c8fa794f1089988835c1df92174347be8ec",
"db946f3f2b409370d14a6e69cf029f2818985f19320fa09b63bd3268dc830b02",
"e6346e3087db2bfba4551fcf89d94ae49aa92dc22f0ec2b718187a96e3a3b83c",
"ec5d4103b3d97885e9575ad045b2ef5467bf9fccf71828e418e6488d78983146",
"eccff5c026a01cbe91db45cd0289f8822985aa5183f096d8add69762696d100d",
"fc17d5b4d64cb61a5aa8fb6bbe1e94885f129b2bf8ee91bca1ccca2b537f6616",
"fdd9752f4bb03762828e2e2bb6ec26c5f05a664dc28e02457685ddb3650d3e95"
],
"note_on_93dd8b7b": "legitimate digitally signed Income Tax Department utility - detect only, never block"
}
Detection Validation Gates
Run these before treating a zero-hit result as clean. A query that returns nothing because the telemetry is absent looks identical to a query that returns nothing because the environment is healthy.
| # | Gate | How to prove it | If it fails |
|---|---|---|---|
| G1 | PE file-write telemetry is flowing | #event_simpleName=PeFileWritten | groupBy([ComputerName], function=count(as=Writes), limit=200) should return most of your fleet over 24h | Q2, Q3, Q5, Q12 are unreliable. Check sensor policy for file-write visibility. |
| G2 | Registry telemetry covers service keys | #event_simpleName=/^(RegGenericValueUpdate|AsepValueUpdate)$/ | RegObjectName=/CurrentControlSet\\Services\\/i | head(20) should return rows | Q4 is blind. Fall back to native hunt 5 (Event ID 7045). |
| G3 | DNS telemetry is present | #event_simpleName=DnsRequest | groupBy([ComputerName], function=count(as=Lookups), limit=200) | Q6 is blind. Pivot to Q7 (IP) and proxy logs. |
| G4 | RemotePort is populated on network events | #event_simpleName=NetworkConnectIP4 | RemotePort=* | head(20) | Q8 silently returns nothing. Use RemotePort_decimal instead. |
| G5 | svchost parent attribution is sane | Run Q9 without the campaign framing and confirm services.exe dominates the baseline | Q9 is uninterpretable until the parent baseline is understood. |
| G6 | Q3 has a believable zero | Confirm G1 passes and that C:\Program Files\Windows Media Player\ exists on sampled hosts | A zero on hosts without WMP installed is meaningless, not clean. |
| G7 | The pack's IOCs actually imported | After importing the section-10 CSV, confirm 65 indicators landed and that 93dd8b7b… is detect, not prevent | Blocking the legitimate signed utility will break genuine ITR filing. |
Hardening — Tiered & Deployable
The whole chain rests on two user-granted privileges: the ability to run a downloaded executable, and the ability to approve a UAC elevation. Remove either and the campaign stops at stage 2.
- Remove local administrator rights from standard users. (MITRE M1026 Privileged Account Management; CIS Controls v8 5.4; MS Security Baseline) Stage 2 explicitly checks Administrators-group membership and aborts if it cannot elevate. A non-admin user faces a UAC credential prompt they cannot satisfy, so the chain never reaches persistence, the polyglot download, or either implant. This is the single highest-leverage control in the pack.
- Set UAC to always prompt for credentials on the secure desktop. (M1052 User Account Control; CIS Microsoft Windows Benchmark — "User Account Control: Behavior of the elevation prompt for standard users" = "Prompt for credentials on the secure desktop") Turns the campaign's one-click consent step into a credential challenge.
- Block the published infrastructure at DNS, proxy and firewall. (M1037 Filter Network Traffic) Use the network block list in section 10. Pair it with an egress rule denying outbound TCP 6666 and 6351 — that rule outlives every domain in this pack.
- Import the section-10 CSV into Falcon IOC Management, honouring the detect-only setting on
93dd8b7b…. (M1040 Behavior Prevention on Endpoint) - Block executable content originating from archives in the mail and browser download path. (M1040; Microsoft ASR "Block executable content from email client and webmail") The delivery vehicle is a ZIP containing an EXE plus a DLL — a shape worth blocking outright for standard users.
- Application control (WDAC or AppLocker) in audit-then-enforce mode, denying execution from
%USERPROFILE%\Downloads,%TEMP%and archive-extraction paths. (M1038 Execution Prevention; CIS Benchmark; Microsoft WDAC guidance) This kills stage 1 outright, before the side-load. Audit for two weeks and mine the logs before enforcing. - Enable the ASR rules that target this exact shape. (M1040) "Block executable content from email client and webmail", "Block executable files from running unless they meet a prevalence, age, or trusted list criterion", and "Block process creations originating from PSExec and WMI commands". The prevalence rule is particularly effective against a freshly-built loader DLL.
- Deny write access to
C:\Program Files\Windows Media Player\beyond TrustedInstaller. (M1022 Restrict File and Directory Permissions) WMP is frozen; nothing legitimate needs to write there. This directly blocks stage 2's staging step. Verify no in-house media tooling depends on the path first. - Enable Attack Surface Reduction / behaviour monitoring for AMSI tampering and alert on
VirtualProtectagainstamsi.dll. (M1040) Stage 6B's AMSI patch is a well-defined, detectable primitive. - Enforce SmartScreen and Mark-of-the-Web propagation through archive extraction. (M1021 Restrict Web-Based Content) Ensures the extracted EXE still carries the zone identifier that triggers a SmartScreen warning.
- Move to a fully managed software-installation model so no standard user ever needs to run a downloaded installer. (M1038; CIS Controls v8 2.5, 2.7) Removes the entire initial-access class, not just this campaign.
- Default-deny egress with an authenticated proxy. (M1037) Both implants use raw TCP on fixed non-standard ports via a custom stack; a proxy-only egress model breaks them without needing any indicator.
- Segment and harden multi-session hosts (RDS / Citrix). (M1030 Network Segmentation) Stage 5's session-aware injection makes one infection on a shared host a compromise of every concurrent user. Prioritise admin-rights removal and application control there first.
- Run a targeted awareness campaign timed to Indian tax-filing season covering the fake "Microsoft Edge Secure Gateway" interstitial specifically. (M1017 User Training) ⚠ best-practice, no formal benchmark The fake Microsoft verification screen is the campaign's trust-transfer step and is unusually memorable in training.
- Establish an authoritative-source policy for government utilities — tax software is obtained only from the official portal, never from a link in an email or notice. (M1017) ⚠ best-practice, no formal benchmark
Deployable Playbooks
Playbook 1 — Harden UAC elevation behaviour (blocks stage 2)
Applies the CIS-recommended elevation prompt settings. Deploy via GPO or the registry values directly. Test on a pilot ring: help-desk workflows that rely on standard users self-elevating will change.
$p = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' # Standard users must supply admin credentials on the secure desktop (3 = prompt for credentials) Set-ItemProperty -Path $p -Name 'ConsentPromptBehaviorUser' -Value 3 -Type DWord # Administrators must consent on the secure desktop for every elevation (2 = prompt for consent) Set-ItemProperty -Path $p -Name 'ConsentPromptBehaviorAdmin' -Value 2 -Type DWord # Force the secure desktop and keep UAC fully enabled Set-ItemProperty -Path $p -Name 'PromptOnSecureDesktop' -Value 1 -Type DWord Set-ItemProperty -Path $p -Name 'EnableLUA' -Value 1 -Type DWord # Verify Get-ItemProperty -Path $p | Select-Object ConsentPromptBehaviorUser, ConsentPromptBehaviorAdmin, PromptOnSecureDesktop, EnableLUA
GPO equivalent: Computer Configuration → Windows Settings → Security Settings → Local Policies → Security Options → "User Account Control: …". Verify with: gpresult /h uac.html.
Playbook 2 — Lock down the Windows Media Player staging directory
Removes write access for everyone except TrustedInstaller, directly blocking stage 2's staging step. Confirm no in-house media tooling writes to this path before deploying fleet-wide.
$dir = 'C:\Program Files\Windows Media Player'
# Report current writable principals first - review before changing anything
(Get-Acl $dir).Access |
Where-Object { $_.FileSystemRights -match 'Write|Modify|FullControl' -and $_.AccessControlType -eq 'Allow' } |
Select-Object IdentityReference, FileSystemRights, IsInherited
# Deny write for Users and Authenticated Users
icacls $dir /deny "BUILTIN\Users:(OI)(CI)(W)"
icacls $dir /deny "NT AUTHORITY\Authenticated Users:(OI)(CI)(W)"
# Verify the deny ACEs landed
icacls $dir
Roll back with icacls "C:\Program Files\Windows Media Player" /remove:d "BUILTIN\Users" "NT AUTHORITY\Authenticated Users" if a legitimate dependency surfaces.
Playbook 3 — Enable the relevant ASR rules (audit first)
Deploy in AuditMode for two weeks, mine the ASR event log, then flip to Enabled.
# Block executable content from email client and webmail
Add-MpPreference -AttackSurfaceReductionRules_Ids BE9BA2D9-53EA-4CDC-84E5-9B1EEEE46550 `
-AttackSurfaceReductionRules_Actions AuditMode
# Block executable files unless they meet a prevalence, age, or trusted-list criterion
Add-MpPreference -AttackSurfaceReductionRules_Ids 01443614-cd74-433a-b99e-2ecdc07bfc25 `
-AttackSurfaceReductionRules_Actions AuditMode
# Review what would have been blocked
Get-WinEvent -LogName 'Microsoft-Windows-Windows Defender/Operational' -MaxEvents 500 |
Where-Object { $_.Id -in 1121,1122 } |
Select-Object TimeCreated, Id, Message
# Verify current configuration
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids
Playbook 4 — Egress block for the dual-RAT C2 ports
Infrastructure-independent: survives every domain and IP rotation in this campaign.
New-NetFirewallRule -DisplayName 'Block outbound TCP 6666 (Gh0st RAT C2)' ` -Direction Outbound -Action Block -Protocol TCP -RemotePort 6666 -Profile Any New-NetFirewallRule -DisplayName 'Block outbound TCP 6351 (AsyncRAT C2)' ` -Direction Outbound -Action Block -Protocol TCP -RemotePort 6351 -Profile Any # Verify Get-NetFirewallRule -DisplayName 'Block outbound TCP*' | Get-NetFirewallPortFilter | Select-Object Protocol, RemotePort
CQL spot-check after deployment — Q8 should return zero, and this should confirm the rule is doing the work rather than the malware being absent:
#event_simpleName=NetworkConnectIP4 | in(RemotePort, values=["6666", "6351"]) | groupBy([ComputerName, ContextBaseFileName, RemoteAddressIP4], function=count(as=Attempts), limit=200)
Playbook 5 — Persistence sweep for a suspect host
Read-only. Run via Falcon RTR on any host that hit Q3, Q4 or Q10 after network containment.
# 1. The persistence service
Get-CimInstance Win32_Service |
Where-Object { $_.Name -eq 'MixedSvc' -or $_.PathName -like '*Windows Media Player*' } |
Select-Object Name, DisplayName, PathName, StartMode, State
# 2. Staged binaries and the polyglot container
Get-ChildItem 'C:\Program Files\Windows Media Player\' -Force |
Select-Object Name, Length, CreationTime
Get-Item C:\Windows\background.jpg -Force -ErrorAction SilentlyContinue |
Select-Object FullName, Length, CreationTime
# 3. Root-level lock, kill and debug artifacts
Get-ChildItem -Path C:\ -Force -File |
Where-Object { $_.Name -in @('kkooPPP','ouewo','kkqqexit','debug.txt') } |
Select-Object Name, Length, CreationTime, Attributes
# 4. Service installation timestamp
Get-WinEvent -FilterHashtable @{ LogName='System'; Id=7045 } -MaxEvents 400 |
Where-Object { $_.Message -match 'MixedSvc|Mixed Reality' } |
Select-Object TimeCreated, Message
# 5. Injected svchost instances and the sessions they reached
Get-CimInstance Win32_Process -Filter "Name='svchost.exe'" |
Select-Object ProcessId, ParentProcessId, SessionId, CommandLine
Containment Runbook
- Network-contain the host in Falcon before touching it. Stage 5 re-injects on a loop across sessions; killing a single implant without containment just restarts the cycle.
- Block the section-10 domains and IPs at DNS, proxy and firewall, and add the outbound TCP 6666 / 6351 deny rules (playbook 4) fleet-wide, not just on the affected host.
- Run Q6, Q7 and Q8 environment-wide to find every other host that reached the same infrastructure. Assume the lure was sent to more than one recipient.
- On a multi-session host (RDS / Citrix), treat every concurrently logged-in user as affected, not just the one who ran the file.
- Preserve evidence before cleanup: capture
C:\Windows\background.jpg(the polyglot container),c:\debug.txt, and a memory image if you have the capability. The unpacked implants exist only in memory — reboot destroys them. - Run playbook 5 to enumerate persistence, then stop and delete the service:
sc.exe stop MixedSvcfollowed bysc.exe delete MixedSvc. - Remove the staged files:
Mixed Reality.exeandnvdaHelperRemote.dllfrom the Windows Media Player directory, plusC:\Windows\background.jpgand the root-level lock and kill files. - Reboot to clear the injected
svchost.exeinstances and the named kernel objects, then re-run playbook 5 to confirm nothing re-staged. - Rebuild is the safer default. Six stages, three in-memory-only, an AMSI patch and injection into every user session mean you cannot prove full eradication from artifact removal alone. Clean only when a rebuild is genuinely impossible, and monitor that host closely afterwards.
- Reset credentials for every user who had a session on the host, not only the user who executed the file — session-aware injection reached all of them.
- Assume screen-capture exfiltration occurred. Review what was plausibly on screen: financial records, tax filings, client PII, credentials being typed, MFA prompts. Scope the disclosure assessment to that content.
- Revoke and reissue any certificate, API key or token that was accessible from the host or visible on screen.
- Deploy the immediate-tier hardening (section 12) fleet-wide — starting with local admin-rights removal, which alone stops this chain at stage 2.
- Add Q3, Q10 and Q8 as standing scheduled searches so a re-infection surfaces without a fresh hunt.
- Brief finance and tax staff on the specific lure, and confirm the authoritative-source policy for tax software.
Detection Coverage Map
| Chain stage | Coverage | Queries | Notes |
|---|---|---|---|
| 0 · Lure and ZIP delivery | Good | Q5, Q6 | Q5 is FP-medium by design — the real utility shares the filename. |
| 1 · Signed EXE side-loads the DLL | Good | Q1, Q2, Q12 | Falcon has no module-load event here, so coverage is via process execution plus the DLL file-write, not the load itself. |
| 2 · UAC elevation | Partial | Q11 | The runas verb leaves no command-line marker; detection relies on the same-name parent/child pair. |
| 2 · Staging and service persistence | Strong | Q3, Q4, Q10 | Best coverage in the pack. Q3 is the run-first query. |
| 2 · Polyglot retrieval | Good | Q7 | Covered as an IP connection. The background.jpg write itself produces no *FileWritten event — it is not a PE. |
| 3 · Reflective loading of stage 4 | GAP | — | In-memory only. No file, registry or process event. Detectable only by memory scanning. |
| 4 · Injection into svchost | Partial | Q9 | CreateRemoteThread into an existing svchost produces no process-creation event; only the stage-5 spawned instances are visible. |
| 5 · Session-aware injection | Good | Q9 | The suspended per-session svchost spawns do generate ProcessRollup2. Baseline parents first. |
| 5 · Lock, kill and debug files | GAP | — | Extension-less non-PE files; no Falcon file-write event fires. Covered by native hunt 1 only. |
| 6A · Gh0st C2 and screen capture | Good | Q6, Q7, Q8 | Q8 is the durable form. The capture pipeline itself is in-memory and invisible. |
| 6B · AMSI patch and CLR hosting | GAP | — | IOA candidate: VirtualProtect on amsi.dll, and a native process loading clrjit.dll with no .NET service registration. Neither has a standard sensor event. |
| 6B · AsyncRAT C2 | Good | Q6, Q7, Q8 | Mutex 5sGEm6Q4eTNv confirms on a live host but is not queryable. |
| Named kernel objects | GAP | — | No sensor event. Native hunt 4, live hosts only. |
Reading the gaps: every gap sits in the in-memory half of the chain, which is exactly the design intent — the operator traded on-disk footprint away deliberately. The compensating control is that stage 2 must touch disk and the registry to persist, and both implants must reach the network. Q3, Q4, Q10 and Q8 bracket the in-memory stages on either side; a chain that evades all four is not this campaign.
Hunt Summary Ticket
TITLE: Hunt — Operation DragonReturn (aka fake Indian ITR notice) dual-RAT
via signed-binary DLL side-loading
SEVERITY: High — active campaign, dual RAT, full remote control, published IOCs
SCOPE: All Windows endpoints. Prioritise finance, tax and accounting staff, any
India-facing business unit, and all multi-session hosts (RDS / Citrix),
where one infection reaches every concurrently logged-in user.
ATTRIB: SUSPECTED China-nexus. Seqrite assesses medium-to-high confidence based on
Chinese-language infrastructure strings, a Chinese-language DCRat panel, and
ChinaNet AS4134 hosting, with TTP overlaps to Silver Fox. NOT CONFIRMED —
report it as an assessment, never as established attribution.
HYPOTHESIS: A user was lured by a fake Income Tax Department notice, routed through a
bogus "Microsoft Edge Secure Gateway" page, and downloaded an ITR utility
ZIP. The legitimate SIGNED executable inside side-loaded a malicious
nvdaHelperRemote.dll. A six-stage chain then forced a UAC elevation, staged
under C:\Program Files\Windows Media Player\, persisted as the service
MixedSvc ("Windows Mixed Reality Service"), pulled a polyglot JPEG to
C:\Windows\background.jpg, and injected a Gh0st RAT derivative
(kkxqbh[.]top:6666) plus an AsyncRAT-family .NET implant
(ouewop[.]com:6351) into svchost.exe in EVERY active session.
QUERIES: Q1 ITR utility / Mixed Reality.exe execution
Q2 nvdaHelperRemote.dll outside a real NVDA install
Q3 PE written to Windows Media Player dir <-- RUN THIS FIRST
Q4 MixedSvc service persistence
Q5 ITR-themed archive written to disk
Q6 Lure and C2 domain resolution
Q7 Campaign infrastructure IP connections
Q8 svchost.exe egress on TCP 6666 / 6351
Q9 svchost.exe spawned by an unexpected parent
Q10 Execution from the Windows Media Player dir
Q11 Same-name elevated child (runas UAC relaunch)
Q12 Published SHA256 sweep
DO FIRST: 1. Run Q3 across full retention. Near-zero expected FP; any hit is an
active intrusion until disproven.
2. Import the section 10 CSV — but confirm 93dd8b7b... imported as DETECT,
not prevent. It is the LEGITIMATE signed utility; blocking it breaks
genuine ITR filing.
3. Deploy the outbound TCP 6666 / 6351 firewall deny (playbook 4) — it
survives all infrastructure rotation.
4. Confirm validation gates G1 and G2 before trusting a zero-hit result.
FINDINGS: [ ] Hosts with Q3 or Q10 hits ........................... ____
[ ] Hosts with the MixedSvc service (Q4) ................ ____
[ ] Hosts reaching C2 (Q6 / Q7 / Q8) .................... ____
[ ] Multi-session hosts affected ....................... ____
[ ] Distinct user sessions injected (Q9) ................ ____
[ ] Lure domain and delivery URL captured ............... ____
GAPS: Stages 3, 4 and 6B are in-memory only — reflective loading, the AMSI patch
and in-memory CLR hosting produce no discrete sensor telemetry. Root-level
lock and kill files (c:\kkooPPP, c:\ouewo, c:\kkqqexit, c:\debug.txt) are
extension-less and generate no *FileWritten event; use native hunt 1.
Named kernel objects are live-host only and lost on reboot.
ACTIONS: [ ] Remove local admin rights from standard users (playbook 1 context)
[ ] Harden UAC elevation prompts (playbook 1)
[ ] Lock down the Windows Media Player directory (playbook 2)
[ ] Enable the two ASR rules in audit mode (playbook 3)
[ ] Deploy the C2 port egress block (playbook 4)
[ ] Sweep persistence on every suspect host (playbook 5)
[ ] Reset credentials for ALL users with a session on an affected host
[ ] Assess screen-capture exfiltration exposure
OWNER: ____________________
VERSION: v0.3 (2026-07-19)
Changelog
table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.Added from the newer build: the six-stage reverse-engineered chain, polyglot payload offsets, named kernel objects and host lock files; 10 SHA256 hashes for the individually-attributed stages (the v0.1 pack shipped Seqrite's sample set but none of the per-stage attributions); 5 additional C2 / lure domains (
ouewop[.]com, import[.]mom, tqhaq[.]rest, tqkat[.]rest, generate[.]lat, meoou[.]rest, kattp[.]homes); the C2 port pair 6666 / 6351; and 5 additional CQL queries (7 → 12), including the run-first Windows Media Player staging query.
Carried forward from v0.1 so nothing regressed: the 33 remaining Seqrite sample hashes (43 SHA256 total now ship, up from 10 in the newer build) and the C2 domains
1kkkkddd[.]com, simaqz[.]com and jiayingjing[.]com — all re-verified against the saved Seqrite snapshot. The v0.1 note that MixedRealityPortal.exe is the legitimate System32 binary is preserved as a benign-baseline discriminator in Q1 and Q10; it is deliberately not an atomic indicator.
Sources: Gurucul Threat Research added to the citation set and snapshotted, restoring the third original DragonReturn source. Eight sources now snapshotted.
References
| Tier | Source | Used for | Published | Accessed |
|---|---|---|---|---|
| 1 | Cyderes Howler Cell — The Tax Trap: From Fake Indian ITR Notice to Dual RAT Deployment in Six Stages | Six-stage chain, polyglot offsets, host artifacts, kernel objects, 10 SHA256, C2 ports, EDR methodology | 2026-07-07 | 2026-07-19 |
| 1 | Seqrite Labs — Operation DragonReturn | Attribution assessment, second infrastructure cluster, full ATT&CK table, campaign timeline, the 34-hash sample set and the jiayingjing[.]com / simaqz[.]com / 1kkkkddd[.]com C2 domains | 2026-06-26 | 2026-07-19 |
| 1 | Gurucul Threat Research — Operation DragonReturn: China-Nexus Campaign Targeting India's Tax Infrastructure via DcRAT | Independent corroboration of the multi-stage DcRAT / ValleyRAT deployment and the China-nexus assessment | 2026-06-29 | 2026-07-19 |
| 2 | The Hacker News — Suspected China-Nexus Hackers Use Fake Indian Tax Filing Utility to Deploy DcRAT | Links the Seqrite and Cyderes clusters; Silver Fox / ValleyRAT lineage framing | 2026-07-06 | 2026-07-19 |
| 2 | CSO Online — Cybercriminals exploit India's tax filing season with a dual-malware campaign | Independent corroboration of campaign scope | 2026-07 | 2026-07-19 |
| 2 | Cybersecurity News — Fake Indian ITR Notice Delivers Dual RAT Malware | Corroboration; source of the tqkat[.]rest lure domain | 2026-07 | 2026-07-19 |
| 2 | GBHackers — Indian Income Tax Department Phishing Lure Deploys Gh0st RAT and AsyncRAT Implants | Corroboration of the implant pairing | 2026-07 | 2026-07-19 |
| 2 | Cyberpress — Hackers Abuse Signed Windows Binary to Deliver Gh0st RAT and Quasar AsyncRAT Payloads | Corroboration of signed-binary abuse | 2026-07 | 2026-07-19 |
| Ref | MITRE ATT&CK | Technique and mitigation mapping | — | 2026-07-19 |
Provenance: the verbatim fetched text of all eight sources is saved alongside this pack in OperationDragonReturn-Hunt-sources/. Every atomic indicator in section 10 was verified to appear in that saved text by check_ioc_provenance.py before this pack was released.
Attribution caveat, restated: "China-nexus" and the Silver Fox overlap are an analytic assessment published by Seqrite at medium-to-high confidence, not a confirmed attribution. Anyone re-using this pack's language in customer or executive reporting should carry the caveat with it.