STOCKSTAY — Turla / Secret Blizzard Multi-Component .NET Backdoor
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.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Fwd |
|---|---|---|---|
| 1 · Vendor | Google 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 rules | yes |
| 1 · Vendor | Mandiant (incident response, referenced by GTIG) | STOCKSTAY deployed alongside KAZUAR, WILDDAY, DIAMONDBACK via malicious GPO in Ukraine intrusions | yes |
| 2 · Press | The Hacker News / The Record / SC Media | Corroborate targeting of Ukraine + Italian foreign-policy interests; CVE-2025-8088 WinRAR delivery in Nov 2025 waves | partial |
| 2 · Press | CyberPress / Help Net Security | Confirm websocket-sharp, multi-component design, December 2022 first artifact | partial |
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.
Hunt Brief & Attack Chain
Hunt hypotheses (fidelity-ordered)
- H1 (high): A STOCKSTAY component runs under one of its campaign-specific masquerade names (StockMarket*, MS{Viewer,Driver,Render}, MicrosoftUpdateOneDrive, ClientMNGR). Covers T1036.005.
- H2 (high): MARKETMAKER wrote a
CurrentVersion\Runvalue pointing at a component orPrograms\SMN. Covers T1547.001. - H3 (high): A file matching a GTIG-published STOCKSTAY hash executed or was written. Atomic.
- H4 (high): A host resolved one of the five known STOCKSTAY WebSocket C2 hosts. Covers T1071.001.
- H5 (medium): A process executes from
%LOCALAPPDATA%\Programs\SMN\. Install-path tell. - H6 (medium): WinRAR/archive extraction (CVE-2025-8088) dropped a payload into Startup or
Programs\SMN. Covers T1203 + T1547.001. - H7 (medium): mstsc launched from a mail/Downloads
.rdpattachment. Covers T1566.001 + T1021.001. - H8 (medium): mshta executed an HTA decoy that spawned a renamed
.dat.exe. Covers T1218.005.
Attack chain
| Step | Behavior | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 · Delivery | Spearphish: malicious .rdp / WinRAR RAR (CVE-2025-8088) / MSI / HTA decoy | ProcessRollup2, FileCreateInfo | Q6, Q7, Q8 |
| 2 · Execution | User opens lure; MARKETMAKER downloader runs (masq. MicrosoftUpdateOneDrive) | ProcessRollup2 | Q1, Q9 |
| 3 · Persistence | Run-key autorun to component / Programs\SMN | AsepValueUpdate / RegGenericValueUpdate | Q2 |
| 4 · Install | Components dropped to %LOCALAPPDATA%\Programs\SMN | PeFileWritten, ProcessRollup2 | Q3, Q9 |
| 5 · C2 | STOCKBROKER opens wss:// to PaaS/compromised host, RSA-4096 + base64 JSON | DnsRequest, NetworkConnectIP4 | Q4, Q5 |
| 6 · Actions | STOCKTRADER: Sysinfo (WMI), Image (screenshot), Get/Put, Run, registry ops | ProcessRollup2, RegGenericValueUpdate | Q1, native hunts |
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.
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| domain | canal1zac1a.onrender.com | high | detect | wss:// C2 (May–Aug 2025) |
| domain | google-ai-labs-it.onrender.com | high | detect | wss:// C2 (Aug–Nov 2025) |
| domain | driverx86-adobe.onrender.com | high | detect | wss:// C2 (Nov 2025, drone lure) |
| domain | weatherdataai.theworkpc.com | high | detect | wss:// C2 (Mar–Apr 2025) |
| domain | wool-basalt-clock.glitch.me | high | detect | wss:// C2 (Jan–Feb 2024) |
| sha256 | 82707cfdf24dcb762f4615f01e1ba4d3dfdec4abe9cd588558d2634d7e6a5eeb | high | detect | StockMarketView.exe (STOCKMARKET) |
| sha256 | 34fcbe7e90fc87a4f3766469c19a64f24672d7adb99e0198f5ba10d58911368b | high | detect | StockMarketNet.exe (STOCKBROKER) |
| sha256 | 0a545dd1b703cddfb3d582c8c70f65f556bbd580bfa836a387121eb837bda61b | high | detect | StockMarketSystem.exe (STOCKTRADER) |
| sha256 | da8a96bc74e265f945f1cc6992c6dc0f9ea36ed1991f7b8d312db79d9bf78c40 | high | detect | MicrosoftUpdateOneDrive.exe (MARKETMAKER) |
| sha256 | d1e54270433a94aa3d45d888e4c62299bee3480eb2cb4a5489c7dda69d476c3e | high | hunt | websocket-sharp.dll (shared lib — pivot) |
| filename | MicrosoftUpdateOneDrive.exe / StockMarket*.exe / MS{Viewer,Driver,Render}.exe / ClientMNGR.exe | high | hunt | masquerade component names |
| path | %LOCALAPPDATA%\Programs\SMN\ | high | hunt | install directory |
| regkey | ...\CurrentVersion\Run → component / Programs\SMN | high | hunt | MARKETMAKER persistence |
| cve | CVE-2025-8088 (WinRAR path traversal) | high | detect | delivery vector (Nov 2025 waves) |
Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Windows endpoints (workstations, .NET present) | ProcessRollup2 / SyntheticProcessRollup2 | Critical | Low — default Falcon coverage |
| Registry autorun | AsepValueUpdate / RegGenericValueUpdate | Critical | Low |
| DNS / egress | DnsRequest, NetworkConnectIP4 | High | Med — wss may resolve via system resolver only |
| File writes (install / Startup) | PeFileWritten / FileCreateInfo | Med | Low |
| Mail gateway (delivery) | Attachment / URL logs (.rdp, .rar, .hta, .msi) | Med | High — not in Falcon EDR; needs mail telemetry |
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Coverage |
|---|---|---|---|
| Initial Access | T1566.001 Spearphishing Attachment | .rdp / RAR / MSI / HTA lures | Q6, Q7, Q8 |
| Execution | T1204.002 User Execution: Malicious File | Opening lure attachment | Q6, Q7, Q8 |
| Execution | T1203 Exploitation for Client Execution | WinRAR CVE-2025-8088 path traversal | Q6 |
| Execution | T1218.005 Mshta | HTA decoy → renamed .dat.exe | Q8 |
| Persistence | T1547.001 Registry Run Keys | MARKETMAKER autorun | Q2 |
| Defense Evasion | T1036.005 Masquerading: Match Legit Name | MicrosoftUpdateOneDrive / StockMarket* names | Q1, Q9 |
| Defense Evasion | T1140 / T1027 Deobfuscation / Obfuscation | K1MORPHER (Squirrel3) string obfuscation | Native hunts / YARA |
| Discovery | T1082 System Information Discovery | Sysinfo via WMI | Native hunts |
| Collection | T1113 Screen Capture | Image command | Native hunts |
| Collection | T1005 Data from Local System | Get command (base64 ZIP) | Native hunts |
| Command & Control | T1071.001 Web Protocols (WebSocket) | wss:// to PaaS / compromised hosts | Q4, Q5 |
| Command & Control | T1102 Web Service | Render / Glitch / GitHub relay | Q5 |
Native Audit-Log Hunts (non-CQL)
- Mail gateway: Search the last 90 days for inbound attachments with extensions
.rdp,.hta, and.rarcontaining.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 referencingPrograms\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.
CrowdStrike LogScale CQL Hunt Queries
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)
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)
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)
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)
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)
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)
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)
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)
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)
CrowdStrike Custom IOA Recommendations
| IOA Name | Pattern | Action | Exclusions |
|---|---|---|---|
| STOCKSTAY — SMN Install-Dir Execution | Process image path matches \Programs\SMN\ (Q9) | Detect → Block (after baseline) | None expected — campaign-specific path |
| STOCKSTAY — Masquerade Binary | FileName in the Q1 set executing from a user-writable path | Detect (high) | None — names are campaign-specific |
| STOCKSTAY — Run-Key to SMN/component | Run-key write whose data matches Q2 regex | Detect | None expected |
| RDP-File Spearphish | mstsc.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).
Machine-Readable IOC Appendix
One-click blocks for SOC tooling. Hashes and C2 hosts are GTIG-published; swap expirations to fit your policy.
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
[ 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
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
[ ] 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)
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\SMNfolder 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.
Hardening — Tiered & Deployable
- Patch WinRAR to ≥ 7.13 to close CVE-2025-8088, the active delivery vector. (MITRE M1051 Update Software.)
- Strip/quarantine
.rdpand.htaattachments at the mail gateway; inspect.rarfor 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.)
- WDAC/AppLocker: block execution of unsigned binaries under
%LOCALAPPDATA%\Programsand per-user paths. (M1038 Execution Prevention.) - Egress control: deny or alert on WebSocket upgrades to
*.onrender.com/*.glitch.meat the proxy/NGFW. (M1037 Filter Network Traffic.) - Audit/alert Run-key writes referencing user-writable paths. (M1028 / M1047 Audit.)
- Block or constrain
mshta.exevia WDAC where no business use exists. (M1042.)
- 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.)
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.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the host in Falcon; preserve memory + the Programs\SMN directory; do NOT reboot (lose volatile C2 state). | SOC | RTR capture, process tree, netconns |
| Eradicate | Remove Run-key value(s); delete the SMN install dir + components; block GTIG hashes (Q3) and C2 domains; reset credentials used on the host. | IR | Registry diff, deleted-file hashes |
| Recover | Rebuild if KAZUAR/WILDDAY/DIAMONDBACK co-presence is confirmed (assume deep compromise); re-image rather than clean for confirmed Turla intrusions. | IR + IT | Clean-build attestation |
| Hunt-back | Sweep 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 Hunt | Fleet query results, mail trace |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1036.005 | Masquerade binaries | Q1 | Yes | Good |
| T1547.001 | Run-key persistence | Q2 | Yes | Good |
| Atomic hashes | Known-bad files | Q3 | IOC | Good |
| T1071.001 | Known C2 DNS | Q4 | — | Good (while live) |
| T1102 | PaaS WebSocket beacon | Q5 | — | Partial (FP-tuned) |
| T1203 | WinRAR CVE-2025-8088 | Q6 | — | Partial |
| T1566.001 / T1021.001 | RDP-file spearphish | Q7 | Yes | Partial |
| T1218.005 | mshta → .dat.exe | Q8 | — | Good |
| Install path | Programs\SMN execution | Q9 | Yes | Good |
| T1082 / T1113 / T1005 | Sysinfo / screenshot / file collection (in-implant cmds) | — | — | Gap — no distinct on-host telemetry; rely on C2/persistence detections upstream |
| Delivery (mail) | Phish attachment arrival | — | — | Gap — 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.
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
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.References
| Tier | Source | Used For | Access Date |
|---|---|---|---|
| 1 · Vendor | Google Threat Intelligence Group — STOCKSTAY analysis | Architecture, IOCs, hashes, C2 hosts, KAZUAR overlap, YARA | 2026-06-29 |
| 2 · Press | The Hacker News — Turla STOCKSTAY | Targeting, delivery, corroboration | 2026-06-29 |
| 2 · Press | The Record — Turla espionage / Ukraine | Campaign context, co-deployed tooling | 2026-06-29 |
| 2 · Press | SC Media — STOCKSTAY against Ukraine and Italy | Italian foreign-policy targeting | 2026-06-29 |
| Ref | MITRE ATT&CK — Turla (G0010) | Technique mapping, mitigations | 2026-06-29 |