Back to Intelligence

ClickFix RAT MaaS, Kimsuky Gomir Variants & Mirage2FA AiTM Phishing: OTX Pulse Analysis — Enterprise Detection Pack

SA
Security Arsenal Team
August 19, 2026
10 min read

Three OTX pulses published 2026-08-19 collectively paint a picture of a maturing credential-theft and session-hijacking economy spanning commodity MaaS operators, nation-state actors, and phishing-as-a-service (PhaaS) vendors.

Pulse 1 — ClickFix → Modular Windows RAT (MaaS): A new ClickFix social-engineering campaign lures Windows users into executing malicious MSI installers (cloud-verificate.com/NodeServer-Setup-Full.msi) that drop a NodeJS-based modular RAT/infostealer associated with LegionLoader and LummaStealer ecosystems. The malware is deliberately forensic-light: core stealer modules and communication protocols are loaded in-memory only after C2 connection, minimizing on-disk artifacts. C2 runs gRPC streaming over Tor (port 50051 on a .onion service), with cryptocurrency theft as a primary objective. Decoy/lure domains include bull-run.fun and spot-wave.fun — cryptocurrency-themed bait.

Pulse 2 — Kimsuky Supply-Chain Intrusion (DPRK): North Korea-linked Kimsuky compromised South Korean groupware vendors between 2025 and early 2026 via vulnerability exploitation and spear-phishing, deploying two new Gomir/HttpTroy-family variants: BirdTroy (custom protocol C2 over HTTP/3 QUIC) and DriveTroy (abusing Google Drive as a C2 channel). Supporting tooling includes TrollStealer, GoBear, Endoor, and HttpSpy. Infrastructure piggybacks on legitimate remote-access service DWService (*.dwservice.net) and compromised vendor hostnames (commit.hanbiro.o-r.kr). This is a classic supply-chain pivot: compromise the software vendor, ride trust relationships into downstream enterprises.

Pulse 3 — Mirage2FA PhaaS (LinX Coders): An active adversary-in-the-middle phishing platform targeting Microsoft 365, with 4,000+ victims, 63.7% in the US, across Technology, Manufacturing, Education, Finance, Healthcare, and Telecom. Mirage2FA proxies real M365 authentication flows to steal credentials AND authenticated session cookies, defeating MFA. Delivery uses HTML smuggling; the kit communicates with backend panels over WebSockets. 75 indicators span dedicated phishing IPs (192.52.166.55, 181.214.165.173, 83.147.53.130, 209.205.197.130) and themed domains (sopbtech.store, pcvgtech.store, verpox.shop, galatasaraydanhaberler.com).

The connective tissue: all three operations target identity — harvested credentials, stolen session tokens, and cryptocurrency wallets — and all three deliberately hide C2 inside legitimate or encrypted channels (Tor, Google Drive, HTTP/3, WebSockets, AiTM proxies). Perimeter blocking alone will not catch these.

Threat Actor / Malware Profile

ClickFix Modular NodeJS RAT (Unknown actor — MaaS offering)

  • Distribution: ClickFix social engineering — fake CAPTCHA/verification pages instruct users to paste and run commands, delivering MSI installers (NodeServer-Setup-Full.msi).
  • Payload behavior: Modular architecture; the MSI drops a lightweight loader. Stealing modules and comms protocols are fetched dynamically and executed in-memory only after C2 check-in, leaving minimal disk artifacts.
  • C2 communication: gRPC streaming (port 50051) routed through the Tor network to yuhvgbzsa66biqeatbmdvfo5b5jjefcmz5t2vjuvco5qtdkshfpabyid.onion.
  • Persistence: MSI-based installation artifacts; loader staged to survive reboots while modules remain volatile.
  • Anti-analysis: In-memory module delivery, Tor-encrypted C2, dynamic capability loading to defeat static signature and sandbox detonation.

Kimsuky — BirdTroy / DriveTroy (Gomir/HttpTroy family)

  • Distribution: Vulnerability exploitation of South Korean groupware platforms + spear-phishing (supply-chain vector).
  • Payload behavior: BirdTroy implements custom protocol C2; DriveTroy exfiltrates and receives tasking via Google Drive API abuse. Supporting families (TrollStealer, GoBear, Endoor, HttpSpy) provide credential theft, backdoor, and recon capabilities.
  • C2 communication: HTTP/3 (QUIC/UDP 443) for BirdTroy — unusual enough to be a high-fidelity hunt pivot; legitimate Google Drive traffic for DriveTroy; DWService remote-access nodes (node828765.dwservice.net, node896147.dwservice.net) used as interactive access.
  • Persistence: Implants staged within compromised vendor software update/distribution paths.
  • Anti-analysis: Blending C2 into legitimate cloud SaaS traffic; living-off-trusted-infrastructure via compromised vendor hostnames.

Mirage2FA (LinX Coders — PhaaS)

  • Distribution: Phishing emails carrying HTML smuggling attachments that assemble M365-lookalike lure pages client-side, bypassing attachment scanning.
  • Payload behavior: Adversary-in-the-middle reverse proxy relays the real Microsoft login flow, capturing credentials, MFA responses, and the resulting session cookie/token in real time.
  • C2 communication: WebSocket channels between victim browser and operator backend for live session relay.
  • Persistence: Stolen session tokens replayed from attacker infrastructure — no endpoint persistence required, which is why identity-layer detection is mandatory.
  • Anti-analysis: Client-side HTML assembly, ephemeral themed phishing domains (.store, .shop TLDs), fast infrastructure rotation.

IOC Analysis

Indicator types in this set:

  • File hashes (SHA256/MD5): MSI installer and Kimsuky implant hashes — use for EDR blocklists and retro-hunts. Note: hash-only detection is fragile for the ClickFix RAT since modules are memory-resident; treat hashes as loader indicators only.
  • .onion domains/URLs: High-fidelity. Legitimate enterprise endpoints have virtually no reason to resolve Tor or connect outbound to gRPC on :50051. Block Tor at the egress and alert on any Tor process execution.
  • IPv4 (Mirage2FA): Dedicated phishing infrastructure — feed to firewall/proxy block and correlate against proxy logs for the last 90 days. PhaaS IPs are frequently re-used across lure domains.
  • Phishing hostnames (*.store, *.shop, office.* subdomains): The office.pcvgtech.store pattern — M365-themed subdomain on a junk TLD — is a reusable detection heuristic, not just a one-off IOC.
  • Legitimate-service hostnames (DWService, Google Drive): Cannot be blocked outright. Detect behaviorally: non-standard QUIC/UDP-443 flows, DWService execution on endpoints with no sanctioned remote-access policy, and anomalous Google Drive API token usage from endpoints.

Operationalization: Import all 112 indicators into your TI platform (MISP/OpenCTI) with TLP:WHITE handling; push network IOCs to proxy/DNS sinkhole; push hashes to EDR; build detection content (below) for the behavioral layer, because IOCs from PhaaS and MaaS rotate faster than blocklists update. Tools: ANY.RUN/VirusTotal for sample detonation, MISP for IOC correlation, SigmaHQ pipelines for rule conversion to your SIEM.

Detection Engineering

YAML
---
title: ClickFix MSI Execution via User-Pasted Command (mshta/powershell)
id: 7c3a1f2e-9b41-4d2a-a6c8-1e5f0a9b2c01
status: experimental
description: Detects ClickFix-style social engineering where users are tricked into running commands that fetch and execute MSI installers (NodeJS RAT delivery pattern).
author: Security Arsenal
date: 2026/08/19
logsource:
  category: process_creation
  product: windows
  service: sysmon
detection:
  selection_parent:
    ParentImage|endswith:
      - '\explorer.exe'
      - '\msedge.exe'
      - '\chrome.exe'
      - '\firefox.exe'
  selection_child:
    Image|endswith:
      - '\powershell.exe'
      - '\pwsh.exe'
      - '\cmd.exe'
      - '\mshta.exe'
      - '\wscript.exe'
  selection_cmd:
    CommandLine|contains:
      - 'msiexec'
      - '.msi'
      - 'Invoke-WebRequest'
      - 'iwr '
      - 'Start-BitsTransfer'
      - 'curl '
  condition: selection_parent and selection_child and selection_cmd
falsepositives:
  - Legitimate software deployment (SCCM/Intune) — filter on known management account contexts
level: high
tags:
  - attack.initial_access
  - attack.t1204
  - attack.t1105
  - attack.t1218
---
title: Outbound gRPC over Tor Port 50051 (Modular RAT C2)
id: 8d4b2g3f-0c52-5e3b-b7d9-2f6g1b0c3d02
status: experimental
description: Detects outbound connections to port 50051 (gRPC default) or Tor network processes, matching the ClickFix NodeJS RAT C2 channel.
author: Security Arsenal
date: 2026/08/19
logsource:
  category: network_connection
  product: windows
  service: sysmon
detection:
  selection_port:
    DestinationPort: 50051
  selection_tor_image:
    Image|endswith:
      - '\tor.exe'
      - '\tor\tor.exe'
      - '\obfs4proxy.exe'
  selection_tor_domain:
    DestinationHostname|contains: '.onion'
  condition: selection_port or selection_tor_image or selection_tor_domain
falsepositives:
  - Legitimate gRPC microservices (rare on endpoints; validate destination)
level: critical
tags:
  - attack.command_and_control
  - attack.t1573
  - attack.t1090
---
title: Non-Browser QUIC HTTP/3 C2 or Cloud Storage API Abuse (BirdTroy / DriveTroy)
id: 9e5c3h4g-1d63-6f4c-c8e0-3g7h2c1d4e03
status: experimental
description: Detects UDP/443 (QUIC) connections from non-browser processes or unexpected Google Drive API access, matching Kimsuky BirdTroy HTTP/3 C2 and DriveTroy Google Drive C2 patterns.
author: Security Arsenal
date: 2026/08/19
logsource:
  category: network_connection
  product: windows
  service: sysmon
detection:
  selection_quic:
    DestinationPort: 443
    Protocol: 'udp'
  filter_browsers:
    Image|endswith:
      - '\chrome.exe'
      - '\msedge.exe'
      - '\firefox.exe'
      - '\brave.exe'
  selection_gdrive:
    DestinationHostname|contains:
      - 'googleapis.com'
      - 'drive.google.com'
  selection_unusual_proc:
    Image|endswith:
      - '\powershell.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\rundll32.exe'
      - '\regsvr32.exe'
      - '\mshta.exe'
  condition: (selection_quic and not filter_browsers) or (selection_gdrive and selection_unusual_proc)
falsepositives:
  - Chrome-based Electron apps using QUIC; scheduled backup tools using Drive API — tune per environment
level: high
tags:
  - attack.command_and_control
  - attack.t1071
  - attack.t1102
  - attack.t1567
KQL — Microsoft Sentinel / Defender
// Mirage2FA AiTM phishing + ClickFix RAT + Kimsuky C2 hunt (Microsoft Sentinel / Defender)
let phishingIPs = dynamic(["192.52.166.55","209.205.197.130","181.214.165.173","83.147.53.130"]);
let phishingDomains = dynamic(["galatasaraydanhaberler.com","sopbtech.store","pcvgtech.store","verpox.shop","bull-run.fun","spot-wave.fun","cloud-verificate.com"]);
let kimsukyHosts = dynamic(["commit.hanbiro.o-r.kr","node828765.dwservice.net","node896147.dwservice.net","dwservice.net"]);
let NetHits = DeviceNetworkEvents
| where TimeGenerated > ago(30d)
| where RemoteIP in (phishingIPs)
   or RemoteUrl has_any (phishingDomains)
   or RemoteUrl has_any (kimsukyHosts)
   or (RemotePort == 50051)
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteIP, RemoteUrl, RemotePort;
let ClickFixProc = DeviceProcessEvents
| where TimeGenerated > ago(30d)
| where (FileName in~ ("powershell.exe","cmd.exe","mshta.exe","wscript.exe"))
  and (ProcessCommandLine has_any (".msi","msiexec","Invoke-WebRequest","iwr ","Start-BitsTransfer"))
  and InitiatingProcessFileName in~ ("explorer.exe","msedge.exe","chrome.exe","firefox.exe")
| project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine;
let QUICC2 = DeviceNetworkEvents
| where TimeGenerated > ago(30d)
| where RemotePort == 443 and Protocol == "Udp"
| where InitiatingProcessFileName !in~ ("chrome.exe","msedge.exe","firefox.exe","brave.exe","ms-teams.exe")
| project TimeGenerated, DeviceName, InitiatingProcessFileName, RemoteIP, RemoteUrl;
union NetHits, ClickFixProc, QUICC2
| sort by TimeGenerated desc
PowerShell
# Security Arsenal — IOC Hunt: ClickFix RAT / Kimsuky / Mirage2FA artifacts
# Run elevated on suspect endpoints. Outputs JSON to $env:TEMP\sa_ioc_hunt.json
$report = [ordered]@{ Host=$env:COMPUTERNAME; Timestamp=(Get-Date -Format o); Findings=@() }

# 1) ClickFix RAT — suspicious MSI installs & NodeServer payload remnants
$msiEvents = Get-WinEvent -FilterHashtable @{LogName='Application'; Id=1033,1034,11707} -MaxEvents 200 -ErrorAction SilentlyContinue |
  Where-Object { $_.Message -match 'NodeServer|cloud-verificate|Setup-Full' }
if ($msiEvents) { $report.Findings += @{Type='MSI_Install'; Detail=($msiEvents | Select-Object TimeCreated,Message | ConvertTo-Json -Compress)} }

# 2) NodeJS RAT loader — rogue node.exe outside sanctioned paths
$nodeProcs = Get-CimInstance Win32_Process -Filter "Name='node.exe'" -ErrorAction SilentlyContinue |
  Where-Object { $_.ExecutablePath -notmatch 'Program Files|nodejs|nvm|AppData\\Local\\Programs' }
if ($nodeProcs) { $report.Findings += @{Type='Rogue_NodeJS'; Detail=($nodeProcs | Select-Object ProcessId,ExecutablePath,CommandLine | ConvertTo-Json -Compress)} }

# 3) Tor / gRPC C2 — active or recent connections to :50051 or Tor processes
$grpcConns = Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue | Where-Object { $_.RemotePort -eq 50051 }
if ($grpcConns) { $report.Findings += @{Type='gRPC_C2_50051'; Detail=($grpcConns | ConvertTo-Json -Compress)} }
$torProc = Get-CimInstance Win32_Process -ErrorAction SilentlyContinue | Where-Object { $_.Name -match 'tor.exe|obfs4proxy' }
if ($torProc) { $report.Findings += @{Type='Tor_Process'; Detail=($torProc | Select-Object ProcessId,ExecutablePath | ConvertTo-Json -Compress)} }

# 4) Persistence — Run keys & scheduled tasks referencing MSI/node/temp paths
$runKeys = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
foreach ($k in $runKeys) {
  Get-ItemProperty -Path $k -ErrorAction SilentlyContinue | ForEach-Object {
    $_.PSObject.Properties | Where-Object { $_.Value -match 'node|\.msi|AppData\\Local\\Temp|cloud-verificate' } |
      ForEach-Object { $report.Findings += @{Type='RunKey_Persistence'; Key=$k; Name=$_.Name; Value=$_.Value} }
  }
}
Get-ScheduledTask -ErrorAction SilentlyContinue | Where-Object {
  ($_.Actions.Execute -match 'node.exe|powershell|mshta') -and ($_.TaskPath -notmatch 'Microsoft')
} | ForEach-Object { $report.Findings += @{Type='Suspicious_ScheduledTask'; Task=$_.TaskName; Action=$_.Actions.Execute} }

# 5) Kimsuky — DWService remote access & BirdTroy hash presence
if (Test-Path "$env:ProgramFiles\DWService","$env:LOCALAPPDATA\DWService" -ErrorAction SilentlyContinue) {
  $report.Findings += @{Type='DWService_Install'; Detail='Unauthorized remote access tooling present (Kimsuky TTP)'}
}
$hashes = '84e9b066bebd49036b7fc71b5f5f8d83','a452a860f973c7a43ea804c17e9427d2','aa61e76255a6e13313439655bc02bdf5','b1c72139f2cdd9419562369fc6ced4fc'
Get-ChildItem -Path "$env:TEMP","$env:LOCALAPPDATA\Temp","$env:ProgramData" -Recurse -File -ErrorAction SilentlyContinue -Depth 3 |
  ForEach-Object { $h=(Get-FileHash $_.FullName -Algorithm MD5 -ErrorAction SilentlyContinue).Hash
    if ($hashes -contains $h.ToLower()) { $report.Findings += @{Type='Kimsuky_Implant_Hash'; Path=$_.FullName; MD5=$h} } }

# 6) Mirage2FA — HTML smuggling lure files in Downloads
Get-ChildItem "$env:USERPROFILE\Downloads" -Filter *.html -ErrorAction SilentlyContinue |
  Where-Object { (Get-Content $_.FullName -Raw -ErrorAction SilentlyContinue) -match 'atob\(|Blob\(|login\.microsoftonline|msauth' } |
  ForEach-Object { $report.Findings += @{Type='HTML_Smuggling_Lure'; Path=$_.FullName; LastWrite=$_.LastWriteTime} }

$report | ConvertTo-Json -Depth 5 | Out-File "$env:TEMP\sa_ioc_hunt.json" -Encoding utf8
Write-Host "[+] Hunt complete. $($report.Findings.Count) finding groups -> $env:TEMP\sa_ioc_hunt.json"

Response Priorities

Immediate (0–4h):

  • Block all Mirage2FA IPs and domains at proxy/DNS; sinkhole .store/.shop M365-themed hostnames matching the office.* / ver.* subdomain pattern.
  • Block outbound TCP/UDP 50051 and Tor egress at the perimeter; alert on any tor.exe/node.exe execution outside sanctioned paths.
  • Push the ClickFix MSI SHA256 and Kimsuky MD5s to EDR blocklists; run the PowerShell hunt across endpoints that browsed lure domains in the last 30 days.

24h (identity response — this is credential/session theft):

  • Any user whose browser touched Mirage2FA infrastructure: revoke all M365 sessions and refresh tokens, force password reset, re-register MFA. Session-token theft means password reset alone is insufficient — use Revoke-MgUserSignInSession / Conditional Access token revocation.
  • Hunt sign-in logs for impossible-travel and token-replay anomalies (sign-ins from Mirage2FA IP ranges or new ASN geographies post-phish).
  • For Kimsuky-exposed organizations (Korean groupware customers): audit DWService/remote-access presence and Google Drive OAuth grants on endpoints.

1 week (architecture hardening):

  • Deploy phishing-resistant MFA (FIDO2/passkeys) — the only durable control against AiTM kits like Mirage2FA; enforce token-binding Conditional Access policies where possible.
  • Restrict MSI execution to management tooling (AppLocker/WDAC); block user-context msiexec from browser-spawned shells (ClickFix kill chain).
  • Egress filtering: deny UDP/443 (QUIC) from non-browser processes where feasible, restrict cloud-storage API access to sanctioned apps, and alert on unsanctioned remote-access tools (DWService, AnyDesk et al.).
  • South Korean / APAC supply-chain exposure: demand vendor SBOM and incident attestations from groupware providers; monitor vendor-domain trust relationships.

Related Resources

Security Arsenal Incident Response Managed SOC & MDR Services AlertMonitor Threat Detection From The Dark Side Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.