Sandworm / UAC-0145 — SopraVPN Fake-Recruiter Campaign

Fake IT-recruiter hiring processes deliver "SopraVPN," a trojanized WireGuard client that hides an AES-256-GCM-encrypted attacker command inside the VPN config file itself, executed on tunnel-up via WireGuard's own PostUp mechanism
Threat
UAC-0145 (sub-cluster of UAC-0002 / Sandworm / APT44 / Seashell Blizzard)
Severity
NATION-STATE · ACTIVE
Type
Fake-recruiter social engineering → trojanized VPN client → config-hidden backdoor
Access
Victim-executed install of SopraVPN.exe (user-driven, not exploit-driven)
Version
v0.1 · 2026-08-23
Author
HuntPack
Confidence
High (national CERT primary source + 4 corroborating)
01

Executive Summary

Sandworm (GRU Unit 74455 / APT44 / Seashell Blizzard), through its sub-cluster UAC-0145, is running a patient, human-driven social-engineering campaign against Ukrainian IT and system-administrator professionals, active since at least May 2026 and formally attributed by CERT-UA on 2026-08-08 (advisory cert.gov.ua/article/6318863), with independent corroboration published 2026-08-10/11 by The Record, BleepingComputer, The Hacker News and TechTimes.

Attackers pose as recruiters — impersonating an IT firm called "ATLAS Business Group" — after reviewing victim résumés on legitimate job-search platforms. Contact moves from the job site's chat to Telegram, where a fake HR manager claiming to screen for Sopra Steria Bulgaria (a real company, not affiliated with the attackers) runs a preliminary chat, followed by a Zoom interview with an English-speaking man reported as 30–35 years old — CERT-UA itself could not rule out that the interviewer was an AI-generated persona. A follow-up email delivers a WireGuard VPN configuration for a bogus "technical assessment," deliberately built to fail to connect.

When the connection fails, the fake recruiter directs the victim to a spoofed site styled to resemble Sopra Steria Bulgaria (soprasteria-bg[.]com) to download "SopraVPN," a trojanized WireGuard client hosted on SourceForge. SopraVPN is compiled from genuine WireGuard source code with a backdoored config parser: a non-standard SymmetricKey option in the .conf file carries a BASE64-encoded AES-256-GCM blob (nonce + ciphertext + tag); the AES-256 key is the 32-byte decode of the config's own PrivateKey value; the decrypted PowerShell/command payload is then handed to WireGuard's legitimate runScriptCommand mechanism — the same internal call the standard PostUp option uses — so the attacker's command runs automatically and silently the moment the tunnel comes up. A second layer of obfuscation replaces stock Base64 with a custom alphabet, shuffled via Fisher-Yates and seeded from the CRC32 of the SymmetricKey value, hiding PrivateKey/PublicKey from casual inspection. The malicious code lives in data the config file carries, not in the binary — a plain hash/signature check of the SopraVPN executable alone will not reveal the backdoor.

On Windows, the decrypted command creates a scheduled task and downloads a second-stage payload from the internet. On Linux, it uses cURL to retrieve a second-stage executable from attacker infrastructure reached through the newly-established VPN tunnel itself (the malicious config embeds the attacker's own DNS server IP); CERT-UA's captured artifact shows the drop staged at /usr/libexec/timesyncd-check, masquerading as a systemd time-sync helper.

This is a different initial-access chain than the previously published UAC-0145 ClickFix/EtherHiding HuntPack (CAPTCHA lures, a distinct typosquat C2 domain, GHETTOVIBE/FLUIDLEECH/FREAKYPOLL). No CAPTCHA, no browser paste — the lure here is a fabricated hiring process and the payload is a config file, not a script. Detection priorities are (1) exact hash/filename matching on the SopraVPN binary and malicious .conf artifacts, (2) the anomalous-child-process fingerprint of a WireGuard-family parent spawning PowerShell (Windows) or an unexpected shell/cURL chain (Linux) — a legitimate WireGuard tunnel service never does this, (3) network/DNS activity to the campaign's confirmed lure and C2 infrastructure, and (4) the exact Linux host artifact path /usr/libexec/timesyncd-check.

Defender priority: the victims of this chain are, by design, system administrators and IT staff with privileged network access. A single successful SopraVPN install can hand the attacker a persistent scheduled-task foothold and a live route into the corporate perimeter riding on top of what the victim believes is a "corporate VPN." CERT-UA's own top recommendation — restrict corporate resource access to managed, EDR-enrolled devices, including personally-owned equipment used for "hiring assessments" — closes the single biggest gap this campaign is built to exploit.

02

Source Review & Web Hunter Notes

TierSourceKey findingCarry forward
T1CERT-UA — "Соціальна інженерія у виконанні UAC-0145: компрометація у процесі працевлаштування," published 2026-08-08 (article 6318863)Primary, government-issued advisory. Full TTP write-up plus every atomic indicator in this pack: 5 file hashes (MD5+SHA256), 4 domains, 1 IP, 2 host artifacts, 2 email addresses, 1 Telegram handle.Yes — sole IOC source; all hash/IP/domain values transcribed verbatim from this snapshot
T2The Hacker News — "Sandworm-Linked UAC-0145 Uses Fake Job Interviews to Push VPN That Can Run Commands," Ravie Lakshmanan, 2026-08-11Corroborates the full technical chain; independently identifies a third SourceForge project (soprasteriavpn) not named in the CERT-UA advisory text (cached-search find, project itself unavailable for download).Yes — narrative corroboration + one additional SourceForge project name (used as a hunt lead, not an atomic IOC since it was never confirmed downloadable)
T2BleepingComputer — "Sandworm hackers target IT pros with trojanized WireGuard VPN client," Bill Toulas, 2026-08-11Corroborates the chain with concise phrasing; confirms attacker impersonation used addresses "similar to the company's office in Bulgaria."Yes — corroboration and alert-copy phrasing
T2/3The Record / Recorded Future News — "Russian military hackers pose as recruiters to target Ukrainian IT workers," Daryna Antoniuk, 2026-08-10Independent corroboration; notes the Telegram account @Sales_ManagerABG-style handle was still reachable at publish time although the job ad had been removed, and situates the campaign in Sandworm's broader history (2015/2016 grid attacks, NotPetya).Partial — narrative/attribution context only, no new atomic IOCs
T2/3TechTimes — "Sandworm Recruiter Scam Targets Ukrainian Sysadmins, Deploys Hidden WireGuard Trojan," Kyle Belmonte, 2026-08-11Deep secondary analysis: frames this as Sandworm's first confirmed adoption of the DPRK-style "Contagious Interview" technique; cross-references UAC-0145's other 2026 tracks (ClickFix/EtherHiding, fake Notepad++/UAC-0099); provides concrete defender guidance (verify recruiters through official channels, inspect configs for unfamiliar keys).Yes — context and defender guidance folded into §1 and §12; no new atomic IOCs

Security note (pipeline integrity): all five fetched sources were reviewed for embedded instructions directed at an AI analysis pipeline (prompt-injection). None was found — every source is ordinary news/advisory prose, treated throughout as data to analyze, never as instructions to execute. The one literal attacker-authored shell command quoted in the CERT-UA advisory (the Linux timesyncd-check downloader one-liner) is reproduced in this pack strictly as a host indicator/behavioral signature for detection engineering — it was never executed or treated as a directive.

Web-hunter decision: CERT-UA is treated as the sole authoritative source for atomic indicators; the four secondary sources are used only for narrative corroboration, dating, and defender framing. Every hash, domain, IP, filename and host-path value in §4 and §10 is copied character-for-character from the saved CERT-UA snapshot (Sandworm-SopraVPN-Hunt-sources/01-certua-advisory-6318863.txt) rather than from secondary paraphrase, to eliminate transcription drift between sources.

03

Hunt Brief & Attack Chain

#StepTelemetryHunt angle
1Recon — attacker reviews victim résumés on legitimate job-search platforms.None (human-layer, off-platform)Not observable in Falcon
2Rapport — contact via job-site chat, moved to Telegram (@Sales_ManagerABG-style handle) posing as "ATLAS Business Group," then a Zoom interview with a possibly AI-generated interviewer.None (human-layer)Not observable in Falcon — user-awareness control only (§12)
3Delivery — email with a WireGuard .conf for a bogus "corporate VPN" technical assessment, deliberately built to fail, sent from an address mimicking Sopra Steria.Email gateway; file-write if the attachment is saved to diskNative mail-gateway hunt (§7)
4Lure pivot — fake recruiter points the victim to soprasteria-bg[.]com, which links to a "SopraVPN" download hosted on SourceForge.DnsRequest / NetworkConnectIP4 to the lure domains + SourceForge; file write of sopravpn*.exeQ4, Q7
5Install & connect — victim runs SopraVPN.exe / sopravpn_v*.exe and imports the malicious .conf carrying the SymmetricKey value.ProcessRollup2 (filename/hash match)Q1
6Backdoor trigger — WireGuard's PostUp/runScriptCommand mechanism decrypts the AES-256-GCM payload (keyed by SymmetricKey + PrivateKey) and executes it the instant the tunnel comes up.ProcessRollup2 parent-child anomalyQ2
7Windows persistence + 2nd stage — decrypted PowerShell registers a scheduled task and downloads a payload from the internet.ProcessRollup2 (schtasks.exe /create), NetworkConnectIP4/DnsRequest for the downloadQ3
8Linux 2nd stage — cURL retrieves an executable from attacker infrastructure reached through the tunnel; drop staged at /usr/libexec/timesyncd-check.ProcessRollup2 (curl), file-write telemetry if availableQ6
9C2 check-in — HTTPS call to douncloud[.]site carrying a %UUID%---%MACHINEGUID%-shaped beacon value; rogue WireGuard endpoint at 139.28.36[.]23 udp/51820.DnsRequest/NetworkConnectIP4Q4, Q5, Q8
04

Consolidated IOC Table

TypeValueConfidenceActionContextExpiry
sha2564646ea832a61c9f7bdb11fee64ad82ae6d9856d2f3a4b36a8a4a571145be1260Highdetectsopravpn_v7__1_.exe2027-02-23
sha256aeb702f65445d12605a84be6fa31545c71be0bf619b1cbedbee5800a43fc6793HighdetectSopraVPN.exe (variant 1)2027-02-23
sha2566a60152f7c83d3416925316b75eb7720953cdd69aae9f0e088c789c25f51437fHighdetectSopraVPN.exe (variant 2)2027-02-23
sha256480ab92995295378c9b30b8b6fb61516313ed7482eb893967841b05e233fe341Highhuntsopraconf.conf — malicious Windows VPN config2026-11-23
sha25622a21958a2c4752214192175793c13acae2f6d766007d55d2140f1570ae1df67HighhuntsopraconfLinux.conf — malicious Linux VPN config2026-11-23
md5bf6670760305228fd83a5e1467a99d91Highenrichsopravpn_v7__1_.exe (MD5)2026-11-23
md5be11cc798c239b9d4eaa76ab03d07168HighenrichSopraVPN.exe variant 1 (MD5)2026-11-23
md5676f44c7fa03693247d0dd5c3a0e13f7HighenrichSopraVPN.exe variant 2 (MD5)2026-11-23
md5d478e96bfb0f3a586c6d17d8bfc874eaHighenrichsopraconf.conf (MD5)2026-11-23
md5088acb50f7a7e54f887da7b561e18613HighenrichsopraconfLinux.conf (MD5)2026-11-23
domainsoprasteria-bg.comHighdetectSpoofed Sopra Steria Bulgaria lure site; registered 2026-07-162027-02-23
domainsoprasteriabg.comHighdetectRelated spoof domain (no hyphen); registered 2026-05-142027-02-23
domainatlasgroup-ua.comHighdetectFake "ATLAS Business Group" recruiter site; registered 2026-02-102027-02-23
domaindouncloud.siteHighdetectC2 check-in domain (subid=%UUID%---%MACHINEGUID%)2027-02-23
ipv4139.28.36.23HighdetectRogue WireGuard endpoint, udp/518202027-02-23
urlhxxps://sourceforge[.]net/projects/soprabulgariavpn/files/sopravpn_v10.exe/downloadMediumhuntTrojanized installer on SourceForge (legitimate platform abused)2026-11-23
urlhxxps://sourceforge[.]net/projects/sopravpn/files/sopravpn_v5.exe/downloadMediumhuntTrojanized installer, alternate version2026-11-23
urlhttps://sourceforge[.]net/projects/sopravpn/files/sopravpn.exe/downloadMediumhuntTrojanized installer, alternate version2026-11-23
emailmike.weitzman@soprasteria-bg[.]comMediumpivotFake HR/recruiter sender address2026-09-23
emailalex.boichenkoit@ukr[.]netMediumpivotSecondary contact address named in the advisory2026-09-23
other@Sales_ManagerABG (Telegram)MediumpivotFake "ATLAS Business Group" recruiter Telegram handle2026-09-23
filepath/usr/libexec/timesyncd-checkHighhuntLinux 2nd-stage drop path; masquerades as a systemd-timesyncd helper2026-11-23
filepath\Microsoft\Windows\ApplicationData\Microsoft (Scheduled Task)MediumhuntWindows scheduled-task path used for persistence / 2nd stage2026-11-23
05

Affected Surface & Telemetry Matrix

SurfaceRequired telemetryPriorityGap risk
Windows endpoints (IT/sysadmin workstations)ProcessRollup2, SyntheticProcessRollup2, NetworkConnectIP4, DnsRequest, scheduled-task creation telemetryCriticalLow — native Falcon sensor coverage
Linux endpoints/servers (sysadmin jump boxes)ProcessRollup2, NetworkConnectIP4, DnsRequestCriticalMedium — cURL traffic issued through an already-established WireGuard interface may not always attribute cleanly to the initiating process on every sensor version; validate in tenant
Email gatewayAttachment/link inspection for .conf files and links to the lure domainsHighMedium — native mail-gateway hunt, not Falcon CQL (§7)
DNS / network egressDnsRequest, NetworkConnectIP4 for campaign domains/IPHighLow
Personal/BYOD devices used for "technical assessments"None if unmanaged — CERT-UA explicitly flags this as the core exposureCriticalHigh — closed only by policy (§12 Near-term #4), not by telemetry
Identity / SSONot directly targeted by this chain; monitor for anomalous logons originating from a newly-SopraVPN-infected hostMediumN/A to this specific hunt — downstream pivot risk only
06

ATT&CK Mapping

TacticTechniqueNameObserved behavior
ReconnaissanceT1593.001Search Open Websites/Domains: Social MediaAttacker reviews victim résumés on job-search platforms before making contact
Resource DevelopmentT1585.001Establish Accounts: Social Media AccountsFake recruiter personas and Telegram handle posing as ATLAS Business Group / Sopra Steria HR
Resource DevelopmentT1583.001Acquire Infrastructure: Domainssoprasteria-bg[.]com, soprasteriabg[.]com, atlasgroup-ua[.]com, douncloud[.]site registered for the campaign
Resource DevelopmentT1608.001Stage Capabilities: Upload MalwareTrojanized SopraVPN installers staged on SourceForge
Resource DevelopmentT1587.001Develop Capabilities: MalwareCustom-compiled WireGuard fork with a SymmetricKey/AES-256-GCM backdoor
Initial AccessT1566.003Phishing: Spearphishing via ServiceContact via job-platform chat and Telegram rather than direct email
Initial AccessT1204.002User Execution: Malicious FileVictim manually downloads and runs SopraVPN.exe / sopravpn_v*.exe
ExecutionT1059.001Command and Scripting Interpreter: PowerShellWindows payload decrypted and run via runScriptCommand
ExecutionT1059.004Command and Scripting Interpreter: Unix ShellLinux payload invoked through the same mechanism, using cURL
PersistenceT1053.005Scheduled Task/Job: Scheduled TaskWindows PowerShell command registers a scheduled task for 2nd-stage retrieval
Defense EvasionT1027Obfuscated Files or InformationAES-256-GCM payload hidden inside VPN config values (SymmetricKey), not the binary
Defense EvasionT1140Deobfuscate/Decode Files or InformationCustom Fisher-Yates-shuffled Base64 alphabet, seeded from CRC32(SymmetricKey), decodes PrivateKey/PublicKey before use
Defense EvasionT1036.005Masquerading: Match Legitimate Name or LocationSopraVPN branding mimics Sopra Steria; binary built from genuine WireGuard source and behaves like a real VPN client
Command and ControlT1572Protocol TunnelingLinux 2nd-stage executable retrieved via cURL, routed through the established WireGuard tunnel to attacker-internal infrastructure
Command and ControlT1071.001Application Layer Protocol: Web Protocolsdouncloud[.]site check-in over HTTPS with a UUID/MachineGUID beacon value
Command and ControlT1105Ingress Tool TransferScheduled task (Windows) / cURL (Linux) retrieve the second-stage payload
07

Native Audit-Log Hunts

Email gateway

Search inbound mail for .conf attachments whose content contains the string SymmetricKey (not a legitimate WireGuard option), and for links to soprasteria-bg.com, soprasteriabg.com or atlasgroup-ua.com.

DNS resolver / firewall logs

Alert on any resolution of soprasteria-bg.com, soprasteriabg.com, atlasgroup-ua.com, douncloud.site; feed all four to an RPZ/sinkhole (Playbook 1, §13).

Windows Event Log / Sysmon

Security 4698 (scheduled task created) correlated with a parent process named sopravpn*.exe/SopraVPN.exe in the prior five minutes; Sysmon Event ID 1 with ParentImage matching a SopraVPN/WireGuard-family binary and Image=powershell.exe.

Linux auditd

execve records for /usr/bin/curl (or execution of /usr/libexec/timesyncd-check itself) with a parent process from a WireGuard-family binary (wg-quick, wireguard, sopravpn); ausearch -f /usr/libexec/timesyncd-check (Playbook 5, §13).

Config-file content review

grep -RIl "SymmetricKey" against any .conf/.ini file imported for VPN use across managed endpoints. This string does not exist in stock WireGuard and is a hard indicator on its own, independent of any hash or filename.

Proxy / secure web gateway logs

Downloads from sourceforge.net/projects/soprabulgariavpn, /sopravpn, or /soprasteriavpn.

Security-awareness reporting channel (non-technical)

Review any employee reports of a "recruiter" contact referencing ATLAS Business Group or Sopra Steria Bulgaria that asked for a VPN client install as part of a "technical assessment" — this is the highest-value early-warning signal and predates any endpoint telemetry.

08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · SopraVPN trojanized client — execution (hash + filename)
CONF HIGHFP LOWCOST LOW

Looks for: execution of the SopraVPN binary by exact filename pattern or by one of the three published SHA256 hashes. FP: none expected — the only source of noise would be a legitimate internal tool coincidentally named "SopraVPN."

// HUNT: SopraVPN Trojanized WireGuard Client — Execution
// MITRE: T1204.002, T1036.005
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2 (Windows + Linux)
// FALSE POSITIVES: none expected from filename/hash match alone
// LOOKBACK: 90d
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| (FileName=/^(SopraVPN(\.exe)?|sopravpn_v[0-9]+(__[0-9]+_)?(\.exe)?)$/i or SHA256HashData=/^(4646ea832a61c9f7bdb11fee64ad82ae6d9856d2f3a4b36a8a4a571145be1260|aeb702f65445d12605a84be6fa31545c71be0bf619b1cbedbee5800a43fc6793|6a60152f7c83d3416925316b75eb7720953cdd69aae9f0e088c789c25f51437f)$/i)
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, SHA256HashData, CommandLine, ParentBaseFileName], limit=max)
| sort(@timestamp, order=desc)
Q2 · WireGuard/SopraVPN parent spawning PowerShell or shell (backdoor trigger)
CONF HIGHFP MEDCOST MED

Looks for: the config-triggered backdoor firing — a WireGuard/SopraVPN-family parent process spawning an interpreter or shell child at tunnel-up. FP: legitimate WireGuard PostUp/PostDown hooks on Linux routinely spawn ip/iptables as children of wg-quick — this is expected and must be excluded; a PowerShell child on Windows is not stock WireGuard behavior and is high-fidelity on its own.

// HUNT: WireGuard/SopraVPN Parent Spawning PowerShell or Shell (Config-Triggered Backdoor Execution)
// MITRE: T1059.001, T1059.004, T1027, T1140
// CONF: high  FP: medium  COST: medium | REQUIRES: ProcessRollup2 (parent/child correlation)
// FALSE POSITIVES: legitimate wg-quick PostUp/PostDown hooks spawning ip/iptables/resolvconf on Linux
// TUNING: exclude Linux children ip, iptables, ip6tables, resolvconf, nft spawned by wg-quick/wireguard (stock PostUp/PostDown behavior) — investigate every powershell.exe or curl child instead
// LOOKBACK: 90d
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(SopraVPN(\.exe)?|sopravpn_v[0-9]+(__[0-9]+_)?(\.exe)?|wireguard(\.exe)?|wg-quick)$/i
| FileName=/^(powershell(\.exe)?|pwsh(\.exe)?|cmd(\.exe)?|curl(\.exe)?|bash|sh)$/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
| sort(@timestamp, order=desc)
Q3 · Scheduled task creation following SopraVPN execution (Windows persistence)
CONF HIGHFP MEDCOST LOW

Looks for: the Windows-side persistence step — a scheduled task registered shortly after (or by) a SopraVPN-family process. FP: schtasks.exe /create is also used by many legitimate installers and IT deployment tooling.

// HUNT: Scheduled Task Creation Following SopraVPN Execution (Windows Persistence)
// MITRE: T1053.005
// CONF: high  FP: medium  COST: low | REQUIRES: ProcessRollup2 (schtasks.exe invocation)
// FALSE POSITIVES: schtasks.exe is used by many legitimate installers and IT deployment tools
// TUNING: correlate against a SopraVPN/sopravpn_v*/wireguard parent or a process launched from Downloads/Temp within the prior 10 minutes on the same host; exclude schtasks.exe invocations from known deployment tools (SCCM, Intune, PDQ, Ninite) by ParentBaseFileName
// LOOKBACK: 90d
#event_simpleName=ProcessRollup2
| FileName=/^schtasks(\.exe)?$/i
| CommandLine=/\/create/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, CommandLine], limit=200)
| sort(@timestamp, order=desc)
Q4 · Network/DNS activity to confirmed SopraVPN campaign infrastructure
CONF HIGHFP LOWCOST LOW

Looks for: DNS resolution or a direct connection to any of the four CERT-UA-published campaign domains, or to the rogue WireGuard endpoint IP. FP: none expected — these are campaign-registered domains and a rogue endpoint, not shared/CDN infrastructure.

// HUNT: Network/DNS Activity to Confirmed SopraVPN Campaign Infrastructure
// MITRE: T1071.001, T1583.001
// CONF: high  FP: low  COST: low | REQUIRES: DnsRequest, NetworkConnectIP4
// FALSE POSITIVES: none expected — campaign-registered infrastructure, not shared/CDN
// LOOKBACK: 90d
#event_simpleName=/DnsRequest|NetworkConnectIP4/
| (DomainName=/^(www\.)?(soprasteria-bg|soprasteriabg|atlasgroup-ua)\.com$/i or DomainName=/^(www\.)?douncloud\.site$/i or RemoteAddressIP4="139.28.36.23")
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, DomainName, RemoteAddressIP4, RemotePort], limit=200)
| sort(@timestamp, order=desc)
Q5 · WireGuard tunnel established to rogue SopraVPN endpoint (UDP/51820)
CONF HIGHFP LOWCOST LOW

Looks for: a WireGuard handshake specifically to the rogue endpoint IP on its published port. FP: none on the specific IP; do not broaden to "any UDP/51820" without re-adding the IP filter, since legitimate corporate WireGuard endpoints also use that port.

// HUNT: WireGuard Tunnel Established to Rogue SopraVPN Endpoint (UDP/51820)
// MITRE: T1572, T1090
// CONF: high  FP: low  COST: low | REQUIRES: NetworkConnectIP4
// FALSE POSITIVES: none on the specific IP; do not drop the RemoteAddressIP4 filter
// LOOKBACK: 90d
#event_simpleName=NetworkConnectIP4
| RemoteAddressIP4="139.28.36.23"
| RemotePort=51820
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, RemoteAddressIP4, RemotePort, Protocol_decimal], limit=200)
| sort(@timestamp, order=desc)
Q6 · Linux second-stage retrieval via cURL — timesyncd-check masquerade
CONF HIGHFP MEDCOST LOW

Looks for: the exact CERT-UA-published Linux drop path, plus general cURL activity for pivoting. FP: curl is a common admin utility; the exact path /usr/libexec/timesyncd-check is not a real systemd component and is high-fidelity on its own regardless of parent process.

// HUNT: Linux Second-Stage Retrieval via cURL — timesyncd-check Masquerade
// MITRE: T1105, T1036.005, T1059.004
// CONF: high  FP: medium  COST: low | REQUIRES: ProcessRollup2 (Linux)
// FALSE POSITIVES: curl is a common admin utility on its own; the exact path is the high-fidelity signal
// TUNING: if broadening beyond the exact timesyncd-check path, require the parent process to be a WireGuard-family binary (wireguard, wg-quick, sopravpn, sopraconf) before treating a bare curl hit as actionable
// LOOKBACK: 90d
#event_simpleName=ProcessRollup2
| platform=Lin
| (CommandLine=/timesyncd-check/i or FileName=/^curl$/i)
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
| sort(@timestamp, order=desc)
Q7 · SourceForge download of SopraVPN-branded installer (trusted-platform abuse)
CONF MEDFP HIGHCOST LOW

Looks for: any connection to SourceForge, as a pivot lead only. FP: SourceForge is a widely-used legitimate software distribution platform; this query alone will catch large amounts of benign developer/IT traffic and must never be used standalone.

// HUNT: SourceForge Download of SopraVPN-Branded Installer (Trusted-Platform Abuse)
// MITRE: T1608.001, T1204.002
// CONF: medium  FP: high  COST: low | REQUIRES: DnsRequest, NetworkConnectIP4
// FALSE POSITIVES: SourceForge is widely-used legitimate software distribution; this query alone catches large amounts of benign developer/IT traffic
// TUNING: never alert on this query alone; require a same-host, same-session correlation with Q1 (SopraVPN hash/filename match) or a file write of a *.exe named sopravpn*/soprabulgariavpn*/soprasteriavpn* within minutes of the SourceForge connection before treating as actionable
// LOOKBACK: 90d
#event_simpleName=/DnsRequest|NetworkConnectIP4/
| DomainName=/^(www\.)?sourceforge\.net$/i
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, DomainName, RemoteAddressIP4], limit=200)
| sort(@timestamp, order=desc)
Q8 · Periodic beaconing to SopraVPN C2 domain (douncloud[.]site)
CONF MEDFP MEDCOST MED

Looks for: a regular-interval query pattern to the C2 domain, per host/process, as a beaconing-cadence signal that survives infrastructure rotation better than a static match alone. FP: legitimate scheduled telemetry/update agents on the same host can produce a similar regular-interval pattern to an unrelated .site domain.

// HUNT: Periodic Beaconing to SopraVPN C2 Domain (douncloud[.]site) or Look-Alike Infrastructure
// MITRE: T1071.001, T1583.001
// CONF: medium  FP: medium  COST: medium | REQUIRES: DnsRequest
// FALSE POSITIVES: legitimate scheduled telemetry/monitoring agents can produce a similar regular-interval pattern
// TUNING: raise the count threshold (default >=5 in the lookback window) if the environment has other frequent internal callers to unrelated .site domains; exclude known monitoring/APM agents by ContextBaseFileName
// LOOKBACK: 7d
#event_simpleName=DnsRequest
| DomainName=/^(www\.)?douncloud\.site$/i
| groupBy([aid, ComputerName, ContextBaseFileName], function=[count(as=QueryCount), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)], limit=500)
| QueryCount>=5
| table([ComputerName, ContextBaseFileName, QueryCount, FirstSeen, LastSeen], limit=200)
| sort(QueryCount, order=desc)
09

CrowdStrike Custom IOA Recommendations

Three queries are near-zero-FP path/hash matches strong enough to promote directly; one more promotes with a correlation constraint. The rest stay investigate-only.

IOA nameFromPatternExclusionsAction
SopraVPN · Trojanized Client ExecutionQ1Process Creation — filename/hash match on the published SopraVPN artifactsNone knownPrevent (Critical) — hash/filename match has no benign use case
SopraVPN · Rogue WireGuard EndpointQ5Network Connection — UDP/51820 to 139.28.36.23None knownPrevent (Critical) at the network layer / Detect (Critical) at the endpoint
SopraVPN · Linux timesyncd-check MasqueradeQ6Process/File — exact path /usr/libexec/timesyncd-checkNone knownDetect (Critical) — promote to Prevent after a short pilot
SopraVPN · Scheduled Task Following ExecutionQ3Process Creation — schtasks.exe /create correlated with a SopraVPN/WireGuard-family parent within 10 minutesKnown deployment tooling (SCCM, Intune, PDQ, Ninite) by ParentBaseFileNameDetect (High) — move to Prevent only after a clean two-week baseline

Investigate-only (do not promote yet)

  • Q2 — the parent-child PowerShell/shell fingerprint has a real benign population on the Linux PostUp side; baseline for 14 days and fold the exclusions into the rule before promotion.
  • Q7 — SourceForge is legitimate infrastructure; never promote to an IOA on its own. Keep as a pivot lead only, correlated against Q1.
  • Q8 — beaconing cadence needs an environment-specific threshold; baseline for 14 days before any alerting action.
  • Q4 — better served by Falcon IOC Management (§10) than by an IOA, since it is pure atomic domain/IP matching.

Deployment path

  1. Endpoint security → Custom IOA rule groups → create a Windows/Linux rule group named Sandworm-SopraVPN.
  2. Add each rule in Monitor action first; assign the group to a pilot prevention policy covering a small subset of workstations.
  3. Review hits daily for 14 days, folding every benign hit into the rule's exclusion list.
  4. Promote to Detect (Q3) and Prevent (Q1, Q5, Q6) estate-wide.
10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
sha256,4646ea832a61c9f7bdb11fee64ad82ae6d9856d2f3a4b36a8a4a571145be1260,prevent,critical,2027-02-23,SopraVPN trojanized WireGuard installer (sopravpn_v7),campaign:Sandworm-SopraVPN
sha256,aeb702f65445d12605a84be6fa31545c71be0bf619b1cbedbee5800a43fc6793,prevent,critical,2027-02-23,SopraVPN.exe trojanized WireGuard client (variant 1),campaign:Sandworm-SopraVPN
sha256,6a60152f7c83d3416925316b75eb7720953cdd69aae9f0e088c789c25f51437f,prevent,critical,2027-02-23,SopraVPN.exe trojanized WireGuard client (variant 2),campaign:Sandworm-SopraVPN
sha256,480ab92995295378c9b30b8b6fb61516313ed7482eb893967841b05e233fe341,detect,high,2026-11-23,malicious Windows WireGuard config with SymmetricKey backdoor,campaign:Sandworm-SopraVPN
sha256,22a21958a2c4752214192175793c13acae2f6d766007d55d2140f1570ae1df67,detect,high,2026-11-23,malicious Linux WireGuard config with SymmetricKey backdoor,campaign:Sandworm-SopraVPN
domain,soprasteria-bg.com,detect,high,2027-02-23,spoofed Sopra Steria Bulgaria lure site,campaign:Sandworm-SopraVPN
domain,soprasteriabg.com,detect,high,2027-02-23,related spoof domain,campaign:Sandworm-SopraVPN
domain,atlasgroup-ua.com,detect,high,2027-02-23,fake ATLAS Business Group recruiter site,campaign:Sandworm-SopraVPN
domain,douncloud.site,detect,critical,2027-02-23,SopraVPN C2 check-in domain,campaign:Sandworm-SopraVPN
ipv4,139.28.36.23,detect,critical,2027-02-23,rogue WireGuard endpoint udp/51820,campaign:Sandworm-SopraVPN
# md5 companions (Falcon IOC Management accepts md5 as its own type row if preferred over sha256):
md5,bf6670760305228fd83a5e1467a99d91,detect,high,2026-11-23,sopravpn_v7__1_.exe (MD5),campaign:Sandworm-SopraVPN
md5,be11cc798c239b9d4eaa76ab03d07168,detect,high,2026-11-23,SopraVPN.exe variant 1 (MD5),campaign:Sandworm-SopraVPN
md5,676f44c7fa03693247d0dd5c3a0e13f7,detect,high,2026-11-23,SopraVPN.exe variant 2 (MD5),campaign:Sandworm-SopraVPN
Behavioral Signaturessurvives rotation
BEHAVIORAL SIGNALS - Sandworm SopraVPN campaign (no atomic indicator required)

B1  Config key "SymmetricKey" present in any WireGuard .conf file. Stock
    WireGuard has no such option — this string alone is a hard indicator.
B2  AES-256-GCM key = 32-byte decode of the same config's own "PrivateKey"
    value (self-referential key derivation — not how a real corporate VPN
    key is ever provisioned).
B3  Custom Base64 alphabet: Fisher-Yates shuffle seeded by CRC32("SymmetricKey"
    value) applied to PrivateKey/PublicKey encoding.
B4  Parent: SopraVPN.exe | sopravpn_v*.exe | wireguard.exe | wg-quick  ->
    Child: powershell.exe (Windows) or curl/sh/bash (Linux) shortly after
    tunnel-up. Stock WireGuard PostUp only spawns ip/iptables/resolvconf.
B5  Host artifact (Linux): /usr/libexec/timesyncd-check — not a genuine
    systemd-timesyncd component.
B6  Host artifact (Windows): scheduled task under
    \Microsoft\Windows\ApplicationData\Microsoft created within minutes of
    a SopraVPN-family process running.
B7  Outbound HTTPS to a .site domain carrying a query/path value shaped like
    %UUID%---%MACHINEGUID% (douncloud[.]site check-in pattern).
Named Malware & Toolingreference
SANDWORM SOPRAVPN CAMPAIGN — reference (CERT-UA article 6318863)

Malware / tooling:  SopraVPN (trojanized WireGuard client)
                     sopraconf.conf / sopraconfLinux.conf (malicious VPN configs)
Threat actor:        Sandworm | APT44 | Seashell Blizzard | UAC-0002 | UAC-0145 (sub-cluster)
Impersonated brand:  Sopra Steria (Bulgaria office) — soprasteria-bg[.]com is NOT
                     affiliated with the real company
Fake recruiter:      "ATLAS Business Group" — atlasgroup-ua[.]com
Platform abused:     SourceForge (sourceforge.net/projects/soprabulgariavpn,
                     /sopravpn, /soprasteriavpn)
Telegram handle:     @Sales_ManagerABG (style/format observed by CERT-UA)

RELATED UAC-0145 TRACK (different vector — do not conflate)
UAC0145-ClickFix-Hunt  ClickFix CAPTCHA lures, a distinct typosquat C2 domain,
                       GHETTOVIBE/FLUIDLEECH/FREAKYPOLL/SMARTAXE/COWARDDUCK —
                       a separate, previously-published HuntPack (see that
                       pack's own IOC set; not repeated here)
Managed-Device & Config Auditchecklist
AUDIT CHECKLIST - run per host / per fleet, compare against intended baseline

# 1. Managed-device / EDR coverage audit (CERT-UA's core recommendation)
#    List all devices with corporate VPN/resource access NOT enrolled in EDR —
#    this campaign's entire payload depends on an unmanaged endpoint.

# 2. Confirm conditional access / NAC blocks unmanaged devices from corporate
#    resources, including BYOD used for "hiring assessments" (see Playbook 4).

# 3. Endpoint config sweep — any hit below is a hard indicator:
grep -RIl "SymmetricKey" / --include=*.conf 2>/dev/null

# 4. Inventory installed VPN clients; flag any binary named SopraVPN* or
#    sopravpn_v*.exe / sopraconf*.conf not sourced from the official
#    WireGuard installer.

# 5. Confirm security-awareness training / hiring-process policy explicitly
#    warns IT staff never to install software provided by a prospective
#    employer before an offer is signed.
11

Detection Validation Gates

GateTestPass criterion
G1 · Telemetry readyConfirm ProcessRollup2, DnsRequest, NetworkConnectIP4 are all present for a representative Windows host and a representative Linux host over the last 24hAll three event types return rows on both platforms. Linux sensor density on sysadmin jump boxes is historically lower — verify explicitly, don't assume parity with the Windows fleet.
G2 · Benign baselineRun Q2, Q3, Q7, Q8 across 14 days with no exclusionsEach query's benign population is enumerated and written into its TUNING line before promotion
G3 · Positive control — hash/filename matchIn an isolated lab VM only, place a benign, clearly-labelled test file named SopraVPN.exe and confirm the filename regex fires (do NOT use a real campaign sample)Q1 returns the event; confirm the SHA256 arm separately with a labelled test hash
G4 · Positive control — parent/childOn the same lab host, spawn powershell.exe as a child of a process temporarily renamed SopraVPN.exeQ2 returns the event within the expected ingest delay
G5 · Positive control — networkFrom the lab host, attempt (and expect to fail/be blocked at the firewall) a connection to 139.28.36.23:51820/udpQ4 and Q5 both return the connection attempt
G6 · Negative controlConfirm Q1, Q5 and Q6 produce zero hits on a 7-day window of a known-clean OUZero hits, or every hit explained and excluded
G7 · IOC ingestImport the §10 CSV into Falcon IOC ManagementAll 13 rows accepted with no format errors
G8 · Promotion14 days of clean pilot running for the four §9 IOA candidatesFewer than one unexplained detection per 1,000 endpoints per week before moving Q1/Q5/Q6 to Prevent

Use only benign, clearly-labelled test artifacts for the positive controls, in an isolated lab VM, and remove them immediately afterwards. Never stage a real SopraVPN sample or connect a production host to the published C2 infrastructure.

12

Hardening — Tiered

This campaign succeeds by exploiting trust at three layers: the hiring process itself (human), the VPN config file (technical, but invisible to binary-only inspection), and the unmanaged endpoint (policy). The controls below close each layer independently, since any one alone still leaves the others exposed.

Immediate — deploy this week
  • Block/sinkhole DNS for soprasteria-bg.com, soprasteriabg.com, atlasgroup-ua.com, douncloud.site at the resolver/firewall. MITRE M1037 (Filter Network Traffic) · M1021 (Restrict Web-Based Content). Verify: nslookup soprasteria-bg.com <resolver> returns a sinkhole address or NXDOMAIN.
  • Import the §10 CSV into Falcon IOC Management: the five published SHA256/MD5 hashes at Prevent, domains and IP at Detect/Prevent. MITRE M1040 (Behavior Prevention on Endpoint) · M1049 (Antivirus/Antimalware). Verify: Falcon console → IOC Management shows all hashes in the intended state.
  • Publish an internal advisory to IT/sysadmin staff: never install VPN clients or any software provided by a prospective employer before an accepted offer; verify any "Sopra Steria" or similar recruiter contact through the company's official site directly, never through a link the recruiter supplies. MITRE M1017 (User Training). Verify: advisory sent and acknowledgement tracked via the security-awareness platform.
Near term — 1 to 4 weeks, pilot first
  • Enforce that corporate resources (VPN, SSO, code repos) are reachable only from managed, EDR-enrolled devices — CERT-UA's explicit recommendation, and applies even to personal devices staff might use for interviews. MITRE M1030 (Network Segmentation) · CIS Control 12 (Network Infrastructure Management). Platform: Conditional Access (Entra ID) or NAC. Verify: attempt VPN/SSO login from an unmanaged test device and confirm block (Playbook 4, §13).
  • Deploy an application-control rule (AppLocker/WDAC) blocking execution of unsigned/unknown VPN-client binaries named SopraVPN* outside an approved allowlist. MITRE M1038 (Execution Prevention) · CIS Microsoft Windows Benchmark §Application Control. Verify: attempt to run a benign, clearly-labelled test binary named SopraVPN-test.exe in a lab VM and confirm block + event log entry (Playbook 3, §13).
Strategic — 1 to 3 months
  • Roll out a managed, centrally-provisioned corporate VPN client (a single approved WireGuard/IPsec build, digitally signed, distributed only via MDM/SCCM — never via a link a third party supplies), so "download a custom VPN client from a recruiter" can never be a plausible instruction to staff. MITRE M1045 (Code Signing) · M1030 (Network Segmentation). Verify: MDM/app inventory shows only the approved signed VPN client fleet-wide.
  • Formalize a hiring-process security policy (HR + Security jointly owned) defining what a legitimate technical assessment can and cannot ask a candidate to install, with mandatory Security sign-off before any candidate-facing "test environment" instructions are sent. ⚠ best-practice, no formal CIS/NIST benchmark for this HR-security control — it directly closes the human-layer gap this entire campaign exploits. Verify: policy document exists, signed by HR + Security leads, referenced in the recruiter onboarding checklist.
13

Deployable Playbooks

Playbook 1 — DNS sinkhole for campaign domains (BIND RPZ)

; Prerequisites: BIND 9.8+ with a configured response-policy zone (RPZ);
;                rndc reload permission
; Reboot required: No (rndc reload takes effect immediately, no service restart)
; Rollback: remove the four CNAME records below from the RPZ zone file and
;           rndc reload again

; /etc/bind/db.rpz.sandworm-sopravpn — add these records
soprasteria-bg.com      CNAME   rpz-drop.
soprasteriabg.com       CNAME   rpz-drop.
atlasgroup-ua.com       CNAME   rpz-drop.
douncloud.site          CNAME   rpz-drop.

; then:
rndc reload

; Verify:
dig @<resolver> soprasteria-bg.com   ; expect NXDOMAIN or the sinkhole address

Playbook 2 — Falcon Custom IOC bulk import (falconpy)

# Prerequisites: pip install crowdstrike-falconpy; an API client with the
#                "IOC Manager Write" scope
# Reboot required: No
# Rollback: delete the imported indicators via IOC.indicator_delete() using
#           the returned indicator IDs, or set action="no_action" on each
#           to soft-disable without deleting

from falconpy import IOC

falcon = IOC(client_id="REPLACE_WITH_CLIENT_ID", client_secret="REPLACE_WITH_CLIENT_SECRET")

indicators = [
    {"type": "sha256", "value": "4646ea832a61c9f7bdb11fee64ad82ae6d9856d2f3a4b36a8a4a571145be1260",
     "action": "prevent", "severity": "critical", "platforms": ["windows"],
     "description": "SopraVPN trojanized WireGuard installer (sopravpn_v7)",
     "tags": ["campaign:Sandworm-SopraVPN"]},
    {"type": "sha256", "value": "aeb702f65445d12605a84be6fa31545c71be0bf619b1cbedbee5800a43fc6793",
     "action": "prevent", "severity": "critical", "platforms": ["windows"],
     "description": "SopraVPN.exe trojanized WireGuard client (variant 1)",
     "tags": ["campaign:Sandworm-SopraVPN"]},
    {"type": "domain", "value": "soprasteria-bg.com", "action": "detect",
     "severity": "high", "platforms": ["windows", "linux", "mac"],
     "description": "spoofed Sopra Steria Bulgaria lure site",
     "tags": ["campaign:Sandworm-SopraVPN"]},
    {"type": "domain", "value": "douncloud.site", "action": "detect",
     "severity": "critical", "platforms": ["windows", "linux", "mac"],
     "description": "SopraVPN C2 check-in domain",
     "tags": ["campaign:Sandworm-SopraVPN"]},
    {"type": "ipv4", "value": "139.28.36.23", "action": "detect",
     "severity": "critical", "platforms": ["windows", "linux", "mac"],
     "description": "rogue WireGuard endpoint udp/51820",
     "tags": ["campaign:Sandworm-SopraVPN"]},
]

response = falcon.indicator_create(comment="Sandworm SopraVPN campaign import", indicators=indicators)
print(response["status_code"], response["body"])

Playbook 3 — Windows AppLocker deny rule for SopraVPN-named binaries

# Prerequisites: AppLocker policy service (Application Identity, AppIDSvc)
#                running; Group Policy or Intune available to push the rule
# Reboot required: No (gpupdate + AppIDSvc restart is sufficient)
# Rollback: remove the deny rule from the AppLocker policy XML and re-push,
#           or set the rule to "Audit only" to stop enforcing without deleting it

# Deny rule (path-based), added to an AppLocker XML policy:
# <FilePathRule Id="..." Name="Block SopraVPN / unapproved VPN clients"
#                Description="Sandworm SopraVPN campaign" UserOrGroupSid="S-1-1-0"
#                Action="Deny">
#   <Conditions>
#     <FilePathCondition Path="*\SopraVPN*.exe" />
#   </Conditions>
# </FilePathRule>

# Verify the policy is enforced (not Audit-only):
Get-AppLockerPolicy -Effective -Xml | Select-String "SopraVPN"

# Force a re-evaluation on the target host:
gpupdate /target:computer /force
Restart-Service -Name AppIDSvc -Force

Playbook 4 — Conditional Access: require compliant device for VPN + SSO

# Prerequisites: Entra ID P1 (Conditional Access) or an equivalent NAC/ZTNA
#                enforcement point in front of the VPN concentrator and SSO
# Reboot required: No
# Rollback: set the policy State to "Off" rather than deleting it, so the
#           exact configuration can be re-enabled without rebuilding it

# Conditional Access policy (Entra ID), summarized:
Name:              Require compliant device for VPN + SSO
Assignments:       All users -> Target resource: corporate VPN app registration, SSO apps
Conditions:        Client apps = All; Device platforms = All
Grant control:     Require device to be marked as compliant  (blocks unmanaged/BYOD)
State:             Report-only for 1 week, then Enforced

# Verify (Microsoft Graph PowerShell):
Get-MgIdentityConditionalAccessPolicy -Filter "displayName eq 'Require compliant device for VPN + SSO'" |
    Select-Object DisplayName, State

Playbook 5 — Linux auditd watch for timesyncd-check and curl

#!/usr/bin/env bash
# Prerequisites: auditd installed and running (auditctl available)
# Reboot required: No (auditctl -R takes effect immediately; the rules file
#                  in /etc/audit/rules.d/ persists it across a future reboot)
# Rollback: auditctl -D to clear all custom rules, or remove the specific
#           watch lines below from the rules file and re-run augenrules --load

# Watch the exact masquerade path CERT-UA published
echo '-w /usr/libexec/timesyncd-check -p wax -k sandworm_sopravpn' >> /etc/audit/rules.d/sandworm-sopravpn.rules

# Watch curl execution — pair with process-ancestry review in Falcon (Q6)
echo '-w /usr/bin/curl -p x -k sandworm_sopravpn_curl' >> /etc/audit/rules.d/sandworm-sopravpn.rules

augenrules --load
auditctl -l | grep sandworm_sopravpn

# Query after the fact:
ausearch -k sandworm_sopravpn -i
14

Containment Runbook

PhaseActionsOwnerEvidence to capture
P0 · Triage
0–30 min
Confirm the hit is genuine: pull the full process tree around the SopraVPN/wireguard process, the imported .conf file, and any child PowerShell/cURL process. Determine whether the tunnel actually came up.SOC L1Process tree, imported config file (do not delete yet), network connection log
P1 · Isolate
within 1 h
Network-contain the host via Falcon RTR. Do not reimage yet. Block outbound to douncloud.site and 139.28.36.23 org-wide immediately upon the first confirmed hit.SOC L2 / NetworkContainment timestamp; Falcon host ID; pre-block firewall/DNS logs
P2 · Scope
1–4 h
Run Q1–Q8 estate-wide over maximum retention. Identify every host that resolved campaign infrastructure or ran a SopraVPN-family binary. Ask the affected user for the recruiter's Telegram handle and email to widen the IOC set.Threat huntingQuery result exports; affected-host list; recruiter contact details for CERT-UA reporting
P3 · Eradicate
4–24 h
Remove SopraVPN*.exe and sopraconf*.conf from disk; remove the matched scheduled task (Windows) or /usr/libexec/timesyncd-check (Linux). Rotate any credentials the affected sysadmin used post-infection (local admin, domain admin if elevated, any secrets stored on the box). If the scheduled task or cURL retrieval actually executed, treat the second-stage payload as unknown and reimage rather than clean.IR + Endpoint Eng + IAMFile hash + path + timestamps logged before deletion; credential-rotation ticket
P4 · Block
same day
Import the §10 IOC set fleet-wide. Push the §12 Immediate hardening items. Add the campaign domains to the SWG denylist.Endpoint ops + networkIOC import receipt; DNS sinkhole config version
P5 · Notify
24–48 h
Report the fake recruiter contact to CERT-UA (cert.gov.ua / @CERT_UA) or the equivalent national CSIRT, and preserve the Telegram/email thread as evidence. If SourceForge project pages are still live, consider a takedown report to SourceForge.IR lead + HRNotification record; CERT case reference; exported chat transcript, sender email headers
P6 · Recover
2–7 d
Re-enroll the host in EDR, confirm managed-device compliance, and restore VPN/SSO access only after a clean sweep. Re-run Q1–Q8 at 7 and 30 days to catch dormant re-persistence.IT Ops + IRCompliance scan result; clean-sweep evidence
P7 · Learn
within 2 w
Fold every benign hit into the query TUNING lines. Promote the §9 IOA candidates. Debrief the affected employee and run a targeted awareness push using the real lure as the example.Detection engineering + HRUpdated pack (bump to v0.2); IOA rule group export

Escalation trigger: a confirmed tunnel-up (Q4/Q5 hit) plus any child-process activity off the WireGuard binary (Q2, Q3, or Q6) means the backdoor fired, not just installed. Escalate to full incident response immediately — Sandworm's historical pattern is foothold, credential harvesting, lateral movement, then potentially destructive action against Ukrainian and allied infrastructure.

15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1593.001, T1585.001, T1583.001Résumé harvesting, fake recruiter personas, campaign domain registrationGAP — pre-compromise, human-layer; not observable in Falcon, covered only by the awareness control in §12
T1204.002SopraVPN install and executionQ1Yes (candidate)GOOD
T1027, T1140AES-256-GCM payload hidden in config; custom Base64 alphabetGAP — requires static config-content inspection, not process/network telemetry; covered by the native grep SymmetricKey hunt in §7
T1059.001, T1059.004Decrypt-and-execute backdoor trigger (PowerShell / shell)Q2Investigate-onlyPARTIAL — real benign population on the Linux PostUp side requires baselining
T1053.005, T1105Windows scheduled-task 2nd stageQ3Yes (candidate, correlated)GOOD
T1105, T1036.005Linux cURL 2nd stage / timesyncd-check masqueradeQ6Yes (candidate)GOOD
T1071.001, T1583.001DNS/network to confirmed lure and C2 infrastructureQ4, Q8No (IOC-managed instead)GOOD for static IOCs; PARTIAL for cadence-based Q8 pending baseline
T1572, T1090WireGuard tunnel to rogue endpoint / tunneled 2nd-stage retrievalQ5Yes (candidate)GOOD for the outer tunnel connection; PARTIAL for the tunneled payload itself — Falcon cannot see inside the encrypted tunnel traffic
T1608.001SourceForge hosting of the trojanized installerQ7No (pivot-only)PARTIAL — high FP, DNS-level only, must be correlated with Q1

Known gaps and what to do about them

  • Human-layer recon/resource-dev (3 gaps). Everything before the malicious download happens off any endpoint you control. Closing this is a policy and awareness problem (§12 Immediate #3, Strategic #2), not a detection problem.
  • Config-content backdoor. The SymmetricKey string and the custom Base64 alphabet live inside a data file, not in process/network telemetry — Falcon's process and network event model cannot inspect arbitrary config-file contents. The native grep hunt in §7 and the endpoint audit in §10 are the only coverage for this specific technique.
  • Encrypted tunnel payload. Once the WireGuard tunnel is up, the Linux second-stage cURL retrieval travels inside it — Falcon sees the outer tunnel connection (Q5) but not the inner HTTP(S)/plaintext request to attacker infrastructure.

Validation summary: gates G1–G8 in §11 govern promotion. G1 (telemetry present, both platforms) and G3–G5 (positive controls) must pass before any query is treated as coverage; G2 and G6 (baseline and negative control) must pass before any IOA moves past Monitor; G8 governs the move to Prevent. A query that has not passed its gate is a hypothesis, not a detection.

16

Hunt Summary Ticket

TITLE:      Sandworm/UAC-0145 Fake-Recruiter SopraVPN Trojanized WireGuard Hunt
SEVERITY:   High - nation-state, privileged-access targeting, confirmed atomic IOCs
SCOPE:      Windows + Linux endpoints belonging to IT/sysadmin staff; email gateway;
            DNS/network egress; managed-device compliance posture

HYPOTHESIS: A fake-recruiter social-engineering chain (job platform -> Telegram ->
            Zoom -> bogus VPN "technical assessment") has delivered SopraVPN, a
            trojanized WireGuard client that decrypts and executes attacker commands
            hidden in the VPN config file (SymmetricKey / AES-256-GCM), and additional
            hosts may be compromised via scheduled task (Windows) or VPN-tunneled
            cURL retrieval (Linux).

QUERIES:    Q1  SopraVPN execution (hash/filename)          CONF high  FP low
            Q2  WireGuard parent spawning PS/shell           CONF high  FP med
            Q3  Scheduled task after SopraVPN                CONF high  FP med
            Q4  Network/DNS to campaign infrastructure        CONF high  FP low
            Q5  UDP/51820 to rogue endpoint                   CONF high  FP low
            Q6  Linux cURL / timesyncd-check masquerade       CONF high  FP med
            Q7  SourceForge download (pivot only)             CONF med   FP high
            Q8  Beaconing to douncloud[.]site                 CONF med   FP med

DO FIRST:   1. Run Q1 and Q4 against the last 90 days; either firing is a confirmed
               incident, not a hunt lead.
            2. If either fires, isolate the host (Falcon RTR contain) before running
               Q2/Q3/Q6 to scope the blast radius.
            3. Import the section 10 IOC CSV at Prevent for the published hashes.
            4. Sinkhole the four campaign domains (Playbook 1).

FINDINGS:   [pending - record hit counts per query and the referring recruiter
            contact details]

GAPS:       Recon/resource-dev stages are human-layer, not visible in Falcon (see
            s15). Config-content backdoor (SymmetricKey string) requires a native
            file-content hunt (s7), not CQL. Tunneled 2nd-stage retrieval on Linux
            is invisible once inside the WireGuard tunnel.

ACTIONS:    Immediate  - DNS sinkhole, IOC import, user briefing on the hiring-lure
                         pattern
            Near term  - managed-device-only access to corporate resources,
                         AppLocker/WDAC deny rule for SopraVPN-named binaries
            Strategic  - single MDM-distributed signed corporate VPN client,
                         formal HR+Security hiring-process policy

OWNER:      HuntPack
VERSION:    v0.1 - 2026-08-23
17

Changelog

v0.12026-08-23Initial release. Built from the CERT-UA primary advisory (published 2026-08-08, article 6318863) plus four corroborating secondary sources (The Hacker News, BleepingComputer, The Record/Recorded Future News, TechTimes), all published 2026-08-10/11. Eight CQL hunt queries, four Custom IOA candidates, five atomic file hashes (SHA256+MD5), four domains and one IP with full provenance traced to the saved CERT-UA source snapshot. Scoped deliberately to the fake-recruiter/trojanized-VPN-config vector; does not duplicate the previously-published UAC0145-ClickFix-Hunt pack (CAPTCHA lures, a distinct typosquat C2 domain, GHETTOVIBE/FLUIDLEECH/FREAKYPOLL/SMARTAXE/COWARDDUCK), which covers a different UAC-0145 access track.
18

References

TierSourceUsed forAccessed
T1CERT-UA — Соціальна інженерія у виконанні UAC-0145: компрометація у процесі працевлаштування (article 6318863)Primary. Full campaign narrative, technical backdoor mechanism, and every atomic indicator in this pack.2026-08-23
T2The Hacker News — Sandworm-Linked UAC-0145 Uses Fake Job Interviews to Push VPN That Can Run CommandsCorroboration; additional SourceForge project name (hunt lead only).2026-08-23
T2BleepingComputer — Sandworm hackers target IT pros with trojanized WireGuard VPN clientCorroboration and alert-copy phrasing.2026-08-23
T2/3The Record / Recorded Future News — Russian military hackers pose as recruiters to target Ukrainian IT workersIndependent corroboration; Telegram-handle context; broader Sandworm history.2026-08-23
T2/3TechTimes — Sandworm Recruiter Scam Targets Ukrainian Sysadmins, Deploys Hidden WireGuard TrojanDeep secondary analysis, "Contagious Interview" framing, and defender guidance.2026-08-23
RefMITRE ATT&CK T1204.002 — User Execution: Malicious FileTechnique mapping for the SopraVPN install step.2026-08-23
RefMITRE ATT&CK T1027 — Obfuscated Files or InformationTechnique mapping for the config-hidden AES-256-GCM payload.2026-08-23
RefCIS Benchmarks (Microsoft Windows)Baseline citation for §12 application-control hardening.2026-08-23