STAC4749 — Microsoft Teams Vishing to Chaos Ransomware

Fake IT-helpdesk Teams calls into Quick Assist / RemSupp remote support, a PowerShell-staged Python and Golang implant chain, then Chaos ransomware in under 17 hours.
Threat
STAC4749 · Chaos RaaS
Severity
ACTIVE RaaS
Type
Social engineering → ransomware
Initial Access
Teams vishing (T1566.004)
Version
v0.1 · 2026-08-04
Author
HuntPack
Confidence
High (single-vendor primary)
01

Executive Summary

The attacker objective is a fast, hands-on-keyboard ransomware payday that never touches your perimeter. STAC4749 is a financially motivated cluster tracked by Sophos X-Ops that compromised dozens of North American organisations between February and June 2026. Roughly 95 percent of victims were in Canada (about 50 percent) and the United States (about 44 to 45 percent), concentrated in professional services, manufacturing, energy, construction and engineering, and intellectual-property law firms.

The operators never exploit a vulnerability. They register IT-themed .top domains, stand up external Microsoft Teams tenants with fake helpdesk personas, and call employees directly. A two to two-and-a-half minute conversation is usually enough to talk the user into starting a Microsoft Quick Assist session, or installing the cloud RMM tool RemSupp when Quick Assist is blocked. From April onward RemSupp became the preferred tool, most likely because it is less commonly present on application blocklists.

Once inside the remote-support session the operator uses PowerShell to stage a loader into %AppData%, profiles the host and its security products, and installs persistence through HKCU Run keys and Startup-folder VBScript shortcuts disguised as Realtek and Windows audio components. A PyInstaller Python backdoor obfuscated with PyArmour hands off to Golang implants, a reverse SOCKS proxy (sc5.exe) provides tunnelled access, and DWAgent, AnyDesk and enabled RDP provide redundant footholds. In at least three intrusions this ended in Chaos ransomware, once in under 17 hours from first Teams contact to encryption, with data theft in at least one case.

The highest-value defensive angle is the join between the identity plane and the endpoint. Every one of these intrusions requires an external Teams tenant to reach an employee, and a remote-support binary to launch shortly afterwards. Neither half is malicious alone. Together, inside a short time window, the pair is close to unambiguous. That correlation is what this pack is built around, because the malware filenames, the hosting domains and the persistence value names all changed continuously between February and May while the shape of the intrusion did not.

Defender priority: restrict Microsoft Teams external access to an allowlist of federated domains today, and alert on any remote-support tool (Quick Assist, RemSupp, DWAgent, AnyDesk) launching on a host that has had an external federated Teams conversation in the preceding hour. Blocking the indicator list alone will not stop this actor. The infrastructure rotated roughly weekly across a 40-domain payload cluster while the social-engineering play stayed identical.

02

Source Review & Web Hunter Notes

Five sources were fetched and snapshotted verbatim into the pack's source directory. Every atomic indicator shipped in this pack traces mechanically back to one of those snapshots.

TierSourceKey findingCarry forward
T1Sophos X-Ops, Chaos in Teams vishingPrimary incident-response research. Campaign attribution, full attack chain, persistence value names, loader naming patterns, certificate-pinning issuer names, persona list, the 16-domain .top vishing tenant cluster.Yes
T1SophosLabs IoCs repository, STAC4749-Chaos_IOCs_July2026.csvAuthoritative atomic indicator release. 12 IPs, 21 payload/C2 domains, 15 hosting URLs, and hashes for the loaders, backdoors, Golang implants, the sideloaded DLL and the trojanised CopyQ archive.Yes
T2BleepingComputerIndependent write-up. Corroborates the campaign timeline, victimology split, the Quick Assist to RemSupp shift, the Realtek and WinAudio persistence naming, the DWAgent/AnyDesk backup access, and the readme.chaos.txt ransom note.Yes
T3CyberPressCorroborates the .top tenant tradecraft, the msconfig RDP-enablement step, the gRPC loader C2 protocol, and the AppData\Roaming staging directory.Partial
T3SOCFortress (Medium)Corroborates the three hard-coded loader C2 IP:443 pairs, the PyInstaller/PyArmour packaging, the certificate-pinning CA names, and the sc5.exe reverse SOCKS proxy behaviour.Partial

Decisions taken during research

  • No indicator ships at prevent/critical. The two-independent-source bar is not met by anything in this campaign. The Sophos blog and the SophosLabs CSV are the same organisation and count as one source. BleepingComputer, CyberPress and SOCFortress are all derivative reporting on that single vendor investigation, not independent telemetry. Everything therefore ships at detect or lower, and the pack says so rather than quietly inflating severity.
  • The vendor CSV contains one malformed hash. The SHA-256 row for msupdate.exe is 63 hex characters, not 64. It was dropped rather than repaired by guesswork. The well-formed MD5 for the same sample ships in its place.
  • Cloudflare edge addresses were not shipped. The vendor CSV annotates most payload domains with the Cloudflare IPs they resolved to (104.21.x, 172.67.x, 172.64.x). Those are shared CDN front-ends, not actor infrastructure. Blocking them would break a large fraction of the public internet.
  • Bare workers.dev was not shipped. It is a shared Cloudflare Workers domain used by millions of legitimate deployments. The three specific attacker subdomains ship at medium severity instead, with the caveat that Workers subdomains are cheap and disposable.
  • Generic implant filenames were not shipped as indicators. The Golang implants use single-word English nouns (graph.exe, confirm.exe, midnight.exe, shield.exe, tube.exe, dizzy.exe, agree.exe, autumn.exe). Alerting on those names would generate constant noise. Their hashes ship, and Q12 hunts the --token-raw command-line argument that the whole family shares, which is the durable signal.
  • Legitimate tooling is hunted contextually, never blocklisted. Quick Assist, RemSupp, DWAgent, AnyDesk, RDP, msconfig and CopyQ are all real software with real business use. Every query touching them is scoped by parent process, first-appearance rarity, execution path, or correlation with an external Teams conversation.
  • No prompt-injection attempt was found in any fetched page. One fetch of the Sophos article returned a partial refusal from the retrieval tooling rather than the full technique narrative. That is a tool-side limitation, not adversarial page content, and the missing detail was recovered from the corroborating sources.
03

Hunt Brief & Attack Chain

Attack chain

#StepTelemetryHunt angle
1External Teams tenant on an IT-themed .top domain opens a chat or voice call with a fake helpdesk persona.Purview / Teams audit, Entra sign-in logsExternal federated chat from a non-allowlisted domain. See section 7.
2User is talked into starting Microsoft Quick Assist, or installing RemSupp when Quick Assist is blocked.ProcessRollup2, InstalledApplicationQ1, Q2. Rarity plus correlation with step 1.
3Operator runs PowerShell inside the remote-support session to download a first-stage loader into %AppData%.ProcessRollup2Q3, Q4. Remote-support parent spawning a shell, download cradle writing an EXE.
4Loader lands with a randomised name (sekv_, helper_, 74fs_ plus a 10-digit numeric string) and beacons over gRPC to a hard-coded C2 on 443.ProcessRollup2, PeFileWritten, NetworkConnectIP4Q5, Q6, Q13.
5Registry-based discovery of the host and its installed security products.ProcessRollup2Q9. Registry reads are not directly emitted, so this is hunted through the discovery command lines.
6Persistence via HKCU Run keys and Startup-folder .vbs shortcuts, named to imitate Realtek HD Audio, Realtek Audio UHD and WinAudio components.AsepValueUpdate, RegGenericValueUpdate, ProcessRollup2Q7, Q8. The discriminator is the target path, not the value name.
7PyInstaller/PyArmour Python backdoor (updater.exe, msupdate.exe) retrieves its AES key and IV from a public GitHub repository and hands off to Golang implants.ProcessRollup2, NetworkConnectIP4, DnsRequestQ12, Q13, Q14.
8DLL sideloading through a trojanised CopyQ build (vcruntime140_1.dll) for stealthier execution.ProcessRollup2, ZipFileWrittenQ10.
9Lateral movement: RDP enabled through the Terminal Server registry key and msconfig, plus DWAgent and AnyDesk as redundant access.RegSystemConfigValueUpdate, ProcessRollup2, UserLogonQ2, Q11.
10sc5.exe reverse SOCKS proxy tunnels operator traffic out to legio[.]name.ProcessRollup2, NetworkConnectIP4, DnsRequestQ13, Q14.
11Data theft (observed in at least one intrusion), then Chaos ransomware deployed simultaneously across compromised hosts, dropping readme.chaos.txt.ProcessRollup2, RansomwareOpenFileQ15, Q16.

Hunt hypotheses, ordered by fidelity

#HypothesisMITREFalcon eventsExpected FP sourceConf
H1A process on an endpoint carries the --token-raw argument, the authentication flag shared by every Golang implant in this toolkit.T1105, T1571ProcessRollup2Effectively none observed.HIGH
H2An endpoint contacts one of the hard-coded loader, backdoor or implant C2 addresses.T1071, T1090NetworkConnectIP4Address reuse after actor abandonment.HIGH
H3A remote-support binary is the parent of a shell, script host or download utility.T1219, T1059.001ProcessRollup2Genuine helpdesk remediation scripts.HIGH
H4An executable matching the randomised <prefix>_<10 digits>.exe loader pattern executes from a user-writable directory.T1036, T1204.004ProcessRollup2, PeFileWrittenVersioned installer stubs and update caches.HIGH
H5A Run-key value named after a Realtek or Windows audio component points at a user-writable path instead of Program Files.T1547.001, T1036.005AsepValueUpdatePortable audio utilities installed per-user.HIGH
H6Chaos pre-encryption behaviour: shadow copy deletion, backup catalogue deletion, recovery disablement.T1490, T1489ProcessRollup2Backup and imaging software maintenance jobs.HIGH
H7Microsoft Quick Assist launches on a host where it is not part of the normal support workflow.T1219ProcessRollup2Legitimate helpdesk use of Quick Assist.MEDIUM
H8An RMM or remote-support tool appears on a very small number of hosts for the first time.T1219ProcessRollup2Pilot deployments, contractors, shadow IT.MEDIUM
H9RDP is enabled through a direct write to the Terminal Server registry key.T1021.001, T1112RegSystemConfigValueUpdateIT enabling RDP for a genuine support case.MEDIUM
H10A CopyQ binary runs from a user-writable directory, consistent with the trojanised archive used for DLL sideloading.T1574.002ProcessRollup2Portable-app users running CopyQ legitimately.MEDIUM
H11Endpoint DNS resolves one of the payload-hosting or C2 domains.T1071.001, T1105DnsRequestSecurity tooling detonating samples.HIGH
H12A process performs registry-based security-product enumeration shortly after a remote-support session.T1518.001, T1082ProcessRollup2Asset inventory and compliance agents.LOW
04

Consolidated IOC Table

70 atomic indicators ship in this pack: 12 IP addresses, 40 domains and 18 file hashes. The full importable list is in section 10. Representative entries and the reasoning behind each severity choice are below.

TypeValueConfActionContextExpiry
ipv494[.]140[.]114[.]192
94[.]140[.]115[.]18
94[.]140[.]115[.]129
highdetectHard-coded gRPC C2 in the first-stage loader, observed on tcp/443. Named by both Sophos and SOCFortress.2027-02-04
ipv4208[.]91[.]112[.]55
193[.]29[.]57[.]37
highdetectPayload staging servers for additional tooling.2027-02-04
ipv4195[.]133[.]38[.]33highdetectC2 for the PyInstaller Python backdoor.2027-02-04
ipv495[.]81[.]118[.]189
130[.]49[.]214[.]20
2[.]58[.]15[.]231
highdetectGolang implant C2. Tied by the vendor to autumn.exe, shield.exe, dizzy.exe and the 7414fs loader.2027-02-04
ipv493[.]88[.]205[.]136
5[.]8[.]18[.]80
2[.]58[.]14[.]254
mediumenrichSource addresses of the Teams vishing calls. These sit on the identity plane and will normally never appear in endpoint network telemetry, so they ship as monitor-only context rather than a detection.2026-09-04
domainlegio[.]namehighdetectC2 for the sc5.exe reverse SOCKS proxy. Corroborated by Sophos and SOCFortress.2027-02-04
domainfa5[.]flsdwnld[.]online
fa2[.]filesdwnload[.]top
fa103[.]aohoodie[.]com
plus 15 more in the payload cluster
highdetectPayload-hosting cluster across the filesdwnld / fldwnld / filldowl / dowlfles / downlf / dwlfils / aohoodie / artcnb families, all fronted by Cloudflare. Rotated continuously through the campaign.2027-02-04
domainimarketads[.]com
jrown[.]fun
highdetectC2 for the sideloaded vcruntime140_1.dll and for the backdoor respectively.2027-02-04
domainconf[.]grahql[.]workers[.]dev
webconf[.]shop-api[.]workers[.]dev
api[.]grahql[.]workers[.]dev
mediumdetectCloudflare Workers subdomains used for backdoor C2. Shipped as specific subdomains only. The bare workers.dev apex is deliberately excluded, it is shared infrastructure used by millions of legitimate deployments.2026-11-04
domainsequrityupdate[.]top
scan-security[.]top
system-connect[.]top
plus 13 more .top personas
mediumdetectDomains behind the fake IT-helpdesk Teams tenants. Their primary value is in the Teams and Entra federation allowlist, not on the endpoint. An endpoint resolving one of these is nonetheless worth investigating.2026-11-04
sha2561cf3131b6f487067b3746dd4743544fbbfa553fb2941176b8213996aac61425c
plus 5 more loader hashes
highdetectFirst-stage loaders shipped as sekv*.exe and helper*.exe.2027-02-04
sha256bb96d21b7a61628724f13c6d4506b9d7bb56020d1c41fc79310f74666bb75904
35a75212862ce719ae6de1758949be33a3de787fab31e2d98436bacce8369d92
highdetectPython backdoor updater.exe and the sc5.exe reverse SOCKS proxy.2027-02-04
md536e80c375861d3ff0a55d5e49c8fe12ehighdetectPython backdoor msupdate.exe. The vendor SHA-256 for this sample is malformed (63 hex characters) and was dropped rather than reconstructed, so the MD5 carries this sample.2027-02-04
sha256cd3163a308ba40c3a5e153c0326b7cf23a36debb6255624f9afb7e7ca5182391
d8fed5a9fa8baee68d241190f29a2e91f5c549a684cb66c92de3974fc9f3db22
highdetectMalicious vcruntime140_1.dll and the trojanised copyq-13.0.0.zip archive it ships inside.2027-02-04
behavioural--token-raw command-line argumenthighdetectShared authentication flag across the entire Golang implant family. Outlives every filename and hash in this table.n/a
behaviouralreadme.chaos.txt ransom notehighdetectDropped at encryption time. A file-integrity or DLP rule on this name is a last-chance tripwire.n/a

Nothing in this pack ships at prevent or critical. All public reporting on STAC4749 traces back to a single vendor investigation, so the two-independent-source bar for a blocking indicator is not met. Promote to prevent once your own telemetry or a second vendor confirms a hit in your estate.

05

Affected Surface & Telemetry Matrix

This intrusion spans three planes. Endpoint telemetry alone will catch the malware but not the entry, and identity telemetry alone will catch the entry but not the ransomware. Both are required for the correlation that makes this campaign cheap to detect.

SurfaceRequired telemetryPriorityGap risk if absent
Microsoft Teams / Entra ID federationPurview unified audit log (Teams chat and call events), Entra sign-in logs, tenant federation configurationCRITICALTotal. Step 1 of the chain is invisible, and the correlation this pack is built on cannot be computed.
Windows endpoint, process executionFalcon ProcessRollup2 / SyntheticProcessRollup2CRITICALTotal. 11 of 16 queries depend on it.
Windows endpoint, registryAsepValueUpdate, RegGenericValueUpdate, RegSystemConfigValueUpdateHIGHPersistence and RDP enablement go unseen. Attacker survives reboot and remediation.
Windows endpoint, file writesPeFileWritten, NewExecutableWritten, ZipFileWrittenHIGHStaging of loaders and the trojanised CopyQ archive is missed. Execution-time queries still fire.
Windows endpoint, networkNetworkConnectIP4, DnsRequestHIGHAll atomic C2 detection is lost. Behavioural queries still fire.
Windows endpoint, ransomware behaviourRansomwareOpenFileMEDIUMLast-chance mass-encryption tripwire is lost. This is a late-stage signal and should never be the primary control.
Egress proxy / DNS resolverProxy logs, DNS resolver logs, newly-registered-domain feedMEDIUMLoss of a second, sensor-independent view of the payload cluster and of .top resolution.
Backup infrastructureBackup job logs, immutability / object-lock stateHIGHRecovery becomes negotiation. Chaos deletes shadow copies and tampers with backup services before encrypting.
macOS / Linuxn/aLOWNo reporting places STAC4749 on non-Windows endpoints. The Teams vishing entry is platform-agnostic, but the toolkit observed is Windows-only.
06

ATT&CK Mapping

TacticTechniqueObserved behaviourQuery or control
Initial AccessT1566.004 · Phishing: Spearphishing VoiceFake IT-helpdesk personas call employees over Microsoft Teams from external tenants on IT-themed .top domains.Section 7 native hunts; Playbook P1
Initial AccessT1199 · Trusted RelationshipAbuse of open Teams federation to reach employees as an apparently internal contact.Playbook P1
ExecutionT1204.004 · User Execution: Malicious Copy and PasteUser is talked through launching the remote-support session and, in some cases, running the operator's commands.Q1, Q2; user awareness control H9
ExecutionT1059.001 · PowerShellPowerShell download cradle stages the loader into %AppData% and unblocks it before execution.Q3, Q4; Playbook P5
PersistenceT1547.001 · Registry Run Keys / Startup FolderHKCU Run values and Startup-folder .vbs shortcuts.Q7, Q8
Privilege EscalationT1078.003 · Valid Accounts: Local AccountsOperator inherits the interactive user's session and privileges through the remote-support tool.Control H11 (remove standing local admin)
Defense EvasionT1036.005 · Masquerading: Match Legitimate Name or LocationPersistence values named Realtek HD Audio, Realtek Audio UHD, WinAudio life2. Implants named as single English nouns.Q7, Q12
Defense EvasionT1574.002 · DLL Side-LoadingTrojanised CopyQ archive sideloads a malicious vcruntime140_1.dll.Q10
Defense EvasionT1027.002 · Obfuscated Files: Software PackingPyInstaller packaging with PyArmour obfuscation; AES key and IV pulled from a public GitHub repository at runtime.Q6, Q13; control H4
DiscoveryT1518.001 · Security Software DiscoveryRegistry enumeration of installed security products before payload staging.Q9
DiscoveryT1082 · System Information DiscoveryHost profiling by the first-stage loader.Q9
Command and ControlT1219 · Remote Access SoftwareQuick Assist, RemSupp, DWAgent and AnyDesk used for interactive access and redundancy.Q1, Q2; Playbook P2
Command and ControlT1071.001 · Application Layer Protocol: Web ProtocolsgRPC over tcp/443 to hard-coded C2, plus HTTPS payload retrieval from a rotating Cloudflare-fronted cluster.Q13, Q14
Command and ControlT1090 · Proxysc5.exe reverse SOCKS proxy to legio[.]name.Q13, Q14
Command and ControlT1105 · Ingress Tool TransferGolang implants and follow-on tooling pulled down over HTTPS and launched with --token-raw.Q4, Q12
Lateral MovementT1021.001 · Remote Desktop ProtocolRDP enabled by direct registry modification and via msconfig.Q11; Playbook P4
Collection / ExfiltrationT1567 · Exfiltration Over Web ServiceData theft observed in at least one intrusion prior to encryption.Q13, Q14; control H12
ImpactT1490 · Inhibit System RecoveryShadow copy and backup catalogue deletion before encryption.Q15; control H8
ImpactT1489 · Service StopSecurity and backup services tampered with prior to deployment.Q15
ImpactT1486 · Data Encrypted for ImpactChaos ransomware encrypts simultaneously across hosts and drops readme.chaos.txt.Q16
07

Native Audit-Log Hunts

Falcon cannot see step 1 of this chain. The queries below run outside the EDR and supply the identity half of the correlation that makes every endpoint query in section 8 dramatically more decisive.

Microsoft Purview / Teams unified audit log

  • Search MessageSent, MessagesListed and ChatCreated operations where the initiating user's domain is external to your tenant. Rank external domains by how many distinct internal recipients they contacted in a day. A first-seen external domain fanning out to several employees within an hour is the signature of this campaign, regardless of what the domain is called.
  • Filter specifically for external participants whose domain ends in .top, or whose display name contains helpdesk vocabulary such as IT, support, helpdesk, security, service or update. The observed personas used ordinary first-and-last-name pairs, so hunt the domain and the fan-out pattern rather than the name.
  • Pull Teams call detail records for external inbound calls of 60 seconds or longer. The observed calls ran from roughly 90 seconds to over 20 minutes, clustering around two to two and a half minutes.
  • Cross-reference the timestamp of any such call with the endpoint's first Quick Assist or RemSupp execution. That pairing is the single highest-value alert in this pack.

Entra ID

  • Review Get-CsTenantFederationConfiguration for AllowFederatedUsers and the allowed and blocked domain lists. An empty allowlist with federation enabled means any tenant on the internet can chat your staff.
  • Review Get-CsExternalAccessPolicy assignments. Look for a permissive global policy that was never overridden per-user.
  • Check cross-tenant access settings for inbound B2B collaboration and B2B direct connect defaults.

Windows event logs (where Falcon coverage is thin or the host is unmanaged)

  • Security 4688 process creation with command line, filtered to parent quickassist.exe, remsupp*.exe, dwagent*.exe or anydesk.exe.
  • Security 4624 with LogonType 10 (RemoteInteractive) on hosts that had no RDP history, following an RDP enablement in the registry.
  • Security 4657 registry value modification on the Run keys and on HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\fDenyTSConnections. Requires SACL configuration to be useful.
  • Microsoft-Windows-PowerShell/Operational 4104 script block logging for download cradles and for Unblock-File against a path in %AppData%.
  • Sysmon 11 and 13, if deployed, for the Startup-folder .vbs drop and the Run-key write.

Network and DNS

  • Query proxy and resolver logs for the payload cluster families listed in section 10, and for any newly registered .top domain resolved by a workstation.
  • Alert on outbound tcp/443 to the C2 addresses in section 10 from any process that is not a browser or a known updater.
  • Hunt for direct-to-IP HTTPS on 443 with no preceding DNS resolution, which is how the hard-coded gRPC loader C2 behaves.

File integrity and backup

  • Alert on creation of any file named readme.chaos.txt on a file server or in a user share. This is a late signal but a cheap one.
  • Alert on backup job failures or on deletion of backup catalogues that were not initiated by the backup service account.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.

Time windows are set in the console, not in the query. None of these queries carry an in-query timeframe filter. Set the range in the Falcon search bar. Suggested starting windows are noted per card.

Q1 · Microsoft Quick Assist launched, ranked by rarity
CONF MEDFP MEDCOST LOW

Looks for: every host that has launched Quick Assist, grouped so the rare ones float to the top. In most estates Quick Assist runs on a handful of known support machines, so a first-ever launch on a finance or legal workstation is the interesting row. Cross-reference each hit against the Teams external-chat hunt in section 7. FP: a genuine helpdesk that uses Quick Assist as its standard tool will light up broadly; suppress by the support OU or the operator account rather than by host. Suggested window: 30 days.

// HUNT: Microsoft Quick Assist execution, ranked by fleet rarity
// MITRE: T1219 | CONF: medium  FP: medium  COST: low
// REQUIRES: ProcessRollup2 / SyntheticProcessRollup2
// FALSE POSITIVES: legitimate IT helpdesk sessions; Windows built-in support flows
// TUNING: exclude your helpdesk operator accounts and the support OU, e.g. add
// TUNING: | UserName!=/^(svc-helpdesk|it-support)/i  -- and drop hosts in the IT asset group
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^quickassist(\.exe)?$/i
| groupBy([ComputerName, UserName],
    function=[
      count(as=Launches),
      min(@timestamp, as=FirstSeen),
      max(@timestamp, as=LastSeen),
      collect([ParentBaseFileName, CommandLine], limit=5)
    ], limit=20000)
| sort(FirstSeen, order=desc, limit=500)
Q2 · Remote-support / RMM tool first appearance in the estate
CONF MEDFP MEDCOST MED

Looks for: remote-support and RMM binaries that are present on only a small number of hosts. STAC4749 shifted to RemSupp in April precisely because it is rarely on a blocklist, and installed DWAgent or AnyDesk as redundant access in the intrusions that reached ransomware. The signal is not the tool, it is the tool being new and rare. FP: pilot deployments, contractors and managed service providers legitimately introduce rare RMM tools. Suggested window: 30 days, so the rarity count means something.

// HUNT: rare / first-seen remote-support and RMM tooling across the fleet
// MITRE: T1219 | CONF: medium  FP: medium  COST: medium
// REQUIRES: ProcessRollup2 / SyntheticProcessRollup2
// FALSE POSITIVES: sanctioned RMM rollouts, MSP tooling, contractor laptops, IT pilots
// TUNING: raise the DistinctHosts ceiling above your sanctioned RMM's install count,
// TUNING: then drop your approved product from the FileName regex entirely so it
// TUNING: never competes with the rare tools you actually want to see
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^(remsupp|dwagent|dwagsvc|dwrcs|anydesk|quickassist|teamviewer|screenconnect|connectwisecontrol|atera|splashtop|gotoassist|logmein|ultraviewer|rustdesk)[a-z0-9_\-]{0,12}(\.exe)?$/i
| groupBy([FileName],
    function=[
      count(aid, distinct=true, as=DistinctHosts),
      count(as=Executions),
      collect([ComputerName, UserName], limit=25),
      min(@timestamp, as=FirstSeen)
    ], limit=20000)
| DistinctHosts < 6
| sort(FirstSeen, order=desc, limit=200)
Q3 · Shell, script host or download utility spawned by a remote-support session
CONF HIGHFP LOWCOST LOW

Looks for: the exact pivot point of this intrusion. A remote-support tool is the parent, and a shell, script host or download utility is the child. This is what the operator does within seconds of the user clicking Allow. It is the highest-fidelity endpoint-only query in this pack because the parent-child pair is rare even in estates that use Quick Assist daily. Suggested window: 7 days for alerting, 30 days for a retrospective sweep.

// HUNT: remote-support binary spawning a shell / script host / download utility
// MITRE: T1219, T1059.001 | CONF: high  FP: low  COST: low
// REQUIRES: ProcessRollup2 / SyntheticProcessRollup2
// FALSE POSITIVES: helpdesk staff running genuine remediation scripts in-session
// TUNING: if your helpdesk legitimately scripts in-session, keep the query and
// TUNING: exclude only their signed script paths via CommandLine, never the parent
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^(quickassist|remsupp|dwagent|dwagsvc|dwrcs|anydesk|msra|teamviewer|screenconnect)[a-z0-9_\-]{0,12}(\.exe)?$/i
| FileName=/^(powershell|pwsh|cmd|mshta|wscript|cscript|curl|certutil|bitsadmin|rundll32|regsvr32|msiexec)(\.exe)?$/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData])
| sort(@timestamp, order=desc, limit=500)
Q4 · PowerShell download cradle staging an executable into a user-writable path
CONF HIGHFP MEDCOST LOW

Looks for: the first-stage delivery command. The observed cradle fetches an EXE over HTTPS, writes it under %APPDATA%, calls Unblock-File to strip the mark-of-the-web, then starts it with an argument. Requiring the download verb, the user-writable destination and the .exe extension together keeps this tight. FP: software deployment scripts and developer tooling do this legitimately; exclude by the signed script path or the deployment service account, not by removing the AppData condition. Suggested window: 7 days.

// HUNT: PowerShell download cradle writing an EXE into AppData / ProgramData / Temp
// MITRE: T1059.001, T1105 | CONF: high  FP: medium  COST: low
// REQUIRES: ProcessRollup2 with CommandLine
// FALSE POSITIVES: software deployment scripts, dev tooling, package managers
// TUNING: exclude your deployment service account and the signed script directory,
// TUNING: e.g. | UserName!=/^svc-deploy$/i  and  | CommandLine!=/ProgramData\\PackageCache/i
// TUNING: keep Unblock-File in the OR list -- it is the strongest single token here
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^(powershell|pwsh)(\.exe)?$/i
| CommandLine=/(Invoke-WebRequest|iwr\s|Start-BitsTransfer|DownloadFile|DownloadString|WebClient|Unblock-File)/i
| CommandLine=/(AppData|ProgramData|\\Temp\\|\$env:APPDATA|\$env:TEMP)/i
| CommandLine=/\.exe/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine])
| sort(@timestamp, order=desc, limit=500)
Q5 · First-stage loader naming pattern executed
CONF HIGHFP LOWCOST LOW

Looks for: the campaign's loader naming convention: a short alphabetic prefix, an underscore or nothing, then a randomised 10-digit numeric string, then .exe. Sophos observed sekv_, helper_, 74fs_ and 7414fs variants, plus ms_876234.exe. This query targets the named prefixes for precision. Q6 covers the generic shape for hosts where the prefix has rotated again. Suggested window: 30 days.

// HUNT: STAC4749 randomised loader filename pattern at execution time
// MITRE: T1036, T1204.004 | CONF: high  FP: low  COST: low
// REQUIRES: ProcessRollup2 / SyntheticProcessRollup2
// FALSE POSITIVES: none observed for these specific prefixes
// TUNING: the ms prefix is the loosest of the set; if it produces noise from a
// TUNING: vendor updater, drop ms from the alternation and rely on Q6 for that shape
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^(sekv|helper|74fs|7414fs|ms)[_\-]?[0-9]{6,12}[_\-]?(\.exe)?$/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, SHA256HashData, CommandLine])
| sort(@timestamp, order=desc, limit=500)
Q6 · New executable written to a user-writable path with a randomised numeric name
CONF MEDFP MEDCOST MED

Looks for: the durable shape rather than the specific prefix. Sophos noted the attackers changed malware filenames continuously between February and May, so the prefix list in Q5 will decay. What did not change is the shape: a short word, a long random numeric run, and an EXE landing in AppData, ProgramData or Temp. FP: installers and update caches write versioned executables into ProgramData; exclude by the writing process rather than by loosening the numeric run. Suggested window: 14 days.

// HUNT: EXE with a randomised long numeric suffix written to a user-writable path
// MITRE: T1036, T1105 | CONF: medium  FP: medium  COST: medium
// REQUIRES: PeFileWritten / NewExecutableWritten
// FALSE POSITIVES: installer and updater caches (package managers, browser updaters,
// FALSE POSITIVES: EDR and RMM agents staging versioned payloads into ProgramData)
// TUNING: exclude the writing process first, not the path, e.g.
// TUNING: | ContextBaseFileName!=/^(msiexec|setup|teamsupdate|googleupdate|update)/i
#event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/
| TargetFileName=/\\(AppData|ProgramData)\\/i
| TargetFileName=/[a-z]{2,10}[_\-]?[0-9]{8,12}[_\-]?\.exe$/i
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, TargetFileName, SHA256HashData])
| sort(@timestamp, order=desc, limit=500)
Q7 · Run-key persistence masquerading as a Realtek or Windows audio component
CONF HIGHFP LOWCOST LOW

Looks for: the campaign's signature persistence. Value names observed include Realtek HD Audio, Realtek HD Audio Universal Service, Realtek Audio, Realtek Audio UHD and WinAudio life2, plus SecurityHealth and OneDriveUpdate. The discriminator is not the name, it is the target: a genuine Realtek autostart points into Program Files or System32, never into AppData or ProgramData. That path condition is what turns a noisy name-match into a high-confidence hit. Suggested window: 30 days.

// HUNT: autostart value impersonating an audio driver but pointing at a user-writable path
// MITRE: T1547.001, T1036.005 | CONF: high  FP: low  COST: low
// REQUIRES: AsepValueUpdate / RegGenericValueUpdate
// FALSE POSITIVES: per-user portable audio utilities that self-install into AppData
// TUNING: keep the RegStringValue path condition -- it is the whole detection. If a
// TUNING: legitimate per-user audio tool fires, exclude it by its exact SHA256 via a
// TUNING: follow-up ProcessRollup2 pivot, never by widening the path filter
#event_simpleName=/^(AsepValueUpdate|RegGenericValueUpdate)$/
| RegObjectName=/\\CurrentVersion\\Run/i
| RegValueName=/(Realtek|WinAudio|Audio\s?UHD|Universal\s?Service|SecurityHealth|OneDriveUpdate)/i
| RegStringValue=/\\(AppData|ProgramData|Users\\Public|Temp)\\/i
| table([@timestamp, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue])
| sort(@timestamp, order=desc, limit=500)
Q8 · Startup-folder VBScript launcher
CONF MEDFP MEDCOST LOW

Looks for: the second persistence mechanism. Sophos observed mklink-%.vbs scripts creating hidden shortcuts in the Startup folder, which survives the removal of the Run key and is frequently missed during remediation. Hunt the script host executing from or writing into the Startup path. FP: legacy line-of-business logon scripts still use VBScript from the Startup folder in some estates; enumerate and allowlist those by path once. Suggested window: 30 days.

// HUNT: wscript / cscript touching the Startup folder or a mklink-style VBS dropper
// MITRE: T1547.001, T1059.005 | CONF: medium  FP: medium  COST: low
// REQUIRES: ProcessRollup2 with CommandLine
// FALSE POSITIVES: legacy VBScript logon scripts placed in the Startup folder by GPO
// TUNING: enumerate your legitimate Startup .vbs set once, then exclude by exact path,
// TUNING: e.g. | CommandLine!=/legacy-mapdrives\.vbs/i -- do not exclude the folder
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^(wscript|cscript)(\.exe)?$/i
| CommandLine=/(\\Start Menu\\Programs\\Startup\\|mklink|\\AppData\\Roaming\\.{0,60}\.vbs)/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine])
| sort(@timestamp, order=desc, limit=500)
Q9 · Security-product and system discovery
CONF MEDFP HIGHCOST MED

Looks for: the loader's profiling step. Sophos describes registry-based enumeration of the host and its installed security products before payload staging. Falcon does not emit registry read events, so this hunts the command-line surface of the same behaviour instead. FP: genuinely high. Asset inventory agents, compliance scanners and support scripts all enumerate installed security products routinely. Treat this as a corroborating signal for a host already surfaced by Q1 through Q6, not as a standalone alert. Suggested window: 7 days, host-scoped.

// HUNT: security software and system discovery command lines
// MITRE: T1518.001, T1082 | CONF: medium  FP: high  COST: medium
// REQUIRES: ProcessRollup2 with CommandLine
// FALSE POSITIVES: asset inventory agents, compliance scanners, vulnerability scanners,
// FALSE POSITIVES: helpdesk triage scripts, Defender health checks run by IT
// TUNING: run this host-scoped against a host already flagged by Q1-Q6 rather than
// TUNING: fleet-wide. Fleet-wide, first exclude your inventory agent by parent, e.g.
// TUNING: | ParentBaseFileName!=/^(ccmexec|amagent|nessusd|qualys-cloud-agent)/i
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| CommandLine=/(SecurityCenter2|AntiVirusProduct|AntiSpywareProduct|Get-MpComputerStatus|Get-MpPreference|wmic.{0,40}antivirus|reg\s+query.{0,60}CurrentVersion\\Uninstall)/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine])
| sort(@timestamp, order=desc, limit=500)
Q10 · CopyQ running from a user-writable directory (DLL side-loading host)
CONF MEDFP LOWCOST LOW

Looks for: the side-loading host. The actor distributed a trojanised copyq-13.0.0.zip whose legitimate CopyQ binary loads a malicious vcruntime140_1.dll from its own directory. CopyQ is a real clipboard manager, so the signal is the location: an install under AppData, Downloads, Temp or Users\Public rather than Program Files. Pair any hit with the CopyQ archive and DLL hashes in section 10. Suggested window: 30 days.

// HUNT: CopyQ executing from a user-writable path (trojanised archive / DLL side-load)
// MITRE: T1574.002 | CONF: medium  FP: low  COST: low
// REQUIRES: ProcessRollup2 / SyntheticProcessRollup2
// FALSE POSITIVES: users who legitimately run the portable CopyQ build from Downloads
// TUNING: confirm any hit against the vcruntime140_1.dll and copyq-13.0.0.zip hashes
// TUNING: in section 10 before escalating; a clean portable install is benign
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^copyq(\.exe)?$/i
| ImageFileName=/\\(AppData|ProgramData|Temp|Downloads|Users\\Public)\\/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, SHA256HashData])
| sort(@timestamp, order=desc, limit=500)
Q11 · RDP enabled through the Terminal Server registry key
CONF MEDFP MEDCOST LOW

Looks for: the lateral-movement enabler. The operators turned on RDP on the initial host by modifying Windows service configuration, including through msconfig, to move onward. On a workstation that has never accepted RDP, a write to fDenyTSConnections is a strong signal. FP: IT legitimately enables RDP for support. Discriminate by whether the change came from a management platform (SCCM, Intune, GPO) or from an interactive user session inside a remote-support window. Suggested window: 30 days.

// HUNT: RDP enablement via the Terminal Server registry key
// MITRE: T1021.001, T1112 | CONF: medium  FP: medium  COST: low
// REQUIRES: RegSystemConfigValueUpdate / RegGenericValueUpdate
// NOTE: RegStringValue is projected for context. On some sensor versions a DWORD
// NOTE: lands in a numeric field instead and this column reads empty.
// NOTE: field presence is tenant-specific -- validate in tenant before filtering on it.
// FALSE POSITIVES: sanctioned RDP enablement by GPO, SCCM, Intune or a build task
// TUNING: correlate each hit with a Q1/Q2/Q3 hit on the same ComputerName within the
// TUNING: preceding 24h. Standalone, exclude your management platform's service account
#event_simpleName=/^(RegSystemConfigValueUpdate|RegGenericValueUpdate|AsepValueUpdate)$/
| RegObjectName=/\\Terminal Server/i
| RegValueName=/^(fDenyTSConnections|UserAuthentication|fSingleSessionPerUser)$/i
| table([@timestamp, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue])
| sort(@timestamp, order=desc, limit=500)
Q12 · Golang implant authentication argument (--token-raw)
CONF HIGHFP LOWCOST LOW

Looks for: the one string this entire toolkit could not change. Every Golang implant in the campaign is launched with a --token-raw argument carrying its authentication token, and the observed PowerShell cradle passes it at Start-Process time. The implant binaries are named as ordinary English nouns (graph, confirm, midnight, shield, tube, dizzy, agree, autumn), which is deliberately unhuntable by name. The argument is not. This is the single best behavioural detection in the pack and it should be promoted to a Custom IOA. Suggested window: 90 days for a retrospective sweep.

// HUNT: STAC4749 Golang implant launched with its --token-raw authentication flag
// MITRE: T1105, T1036.005 | CONF: high  FP: low  COST: low
// REQUIRES: ProcessRollup2 with CommandLine
// FALSE POSITIVES: none observed. The flag is not used by common legitimate tooling.
// TUNING: if a bespoke internal tool uses this flag, exclude it by SHA256HashData,
// TUNING: never by FileName -- the implant names rotate and are generic by design
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| CommandLine=/--token-raw/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, SHA256HashData, CommandLine])
| sort(@timestamp, order=desc, limit=500)
Q13 · Egress to known STAC4749 command-and-control addresses
CONF HIGHFP LOWCOST LOW

Looks for: the nine endpoint-observable C2 addresses published by SophosLabs, covering the hard-coded loader C2 on tcp/443, the payload staging servers, the Python backdoor C2 and the Golang implant C2. The three Teams vishing call-source addresses are deliberately excluded here, they sit on the identity plane and will not appear in endpoint network telemetry. Projecting ContextBaseFileName tells you immediately which process is talking. Suggested window: 90 days, then keep running.

// HUNT: outbound connection to a published STAC4749 C2 address
// MITRE: T1071.001, T1090 | CONF: high  FP: low  COST: low
// REQUIRES: NetworkConnectIP4
// FALSE POSITIVES: address reuse after the actor abandons the host; security tooling
// FALSE POSITIVES: detonating samples from a sandbox VM inside your address space
// TUNING: exclude your malware-analysis subnet by ComputerName before alerting
#event_simpleName=/^NetworkConnectIP4$/
| in(RemoteAddressIP4, values=[
    "94.140.114.192", "94.140.115.18", "94.140.115.129",
    "208.91.112.55", "193.29.57.37", "195.133.38.33",
    "95.81.118.189", "130.49.214.20", "2.58.15.231"
  ])
| table([@timestamp, ComputerName, aid, UserName, ContextBaseFileName, RemoteAddressIP4, RemotePort])
| sort(@timestamp, order=desc, limit=1000)
Q14 · DNS resolution of the payload-hosting and C2 domain cluster
CONF HIGHFP LOWCOST MED

Looks for: resolution of the rotating download cluster. Rather than pinning the 18 exact subdomains, this matches the registrable-domain families the actor reused across the whole campaign (filesdwnld, filesdwnl, filesdwnload, filesdownld, filedwnld, fldwnld, flsdwnld, filldowl, dowlfles, downlf, downlfl, dwlfils, aohoodie, artcnb) plus the three named C2 domains. That survives the next subdomain rotation, which the exact list will not. Suggested window: 90 days.

// HUNT: DNS for the STAC4749 payload-hosting cluster and named C2 domains
// MITRE: T1071.001, T1105 | CONF: high  FP: low  COST: medium
// REQUIRES: DnsRequest
// FALSE POSITIVES: threat-intel enrichment tooling and sandboxes resolving IOCs
// TUNING: exclude your TI platform and sandbox hosts by ComputerName. The family
// TUNING: fragments are typo-squats of "files download" and do not collide with
// TUNING: legitimate domains, so widen rather than narrow if the cluster rotates
#event_simpleName=/^DnsRequest$/
| DomainName=/(filesdwnld|filesdwnl|filesdwnload|filesdownld|filedwnld|fldwnld|flsdwnld|filldowl|dowlfles|downlfl|downlf|dwlfils|aohoodie|artcnb|legio\.name|jrown\.fun|imarketads)/i
| table([@timestamp, ComputerName, aid, UserName, ContextProcessId, DomainName])
| sort(@timestamp, order=desc, limit=1000)
Q15 · Chaos pre-encryption recovery destruction
CONF HIGHFP MEDCOST LOW

Looks for: the minutes before encryption. Chaos, like its BlackSuit and Royal lineage, deletes volume shadow copies, wipes the backup catalogue and disables Windows recovery before it starts encrypting. This is the last query in the chain that still gives you time to act, so it belongs on a real-time alert with a paging rule, not a weekly hunt. FP: backup and imaging products legitimately prune shadow copies; exclude by the parent process of your backup agent, not by removing individual verbs. Suggested window: real-time.

// HUNT: shadow copy / backup catalogue / recovery destruction (Chaos pre-encryption)
// MITRE: T1490, T1489 | CONF: high  FP: medium  COST: low
// REQUIRES: ProcessRollup2 with CommandLine
// FALSE POSITIVES: backup and imaging software pruning shadow copies on schedule;
// FALSE POSITIVES: SCCM / imaging task sequences calling bcdedit during a rebuild
// TUNING: exclude your backup agent by parent, e.g.
// TUNING: | ParentBaseFileName!=/^(veeam|beremote|backupexec|acronis|sqlservr)/i
// TUNING: keep vssadmin delete shadows unexcluded on workstations regardless
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| CommandLine=/(vssadmin.{0,40}delete.{0,20}shadow|wmic.{0,30}shadowcopy.{0,20}delete|wbadmin.{0,30}delete.{0,20}catalog|bcdedit.{0,40}(recoveryenabled|bootstatuspolicy)|Disable-ComputerRestore|Win32_ShadowCopy.{0,40}Delete)/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine])
| sort(@timestamp, order=desc, limit=500)
Q16 · Mass-file ransomware activity burst
CONF MEDFP MEDCOST MED

Looks for: the encryption itself. Sophos observed Chaos encrypting simultaneously across all compromised devices, so the fleet-wide shape is many hosts crossing the threshold within the same few minutes rather than one host doing so alone. This is a tripwire and a blast-radius measurement, not a prevention control. Pair it with a file-integrity alert on readme.chaos.txt from section 7. FP: backup agents, indexers, antivirus full scans and bulk migration tools all touch large file counts; exclude by process. Suggested window: real-time.

// HUNT: single process touching a large number of files (encryption burst)
// MITRE: T1486 | CONF: medium  FP: medium  COST: medium
// REQUIRES: RansomwareOpenFile
// FALSE POSITIVES: backup agents, search indexers, AV full scans, bulk file migrations
// TUNING: exclude the known bulk readers by process before alerting, e.g.
// TUNING: | ContextBaseFileName!=/^(searchindexer|veeamagent|robocopy|mssense)/i
// TUNING: then tune FilesTouched to just above your noisiest surviving process
#event_simpleName=/^RansomwareOpenFile$/
| groupBy([ComputerName, ContextBaseFileName],
    function=[
      count(as=FilesTouched),
      min(@timestamp, as=FirstSeen),
      max(@timestamp, as=LastSeen)
    ], limit=20000)
| FilesTouched > 200
| sort(FilesTouched, order=desc, limit=200)
09

CrowdStrike Custom IOA Recommendations

Four of the sixteen queries are strong enough to promote from Investigate-only to a Custom IOA. The rest stay as scheduled hunts because their false-positive profile depends on how your helpdesk works.

IOA nameFromPatternActionExclusions to configure first
STAC4749 — Implant Token ArgumentQ12Process Creation. Command line contains --token-raw.Detect / CriticalNone expected. Verify no internal tool uses this flag by running Q12 across 90 days before enabling.
STAC4749 — Remote Support Spawning ShellQ3Process Creation. Parent image name matches the remote-support set, child image name matches the shell / script-host / download-utility set.Detect / HighYour helpdesk's signed remediation script paths, excluded by command line.
STAC4749 — Audio-Driver Autostart in User PathQ7Registry Operation. Run-key value name matches the audio-component set, value data contains a user-writable path.Detect / HighAny per-user portable audio utility in your estate, excluded by hash.
STAC4749 — Randomised Loader NameQ5Process Creation. Image file name matches the prefix plus 6-to-12-digit numeric pattern.Detect / HighDrop the ms prefix from the pattern if a vendor updater collides.

Deployment path

  1. Falcon console, Endpoint security, Custom IOA rule groups. Create a Windows rule group named for this campaign.
  2. Build each rule in Monitor action first. Leave it there for a full business week including a patch cycle.
  3. Review every hit. Add exclusions in the rule, not in the prevention policy.
  4. Promote to Detect once the rule has produced zero unexplained hits for five consecutive business days. Q12 is the only rule that should reach Critical severity.
  5. Assign the rule group to a pilot host group before the full estate.

Do not promote Q9, Q15 or Q16 to a blocking IOA. Q9 is high-FP discovery telemetry. Q15 and Q16 fire on behaviour that legitimate backup and indexing software also performs, and a blocking rule there risks breaking your recovery path at exactly the moment you need it.

10

Machine-Readable IOC Appendix

70 atomic indicators, each traced back to a saved source snapshot. Nothing here is at prevent or critical severity, see section 2 for why. Copy each block straight into the tool it names.

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
# STAC4749 / Chaos ransomware. Source: SophosLabs IoCs STAC4749-Chaos_IOCs_July2026.csv + Sophos X-Ops blog.
# No row ships at prevent/critical: all public reporting traces to one vendor investigation.
# --- C2 and payload staging addresses (endpoint-observable) ---
ipv4,94.140.114.192,detect,high,2027-02-04,STAC4749 hard-coded loader gRPC C2 on tcp 443,campaign:STAC4749
ipv4,94.140.115.18,detect,high,2027-02-04,STAC4749 hard-coded loader gRPC C2 on tcp 443,campaign:STAC4749
ipv4,94.140.115.129,detect,high,2027-02-04,STAC4749 hard-coded loader gRPC C2 on tcp 443,campaign:STAC4749
ipv4,208.91.112.55,detect,high,2027-02-04,STAC4749 payload staging server,campaign:STAC4749
ipv4,193.29.57.37,detect,high,2027-02-04,STAC4749 payload staging server,campaign:STAC4749
ipv4,195.133.38.33,detect,high,2027-02-04,STAC4749 Python backdoor C2,campaign:STAC4749
ipv4,95.81.118.189,detect,high,2027-02-04,STAC4749 Golang implant C2,campaign:STAC4749
ipv4,130.49.214.20,detect,high,2027-02-04,STAC4749 Golang implant C2,campaign:STAC4749
ipv4,2.58.15.231,detect,high,2027-02-04,STAC4749 Golang implant C2,campaign:STAC4749
# --- Teams vishing call sources. Identity plane. Monitor only. ---
ipv4,93.88.205.136,no_action,informational,2026-09-04,Source of STAC4749 Teams vishing calls,campaign:STAC4749
ipv4,5.8.18.80,no_action,informational,2026-09-04,Source of STAC4749 Teams vishing calls,campaign:STAC4749
ipv4,2.58.14.254,no_action,informational,2026-09-04,Source of STAC4749 Teams vishing calls,campaign:STAC4749
# --- Payload-hosting cluster (Cloudflare-fronted; rotates weekly) ---
domain,stats09.filldowl.online,detect,high,2027-02-04,STAC4749 payload staging,campaign:STAC4749
domain,de3.filedwnld.top,detect,high,2027-02-04,STAC4749 payload staging (CopyQ archive),campaign:STAC4749
domain,dl2.filesdwnl.top,detect,high,2027-02-04,STAC4749 loader staging,campaign:STAC4749
domain,fa4.fldwnld.online,detect,high,2027-02-04,STAC4749 backdoor staging,campaign:STAC4749
domain,fa2.filesdwnload.top,detect,high,2027-02-04,STAC4749 backdoor and implant staging,campaign:STAC4749
domain,fa3.filesdownld.top,detect,high,2027-02-04,STAC4749 Golang implant staging,campaign:STAC4749
domain,fa5.flsdwnld.online,detect,high,2027-02-04,STAC4749 implant and proxy staging,campaign:STAC4749
domain,fa16.dwlfils.online,detect,high,2027-02-04,STAC4749 backdoor staging,campaign:STAC4749
domain,fa103.aohoodie.com,detect,high,2027-02-04,STAC4749 Golang implant staging,campaign:STAC4749
domain,re1.filesdwnld.top,detect,high,2027-02-04,STAC4749 payload staging,campaign:STAC4749
domain,re2.filesdwnload.top,detect,high,2027-02-04,STAC4749 loader staging,campaign:STAC4749
domain,re4.fldwnld.online,detect,high,2027-02-04,STAC4749 loader staging,campaign:STAC4749
domain,re5.flsdwnld.online,detect,high,2027-02-04,STAC4749 backdoor staging,campaign:STAC4749
domain,re8.dowlfles.online,detect,high,2027-02-04,STAC4749 payload staging,campaign:STAC4749
domain,re19.downlf.online,detect,high,2027-02-04,STAC4749 payload staging,campaign:STAC4749
domain,re20.downlfl.online,detect,high,2027-02-04,STAC4749 payload staging,campaign:STAC4749
domain,re103.aohoodie.com,detect,high,2027-02-04,STAC4749 C2,campaign:STAC4749
domain,re104.artcnb.com,detect,high,2027-02-04,STAC4749 C2,campaign:STAC4749
# --- Named C2 domains ---
domain,legio.name,detect,high,2027-02-04,STAC4749 reverse SOCKS proxy C2 (sc5.exe),campaign:STAC4749
domain,jrown.fun,detect,high,2027-02-04,STAC4749 backdoor C2,campaign:STAC4749
domain,imarketads.com,detect,high,2027-02-04,STAC4749 sideloaded DLL C2,campaign:STAC4749
# --- Cloudflare Workers subdomains. Specific subdomains only. ---
# The bare workers.dev apex is shared infrastructure and is deliberately NOT listed.
domain,conf.grahql.workers.dev,detect,medium,2026-11-04,STAC4749 backdoor C2,campaign:STAC4749
domain,api.grahql.workers.dev,detect,medium,2026-11-04,STAC4749 backdoor C2,campaign:STAC4749
domain,webconf.shop-api.workers.dev,detect,medium,2026-11-04,STAC4749 backdoor C2,campaign:STAC4749
# --- Fake IT-helpdesk Teams tenant domains. Primary value is the Teams allowlist. ---
domain,sequrityupdate.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,scan-security.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,system-online.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,system-connect.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,corp-connect.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,info-secure.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,supportsoft.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,update-syscontrol.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,sequpdate.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,service-clien.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,service-corporation.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,scansequrity.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,service-help.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,it-service.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,sequritycheck.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
domain,upsecscan.top,detect,medium,2026-11-04,STAC4749 Teams vishing tenant domain,campaign:STAC4749
# --- First-stage loaders ---
sha256,1cf3131b6f487067b3746dd4743544fbbfa553fb2941176b8213996aac61425c,detect,high,2027-02-04,STAC4749 loader sekv,campaign:STAC4749
sha256,746a693e2ba1bb50b941a6ea30026cce02ab9b64ffb9fa6168a62f7aa9557f0a,detect,high,2027-02-04,STAC4749 loader sekv,campaign:STAC4749
sha256,23cb533bc3a5b535c06c8f0865e6cdebf442d56a7ac275baddcb9785279e4b88,detect,high,2027-02-04,STAC4749 loader helper,campaign:STAC4749
sha256,44f8bd68487d0c40227ed44321cf16fc4a34d645252e98d6ba3f81e9f05e7900,detect,high,2027-02-04,STAC4749 loader helper,campaign:STAC4749
sha256,d5572db12b800e87f986ef1138690ec5e17dfa5a0720dc75d453233ada88ee6d,detect,high,2027-02-04,STAC4749 loader helper,campaign:STAC4749
sha256,2d8ea8fb20f1311e04ea88baa7cff957f6cb73899a524dc2bd39523e14ab022f,detect,high,2027-02-04,STAC4749 loader helper,campaign:STAC4749
# --- Python backdoors and reverse proxy ---
sha256,bb96d21b7a61628724f13c6d4506b9d7bb56020d1c41fc79310f74666bb75904,detect,high,2027-02-04,STAC4749 Python backdoor updater,campaign:STAC4749
md5,36e80c375861d3ff0a55d5e49c8fe12e,detect,high,2027-02-04,STAC4749 Python backdoor msupdate (vendor sha256 malformed),campaign:STAC4749
sha256,35a75212862ce719ae6de1758949be33a3de787fab31e2d98436bacce8369d92,detect,high,2027-02-04,STAC4749 reverse SOCKS proxy sc5,campaign:STAC4749
# --- Golang implants ---
sha256,94b66ac8391ca543b0dffde6a2d475d29afce6fe32995eda76d379553da68407,detect,high,2027-02-04,STAC4749 Golang implant autumn,campaign:STAC4749
sha256,9faa993d608c09eed5dcc9c945b8dd07431fcc192f0232ef379293622a1f3586,detect,high,2027-02-04,STAC4749 Golang implant graph,campaign:STAC4749
sha256,c2fa32ac59f6424657a8513a7f158082877b97436b8502c3879f5736713e2132,detect,high,2027-02-04,STAC4749 Golang implant tube,campaign:STAC4749
sha256,3f0dbc159dcdfb884ebc577dfe873d468617bf5a483bf832469cd209efbe84d4,detect,high,2027-02-04,STAC4749 Golang implant midnight,campaign:STAC4749
sha256,95fcab7e8892cb87bcadb523a4491bf10ee0788b859647ca7cca1e1d92d7519a,detect,high,2027-02-04,STAC4749 Golang implant agree,campaign:STAC4749
sha256,219aa20e572dee9d1ef47ae1c33a851fc4fcecc5a45d15ce80c863da67cfeb10,detect,high,2027-02-04,STAC4749 Golang implant dizzy,campaign:STAC4749
sha256,65060c1d1c6020ac445ea7b394ef9b1bd9aa23f27d9a508470403c7296924ce8,detect,high,2027-02-04,STAC4749 Golang implant confirm,campaign:STAC4749
# --- DLL side-loading pair ---
sha256,cd3163a308ba40c3a5e153c0326b7cf23a36debb6255624f9afb7e7ca5182391,detect,high,2027-02-04,STAC4749 malicious vcruntime140_1.dll,campaign:STAC4749
sha256,d8fed5a9fa8baee68d241190f29a2e91f5c549a684cb66c92de3974fc9f3db22,detect,high,2027-02-04,STAC4749 trojanised copyq archive,campaign:STAC4749
Behavioural Signaturesoutlive the indicators
STAC4749 behavioural signatures. These survived every rotation between Feb and Jun 2026.

1. IDENTITY-TO-ENDPOINT PIVOT  (highest value; requires both data sets)
   External federated Teams chat or call from a non-allowlisted domain
   THEN within 60 minutes on the same user's host:
   quickassist.exe OR remsupp*.exe OR dwagent*.exe OR anydesk.exe starts.

2. REMOTE-SUPPORT PARENTAGE
   Parent = quickassist.exe / remsupp* / dwagent* / dwrcs* / anydesk
   Child  = powershell / pwsh / cmd / mshta / wscript / cscript / curl /
            certutil / bitsadmin / rundll32 / regsvr32 / msiexec

3. IMPLANT AUTHENTICATION FLAG
   Any process command line containing:  --token-raw
   Single most durable string in the toolkit. Names rotate; this did not.

4. LOADER NAME SHAPE
   Short alpha prefix + optional underscore + 6-12 random digits + .exe
   in AppData\Roaming, AppData\Local\Temp or ProgramData.
   Observed prefixes: sekv_  helper_  74fs_  7414fs  ms_

5. AUDIO-DRIVER MASQUERADE
   HKCU ...\CurrentVersion\Run value named:
     Realtek HD Audio / Realtek HD Audio Universal Service /
     Realtek Audio / Realtek Audio UHD / WinAudio life2 /
     SecurityHealth / OneDriveUpdate
   whose DATA points into AppData, ProgramData, Temp or Users\Public.
   Genuine Realtek autostarts never point at a user-writable path.

6. STARTUP VBS SHORTCUT
   mklink-style .vbs creating a hidden shortcut in
   %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup

7. PYTHON BACKDOOR ARTEFACTS
   PyInstaller unpack artefacts: AppData\Local\Temp\base_library.zip
   PyArmour-obfuscated bytecode; AES key and IV fetched from a public
   GitHub repository at runtime.
   Log path artefact: C:\ProgramData\AppSreen\logs\appscreen.log
   (note the misspelling of "AppScreen" -- it is the actor's, not a typo)

8. TLS CERTIFICATE PINNING ISSUERS
   Custom CA issuer common names seen on the C2 certificates:
     loop-CA        connectify-CA        james-bond-CA
   Hunt these in TLS inspection / JA3 / certificate logs if available.

9. RANSOMWARE STAGE
   vssadmin delete shadows / wmic shadowcopy delete /
   wbadmin delete catalog / bcdedit recoveryenabled No
   THEN simultaneous mass encryption across hosts,
   THEN ransom note:  readme.chaos.txt

10. OPERATOR ARTEFACT
   Commands mistyped in a Cyrillic keyboard layout appearing in shell
   history is a strong hands-on-keyboard indicator for this actor.
Named Tooling & Artefactscontext, not blocklist
STAC4749 tooling. NONE of this belongs on a flat blocklist.
Every entry is either legitimate software or a name too generic to alert on.

LEGITIMATE TOOLS ABUSED  -- hunt contextually, never block by name
  quickassist.exe        Microsoft Quick Assist, the preferred entry tool
  RemSupp                cloud RMM, preferred from April 2026 onward
  DWAgent / dwagsvc      redundant remote access in ransomware cases
  AnyDesk                redundant remote access in ransomware cases
  msconfig.exe           used to enable RDP service configuration
  CopyQ                  clipboard manager used as a DLL side-loading host
  Remote Desktop         enabled via HKLM ...\Terminal Server\fDenyTSConnections

MALWARE FILENAMES  -- too generic or too volatile to alert on by name.
Use the hashes in the CSV block and the behaviours above instead.
  Loaders     sekv_<10 digits>.exe   helper_<10 digits>.exe
              74fs_<10 digits>.exe   7414fs*.exe   ms_876234.exe
              45234ssdf403851640.exe
  Backdoors   updater.exe   msupdate.exe   path1.exe
  Golang      graph.exe  confirm.exe  midnight.exe  shield.exe  tube.exe
              dizzy.exe  agree.exe  autumn.exe  left.exe  nation.exe
              hire.exe   WiSec.exe   graph3.exe
              ^ single-word English nouns, chosen to defeat name-based rules
  Proxy       sc5.exe  (reverse SOCKS, ~1000 concurrent connections)
  Side-load   vcruntime140_1.dll inside copyq-13.0.0.zip

PERSISTENCE VALUE NAMES  -- alert only WITH a user-writable target path
  Realtek HD Audio                Realtek HD Audio Universal Service
  Realtek Audio                   Realtek Audio UHD
  WinAudio life2                  SecurityHealth
  OneDriveUpdate                  mklink-%.vbs

RANSOM NOTE
  readme.chaos.txt

VISHING PERSONA DISPLAY NAMES  -- context only, trivially changed
  AnthonyBrooks  DylanHarper   EthanParker    DylanHartman
  JasonMitchell  DylanFoster   EllaBrooks     RyanBennett
  LoganCooper    LoganMitchell NicholasGrant  TimothyPorter
Teams / Entra Exposure Auditrun this first
# STAC4749 exposure audit. Run before anything else.
# Requires the MicrosoftTeams PowerShell module and a Teams Administrator role.

Connect-MicrosoftTeams

# 1. Can any tenant on the internet chat your staff right now?
Get-CsTenantFederationConfiguration |
  Select-Object AllowFederatedUsers, AllowPublicUsers,
                AllowedDomains, BlockedDomains,
                AllowTeamsConsumer, AllowTeamsConsumerInbound

#    AllowFederatedUsers = True with an EMPTY AllowedDomains list means
#    open federation. That is the precondition this campaign requires.

# 2. Which external-access policies are actually assigned?
Get-CsExternalAccessPolicy |
  Select-Object Identity, EnableFederationAccess,
                EnablePublicCloudAccess, EnableTeamsConsumerAccess

# 3. Block the known vishing tenant domains immediately.
#    This is a stopgap. The domain-allowlist control in Playbook P1 is the fix.
$stac4749 = @(
  "sequrityupdate.top","scan-security.top","system-online.top",
  "system-connect.top","corp-connect.top","info-secure.top",
  "supportsoft.top","update-syscontrol.top","sequpdate.top",
  "service-clien.top","service-corporation.top","scansequrity.top",
  "service-help.top","it-service.top","sequritycheck.top","upsecscan.top"
)
$blocked = (Get-CsTenantFederationConfiguration).BlockedDomains.Domain
$stac4749 | Where-Object { $_ -notin $blocked } |
  ForEach-Object { "MISSING FROM BLOCKLIST: $_" }

# 4. Is Quick Assist reachable by standard users?
Get-AppxPackage -AllUsers -Name "MicrosoftCorporationII.QuickAssist" |
  Select-Object Name, Version, InstallLocation

# 5. Which endpoints already have an unsanctioned remote-support tool?
#    Cross-check against Falcon Q2 output before treating any as benign.
Get-CimInstance -ClassName Win32_Product |
  Where-Object { $_.Name -match "AnyDesk|DWAgent|RemSupp|TeamViewer|ScreenConnect" } |
  Select-Object Name, Version, InstallDate
11

Detection Validation Gates

Work these four gates in order. A query that has not cleared all four is not a detection, it is a hypothesis.

Gate 1 — Telemetry ready

  • Confirm ProcessRollup2 events carry a populated CommandLine in your tenant. Q4, Q8, Q9, Q12 and Q15 are worthless without it.
  • Confirm AsepValueUpdate and RegGenericValueUpdate are flowing. Run a Run-key write on a test host and verify it lands.
  • Confirm RegStringValue is populated for the registry events you receive. On some sensor versions a DWORD write lands in a numeric field and Q11's value column reads empty. This is the one field in the pack flagged ⚠ validate in tenant.
  • Confirm the Purview unified audit log is enabled and that Teams chat and call events are being retained. Without this, the highest-value correlation in the pack cannot be built.
  • Confirm RansomwareOpenFile is present. It depends on your prevention policy configuration.

Gate 2 — Benign baseline

  • Run Q1, Q2, Q9, Q15 and Q16 over 30 days with no exclusions. Record the hit count and the top ten contributing processes or accounts for each.
  • Any query returning more than roughly 50 hits per day fleet-wide needs its exclusion list built before it is scheduled, not after.
  • Q3, Q5, Q7, Q10, Q12, Q13 and Q14 should return zero or near-zero in a clean estate. A non-zero result on any of those is an investigation, not a tuning task.

Gate 3 — Positive test

  • Q3: launch Quick Assist on a lab host and start PowerShell from inside the session. The query must return the pair.
  • Q5 and Q6: write and execute a benign signed binary renamed to helper_1234567890.exe in %APPDATA%.
  • Q7: create an HKCU Run value named Realtek Audio UHD pointing at a benign EXE in %APPDATA%, then delete it.
  • Q12: run any benign binary with --token-raw=test appended. The query must return it.
  • Q13 and Q14: use your TI platform's detonation host, or add one indicator to a lab DNS sinkhole and resolve it.
  • Q15: run vssadmin list shadows first to confirm the process is visible, then a scoped delete in a snapshot-protected lab VM only.

Gate 4 — Promotion criteria

  • Five consecutive business days with zero unexplained hits before any query becomes a Custom IOA.
  • Every IOA starts in Monitor. Nothing goes straight to Detect.
  • Each promoted rule carries a documented rollback: the rule group name, the assigned host group, and the person who can disable it out of hours.
  • Re-baseline after each of your own RMM or backup software upgrades. Those are the two products most likely to break these exclusion lists.
12

Hardening — Tiered

This campaign exploits no vulnerability, so there is nothing to patch. The controls below remove the preconditions instead: open Teams federation, unrestricted remote-support tooling, and a user account with enough privilege to persist. Each control cites a MITRE mitigation for the why and a platform authority for the what.

Immediate — deploy this week, no compatibility risk

H1. Restrict Teams external access to an allowlist of federated domains. This single control removes step 1 of the chain outright. Move from open federation to an explicit allowlist of the partner domains you actually work with. MITRE M1030 (Network Segmentation), M1018 (User Account Management). Microsoft Teams security guidance; CIS Microsoft 365 Foundations Benchmark section 8 (Teams). See Playbook P1.

H2. Disable Teams consumer (personal account) interoperability unless a documented business case exists. It is a second unmonitored path to your staff. MITRE M1030. CIS Microsoft 365 Foundations Benchmark.

H3. Block Microsoft Quick Assist for standard users. Quick Assist was the actor's first-choice entry tool. If your helpdesk does not use it, remove it. If it does, restrict launching it to the support group. MITRE M1038 (Execution Prevention), M1042 (Disable or Remove Feature). Microsoft guidance on Quick Assist abuse. See Playbook P2.

H4. Enable the four relevant ASR rules in Block mode. Block executable content from email and webmail clients; block JavaScript or VBScript from launching downloaded executable content; block execution of potentially obfuscated scripts; block process creations originating from PSExec and WMI commands. The VBScript rule directly targets the Startup-folder persistence in this chain. MITRE M1038, M1050 (Exploit Protection). Microsoft Security Baseline for Windows. See Playbook P3.

H5. Import the section 10 IOC CSV into Falcon IOC Management and enable the four Custom IOAs from section 9 in Monitor mode. Vendor control, no benchmark citation applies.

H6. Brief staff on the specific play. Not generic phishing training. Tell them: IT will never contact you unsolicited via a Teams chat from outside the company, and will never ask you to start Quick Assist or install remote-support software on a call you did not initiate. Publish one verified callback number. MITRE M1017 (User Training).

Near term — 1 to 4 weeks, pilot on a ring first

H7. Application-control deny list for unsanctioned remote-support and RMM tooling. AppLocker or WDAC rules denying RemSupp, DWAgent, AnyDesk, ScreenConnect, TeamViewer, Atera, Splashtop, LogMeIn, RustDesk and UltraViewer except for the support group. This is the control that broke the actor's April pivot away from Quick Assist. MITRE M1038. CIS Microsoft Windows Benchmark, AppLocker section. See Playbook P2.

H8. Immutable and offline backups, with segregated credentials. Object-lock or WORM retention on at least one copy, and backup service credentials that are not reachable from a compromised workstation session. Chaos deletes shadow copies and tampers with backup services before encrypting, so an online-only backup is not a backup here. MITRE M1053 (Data Backup). NIST SP 800-209; CIS Control 11.

H9. PowerShell script block logging, module logging and transcription, forwarded off the host. Without this the download cradle in step 3 leaves almost no forensic trace. MITRE M1047 (Audit). CIS Microsoft Windows Benchmark, PowerShell section; Microsoft Security Baseline. See Playbook P5.

H10. Disable RDP on workstations by policy, and audit the Terminal Server key. Set fDenyTSConnections to 1 by GPO so a local registry write is reverted at the next policy refresh, and enable a SACL on the key so the attempt is logged. Require Network Level Authentication where RDP is genuinely needed. MITRE M1035 (Limit Access to Resource Over Network), M1042. CIS Microsoft Windows Benchmark; DISA Windows STIG. See Playbook P4.

H11. Remove standing local administrator rights from standard users, and deploy Windows LAPS for the local administrator account. The operator inherits whatever the interactive user has. MITRE M1026 (Privileged Account Management). CIS Microsoft Windows Benchmark; Microsoft Security Baseline.

H12. Block newly registered and low-reputation domains at the resolver or proxy, with .top and the other high-abuse TLDs treated as block-by-default with an exception process. The entire payload cluster and every vishing tenant domain in this campaign sat on such TLDs. MITRE M1037 (Filter Network Traffic). CIS Control 9; NIST SP 800-81 (DNS).

Strategic — 1 to 3 months, architectural

H13. Windows Defender Application Control in enforced mode with a managed installer. An allowlist model ends the whole class of attack: the randomised loader, the Golang implants and the sideloaded DLL all fail to execute regardless of naming. This is the highest-leverage control in the pack and also the most expensive. MITRE M1038. Microsoft WDAC design guidance; DISA Windows STIG.

H14. Phishing-resistant MFA and Conditional Access covering Teams, with legacy authentication blocked and device compliance required. Reduces the value of any credentials harvested during the session. MITRE M1032 (Multi-factor Authentication). CIS Microsoft 365 Foundations Benchmark; Microsoft Zero Trust guidance.

H15. Network segmentation with default-deny egress from workstation VLANs, forcing all outbound HTTPS through an inspecting proxy. Removes the direct-to-IP gRPC C2 path and the reverse SOCKS tunnel. MITRE M1030, M1037. CIS Control 12; NIST SP 800-207.

H16. Tiered administration model. Tier 0 credentials never authenticate to a workstation, so a compromised endpoint session cannot become a domain compromise. MITRE M1026. Microsoft Enterprise Access Model.

H17. A documented, rehearsed remote-support verification procedure. Every remote-support session initiated by IT is announced through a second channel the user already trusts, and users are trained to refuse any session that arrives without one. ⚠ best-practice, no formal benchmark. Included because it is the only control that addresses the social-engineering step directly rather than its consequences.

13

Deployable Playbooks

Five playbooks covering the highest-leverage controls. Every step carries prerequisites, reboot impact and a rollback. Test each in a pilot ring before estate-wide deployment.

P1 — Restrict Microsoft Teams external access to an allowlist (control H1, H2)

Prerequisites: MicrosoftTeams PowerShell module v5.0 or later; Teams Administrator or Global Administrator role; an agreed list of partner domains from the business. Reboot required: none. Changes propagate across the tenant in up to 24 hours. Rollback: capture the current configuration to JSON first (step 1), then re-apply it with Set-CsTenantFederationConfiguration. Reverting restores open federation, so treat the rollback as an incident in its own right and time-box it.

Connect-MicrosoftTeams

# STEP 1 -- CAPTURE ROLLBACK STATE BEFORE CHANGING ANYTHING
$backup = Get-CsTenantFederationConfiguration
$backup | ConvertTo-Json -Depth 6 |
  Out-File "C:\Admin\rollback-teams-federation-2026-08-04.json"

# STEP 2 -- define the partner domains the business actually needs
$allow = @("partner-one.example.com","partner-two.example.com")
$allowList = $allow | ForEach-Object { New-CsEdgeDomainPattern -Domain $_ }
$allowObj  = New-CsEdgeAllowList -AllowedDomain $allowList

# STEP 3 -- switch federation from open to allowlist-only
Set-CsTenantFederationConfiguration `
  -AllowFederatedUsers $true `
  -AllowedDomains $allowObj `
  -AllowPublicUsers $false `
  -AllowTeamsConsumer $false `
  -AllowTeamsConsumerInbound $false

# STEP 4 -- verify
Get-CsTenantFederationConfiguration |
  Select-Object AllowFederatedUsers, AllowPublicUsers,
                AllowTeamsConsumer, AllowTeamsConsumerInbound,
                @{n="Allowed";e={ $_.AllowedDomains.AllowedDomain.Domain }}

# ROLLBACK (only with documented approval)
# $r = Get-Content "C:\Admin\rollback-teams-federation-2026-08-04.json" | ConvertFrom-Json
# Set-CsTenantFederationConfiguration -AllowFederatedUsers $r.AllowFederatedUsers `
#   -AllowPublicUsers $r.AllowPublicUsers -AllowTeamsConsumer $r.AllowTeamsConsumer

P2 — Block Quick Assist and unsanctioned RMM via AppLocker (control H3, H7)

Prerequisites: Application Identity service (AppIDSvc) set to Automatic; an existing AppLocker policy or a decision to create one; a security group containing your genuine support staff; a pilot host group. Reboot required: no reboot, but AppIDSvc must be started and a policy refresh applied. Sessions already running a blocked binary are not terminated, so schedule a logoff cycle. Rollback: export the effective policy before merging (step 1) and re-import it with Set-AppLockerPolicy -XmlPolicy, which replaces rather than merges. If AppLocker locks out a business-critical tool out of hours, setting AppIDSvc to Manual and stopping it disables enforcement immediately as a break-glass measure.

# STEP 1 -- CAPTURE ROLLBACK STATE
Get-AppLockerPolicy -Effective -Xml |
  Out-File "C:\Admin\rollback-applocker-2026-08-04.xml" -Encoding utf8

# STEP 2 -- ensure the enforcement service is running
Set-Service -Name AppIDSvc -StartupType Automatic
Start-Service -Name AppIDSvc

# STEP 3 -- author the deny rules.
# Deploy as a GPO under:
#   Computer Configuration > Windows Settings > Security Settings
#     > Application Control Policies > AppLocker > Executable Rules
#
# Rule 1  DENY  Publisher: MicrosoftCorporationII.QuickAssist  (all versions)
#               Except: security group CORP-IT-Support
# Rule 2  DENY  Path: *\remsupp*.exe
# Rule 3  DENY  Path: *\dwagent*.exe  and  *\dwagsvc*.exe  and  *\dwrcs*.exe
# Rule 4  DENY  Path: *\anydesk*.exe
# Rule 5  DENY  Path: *\screenconnect*.exe  and  *\connectwisecontrol*.exe
# Rule 6  DENY  Path: *\rustdesk*.exe  and  *\ultraviewer*.exe
# Rule 7  DENY  Path: *\atera*.exe  and  *\splashtop*.exe  and  *\logmein*.exe
# Rule 8  DENY  Path: %OSDRIVE%\Users\*\AppData\Local\Temp\*.exe
#               Except: your software-deployment service account
#
# Deny rules override allow rules in AppLocker, so these take precedence
# over any broad "allow Program Files" rule already in the policy.

# STEP 4 -- start in AUDIT ONLY on the pilot ring
Set-AppLockerPolicy -XmlPolicy "C:\Admin\rmm-deny.xml" -Merge

# STEP 5 -- review what WOULD have been blocked, for at least 5 business days
Get-WinEvent -LogName "Microsoft-Windows-AppLocker/EXE and DLL" |
  Where-Object { $_.Id -in 8003,8006 } |
  Select-Object TimeCreated, Id, Message -First 200

# STEP 6 -- only after a clean audit week, switch the rule collection to Enforce.

# ROLLBACK
# Set-AppLockerPolicy -XmlPolicy "C:\Admin\rollback-applocker-2026-08-04.xml"
# BREAK-GLASS: Stop-Service AppIDSvc ; Set-Service AppIDSvc -StartupType Manual

P3 — Enable the four relevant ASR rules (control H4)

Prerequisites: Microsoft Defender Antivirus in active mode (not passive) with real-time protection on; Defender platform version 4.18.2201 or later; local administrator or Intune. Reboot required: none. Rules take effect immediately. Rollback: set the same GUIDs to Disabled, or to AuditMode to keep visibility without enforcement. The Remove-MpPreference form in the rollback block clears the rule entirely rather than leaving it disabled, which is the cleaner state to return to.

# Run elevated. Deploy via Intune Endpoint Security -> Attack Surface Reduction
# for the estate; this form is for the pilot ring and for verification.

# STEP 1 -- CAPTURE ROLLBACK STATE
Get-MpPreference |
  Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids |
  Out-File "C:\Admin\rollback-asr-ids-2026-08-04.txt"
Get-MpPreference |
  Select-Object -ExpandProperty AttackSurfaceReductionRules_Actions |
  Out-File "C:\Admin\rollback-asr-actions-2026-08-04.txt"

# STEP 2 -- start in AUDIT mode (value 2). Do not skip this.
$rules = @(
  "BE9BA2D9-53EA-4CDC-84E5-9B1EEEE46550",  # block exe content from email/webmail
  "D3E037E1-3EB8-44C8-A917-57927947596D",  # block JS/VBS launching downloaded exe
  "5BEB7EFE-FD9A-4556-801D-275E5FFC04CC",  # block obfuscated scripts
  "D1E49AAC-8F56-4280-B9BA-993A6D77406C"   # block process creation from PSExec/WMI
)
foreach ($id in $rules) {
  Add-MpPreference -AttackSurfaceReductionRules_Ids $id `
                   -AttackSurfaceReductionRules_Actions AuditMode
}

# STEP 3 -- after 5 clean business days, switch to Enabled (block).
# foreach ($id in $rules) {
#   Set-MpPreference -AttackSurfaceReductionRules_Ids $id `
#                    -AttackSurfaceReductionRules_Actions Enabled
# }

# STEP 4 -- verify
Get-MpPreference | Select-Object AttackSurfaceReductionRules_Ids,
                                 AttackSurfaceReductionRules_Actions

# ROLLBACK
# foreach ($id in $rules) { Remove-MpPreference -AttackSurfaceReductionRules_Ids $id }

P4 — Enforce RDP-disabled on workstations and audit the key (control H10)

Prerequisites: a GPO scoped to the workstation OU only, never to servers or to jump hosts; confirmation from IT that no support workflow depends on workstation RDP. Reboot required: none for the policy value. A reboot or gpupdate /force applies it, and any existing RDP session survives until it is disconnected. Rollback: set the GPO value back to Disabled for the "Allow users to connect remotely" setting, or unlink the GPO. Because this is enforced by policy rather than a one-off registry write, an attacker's local change is reverted at the next refresh, which is the entire point of doing it this way.

# GPO PATH (preferred -- survives a local registry write by an attacker)
#   Computer Configuration > Policies > Administrative Templates
#     > Windows Components > Remote Desktop Services
#     > Remote Desktop Session Host > Connections
#   "Allow users to connect remotely by using Remote Desktop Services" = Disabled
#
# Where RDP IS required, in the same node set:
#   "Require user authentication for remote connections by using
#    Network Level Authentication" = Enabled

# VERIFY the effective state on a host (1 = RDP denied)
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" `
                 -Name fDenyTSConnections |
  Select-Object fDenyTSConnections

# AUDIT the key so an attacker's attempt is logged even when policy reverts it.
# Enable: Computer Configuration > Policies > Windows Settings > Security
#         Settings > Advanced Audit Policy > Object Access > Audit Registry
# Then set a SACL on the Terminal Server key for "Set Value" by Everyone.
# Resulting events: Security 4657. Feeds the section 7 native hunt.

# ROLLBACK
# Set the GPO setting to "Disabled" -> reverts to allowing RDP, or unlink the GPO.
# Emergency single-host restore (requires local admin, use sparingly):
# Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" `
#                  -Name fDenyTSConnections -Value 0

P5 — PowerShell script block logging and transcription (control H9)

Prerequisites: a write-restricted network share or SIEM forwarder for transcripts; log volume budget (script block logging is verbose); PowerShell 5.1 or later. Reboot required: none. New PowerShell sessions pick the policy up immediately; existing sessions do not. Rollback: set both policy values to Disabled, or delete the registry keys created below. Rollback is safe and immediate, but understand that it removes the only forensic record of a download cradle, so prefer reducing retention over disabling collection.

# GPO PATH (preferred)
#   Computer Configuration > Policies > Administrative Templates
#     > Windows Components > Windows PowerShell
#   "Turn on PowerShell Script Block Logging"  = Enabled
#   "Turn on Module Logging"                   = Enabled  (module names: *)
#   "Turn on PowerShell Transcription"         = Enabled
#        Transcript output directory: \\logsrv\pstranscripts$
#        (share must be append-only to the workstation computer accounts)

# EQUIVALENT REGISTRY FORM, for a pilot host. Run elevated.
$sb = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging"
$tr = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\Transcription"
New-Item -Path $sb -Force | Out-Null
New-Item -Path $tr -Force | Out-Null
Set-ItemProperty -Path $sb -Name EnableScriptBlockLogging -Value 1 -Type DWord
Set-ItemProperty -Path $tr -Name EnableTranscripting       -Value 1 -Type DWord
Set-ItemProperty -Path $tr -Name EnableInvocationHeader    -Value 1 -Type DWord
Set-ItemProperty -Path $tr -Name OutputDirectory `
                 -Value "\\logsrv\pstranscripts$" -Type String

# VERIFY -- run a harmless command, then confirm a 4104 event exists
Write-Output "asr-validation-probe"
Get-WinEvent -LogName "Microsoft-Windows-PowerShell/Operational" -MaxEvents 20 |
  Where-Object { $_.Id -eq 4104 } |
  Select-Object TimeCreated, Id -First 5

# ROLLBACK
# Remove-Item -Path $sb -Recurse -Force
# Remove-Item -Path $tr -Recurse -Force
14

Containment Runbook

Assume a 17-hour clock. The fastest observed intrusion went from first Teams contact to encryption in under 17 hours. If Q3, Q5, Q7 or Q12 fires, treat it as an active hands-on-keyboard intrusion, not a malware alert, and start Phase 1 immediately rather than queueing it for triage.

PhaseActionsOwnerEvidence to capture first
0 — Triage
0 to 15 min
  1. Confirm the hit is not your own helpdesk. Call the named support engineer on a known-good number. Do not reply in Teams.
  2. Pull the Teams audit log for the affected user for the last 24 hours. Identify the external domain and the call time.
  3. Run Q3, Q5, Q7 and Q12 host-scoped against the affected endpoint.
  4. Decide: single-host social-engineering attempt, or established foothold. A Run-key or a --token-raw process means foothold.
SOC L2 Teams audit export, Falcon detection IDs, screenshot of the process tree.
1 — Isolate
15 to 60 min
  1. Falcon network-contain the endpoint. Containment preserves the sensor link, so do not power it off.
  2. Disable the user's account and revoke all active sessions and refresh tokens in Entra ID. The operator may already have the session.
  3. Block the external Teams domain tenant-wide, then run the section 10 exposure audit to find other users it contacted.
  4. Block the section 10 C2 addresses and domains at the proxy and firewall.
  5. Run Q13 and Q14 fleet-wide. Any second host is now in scope and repeats from step 1.
  6. Check for RDP enablement (Q11) and for logons from the contained host (LogonType 10) to identify lateral movement already completed.
SOC L3 + Identity Memory image if your process requires it, taken before containment. Full ProcessRollup2 export for the host. Registry hive export.
2 — Eradicate
1 to 8 hours
  1. Remove every persistence mechanism, not just the one you found. Check HKCU and HKLM Run keys, the Startup folder for .vbs and .lnk files, scheduled tasks, and services.
  2. Uninstall every remote-support tool the actor introduced: RemSupp, DWAgent, AnyDesk. Verify the service and its scheduled tasks are gone, not just the application.
  3. Revert fDenyTSConnections and any other Terminal Server changes.
  4. Delete the staged binaries in %AppData%, ProgramData and Temp. Preserve copies to your evidence store first.
  5. Rebuild rather than clean where a Python or Golang implant executed. Both provided arbitrary command execution, so the host's integrity cannot be established by removing files.
  6. Force a password reset plus MFA re-registration for the affected user, and for any account whose credentials were reachable from that session.
  7. Rotate any credential cached on the host: browser-saved passwords, mapped drive credentials, stored RDP credentials, local admin.
SOC L3 + Endpoint Eng Hash and preserve every removed artefact. Record the exact Run-key names and target paths for the pack changelog.
3 — Recover
8 to 72 hours
  1. Verify backup integrity before restoring anything. Confirm shadow copies and backup catalogues on adjacent hosts are intact (Q15 output).
  2. Restore rebuilt hosts from a known-good image, not from a backup taken after the initial access timestamp.
  3. Re-enable the user account only after the password reset, MFA re-registration and a clean endpoint.
  4. Keep the contained host isolated for 72 hours of monitoring after it is returned to service.
  5. Deploy Playbook P1 tenant-wide if it is not already in place. This intrusion is proof the precondition exists.
IT Ops + SOC Restore validation log, backup integrity check output.
4 — Learn
1 to 2 weeks
  1. Feed every new indicator into the section 10 blocks and bump this pack to v0.2.
  2. Promote the queries that fired to Custom IOAs following the section 9 deployment path.
  3. Measure the gap between the Teams call and the first endpoint alert. That number is the detection engineering backlog.
  4. Re-brief the affected team specifically, and the wider organisation generally, on the exact pretext used.
  5. If data theft is suspected, engage legal and privacy counsel on notification obligations. Data was stolen before encryption in at least one reported intrusion.
SOC Lead Timeline document, updated pack, IOA rule IDs.
15

Detection Coverage Map

TechniqueBehaviourCQLIOACoverage
T1566.004Teams vishing call from an external tenantGAP No endpoint telemetry exists for this step. Covered only by the section 7 Purview and Entra hunts. This is the single most important gap in the pack.
T1199Abuse of open Teams federationGAP Prevented by control H1, not detected. Detection requires the section 7 native hunts.
T1219Quick Assist / RemSupp / DWAgent / AnyDesk sessionQ1, Q2Partial Rarity-based only. Becomes strong when joined to the section 7 Teams data; weak standalone in an estate that uses these tools daily.
T1204.004User talked into launching the sessionQ1, Q2Partial The human step is not observable. Only the resulting process is.
T1059.001PowerShell download cradle inside the sessionQ3, Q4Yes (Q3)Good Q3 is the highest-fidelity endpoint-only detection in the pack.
T1105Loader and implant ingressQ4, Q5, Q6, Q12Yes (Q5, Q12)Good Covered at both file-write and execution time, and by the durable argument signature.
T1036 / T1036.005Randomised loader names; audio-driver masqueradeQ5, Q6, Q7Yes (Q5, Q7)Good Q6 covers the shape after the prefixes rotate.
T1547.001Run-key and Startup-folder persistenceQ7, Q8Yes (Q7)Good Both mechanisms covered. The path condition in Q7 is what keeps it precise.
T1518.001 / T1082Security product and system discoveryQ9Partial Falcon does not emit registry reads, so the registry-based discovery Sophos describes is only visible through its command-line surface. High FP by nature.
T1574.002CopyQ DLL side-loadingQ10Partial Path-based. A module-load event would be stronger but is not available in the validated event set, so confirm hits against the DLL and archive hashes.
T1027.002PyInstaller / PyArmour packing; AES key from GitHubQ6GAP No dedicated detection. The GitHub key retrieval is indistinguishable from ordinary developer traffic. Hunt the artefacts in the behavioural block instead.
T1021.001 / T1112RDP enablement via registry and msconfigQ11Partial Detected. Control H10 is the stronger answer because GPO reverts the change automatically.
T1071.001 / T1090gRPC C2, HTTPS staging, reverse SOCKS proxyQ13, Q14Partial Atomic coverage only. The infrastructure rotated roughly weekly, so these decay. Q14's family-fragment matching extends the useful life.
T1567Data theft before encryptionGAP No volumetric exfiltration query ships in this pack. Sophos reports data theft in at least one intrusion but publishes no exfiltration destination. Add a high-volume-egress hunt scoped to your own crown-jewel shares.
T1490 / T1489Shadow copy and backup destructionQ15Good Real-time alert candidate. The last point at which action still helps.
T1486Chaos encryptionQ16Partial Tripwire and blast-radius measurement only. By the time this fires the outcome is largely decided.

Validation gates. Section 11 defines the four gates every query must clear before it is trusted: telemetry confirmed present in the tenant (including the one field flagged ⚠ validate in tenant, RegStringValue on registry events in Q11), a 30-day benign baseline with exclusions built before scheduling rather than after, a positive test that proves each query actually fires, and a promotion rule of five consecutive clean business days in Monitor before any Custom IOA reaches Detect. Sixteen queries ship. Seven rate CONF high, six medium and none low, with three carrying an FP risk of medium or higher and one (Q9) rated high FP and explicitly scoped to host-level corroboration rather than fleet-wide alerting.

The dominant gap is structural, not a missing query. Four of the sixteen mapped techniques have no endpoint detection because they do not happen on the endpoint. Until the Teams and Entra audit data in section 7 is joined to the Falcon data in section 8, this pack detects the intrusion from step 2 onward and never sees step 1. Closing that join is worth more than any additional CQL.

16

Hunt Summary Ticket

TITLE:      STAC4749 -- Microsoft Teams vishing to Chaos ransomware
SEVERITY:   Critical -- active RaaS, under 17h from initial access to encryption

SCOPE:      All Windows endpoints with an interactive user.
            All Microsoft 365 tenants with Teams external access enabled.
            Highest risk: professional services, manufacturing, energy,
            construction and engineering, IP law. Canada and US.

HYPOTHESIS: An external Microsoft Teams tenant on an IT-themed .top domain
            has contacted an employee posing as internal IT helpdesk, talked
            them into a Quick Assist or RemSupp remote-support session, and
            used it to stage a loader into %AppData%, persist via a Run key
            disguised as a Realtek audio component, and hand off to Golang
            implants ahead of Chaos ransomware deployment.

QUERIES:    Q1  Quick Assist execution ranked by rarity          CONF med
            Q2  RMM / remote-support first appearance            CONF med
            Q3  Remote-support parent spawning a shell           CONF high  *IOA
            Q4  PowerShell cradle writing an EXE to AppData      CONF high
            Q5  Randomised loader filename pattern               CONF high  *IOA
            Q6  Randomised-name EXE written to user-writable dir CONF med
            Q7  Audio-driver autostart in a user-writable path   CONF high  *IOA
            Q8  Startup-folder VBScript launcher                 CONF med
            Q9  Security-product discovery                       CONF med   FP HIGH
            Q10 CopyQ from a user-writable directory             CONF med
            Q11 RDP enabled via Terminal Server registry key     CONF med
            Q12 Golang implant --token-raw argument              CONF high  *IOA
            Q13 Egress to published C2 addresses                 CONF high
            Q14 DNS for the payload-hosting cluster              CONF high
            Q15 Shadow copy / backup destruction                 CONF high
            Q16 Mass-file ransomware activity burst              CONF med

DO FIRST:   1. Run the section 10 Teams/Entra exposure audit. If federation
               is open with an empty allowlist, you are exposed today.
            2. Run Q12 across 90 days. It has no known false positives, so a
               single hit is an incident.
            3. Run Q13 and Q14 across 90 days for retrospective compromise.
            4. Run Q3 and Q7 across 30 days.
            5. Deploy Playbook P1 (Teams federation allowlist).

FINDINGS:   [ ] Q12 hits: ______   [ ] Q13 hits: ______  [ ] Q14 hits: ______
            [ ] Q3 hits:  ______   [ ] Q7 hits:  ______
            [ ] Teams federation open with empty allowlist?  Y / N
            [ ] Quick Assist reachable by standard users?    Y / N
            [ ] Unsanctioned RMM found by Q2?                Y / N

GAPS:       - Teams vishing itself (T1566.004) has NO endpoint telemetry.
              Requires Purview and Entra audit logs, section 7.
            - No exfiltration detection ships. Sophos reports data theft but
              publishes no destination. Add a volumetric egress hunt locally.
            - PyArmour packing and the GitHub AES key fetch (T1027.002) are
              not separately detectable and are covered only behaviourally.
            - Registry-read-based discovery is not emitted by the sensor, so
              Q9 hunts the command-line surface instead and is high FP.

ACTIONS:    [ ] Import the section 10 IOC CSV into Falcon IOC Management
            [ ] Create the 4 Custom IOAs in Monitor mode (section 9)
            [ ] Playbook P1 -- Teams federation allowlist          (Immediate)
            [ ] Playbook P2 -- Block Quick Assist + unsanctioned RMM
            [ ] Playbook P3 -- 4 ASR rules, Audit then Block
            [ ] Playbook P4 -- RDP disabled by GPO on workstations
            [ ] Playbook P5 -- PowerShell script block logging
            [ ] Verify immutable / offline backup copy exists (H8)
            [ ] Targeted user briefing on the specific pretext (H6)

OWNER:      SOC Detection Engineering
VERSION:    v0.1 -- 2026-08-04
17

Changelog

v0.1 2026-08-04 Initial draft. Built from the Sophos X-Ops STAC4749 research, the SophosLabs indicator CSV, and three corroborating write-ups. 16 CQL hunt queries, 4 Custom IOA candidates, 70 atomic indicators traced to saved source snapshots, 17 tiered hardening controls, 5 deployable playbooks with rollback, and a 5-phase containment runbook. No indicator ships at prevent or critical severity because all public reporting on this campaign traces to a single vendor investigation. One malformed vendor SHA-256 was dropped rather than repaired. Bare workers.dev, the Cloudflare edge addresses, and the generic single-noun implant filenames were deliberately excluded from the blocklist and converted to behavioural coverage.

Planned for v0.2: a joined Teams-to-endpoint correlation query once the Purview and Falcon data sets are in the same search head, and a volumetric egress hunt to close the exfiltration gap noted in section 15.

18

References

TierSourceUsed forAccessed
T1Sophos X-Ops — Chaos in Teams vishingPrimary research. Campaign attribution, victimology, full attack chain, persistence value names, loader naming, certificate issuers, persona list, vishing tenant domains.2026-08-04
T1SophosLabs IoCs — STAC4749-Chaos_IOCs_July2026.csvEvery atomic indicator in section 10: addresses, domains, staging URLs and file hashes.2026-08-04
T2BleepingComputer — Microsoft Teams vishing attacks lead to Chaos ransomware attacksCorroboration of the timeline, victimology, the Quick Assist to RemSupp shift, persistence naming, redundant remote access, and the ransom note name.2026-08-04
T3CyberPress — Teams vishing campaign delivers Chaos ransomwareCorroboration of the tenant tradecraft, the msconfig RDP step, the gRPC loader protocol and the staging directory.2026-08-04
T3SOCFortress — STAC4749: Teams vishing and the Chaos ransomware campaignCorroboration of the loader C2 addresses and ports, PyInstaller and PyArmour packaging, certificate pinning issuers, and the reverse SOCKS proxy behaviour.2026-08-04
FrameworkMITRE ATT&CK T1566.004 — Spearphishing VoiceTechnique mapping for the initial-access step and its associated mitigations.2026-08-04
FrameworkMITRE ATT&CK T1219 — Remote Access SoftwareTechnique mapping and mitigation references for the remote-support abuse.2026-08-04
FrameworkMITRE ATT&CK M1038 — Execution PreventionAuthority behind controls H3, H4, H7 and H13.2026-08-04
VendorMicrosoft — Manage external access (federation) in Microsoft TeamsConfiguration authority for control H1, H2 and Playbook P1.2026-08-04
VendorMicrosoft — Attack surface reduction rules referenceRule GUIDs and behaviour for control H4 and Playbook P3.2026-08-04
VendorMicrosoft — AppLocker overviewConfiguration authority for control H7 and Playbook P2.2026-08-04
BenchmarkCIS Microsoft 365 Foundations BenchmarkBaseline authority for the Teams external-access and MFA controls (H1, H2, H14).2026-08-04
BenchmarkCIS Microsoft Windows Desktop BenchmarkBaseline authority for the AppLocker, RDP, PowerShell logging and local-admin controls (H7, H9, H10, H11).2026-08-04

Source snapshots. The verbatim fetched text of all five threat-intelligence sources is stored alongside this pack in STAC4749-TeamsVishing-Chaos-Hunt-sources/. Every atomic indicator in section 10 was traced back to those files mechanically before publication.