STOCKSTAY — Turla / Secret Blizzard Multi-Component .NET Backdoor

Russia-nexus espionage implant against Ukrainian government/military and European foreign-policy targets · disclosed by Google Threat Intelligence Group (GTIG), June 2026
Threat
STOCKSTAY (Turla)
Severity
ACTIVE APT
Type
Nation-state backdoor / C2
Access
Spearphish → user execution
Version
v0.1 · 2026-06-29
Author
HuntPack
Confidence
High (vendor-attributed)
01

Executive Summary

STOCKSTAY is a multi-component .NET (Windows Forms) backdoor developed and operated by Turla (aka SUMMIT, Secret Blizzard, VENOMOUS BEAR, UAC-0194) — a Russia-nexus (FSB-linked) espionage actor. Google Threat Intelligence Group (GTIG) published an in-depth analysis in June 2026 showing continuous development and deployment of STOCKSTAY since at least December 2022, primarily against Ukrainian government and military organizations and European entities with an interest in Italian / EU foreign policy.

The implant splits into four roles — an orchestrator (STOCKMARKET), a proxy-aware WebSocket tunneler (STOCKBROKER), a command executor (STOCKTRADER), and a downloader/installer (MARKETMAKER) — that communicate over IPC (WM_COPYDATA) and talk to C2 over secure WebSocket (wss://) using the open-source websocket-sharp library, often relayed through free-tier PaaS (.onrender.com, .glitch.me) and compromised WordPress sites. STOCKSTAY shares code, multi-component design, and environmental-keying with Turla's KAZUAR toolkit, indicating a common development team.

Delivery is by spearphishing: malicious .rdp attachments, RAR archives exploiting WinRAR CVE-2025-8088 (path traversal that drops autostart payloads), masqueraded MSI installers, and Ukrainian-language HTA decoys that rename a .dat file to .dat.exe. Persistence is a CurrentVersion\Run autorun written by MARKETMAKER, with components installed under %LOCALAPPDATA%\Programs\SMN\.

Defender priority: The highest-value, lowest-FP angles are the campaign-specific masquerade binary names (StockMarket*/MS{Viewer,Driver,Render}/MicrosoftUpdateOneDrive), the CurrentVersion\Run + Programs\SMN persistence pair, the GTIG-published file hashes, and DNS/WebSocket beacons to the five known C2 hosts. Patch WinRAR to ≥ 7.13 and strip .rdp/HTA at the mail gateway to cut the delivery chain off at the front.

02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry Fwd
1 · VendorGoogle Threat Intelligence Group (GTIG) — "The Latest Addition to Turla's Intelligence Gathering Apparatus"Primary technical analysis: 4-component architecture, WebSocket C2, full IOC set (hashes, C2 URLs, filenames), KAZUAR overlap, YARA rulesyes
1 · VendorMandiant (incident response, referenced by GTIG)STOCKSTAY deployed alongside KAZUAR, WILDDAY, DIAMONDBACK via malicious GPO in Ukraine intrusionsyes
2 · PressThe Hacker News / The Record / SC MediaCorroborate targeting of Ukraine + Italian foreign-policy interests; CVE-2025-8088 WinRAR delivery in Nov 2025 wavespartial
2 · PressCyberPress / Help Net SecurityConfirm websocket-sharp, multi-component design, December 2022 first artifactpartial

Atomic IOCs (hashes, C2 hosts, filenames) below trace to the GTIG report's published indicator set. Treat WebSocket C2 hosts as perishable (free-tier PaaS rotates); the masquerade filenames, install path, and Run-key behavior are durable across waves.

03

Hunt Brief & Attack Chain

Hunt hypotheses (fidelity-ordered)

  1. H1 (high): A STOCKSTAY component runs under one of its campaign-specific masquerade names (StockMarket*, MS{Viewer,Driver,Render}, MicrosoftUpdateOneDrive, ClientMNGR). Covers T1036.005.
  2. H2 (high): MARKETMAKER wrote a CurrentVersion\Run value pointing at a component or Programs\SMN. Covers T1547.001.
  3. H3 (high): A file matching a GTIG-published STOCKSTAY hash executed or was written. Atomic.
  4. H4 (high): A host resolved one of the five known STOCKSTAY WebSocket C2 hosts. Covers T1071.001.
  5. H5 (medium): A process executes from %LOCALAPPDATA%\Programs\SMN\. Install-path tell.
  6. H6 (medium): WinRAR/archive extraction (CVE-2025-8088) dropped a payload into Startup or Programs\SMN. Covers T1203 + T1547.001.
  7. H7 (medium): mstsc launched from a mail/Downloads .rdp attachment. Covers T1566.001 + T1021.001.
  8. H8 (medium): mshta executed an HTA decoy that spawned a renamed .dat.exe. Covers T1218.005.

Attack chain

StepBehaviorTelemetryHunt Angle
1 · DeliverySpearphish: malicious .rdp / WinRAR RAR (CVE-2025-8088) / MSI / HTA decoyProcessRollup2, FileCreateInfoQ6, Q7, Q8
2 · ExecutionUser opens lure; MARKETMAKER downloader runs (masq. MicrosoftUpdateOneDrive)ProcessRollup2Q1, Q9
3 · PersistenceRun-key autorun to component / Programs\SMNAsepValueUpdate / RegGenericValueUpdateQ2
4 · InstallComponents dropped to %LOCALAPPDATA%\Programs\SMNPeFileWritten, ProcessRollup2Q3, Q9
5 · C2STOCKBROKER opens wss:// to PaaS/compromised host, RSA-4096 + base64 JSONDnsRequest, NetworkConnectIP4Q4, Q5
6 · ActionsSTOCKTRADER: Sysinfo (WMI), Image (screenshot), Get/Put, Run, registry opsProcessRollup2, RegGenericValueUpdateQ1, native hunts
04

Consolidated IOC Table

All values published by GTIG. WebSocket C2 hosts are perishable; hashes and filenames are durable. Validate against your own retention window before bulk-blocking.

TypeValueConfActionContext
domaincanal1zac1a.onrender.comhighdetectwss:// C2 (May–Aug 2025)
domaingoogle-ai-labs-it.onrender.comhighdetectwss:// C2 (Aug–Nov 2025)
domaindriverx86-adobe.onrender.comhighdetectwss:// C2 (Nov 2025, drone lure)
domainweatherdataai.theworkpc.comhighdetectwss:// C2 (Mar–Apr 2025)
domainwool-basalt-clock.glitch.mehighdetectwss:// C2 (Jan–Feb 2024)
sha25682707cfdf24dcb762f4615f01e1ba4d3dfdec4abe9cd588558d2634d7e6a5eebhighdetectStockMarketView.exe (STOCKMARKET)
sha25634fcbe7e90fc87a4f3766469c19a64f24672d7adb99e0198f5ba10d58911368bhighdetectStockMarketNet.exe (STOCKBROKER)
sha2560a545dd1b703cddfb3d582c8c70f65f556bbd580bfa836a387121eb837bda61bhighdetectStockMarketSystem.exe (STOCKTRADER)
sha256da8a96bc74e265f945f1cc6992c6dc0f9ea36ed1991f7b8d312db79d9bf78c40highdetectMicrosoftUpdateOneDrive.exe (MARKETMAKER)
sha256d1e54270433a94aa3d45d888e4c62299bee3480eb2cb4a5489c7dda69d476c3ehighhuntwebsocket-sharp.dll (shared lib — pivot)
filenameMicrosoftUpdateOneDrive.exe / StockMarket*.exe / MS{Viewer,Driver,Render}.exe / ClientMNGR.exehighhuntmasquerade component names
path%LOCALAPPDATA%\Programs\SMN\highhuntinstall directory
regkey...\CurrentVersion\Run → component / Programs\SMNhighhuntMARKETMAKER persistence
cveCVE-2025-8088 (WinRAR path traversal)highdetectdelivery vector (Nov 2025 waves)
05

Affected Surface & Telemetry Matrix

SurfaceRequired TelemetryPriorityGap Risk
Windows endpoints (workstations, .NET present)ProcessRollup2 / SyntheticProcessRollup2CriticalLow — default Falcon coverage
Registry autorunAsepValueUpdate / RegGenericValueUpdateCriticalLow
DNS / egressDnsRequest, NetworkConnectIP4HighMed — wss may resolve via system resolver only
File writes (install / Startup)PeFileWritten / FileCreateInfoMedLow
Mail gateway (delivery)Attachment / URL logs (.rdp, .rar, .hta, .msi)MedHigh — not in Falcon EDR; needs mail telemetry
06

ATT&CK Mapping

TacticTechniqueObserved BehaviorCoverage
Initial AccessT1566.001 Spearphishing Attachment.rdp / RAR / MSI / HTA luresQ6, Q7, Q8
ExecutionT1204.002 User Execution: Malicious FileOpening lure attachmentQ6, Q7, Q8
ExecutionT1203 Exploitation for Client ExecutionWinRAR CVE-2025-8088 path traversalQ6
ExecutionT1218.005 MshtaHTA decoy → renamed .dat.exeQ8
PersistenceT1547.001 Registry Run KeysMARKETMAKER autorunQ2
Defense EvasionT1036.005 Masquerading: Match Legit NameMicrosoftUpdateOneDrive / StockMarket* namesQ1, Q9
Defense EvasionT1140 / T1027 Deobfuscation / ObfuscationK1MORPHER (Squirrel3) string obfuscationNative hunts / YARA
DiscoveryT1082 System Information DiscoverySysinfo via WMINative hunts
CollectionT1113 Screen CaptureImage commandNative hunts
CollectionT1005 Data from Local SystemGet command (base64 ZIP)Native hunts
Command & ControlT1071.001 Web Protocols (WebSocket)wss:// to PaaS / compromised hostsQ4, Q5
Command & ControlT1102 Web ServiceRender / Glitch / GitHub relayQ5
07

Native Audit-Log Hunts (non-CQL)

  • Mail gateway: Search the last 90 days for inbound attachments with extensions .rdp, .hta, and .rar containing .lnk/.exe — especially Ukrainian/Italian-language filenames or "calculator"/"diplomacy"/"UAV" themes.
  • WinRAR version inventory: Audit deployed WinRAR builds; anything < 7.13 is exposed to CVE-2025-8088. (See playbook P1.)
  • Sysmon (where deployed): Event ID 11 file-creates of *.dat.exe, and Event ID 13 Run-key writes referencing Programs\SMN.
  • Proxy / NGFW: Review WebSocket (Upgrade: websocket) sessions to *.onrender.com, *.glitch.me, and recently-registered or low-reputation domains on URI path /ws.
  • YARA: Run GTIG's published rules (G_Backdoor_STOCKSTAY_*, G_Hunting_K1MORPHER_*) against endpoint file collections / VT retrohunt.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · STOCKSTAY masquerade component binaries
CONF HIGHFP LOWCOST LOW

Looks for: any process running under a STOCKSTAY masquerade name across all four roles. Campaign-specific names → very low FP.

// HUNT: STOCKSTAY multi-component masquerade binaries
// MITRE: T1036.005, T1071.001
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: none expected — names are campaign-specific masquerades
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^(StockMarket(View|Net|System|News)|SMNet|SMEditor|ClientMNGR2?|ConverterDDSNet|MS(Viewer|Driver|Render)|MicrosoftUpdateOneDrive)\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, FileName, FilePath, CommandLine, ParentBaseFileName, SHA256HashData], limit=200)
Q2 · Run-key persistence (MARKETMAKER autorun)
CONF HIGHFP LOWCOST LOW

Looks for: a CurrentVersion\Run value whose data references a STOCKSTAY component or the Programs\SMN install dir.

// HUNT: STOCKSTAY Registry Run-key persistence
// MITRE: T1547.001
// CONF: high  FP: low  COST: low | REQUIRES: AsepValueUpdate / RegGenericValueUpdate
#event_simpleName=/AsepValueUpdate|RegGenericValueUpdate/
| RegObjectName=/\\CurrentVersion\\Run$/i
| RegStringValue=/(StockMarket(View|Net|System)|SMNet|SMEditor|MS(Viewer|Driver|Render)|Programs\\SMN)/i
| table([@timestamp, aid, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue], limit=200)
Q3 · GTIG-published known-bad hashes
CONF HIGHFP LOWCOST LOW

Looks for: execution or write of any GTIG-listed STOCKSTAY core-component hash. Atomic — promote straight to a Custom IOC block (see §10).

// HUNT: STOCKSTAY known-bad file hashes (GTIG)
// MITRE: T1071.001
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2 / PeFileWritten
#event_simpleName=/ProcessRollup2|PeFileWritten|NewExecutableWritten/
| in(SHA256HashData, values=["82707cfdf24dcb762f4615f01e1ba4d3dfdec4abe9cd588558d2634d7e6a5eeb", "34fcbe7e90fc87a4f3766469c19a64f24672d7adb99e0198f5ba10d58911368b", "0a545dd1b703cddfb3d582c8c70f65f556bbd580bfa836a387121eb837bda61b", "da8a96bc74e265f945f1cc6992c6dc0f9ea36ed1991f7b8d312db79d9bf78c40", "1fc23ec18a94a599a34c74ef5f49a1e27acd37a07d5846661702b5e7e81a6a24", "d1e54270433a94aa3d45d888e4c62299bee3480eb2cb4a5489c7dda69d476c3e"])
| table([@timestamp, aid, ComputerName, UserName, FileName, FilePath, SHA256HashData], limit=max)
Q4 · Known STOCKSTAY C2 DNS resolution
CONF HIGHFP LOWCOST LOW

Looks for: a host resolving one of the five GTIG-published WebSocket C2 domains. Perishable but high-fidelity while live.

// HUNT: STOCKSTAY WebSocket C2 domains
// MITRE: T1071.001, T1102
// CONF: high  FP: low  COST: low | REQUIRES: DnsRequest
#event_simpleName=DnsRequest
| DomainName=/^(wool-basalt-clock\.glitch\.me|weatherdataai\.theworkpc\.com|canal1zac1a\.onrender\.com|google-ai-labs-it\.onrender\.com|driverx86-adobe\.onrender\.com)$/i
| table([@timestamp, aid, ComputerName, DomainName, ContextBaseFileName], limit=200)
Q5 · WebSocket beacon to free-tier PaaS C2 (behavioral)
CONF MEDFP MEDCOST MED

Looks for: DNS to the PaaS families Turla relays through, when initiated by a .NET/non-browser process. FP: legitimate apps host on Render/Glitch — pair with an unusual parent (not a browser) and exclude sanctioned developer hosts.

// HUNT: Outbound WebSocket beacon to free-tier PaaS C2 hosts
// MITRE: T1071.001, T1102
// CONF: medium  FP: medium  COST: medium | REQUIRES: DnsRequest
// FALSE POSITIVES: legit apps querying *.onrender.com / *.glitch.me
// TUNING: exclude known-good dev hosts; pivot on non-browser parent process
#event_simpleName=DnsRequest
| DomainName=/(\.onrender\.com|\.glitch\.me|\.theworkpc\.com)$/i
| ContextBaseFileName!=/^(chrome|msedge|firefox|brave|opera)\.exe$/i
| table([@timestamp, aid, ComputerName, DomainName, ContextBaseFileName], limit=200)
Q6 · WinRAR extraction (CVE-2025-8088) → autostart drop
CONF MEDFP MEDCOST MED

Looks for: an archive tool writing into the Startup folder or Programs\SMN — the CVE-2025-8088 path-traversal behavior. FP: legitimate self-extracting installers occasionally write to user dirs — scope to Startup / SMN only and review the dropped file.

// HUNT: WinRAR extraction (CVE-2025-8088) dropping autostart payloads
// MITRE: T1203, T1547.001, T1574
// CONF: medium  FP: medium  COST: medium | REQUIRES: FileCreateInfo / PeFileWritten
// FALSE POSITIVES: legitimate archive extraction into the user profile
// TUNING: scope to writes into Startup or %LOCALAPPDATA%\Programs\SMN
#event_simpleName=/PeFileWritten/
| ParentBaseFileName=/^(WinRAR|Rar|7zFM|explorer)\.exe$/i
| TargetFileName=/(\\Start Menu\\Programs\\Startup\\|Programs\\SMN\\)/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, TargetFileName], limit=200)
Q7 · mstsc launched from an emailed .rdp attachment
CONF MEDFP MEDCOST LOW

Looks for: Remote Desktop client spawned with a .rdp argument by a mail/browser parent — Turla's RDP-file spearphish. FP: admins double-click saved .rdp profiles — exclude IT jump-host parents and known internal .rdp files.

// HUNT: mstsc launched from an emailed/temp .rdp (spearphish delivery)
// MITRE: T1566.001, T1021.001, T1204.002
// CONF: medium  FP: medium  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: admins opening saved .rdp files
// TUNING: scope to .rdp launched from a mail client, browser, or Downloads
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^mstsc\.exe$/i
| CommandLine=/\.rdp/i
| ParentBaseFileName=/^(outlook|olk|chrome|msedge|firefox|explorer)\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, CommandLine, ParentBaseFileName], limit=200)
Q8 · mshta HTA decoy → renamed .dat.exe
CONF MEDFP LOWCOST LOW

Looks for: mshta spawning a child executable named *.dat.exe — the STOCKSTAY HTA-decoy rename trick.

// HUNT: mshta executing HTA decoy then a renamed .dat.exe payload
// MITRE: T1566.001, T1218.005, T1036
// CONF: medium  FP: low  COST: low | REQUIRES: ProcessRollup2
// TUNING: exclude sanctioned internal HTA tooling
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^mshta\.exe$/i
| FileName=/\.dat\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, FileName, CommandLine, ParentBaseFileName], limit=200)
Q9 · Process executing from the SMN install dir
CONF HIGHFP LOWCOST LOW

Looks for: any binary running from %LOCALAPPDATA%\Programs\SMN\ — the STOCKSTAY install path. Distinctive folder → very low FP.

// HUNT: Any process executing from the STOCKSTAY install dir (Programs\SMN)
// MITRE: T1036, T1071.001
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FilePath=/Programs\\SMN\\/i
| table([@timestamp, aid, ComputerName, UserName, FileName, FilePath, CommandLine, SHA256HashData], limit=200)
09

CrowdStrike Custom IOA Recommendations

IOA NamePatternActionExclusions
STOCKSTAY — SMN Install-Dir ExecutionProcess image path matches \Programs\SMN\ (Q9)Detect → Block (after baseline)None expected — campaign-specific path
STOCKSTAY — Masquerade BinaryFileName in the Q1 set executing from a user-writable pathDetect (high)None — names are campaign-specific
STOCKSTAY — Run-Key to SMN/componentRun-key write whose data matches Q2 regexDetectNone expected
RDP-File Spearphishmstsc.exe child of mail/browser with .rdp cmdline (Q7)Detect (medium)IT jump-host launchers; sanctioned saved .rdp

Promotion path: validate the high-CONF/low-FP queries (Q1, Q2, Q9) against 7–14 days of baseline, confirm zero benign hits, then promote to Custom IOAs in detect mode; escalate Q9/Q1 to block once clean. Q3 hashes → Custom IOC Management (block).

10

Machine-Readable IOC Appendix

One-click blocks for SOC tooling. Hashes and C2 hosts are GTIG-published; swap expirations to fit your policy.

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
sha256,82707cfdf24dcb762f4615f01e1ba4d3dfdec4abe9cd588558d2634d7e6a5eeb,prevent,critical,2026-12-29,STOCKSTAY STOCKMARKET,campaign:STOCKSTAY;actor:Turla
sha256,34fcbe7e90fc87a4f3766469c19a64f24672d7adb99e0198f5ba10d58911368b,prevent,critical,2026-12-29,STOCKSTAY STOCKBROKER,campaign:STOCKSTAY;actor:Turla
sha256,0a545dd1b703cddfb3d582c8c70f65f556bbd580bfa836a387121eb837bda61b,prevent,critical,2026-12-29,STOCKSTAY STOCKTRADER,campaign:STOCKSTAY;actor:Turla
sha256,da8a96bc74e265f945f1cc6992c6dc0f9ea36ed1991f7b8d312db79d9bf78c40,prevent,critical,2026-12-29,STOCKSTAY MARKETMAKER,campaign:STOCKSTAY;actor:Turla
sha256,1fc23ec18a94a599a34c74ef5f49a1e27acd37a07d5846661702b5e7e81a6a24,prevent,critical,2026-12-29,STOCKSTAY combined,campaign:STOCKSTAY;actor:Turla
domain,canal1zac1a.onrender.com,detect,high,2026-09-29,STOCKSTAY wss C2,campaign:STOCKSTAY;actor:Turla
domain,google-ai-labs-it.onrender.com,detect,high,2026-09-29,STOCKSTAY wss C2,campaign:STOCKSTAY;actor:Turla
domain,driverx86-adobe.onrender.com,detect,high,2026-09-29,STOCKSTAY wss C2,campaign:STOCKSTAY;actor:Turla
domain,weatherdataai.theworkpc.com,detect,high,2026-09-29,STOCKSTAY wss C2,campaign:STOCKSTAY;actor:Turla
domain,wool-basalt-clock.glitch.me,detect,high,2026-09-29,STOCKSTAY wss C2,campaign:STOCKSTAY;actor:Turla
Behavioral Signatureshunt logic
[ STOCKSTAY behaviors ]
- Process image path under %LOCALAPPDATA%\Programs\SMN\
- Binary named StockMarket{View,Net,System,News}.exe / SMNet.exe / SMEditor.exe
- Binary named MS{Viewer,Driver,Render}.exe / ClientMNGR{,2}.exe / ConverterDDSNet.exe
- Downloader masquerading as MicrosoftUpdateOneDrive.exe
- CurrentVersion\Run value referencing a component or Programs\SMN
- wss:// to *.onrender.com / *.glitch.me on URI path /ws
- mshta.exe -> *.dat.exe child
- mstsc.exe (.rdp arg) child of outlook/olk/browser
Named Malware / Toolingattribution
Actor:   Turla (SUMMIT / Secret Blizzard / VENOMOUS BEAR / UAC-0194)
Implant: STOCKSTAY (.NET / Windows Forms, websocket-sharp wss:// C2)
Roles:   STOCKMARKET (orchestrator), STOCKBROKER (tunneler),
         STOCKTRADER (executor), MARKETMAKER (downloader)
Related: KAZUAR, WILDDAY, DIAMONDBACK (co-deployed Turla tooling)
Obfusc.: K1MORPHER (K1.Morpher, Squirrel3 PRNG strings)
Lib:     websocket-sharp.dll
         d1e54270433a94aa3d45d888e4c62299bee3480eb2cb4a5489c7dda69d476c3e
Patch / Mail / Egress Auditprevent checklist
[ ] WinRAR >= 7.13 fleet-wide (CVE-2025-8088 fixed)
[ ] Mail gateway strips/quarantines .rdp and .hta attachments
[ ] Mail gateway inspects .rar for bundled .lnk/.exe
[ ] Proxy denies wss to *.onrender.com / *.glitch.me (or alert)
[ ] ASR: block executable content from email/webmail (enforce)
[ ] WDAC/AppLocker blocks unsigned EXEs in %LOCALAPPDATA%\Programs
[ ] mshta.exe execution blocked or alerted (rarely needed)
11

Detection Validation Gates

  • Telemetry ready: Confirm ProcessRollup2, AsepValueUpdate/RegGenericValueUpdate, DnsRequest, and PeFileWritten are flowing from in-scope Windows hosts.
  • Benign baseline: Run Q5 (PaaS WebSocket) and Q6/Q7 (delivery) over 7–14 days; record benign developer hosts and saved-.rdp admin workflows for tuning before alerting.
  • Positive test: In a lab, create a Run-key referencing a file in a Programs\SMN folder and resolve a benign name on *.onrender.com — confirm Q2 and Q5 fire.
  • Promotion: Only promote Q1/Q2/Q9 to detect/block after zero benign hits across the baseline window.
12

Hardening — Tiered & Deployable

Immediate (this week — low risk)
  • Patch WinRAR to ≥ 7.13 to close CVE-2025-8088, the active delivery vector. (MITRE M1051 Update Software.)
  • Strip/quarantine .rdp and .hta attachments at the mail gateway; inspect .rar for bundled .lnk/.exe. (M1021 Restrict Web-Based Content.)
  • Enable ASR rule "Block executable content from email client and webmail" in enforce mode. (M1042 Disable or Remove Feature.)
Near term (1–4 weeks — pilot first)
  • WDAC/AppLocker: block execution of unsigned binaries under %LOCALAPPDATA%\Programs and per-user paths. (M1038 Execution Prevention.)
  • Egress control: deny or alert on WebSocket upgrades to *.onrender.com / *.glitch.me at the proxy/NGFW. (M1037 Filter Network Traffic.)
  • Audit/alert Run-key writes referencing user-writable paths. (M1028 / M1047 Audit.)
  • Block or constrain mshta.exe via WDAC where no business use exists. (M1042.)
Strategic (1–3 months — architectural)
  • Attachment detonation/sandboxing for high-risk roles (gov/military/foreign-policy staff). (M1049 / M1021.)
  • Phishing-resistant user training + reporting focused on RDP-file and "device code"/HTA lures. (M1017 User Training.)
  • Network segmentation isolating sensitive endpoints with strict egress allow-listing. (M1030 Network Segmentation.)
13

Deployable Playbooks

P1 · Inventory WinRAR versions (flag < 7.13)

Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' |
  Get-ItemProperty | Where-Object { $_.DisplayName -like 'WinRAR*' } |
  Select-Object DisplayName, DisplayVersion |
  ForEach-Object {
    $vuln = $false
    if ([version]($_.DisplayVersion) -lt [version]'7.13') { $vuln = $true }
    [pscustomobject]@{ Name=$_.DisplayName; Version=$_.DisplayVersion; Vulnerable=$vuln }
  }

P2 · Audit Run-key persistence referencing user paths / SMN

$paths = @(
  'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
  'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
)
foreach ($p in $paths) {
  if (Test-Path $p) {
    (Get-ItemProperty $p).PSObject.Properties |
      Where-Object { $_.Value -match 'Programs\\SMN|StockMarket|SMNet|MSViewer|MSDriver|MSRender' } |
      Select-Object Name, Value
  }
}

P3 · ASR — block executable content from email/webmail (enforce)

Add-MpPreference -AttackSurfaceReductionRules_Ids `
  BE9BA2D9-53EA-4CDC-84E5-9B1EEEE46550 -AttackSurfaceReductionRules_Actions Enabled
# Verify:
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids

P4 · Block unsigned EXEs under per-user Programs (WDAC concept / AppLocker rule)

<!-- Deny execution from %LOCALAPPDATA%\Programs, the STOCKSTAY install path. -->
<!-- Import: Group Policy -> Computer Configuration -> Windows Settings -> Security
     Settings -> Application Control Policies -> AppLocker -> Executable Rules -->
<!-- SHIPS AS AuditOnly ON PURPOSE. Run it for at least a week and review EventID
     8003 before flipping EnforcementMode to "Enabled". -->
<RuleCollection Type="Exe" EnforcementMode="AuditOnly">
  <!-- Microsoft default allow rules -- DO NOT REMOVE. Without them, enforcing this
       collection blocks every executable on the machine, including your RMM agent. -->
  <FilePathRule Id="921cc481-6e17-4653-8f75-050b80acca20" Name="(Default) All files in Program Files"
                Description="Allows Everyone to run applications in Program Files."
                UserOrGroupSid="S-1-1-0" Action="Allow">
    <Conditions><FilePathCondition Path="%PROGRAMFILES%\*" /></Conditions>
  </FilePathRule>
  <FilePathRule Id="a61c8b2c-a319-4cd0-9690-d2177cad7b51" Name="(Default) All files in Windows"
                Description="Allows Everyone to run applications in the Windows folder."
                UserOrGroupSid="S-1-1-0" Action="Allow">
    <Conditions><FilePathCondition Path="%WINDIR%\*" /></Conditions>
  </FilePathRule>
  <FilePathRule Id="fd686d83-a829-4351-8ff4-27c7de5755d2" Name="(Default) All files -- Administrators"
                Description="Allows local Administrators to run all applications."
                UserOrGroupSid="S-1-5-32-544" Action="Allow">
    <Conditions><FilePathCondition Path="*" /></Conditions>
  </FilePathRule>

  <!-- A path rule cannot express 'unsigned' -- the original text asked for that and AppLocker path rules cannot do it. This denies the PATH. Teams, Slack, VS Code, Zoom and most self-updating agents install here, so audit for a full 14 days and add FilePublisherCondition allow rules for the signed apps you keep. -->
  <FilePathRule Id="3fa77b26-8e51-4c09-a7d2-6b18e4f0c9a3" Name="Deny LocalAppData\Programs execution for standard users"
                Description="STOCKSTAY / Turla installs to the per-user Programs directory"
                UserOrGroupSid="S-1-5-32-545" Action="Deny">
    <Conditions>
      <FilePathCondition Path="%OSDRIVE%\Users\*\AppData\Local\Programs\*" />
    </Conditions>
  </FilePathRule>
</RuleCollection>

Prerequisites: the Application Identity service (AppIDSvc) must be Running/Automatic, set via GPO -- AppLocker evaluates nothing without it. Pilot OU. Reboot required: no (gpupdate /force to refresh policy).

Verify: during the AuditOnly week, review Applications and Services Logs > Microsoft > Windows > AppLocker > EXE and DLL for EventID 8003 (would-have-blocked). Zero unexpected entries means it is safe to set EnforcementMode="Enabled"; a real block then logs EventID 8004.

Rollback: set EnforcementMode="NotConfigured" and re-import, or unlink the GPO and run gpupdate /force. If a host is already locked out by an over-broad policy, boot to Safe Mode (AppLocker does not enforce there) and stop AppIDSvc, or delete %WINDIR%\System32\AppLocker\*.AppLocker.

14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the host in Falcon; preserve memory + the Programs\SMN directory; do NOT reboot (lose volatile C2 state).SOCRTR capture, process tree, netconns
EradicateRemove Run-key value(s); delete the SMN install dir + components; block GTIG hashes (Q3) and C2 domains; reset credentials used on the host.IRRegistry diff, deleted-file hashes
RecoverRebuild if KAZUAR/WILDDAY/DIAMONDBACK co-presence is confirmed (assume deep compromise); re-image rather than clean for confirmed Turla intrusions.IR + ITClean-build attestation
Hunt-backSweep the fleet with Q1–Q9; pivot on websocket-sharp.dll hash and any host that resolved a C2 domain; review mail logs for the delivering message + other recipients.Threat HuntFleet query results, mail trace
15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1036.005Masquerade binariesQ1YesGood
T1547.001Run-key persistenceQ2YesGood
Atomic hashesKnown-bad filesQ3IOCGood
T1071.001Known C2 DNSQ4Good (while live)
T1102PaaS WebSocket beaconQ5Partial (FP-tuned)
T1203WinRAR CVE-2025-8088Q6Partial
T1566.001 / T1021.001RDP-file spearphishQ7YesPartial
T1218.005mshta → .dat.exeQ8Good
Install pathPrograms\SMN executionQ9YesGood
T1082 / T1113 / T1005Sysinfo / screenshot / file collection (in-implant cmds)Gap — no distinct on-host telemetry; rely on C2/persistence detections upstream
Delivery (mail)Phish attachment arrivalGap — out of EDR scope; covered by mail gateway (§7)

Detection is strongest at masquerade-name, install-path, persistence, and atomic-hash layers (all low-FP). C2 hosts are high-fidelity but perishable; behavioral PaaS-WebSocket and delivery hunts need environment tuning. In-implant collection commands and mail delivery are gaps best covered upstream (mail gateway, §7 native hunts) rather than EDR.

16

Hunt Summary Ticket

TITLE:      STOCKSTAY (Turla / Secret Blizzard) .NET backdoor hunt
SEVERITY:   Critical — active nation-state espionage (Russia-nexus)
SCOPE:      Windows endpoints; DNS/egress; mail gateway (delivery)
HYPOTHESIS: Turla deployed STOCKSTAY via spearphish (.rdp / WinRAR
            CVE-2025-8088 / HTA), persisted via Run-key, beaconing
            over wss:// to PaaS / compromised hosts.
QUERIES:    Q1 masquerade bins | Q2 Run-key | Q3 hashes | Q4 known C2
            Q5 PaaS wss | Q6 WinRAR drop | Q7 RDP phish | Q8 mshta
            Q9 SMN install-dir
DO FIRST:   Q1, Q3, Q9 (lowest FP, atomic/structural) then Q2, Q4.
FINDINGS:   <record hosts / hashes / C2 hits here>
GAPS:       In-implant collection cmds; mail delivery (use §7).
ACTIONS:    Patch WinRAR >= 7.13; strip .rdp/.hta at mail gw;
            block Q3 hashes + C2 domains; isolate + re-image
            confirmed Turla hosts.
OWNER:      HuntPack
VERSION:    v0.1 · 2026-06-29
17

Changelog

v0.32026-07-24CQL correctness pass. All 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.
v0.22026-06-29CQL syntax review (crowdstrike-logscale-v3): removed invalid FileCreateInfo event (Q6).
v0.12026-06-29Initial HuntPack from GTIG STOCKSTAY analysis — 9 CQL queries, 4 Custom IOA recs, IOC appendix (GTIG hashes + 5 C2 hosts), tiered hardening, playbooks, containment runbook.
18

References

TierSourceUsed ForAccess Date
1 · VendorGoogle Threat Intelligence Group — STOCKSTAY analysisArchitecture, IOCs, hashes, C2 hosts, KAZUAR overlap, YARA2026-06-29
2 · PressThe Hacker News — Turla STOCKSTAYTargeting, delivery, corroboration2026-06-29
2 · PressThe Record — Turla espionage / UkraineCampaign context, co-deployed tooling2026-06-29
2 · PressSC Media — STOCKSTAY against Ukraine and ItalyItalian foreign-policy targeting2026-06-29
RefMITRE ATT&CK — Turla (G0010)Technique mapping, mitigations2026-06-29