SMOKE#SCREEN — Fake Adobe and Zoom Updates Installing ScreenConnect RMM
Executive Summary
The payload is not malware. It is a real, correctly signed ScreenConnect client, and that is the whole point. SMOKE#SCREEN is an active multi-wave campaign disclosed by Securonix Threat Research on 2026-08-04. The operators rotate social-engineering lures across four themes, fake Zoom updates, fake Adobe updates, business document reviews, and system maintenance utilities, and every path ends the same way: a legitimate ConnectWise ScreenConnect MSI, signed with a valid DigiCert-chained Authenticode certificate, silently installed and beaconing to an attacker-controlled relay.
The investigation began from a single VBScript dropper and led to a live WsgiDAV staging server at 207.174.0.143:8080 that was exposing an open directory listing of 15 payload files. The same host doubles as the primary ScreenConnect relay on port 8041, so one machine both delivers the payload and holds command and control over already-compromised endpoints. Two further relay clusters were identified, each with its own RSA key pair, which is deliberate compartmentalisation rather than sloppiness: burning one relay leaves the other two running.
The toolkit spans several runtimes. An XOR-encrypted VBScript dropper with a flattened state machine and sandbox checks represents the actor at their most cautious. A plain 23-line VBScript creates every process through the WMI Win32_Process class with ShowWindow = 0 to avoid the commonly-flagged WScript.Shell path. A batch file named SystemCheck escalates through UAC, patches AMSI in memory, tears down SmartScreen through the registry, adds Defender exclusions, strips the Mark-of-the-Web with Unlock-File, then installs silently. Compiled .NET loaders built from MemoryLoader.cs run a nine-step Defender destruction sequence that completes within 15 seconds, including Add-MpPreference -ExclusionPath 'C:\', which blinds Defender to the entire filesystem permanently until an administrator reverses it by hand.
The tradecraft arc is the most useful thing in this report for a defender. The actor's newest loader, loader.cs, removed the Defender destruction sequence entirely and replaced it with a deliberate 180-second sleep between MSI installation and service start, carrying the source comment // WAIT 3 MINUTES (Breaks Elastic correlation). That is direct evidence of adversary testing against a named commercial EDR, and it tells you two things: the behavioural Defender-tampering detections were working, and correlation windows shorter than a few minutes are now explicitly targeted. Any detection in your estate that joins an installer to its resulting service inside a 60-second window will miss the current build.
The campaign is cross-platform. A macOS package, ZoomUpdateInstaller.pkg, connects to the same primary relay as the Windows MSIs. Securonix did not identify how the Mac installer was distributed and reported no confirmed macOS infections, so the macOS branch ships here as a hunt, not as an incident indicator.
Defender priority: hash and domain blocking will not carry you here. The actor rotates payload hashes between download sessions, and the final binary is a legitimate signed vendor product that many EDR configurations deliberately scrutinise less. Build the detection around unauthorised instance signals instead: a ScreenConnect client talking to a raw IP rather than a ConnectWise relay domain, a ScreenConnect service appearing on a host outside your sanctioned RMM inventory, and msiexec /qn whose parent is a script host or a browser. Sections 8 and 9 are built on exactly those three.
Source Review & Web Hunter Notes
Four sources were fetched and snapshotted verbatim into this pack's source directory. Every atomic indicator shipped in section 10 traces mechanically back to one of those snapshots before publication.
| Tier | Source | Key finding | Carry forward |
|---|---|---|---|
| T1 | Securonix Threat Research, Analyzing SMOKE#SCREEN (Sangwan, Gaikwad, Beardslee) | Primary research. The complete kill-chain set, the three relay clusters with ports and payload mapping, all 20 sample hashes, the staging-server inventory, the XOR key and state-machine detail, the Defender destruction sequence, the anti-EDR sleep comment, and the macOS package. | Yes |
| T2 | The Hacker News | Independent write-up of the same Securonix research. Corroborates the staging server, the sandbox process blacklist, the three relay clusters, the Dropbox and Cloudflare Quick Tunnel delivery, and the AMSI, UAC, SmartScreen and Mark-of-the-Web sequence. | Yes |
| T2 | Security Affairs | Corroborates the staging and relay addresses, the file inventory, the 180-second anti-correlation delay, and the detection guidance around Defender tampering and silent MSI installs. | Yes |
| T3 | AppleInsider | macOS branch. Confirms the ZoomUpdateInstaller.pkg package, the shared infrastructure link, the 15-payload staging server, the three relay clusters with distinct RSA key pairs, and that no Mac distribution method or confirmed Mac infection was identified. | Partial |
Decisions taken during research
- Dark Reading was dropped from the citation set. The article was reachable in search results but the page itself returned an empty body to automated retrieval. Nothing was cited from it, and no snapshot was kept, because a source that cannot be snapshotted cannot back an indicator.
- Two unrelated campaigns were excluded from The Hacker News article. That page carries a second story, a Bitdefender report on fake Xeno Roblox cheat installers delivering the Powercat Java stealer, with its own separate C2 domain. Automated summarisation merged the two. Those indicators belong to a different campaign and appear nowhere in the Securonix primary, so none of them ship here.
- Cloudflare edge addresses were not shipped. The primary report notes that the Quick Tunnel hostname resolved to Cloudflare IPs during analysis. Those are shared CDN front-ends serving a large share of the public internet, not actor infrastructure.
- Dropbox was not shipped as a domain indicator. The Zoom phishing page delivers its payload through a Dropbox shared link. Blocking
dropbox.comto catch this campaign is not a proportionate control. The specific shared-link path fragment is recorded in section 4 as a proxy-log hunt string instead. - Filenames ship as hunt logic, not as blocklist rows. Several payload names are randomised per build (
BuYUEVqG.msi,JqbMljCi.msi,NYbiLtvO.exe,zFbJVuiX.exe,lirMkvpf.exe) and the report states explicitly that the actor rotates payload hashes between download sessions. Their hashes ship; the names drive the shape-matching in Q13 rather than an exact-name block. - No sanctioned-instance identifier was invented. The primary report documents the ScreenConnect URL parameters
e=Access&y=Guestbut publishes no attacker instance ID string. Every tuning line that needs your own approved ScreenConnect instance carries a labelledREPLACE_WITH_placeholder rather than a fabricated value. - Nothing ships at prevent or critical severity. All public reporting on this campaign traces to a single vendor investigation. The Hacker News, Security Affairs and AppleInsider are derivative coverage of the Securonix research, not independent telemetry, so the two-independent-source bar for a blocking action is not met.
- No prompt-injection attempt was found in any fetched page. No source contained text directing an agent to run a command, fetch a further URL, skip a step, or claiming authorisation.
Relationship to the existing library. The HuntPack library already contains ScreenConnect-AsyncRAT-SEO-Hunt.html, covering an SEO-poisoning campaign that delivers ScreenConnect alongside AsyncRAT. The two share tooling and nothing else: different delivery, different infrastructure, different loader artefacts, no macOS branch. This pack deliberately does not restate generic ScreenConnect coverage and focuses on the SMOKE#SCREEN lure chain, its own staging and relay estate, the VBScript, batch and .NET loader artefacts, and the macOS package.
Hunt Brief & Attack Chain
Attack chain
| # | Step | Telemetry | Hunt angle |
|---|---|---|---|
| 1 | Spearphishing link delivers a lure themed on a Zoom update, an Adobe update, a business document, or a system maintenance check. One path is a polished HTML page impersonating a Zoom update notice that auto-starts its download after two seconds without a click. | Mail gateway, proxy, DnsRequest | Q5. Also proxy hunts in section 7. |
| 2 | Victim runs the initial-access file: an obfuscated VBScript dropper, a plain WMI-based VBScript, a batch file, or a compiled .NET executable named to impersonate an updater. | ProcessRollup2 | Q12, Q13 |
| 3 | Anti-analysis gate. The obfuscated dropper aborts if physical memory is under 2 GB or if any of wireshark.exe, procmon.exe, vboxservice.exe, vmtoolsd.exe, xenservice.exe or fiddler.exe is running. | ProcessRollup2 | Behavioural only. Noted in section 15 as a gap. |
| 4 | Security teardown. Depending on build: AMSI patched in memory, UAC re-launch for elevation, SmartScreen registry keys modified with Explorer restarted, Defender exclusions added, WinDefend stopped and disabled, and C:\ added as an exclusion path. | ProcessRollup2, RegGenericValueUpdate | Q8, Q9, Q10 |
| 5 | Payload fetch from the WsgiDAV staging server on tcp/8080, from a Cloudflare Quick Tunnel, or from a Dropbox shared link. The download uses a Mozilla user-agent to look like browser traffic, and all download logic sits in empty try/catch blocks so failures are silent. | NetworkConnectIP4, DnsRequest | Q4, Q5, Q6, Q7 |
| 6 | Mark-of-the-Web strip. The Zone.Identifier alternate data stream is removed from the downloaded MSI with Unlock-File before execution. | ProcessRollup2 | Q11 |
| 7 | Silent install. A legitimate ConnectWise-signed ScreenConnect MSI is installed with /qn, often under a masquerade filename such as WindowsExplorerSupport.msi, then deleted from disk. | ProcessRollup2 | Q3, Q13 |
| 8 | Newest builds sleep 180 seconds between install and service start specifically to break EDR correlation windows. | ProcessRollup2, CreateService | Q14 |
| 9 | ScreenConnect service is created and the client connects to its configured relay with e=Access&y=Guest, presenting as a guest access session. | CreateService, NetworkConnectIP4 | Q1, Q2, Q16 |
| 10 | Operator opens a full remote desktop session that is indistinguishable from legitimate IT management activity. | NetworkConnectIP4, UserLogon | Q1. Detection depends on the relay being unrecognised. |
| 11 | macOS branch. ZoomUpdateInstaller.pkg installs a ScreenConnect client that connects to the same primary relay. | ProcessRollup2 (macOS) | Q15 |
Hunt hypotheses
| # | Hypothesis | Technique | Confidence |
|---|---|---|---|
| H1 | A ScreenConnect client process on an endpoint is connecting to an IP address or hostname that is not a recognised ConnectWise relay, which means the instance was not provisioned by your IT organisation. | T1219 | High |
| H2 | A ScreenConnect service has been created on a host that is not in the sanctioned RMM inventory, or carries an instance identifier that does not match the approved instance. | T1543, T1219 | High |
| H3 | msiexec.exe has run with a silent-install flag under a parent that is a script host, a browser, or an update-impersonating executable, rather than under a software-deployment agent. | T1218.007 | High |
| H4 | An endpoint contacted the campaign's staging or relay infrastructure directly. | T1071.001, T1219 | High |
| H5 | A process ran the Defender destruction sequence, stopping and disabling WinDefend or adding a drive-root exclusion. | T1562.001 | High |
| H6 | A script host or browser fetched a payload over tcp/8080 or through a Cloudflare Quick Tunnel, which is the WebDAV staging pattern this actor uses. | T1105, T1102 | Medium |
| H7 | AMSI was patched in memory, SmartScreen was disabled through the registry, or the Mark-of-the-Web was stripped from a downloaded installer. | T1562.001, T1553.005 | Medium |
| H8 | A ScreenConnect service started several minutes after an MSI install on the same host, a gap wide enough to defeat short EDR correlation windows. | T1543, T1497 | Medium |
| H9 | A macOS endpoint installed a package impersonating a Zoom update and now runs a ScreenConnect client. | T1204.002, T1219 | Medium |
Consolidated IOC Table
Every value below appears verbatim in a saved source snapshot. Severity reflects the single-vendor sourcing described in section 2, so no row is rated for a blocking action.
Infrastructure
| Type | Value | Role | Conf | Action |
|---|---|---|---|---|
| IPv4 | 207.174.0.143 | WsgiDAV staging server on tcp/8080 and primary ScreenConnect relay on tcp/8041. Dual purpose: payload delivery and C2. | High | Detect |
| IPv4 | 142.202.191.225 | Secondary ScreenConnect relay on tcp/8041 and tcp/80. Port 80 is a deliberate fallback to bypass egress rules that block non-standard ports. | High | Detect |
| IPv4 | 207.189.11.170 | Former C# payload hosting, used by the earliest VBScript sample to serve working_payload.cs. Reported offline. | Medium | Detect |
| Domain | blog.derrspecial-onlinedmin.live | Tertiary ScreenConnect relay on tcp/8041. Named to blend in as an administrative portal. | High | Detect |
| Domain | subscription-magnetic-recommended-meat.trycloudflare.com | Cloudflare Quick Tunnel used for MSI delivery by the compiled .NET loader. Ephemeral by design. | Medium | Detect |
| Domain | crestmarkhq.com | Former MSI hosting behind the Cloudflare proxy, used by the second VBScript sample. Reported offline. | Medium | Detect |
| URL path | dropbox.com/scl/fi/a0hp9g4w2ddkb3ggnkivx/ | Dropbox shared-link path hosting Zoomupdateinstaller.msi. Proxy-log hunt string only. The Dropbox domain itself is not an indicator. | Medium | Hunt |
| URL path | /Bin/ | Shared URL path convention across multiple samples on the staging server. Weak alone, useful when joined to tcp/8080. | Low | Hunt |
Sample hashes (SHA-256)
| File | SHA-256 | Role |
|---|---|---|
zoom-update.vbs | 9161a8f7f07741db06b9f9a87b6ec7f277faf2ae3a3a661d6eb09cec4e12b920 | XOR-encrypted VBScript dropper with state machine and sandbox checks |
RSKAdvGrpSupportingdocuments.vbs | 35be1b070f06eb313c3cb818c74aa0a9c2d9f39a05621dac4de6cff6067a5d12 | Plain WMI-based VBScript dropper, business-document lure |
SystemCheck | 31260c37cc442719ac84540f4159dd9d4738575d2ab05e92c751a9b4b5f9b91b | Security-killing batch file, delivered inside a gzip archive |
MemoryLoader.cs | 371166ebd83e8318b49ba71321396524fbca7dc42fe1ca4badda8af794bf5a59 | C# loader source, nine-step Defender destruction |
loader.cs | 63c46b3c090a4b1efef146f2f1efc4f93d44f21db21d7825f43e02c3c5c89de6 | Successor loader source, anti-EDR 180-second sleep |
zoom-update.html | 873011c181d00709fdf66f32bb3cca0c5ff3147d00ef818fef72987a6773ea66 | Zoom update phishing page, auto-download after two seconds |
index.html | 2423decbfcf820f41bc356547e4e18e61d60c9829421d7121c374dcef88577f7 | Adobe Flash Player phishing page |
AdobeReader_Update.exe | 433b61c29aefaa5b55fe78063e6ad8597d3835f36e1242d5402ab23e6dc61194 | Compiled loader, Adobe updater masquerade |
NYbiLtvO.exe | c8695906dcefc64becb3123fa0a8058278c8c2f9c86130956b6b10d49c1a35dc | Compiled loader, earlier build without console-hiding code |
SystemCheck.exe | 60c730addd2a15e4213a1d37f55186686976de73a106317b5a258fe0121cfd5c | Compiled loader, primary relay |
Document-Viewer.exe | dc8b056dd6eb75df21e9721ac2e340f91bb5e94d5a6ff412d7d0c7539e0f06e2 | Compiled loader, tertiary relay |
zFbJVuiX.exe | 9d9f3fa5aaf6bc91091873bd7ee04f0cc23e8709e4ad20c61d2779ff1a43c4b4 | Compiled loader.cs, also seen renamed to Zoomupdateinstaller.exe. 50 MB |
BuYUEVqG.msi | 8e87a734daddd95322b3f18f71eb9275219e244aac4f62b8dc6da6e2e91525e9 | ScreenConnect MSI, primary relay |
Zoomupdateinstaller.msi | dd23012b4dc29cf7901185ae4fb2d507e737e9ea4d467846eafd6a86b26486bf | ScreenConnect MSI, Zoom lure |
Document-review.msi | 3cd9b7d583442963261f9985128042bf45d25482efcbf903c9248837cb0d744b | ScreenConnect MSI, secondary relay |
DocumentReview.msi | 01e4cb3c60fa50b2927daa11f25a3c412549680406fc121a3d1870a9a33f5d38 | ScreenConnect MSI, secondary relay |
ZoomUpdateInstaller.pkg | aa84e2ac68f7fc18f4927b89be7b4a7739f2eaf099e489aa0f65c1d3913ce62a | macOS package, primary relay |
Zoomupdateinstaller.pkg | 639430a33c0ecdf5a134501788a3a40f065ae4232efc66e1b82eca2b355e0606 | macOS package, second variant |
cloudflared.exe | 5253e66f1f493c4e13539749f1aa86fd0c61e3072900fec29a44ba046a6d97e2 | Cloudflare tunnel binary found on the staging server |
system.config | aefac65c42c0c72ed3e08b32774fa1b902f4fd1d53de189d50f38130cc357764 | Configuration artefact from the staging server |
Behavioural signatures (no atomic value, hunt these instead)
- XOR key
gc1HXjFtHBbC659t, a 16-byte key used by the obfuscated VBScript dropper. Useful for retro-hunting sample repositories, not for endpoint telemetry. - State sequence 185, 626, 616, 518, 442, 509, 821 in the flattened VBScript execution path.
- Sandbox process blacklist:
wireshark.exe,procmon.exe,vboxservice.exe,vmtoolsd.exe,xenservice.exe,fiddler.exe, plus an abort if physical memory is under 2 GB. - Masquerade filename
WindowsExplorerSupport.msiused locally in TEMP while the actual download target wasSystemCheck.msi. - ScreenConnect session parameters
e=Access&y=Guest, the default ConnectWise guest-access configuration. - Loader source comment
// WAIT 3 MINUTES (Breaks Elastic correlation)with a 180000 ms sleep. - MSI component set:
Client.dll,ClientService.dll,Core.dll,WindowsClient.exe,WindowsCredentialProvider.dll, all signed to Connectwise, LLC through the DigiCert chain. - In-memory compilation via
Add-Type -Language CSharpfollowed by invocation of aHelloWorld.Programentry point, which is deliberate misdirection.
Affected Surface & Telemetry Matrix
| Surface | Exposure | Required telemetry | Priority | Gap risk |
|---|---|---|---|---|
| Windows endpoints with an interactive user | Primary target. All five reconstructed kill chains end here. | ProcessRollup2, SyntheticProcessRollup2, CreateService, NetworkConnectIP4, RegGenericValueUpdate | Critical | Low. Standard Falcon sensor coverage. |
| macOS endpoints | Confirmed package tied to shared infrastructure. No distribution method or confirmed infection reported. | ProcessRollup2, NetworkConnectIP4 | Medium | Medium. Service and registry events do not exist on macOS, so the Windows queries do not port. |
| Microsoft Defender estate | Directly targeted for destruction by the MemoryLoader.cs build. Exclusion of C:\ is permanent until reversed. | ProcessRollup2, Defender operational log | Critical | Low, provided command lines are captured. |
| Egress / web proxy | Payload staging over tcp/8080, Cloudflare Quick Tunnels, Dropbox shared links. | Proxy logs, DnsRequest, NetworkConnectIP4 | High | Medium. Non-standard ports are often unlogged by the proxy and only visible on the firewall. |
| Sanctioned RMM estate | The detection depends entirely on knowing which ScreenConnect instances are yours. | InstalledApplication, CreateService, asset inventory | Critical | High. Without an RMM inventory, every query in section 8 that keys on unsanctioned instances is unusable. |
| Mail gateway | Assessed initial access vector is spearphishing with a link. | Mail gateway logs, URL rewriting telemetry | High | Medium. No sender addresses or subject lines were published. |
| WebDAV / search-ms handling | The staging server is a WsgiDAV instance, so WebDAV client activity to an external host is directly relevant. | ProcessRollup2, NetworkConnectIP4 | Medium | Medium. WebDAV redirector activity is not always attributable to the initiating process. |
ATT&CK Mapping
Techniques as published in the primary report, with the query that covers each.
| Tactic | Technique | Observed behaviour | Coverage |
|---|---|---|---|
| Initial Access | T1566.002 Phishing: Spearphishing Link | Rotating lures across Zoom, Adobe, business document and system maintenance themes. | Q5, section 7 |
| Execution | T1204.002 User Execution: Malicious File | Victim runs the VBScript, batch file, EXE or macOS package. | Q12, Q13, Q15 |
| Execution | T1047 Windows Management Instrumentation | The second VBScript creates every process through Win32_Process with ShowWindow = 0. | Q12 |
| Execution | T1059.005 VBScript | Two distinct VBScript droppers. | Q12 |
| Execution | T1059.003 Windows Command Shell | SystemCheck batch loader. | Q8, Q9, Q10 |
| Execution | T1059.001 PowerShell | Decrypted PowerShell command, in-memory C# compilation via Add-Type, hidden PowerShell for each Defender step. | Q8, Q9, Q11 |
| Defense Evasion | T1027 Obfuscated Files or Information | Hex-encoded XOR cipher, flattened state machine, junk arithmetic that alters the byte signature between builds. | Behavioural only |
| Defense Evasion | T1497.001 Sandbox Evasion: System Checks | Memory floor of 2 GB and a six-entry analysis-process blacklist. | Gap |
| Defense Evasion | T1562.001 Impair Defenses: Disable or Modify Tools | AMSI patched in memory, WinDefend stopped and disabled, C:\ added as an exclusion path, SmartScreen registry teardown. | Q8, Q9, Q10 |
| Defense Evasion | T1564.003 Hide Artifacts: Hidden Window | objShell.Run payload, 0, False, ShowWindow = 0, and P/Invoke console hiding in the compiled loader. | Q12 |
| Defense Evasion | T1553.005 Mark-of-the-Web Bypass | Zone.Identifier alternate data stream stripped with Unlock-File before install. | Q11 |
| Defense Evasion | T1548.002 Bypass User Account Control | Elevation re-launch through shell.CreateObject("shell.application"). | Q9 |
| Defense Evasion | T1070.004 Indicator Removal: File Deletion | Installer deleted from disk after execution. | Q13 |
| Defense Evasion | T1036 Masquerading | AdobeReader_Update.exe, WindowsExplorerSupport.msi, SystemCheck, and a HelloWorld namespace as misdirection. | Q3, Q13 |
| Defense Evasion | T1218.007 System Binary Proxy Execution: Msiexec | Silent MSI install of the signed ScreenConnect package. | Q3 |
| Defense Evasion | T1550 Use Alternate Authentication Material | Valid ConnectWise Authenticode signature reduces EDR scrutiny of the final payload. | Q1, Q2, Q16 |
| Command and Control | T1219 Remote Access Software | ScreenConnect agent beaconing to one of three relays with e=Access&y=Guest. | Q1, Q2, Q4, Q16 |
| Command and Control | T1071.001 Application Layer Protocol: Web Protocols | Relay fallback to tcp/80, Mozilla user-agent on payload downloads. | Q4, Q6 |
| Command and Control | T1102 Web Service | Cloudflare Quick Tunnel and Dropbox shared links as delivery channels. | Q5, Q6 |
| Persistence | T1543 Create or Modify System Process | ScreenConnect client service installed and started. | Q2, Q14 |
Native Audit-Log Hunts
Checks that do not need Falcon telemetry. Run these in parallel with section 8, because several of them cover steps the endpoint sensor cannot see.
Build the RMM inventory first
This is the prerequisite for half the pack. Every unsanctioned-instance query depends on you knowing which ScreenConnect relays and instance identifiers are legitimately yours. Record the answer before running section 8, or the results are unreadable.
# Windows, per host. Enumerate installed ScreenConnect / ConnectWise services
# and the relay each one is configured to reach.
Get-CimInstance Win32_Service |
Where-Object { $_.Name -match 'ScreenConnect|ConnectWise' } |
Select-Object Name, DisplayName, PathName, StartMode, State |
Format-List
# The relay host is embedded in the service image path and in the client
# configuration. Record every distinct value you find across the fleet.
Web proxy and firewall
- Search proxy logs for the Dropbox shared-link path fragment
scl/fi/a0hp9g4w2ddkb3ggnkivx. Dropbox itself is allow-listed in most estates, so the path is the only discriminator. - Search for any request to a
trycloudflare.comsubdomain. Quick Tunnels are ephemeral and have almost no legitimate enterprise use. If your developers do use them, enumerate the sanctioned hostnames and alert on everything else. - Firewall: alert on outbound tcp/8041 to any destination. That is the ScreenConnect relay port and it should only ever reach your own approved relay.
- Firewall: review outbound tcp/8080 from workstations. The staging server runs there, and workstation-initiated 8080 to an external IP is rarely business traffic.
Mail gateway
- Retro-hunt for messages carrying links to the three infrastructure addresses in section 4, and for attachments with a
.vbsor.gzipextension delivered to end users. - Search for lure subject patterns around Zoom updates, Adobe updates, document review requests and system maintenance notices in the period since disclosure. No sender addresses or subject lines were published, so this is a shape hunt rather than an exact match.
Microsoft Defender operational log
- Event ID 5007 records exclusion changes. Any exclusion whose path is a drive root is an incident, not a finding.
- Event ID 5001 records real-time protection being disabled.
- Service Control Manager event ID 7040 records
WinDefendstart-type changes to Disabled. - Compare the current exclusion list against your baseline on every host that returned a hit in Q8.
macOS
# Installed package receipts. A Zoom-themed receipt from an unknown authority # is the macOS branch of this campaign. pkgutil --pkgs | grep -i -E 'zoom|screenconnect|connectwise' # Inspect any hit, then list what it wrote to disk. pkgutil --pkg-info REPLACE_WITH_PACKAGE_ID pkgutil --files REPLACE_WITH_PACKAGE_ID # Launch items pointing at a ScreenConnect client. ls -la /Library/LaunchAgents /Library/LaunchDaemons ~/Library/LaunchAgents 2>/dev/null
CrowdStrike LogScale CQL Hunt Queries
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. A suggested starting window is noted on each card.
Three queries need your own values before they will work. Q1, Q2 and Q16 compare against your sanctioned ScreenConnect estate, and no public source can supply that. Each carries a labelled REPLACE_WITH_ placeholder. Fill it from the inventory you build in section 7, or the query will return your legitimate RMM alongside the campaign's.
Looks for: outbound traffic on the ScreenConnect relay port. All three SMOKE#SCREEN clusters listen on tcp/8041, and the secondary cluster adds tcp/80 as a firewall-evasion fallback. In an estate with one sanctioned relay this query should return exactly one destination. Every other row is an unsanctioned instance. This is the single highest-value query in the pack because it does not care which lure, which loader, or which payload hash was used. FP: your own relay, if reached by IP. Suggested window: 14 days.
// HUNT: ScreenConnect relay-port egress to an unapproved destination // MITRE: T1219, T1550 | CONF: high FP: low COST: low // REQUIRES: NetworkConnectIP4 // FALSE POSITIVES: your own sanctioned ScreenConnect relay reached by IP address // TUNING: put your approved relay address in the exclusion below before scheduling. // TUNING: if you have no ScreenConnect deployment at all, delete the exclusion line // TUNING: entirely and treat every row as an incident. #event_simpleName=/^NetworkConnectIP4$/ | RemotePort=/^(8040|8041)$/ | RemoteAddressIP4!=/^REPLACE_WITH_SANCTIONED_RELAY_IP$/ | groupBy([ComputerName, RemoteAddressIP4, RemotePort], function=[ count(as=Connections), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen), collect([ContextBaseFileName, UserName], limit=10) ], limit=20000) | sort(FirstSeen, order=desc, limit=500)
Looks for: the moment a ScreenConnect client service is installed. ConnectWise embeds the instance identifier in the service name and display name, so a service whose identifier is not yours is a foreign instance regardless of how legitimately it is signed. The image path also carries the configured relay, which gives you the destination without waiting for the first beacon. FP: your own RMM rollouts and re-installs. Suggested window: 30 days.
// HUNT: ScreenConnect / ConnectWise service creation, foreign instance identifiers // MITRE: T1543, T1219 | CONF: high FP: medium COST: low // REQUIRES: CreateService // FALSE POSITIVES: sanctioned RMM deployment, agent upgrades and repairs // TUNING: exclude your approved instance identifier, which appears inside both the // TUNING: service name and the display name, e.g. // TUNING: | ServiceName!=/REPLACE_WITH_APPROVED_INSTANCE_ID/i // TUNING: then also exclude your software-deployment service account from UserName. #event_simpleName=/^CreateService$/ | ServiceDisplayName=/(screenconnect|connectwise)/i | ServiceName!=/REPLACE_WITH_APPROVED_INSTANCE_ID/i | table([@timestamp, ComputerName, UserName, ServiceName, ServiceDisplayName, ServiceImagePath], limit=2000)
Looks for: msiexec.exe running with a silent-install flag under a parent that has no business installing software. Every SMOKE#SCREEN kill chain passes through this step, and it is the one place where the campaign's use of a legitimate signed MSI stops helping the attacker: the package may be trusted, but wscript.exe or a browser launching a quiet install is not. This is also the strongest Custom IOA candidate in the pack. FP: software-deployment tooling that shells out through cmd or PowerShell. Suggested window: 14 days.
// HUNT: msiexec silent install with a script-host, browser or masquerading parent // MITRE: T1218.007, T1036 | CONF: high FP: medium COST: low // REQUIRES: ProcessRollup2 / SyntheticProcessRollup2 // FALSE POSITIVES: SCCM, Intune, Chocolatey, PDQ and other deployment agents that // FALSE POSITIVES: wrap msiexec in cmd.exe or powershell.exe // TUNING: exclude your deployment agent by grandparent, not by parent, e.g. // TUNING: | GrandparentBaseFileName!=/^(ccmexec|intunemanagementextension|pdqdeploy)(\.exe)?$/i // TUNING: and exclude the deployment service account from UserName. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^msiexec(\.exe)?$/i | CommandLine=/[\-\/](qn|quiet|qb)/i | ParentBaseFileName=/^(wscript|cscript|powershell|pwsh|cmd|mshta|rundll32|wmiprvse|chrome|msedge|firefox|iexplore|explorer|adobereader_update|systemcheck|document-viewer|zoomupdateinstaller)(\.exe)?$/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, GrandparentBaseFileName, FileName, CommandLine], limit=2000)
Looks for: direct network contact with the three published addresses. 207.174.0.143 is both the WsgiDAV payload server on tcp/8080 and the primary relay on tcp/8041, so a hit there tells you which side of the intrusion you are seeing from the port alone. 142.202.191.225 is the secondary relay including its tcp/80 fallback. 207.189.11.170 is reported offline and a hit there means an old sample is still executing. FP: essentially none. Suggested window: 90 days, or as far back as retention allows.
// HUNT: endpoint contact with published SMOKE#SCREEN infrastructure // MITRE: T1071.001, T1219, T1105 | CONF: high FP: low COST: low // REQUIRES: NetworkConnectIP4 // FALSE POSITIVES: none expected; treat every row as an investigation // NOTE: port 8080 on the first address is payload staging, 8041 is the relay. #event_simpleName=/^NetworkConnectIP4$/ | RemoteAddressIP4=/^(207\.174\.0\.143|142\.202\.191\.225|207\.189\.11\.170)$/ | groupBy([ComputerName, RemoteAddressIP4, RemotePort], function=[ count(as=Connections), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen), collect([ContextBaseFileName, UserName], limit=10) ], limit=20000) | sort(FirstSeen, order=desc, limit=500)
Looks for: the tertiary relay domain, the specific Quick Tunnel hostname the .NET loader referenced, the retired Cloudflare-proxied MSI host, and as a wider net, any trycloudflare.com subdomain. That last clause is the durable part: Quick Tunnels are free, ephemeral and rotate constantly, so the specific hostname will die long before the technique does. FP: developers legitimately use Quick Tunnels to expose local services. Suggested window: 30 days.
// HUNT: DNS resolution of SMOKE#SCREEN domains and any Cloudflare Quick Tunnel // MITRE: T1071.001, T1102 | CONF: high FP: medium COST: low // REQUIRES: DnsRequest // FALSE POSITIVES: developers exposing local services through trycloudflare.com // TUNING: the three named domains are unambiguous. If the generic Quick Tunnel // TUNING: clause is noisy, split it into its own scheduled search scoped to // TUNING: non-engineering OUs, or allow-list your known tunnel hostnames rather // TUNING: than dropping the clause, since it is the part that survives rotation. #event_simpleName=/^DnsRequest$/ | DomainName=/(^blog\.derrspecial-onlinedmin\.live$|^subscription-magnetic-recommended-meat\.trycloudflare\.com$|^crestmarkhq\.com$|\.trycloudflare\.com$)/i | groupBy([ComputerName, DomainName], function=[ count(as=Lookups), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen), collect([ContextBaseFileName, UserName], limit=10) ], limit=20000) | sort(FirstSeen, order=desc, limit=500)
Looks for: the WsgiDAV staging pattern after the IP rotates. The actor's staging server ran on tcp/8080 with an open directory listing, and the fetch was performed by a script host or an in-memory PowerShell cradle using a Mozilla user-agent to look like a browser. A workstation script interpreter reaching an external host on 8080 is the durable shape. cloudflared.exe is included because the actor runs it on their own infrastructure and its presence on a workstation is worth a look either way. FP: internal application servers and build agents on 8080. Suggested window: 14 days.
// HUNT: script host or download utility reaching an external host on tcp/8080 // MITRE: T1105, T1102 | CONF: medium FP: medium COST: low // REQUIRES: NetworkConnectIP4 // FALSE POSITIVES: internal app servers, proxies, build agents and test harnesses // FALSE POSITIVES: that legitimately listen on 8080 // TUNING: exclude RFC1918 destinations first, which removes almost all the noise: // TUNING: | RemoteAddressIP4!=/^(10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.)/ // TUNING: then allow-list any external SaaS your estate genuinely reaches on 8080. #event_simpleName=/^NetworkConnectIP4$/ | RemotePort=/^8080$/ | RemoteAddressIP4!=/^(10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.|127\.)/ | ContextBaseFileName=/^(wscript|cscript|powershell|pwsh|cmd|mshta|rundll32|curl|certutil|bitsadmin|cloudflared|regsvr32)(\.exe)?$/i | table([@timestamp, ComputerName, UserName, ContextBaseFileName, RemoteAddressIP4, RemotePort], limit=2000)
Looks for: the WebDAV delivery surface that a WsgiDAV staging server exposes. WsgiDAV is a WebDAV implementation, which means the same host can be mounted as a remote share and browsed by Explorer, and can be reached through a search-ms: saved-search URI that renders attacker files inside a native Windows search window. This query hunts the command-line artefacts of that path: search-ms: URIs, the DavWWWRoot redirector token, and UNC paths carrying an explicit port. FP: estates that genuinely use WebDAV shares. Suggested window: 30 days.
// HUNT: search-ms URI and WebDAV redirector artefacts in a command line // MITRE: T1105, T1566.002, T1204.002 | CONF: medium FP: medium COST: low // REQUIRES: ProcessRollup2 / SyntheticProcessRollup2 // FALSE POSITIVES: organisations that use WebDAV shares or SharePoint mapped drives // FALSE POSITIVES: legitimately; Explorer saved searches also emit search-ms URIs // TUNING: exclude your own WebDAV and SharePoint hostnames from CommandLine, then // TUNING: keep only rows where the UNC host is an IP literal rather than a name, // TUNING: which is what the SMOKE#SCREEN staging server presented as. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | CommandLine=/(search\-ms:|DavWWWRoot|@8080|@SSL|WebClient)/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=2000)
Looks for: the nine-step Defender teardown that MemoryLoader.cs and its compiled variants execute before any network activity. The report confirms the sequence completes within 15 seconds and leaves the host permanently degraded even when the payload download later fails, so a hit here matters whether or not ScreenConnect was ever installed. Adding C:\ as an exclusion path is the single most severe line: it blinds Defender to the entire filesystem. FP: almost none. A legitimate administrator never excludes a drive root. Suggested window: 90 days.
// HUNT: Defender service teardown and drive-root exclusion // MITRE: T1562.001 | CONF: high FP: low COST: low // REQUIRES: ProcessRollup2 / SyntheticProcessRollup2 with command-line capture // FALSE POSITIVES: rare. Some AV migration scripts stop WinDefend legitimately; // FALSE POSITIVES: none of them exclude a drive root. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | CommandLine=/(Stop\-Service\s+\-Name\s+WinDefend|Set\-Service\s+\-Name\s+WinDefend|Add\-MpPreference\s+\-ExclusionPath|Set\-MpPreference\s+\-DisableRealtimeMonitoring|sc\s+(stop|config)\s+WinDefend)/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=2000)
Looks for: three evasion primitives this campaign uses together. The SystemCheck batch file patches the amsiInitFailed flag by reflection so AMSI reports initialisation failure and stops scanning for the rest of the session, then re-launches itself elevated through shell.application. Separately, the first VBScript dropper compiles a downloaded C# file entirely in memory with Add-Type -Language CSharp and invokes a deliberately misleading HelloWorld.Program entry point. FP: security research and red-team tooling. Suggested window: 30 days.
// HUNT: AMSI patching, UAC re-launch, and in-memory C# compilation // MITRE: T1562.001, T1548.002, T1059.001 | CONF: high FP: medium COST: low // REQUIRES: ProcessRollup2 / SyntheticProcessRollup2 with command-line capture // FALSE POSITIVES: internal red teams, security research hosts, and a small number // FALSE POSITIVES: of legitimate build tools that use Add-Type -Language CSharp // TUNING: exclude your red-team and security-research asset group by ComputerName. // TUNING: the Add-Type clause is the softest of the three. If it is noisy in a // TUNING: developer estate, drop only that clause and keep the AMSI terms. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | CommandLine=/(amsiInitFailed|AmsiScanBuffer|AmsiUtils|shell\.application.{0,40}runas|Add\-Type\s+\-Language\s+CSharp|HelloWorld\.Program)/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=2000)
Looks for: stage 3 of the SystemCheck batch loader, which disables SmartScreen through two registry locations once it holds administrative rights, then kills and restarts Explorer so the change applies immediately. Both the policy hive and the per-user Explorer Advanced key are covered. FP: hardening or kiosk-imaging scripts that intentionally manage these keys. Suggested window: 30 days.
// HUNT: SmartScreen policy and Explorer Advanced value changes // MITRE: T1562.001 | CONF: high FP: medium COST: low // REQUIRES: RegGenericValueUpdate // FALSE POSITIVES: build images, kiosk provisioning and GPO refresh cycles that // FALSE POSITIVES: legitimately set these values // TUNING: exclude your imaging and GPO service accounts from UserName, and exclude // TUNING: your golden-image build hosts by ComputerName. A change on a live user // TUNING: workstation outside a maintenance window is the row that matters. #event_simpleName=/^RegGenericValueUpdate$/ | RegValueName=/^(EnableSmartScreen|ShellSmartScreenLevel|SmartScreenEnabled|DisableAntiSpyware|DisableRealtimeMonitoring)$/i | table([@timestamp, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue], limit=2000)
Looks for: removal of the Zone.Identifier alternate data stream immediately before installation. The batch loader uses Unlock-File on the downloaded MSI, which strips the Mark-of-the-Web so Windows treats a file fetched from the internet as if it came from local disk and suppresses the security warning. This is a short, specific step that has very little legitimate use on a user workstation. FP: developer workflows that unblock downloaded modules. Suggested window: 30 days.
// HUNT: Zone.Identifier / Mark-of-the-Web removal before execution // MITRE: T1553.005, T1070.004 | CONF: medium FP: medium COST: low // REQUIRES: ProcessRollup2 / SyntheticProcessRollup2 with command-line capture // FALSE POSITIVES: developers running Unblock-File on downloaded PowerShell modules // FALSE POSITIVES: and archive tools that clear the stream on extraction // TUNING: keep the rows where the target is an .msi or .exe. Unblocking a .ps1 or // TUNING: .psm1 is ordinary developer behaviour; unblocking an installer that was // TUNING: downloaded seconds earlier is not. Exclude your developer OU. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | CommandLine=/(Unlock\-File|Unblock\-File|Zone\.Identifier)/i | CommandLine=/\.(msi|exe|gzip|zip)/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=2000)
Looks for: both VBScript droppers at their point of execution. The first runs its decrypted PowerShell through WScript.Shell with the window-style argument set to hidden. The second deliberately avoids WScript.Shell because endpoint tools flag it, and creates every process through the WMI Win32_Process class with ShowWindow = 0 instead, which surfaces as a child of WmiPrvSE.exe. Covering both parents catches the technique regardless of which evasion the sample chose. FP: legacy VBScript automation and WMI-based management tooling. Suggested window: 14 days.
// HUNT: script host or WMI provider spawning an interpreter or installer // MITRE: T1059.005, T1047, T1564.003 | CONF: medium FP: medium COST: low // REQUIRES: ProcessRollup2 / SyntheticProcessRollup2 // FALSE POSITIVES: legacy VBScript logon scripts, WMI-based management platforms, // FALSE POSITIVES: and inventory agents that spawn PowerShell through WmiPrvSE // TUNING: exclude your management platform's grandparent process and its service // TUNING: account. If logon scripts are noisy, restrict to the hidden-window forms // TUNING: by adding | CommandLine=/(\-w\s+hidden|\-WindowStyle\s+Hidden|ShowWindow)/i #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | ParentBaseFileName=/^(wscript|cscript|wmiprvse)(\.exe)?$/i | FileName=/^(powershell|pwsh|cmd|msiexec|mshta|rundll32|certutil|bitsadmin|regsvr32)(\.exe)?$/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=2000)
Looks for: the shape that outlives the hashes. The staging server hosted files named BuYUEVqG.msi, JqbMljCi.msi, NYbiLtvO.exe, lirMkvpf.exe and zFbJVuiX.exe: eight characters, mixed case, no dictionary word, executed out of TEMP, Public or Downloads. The report states plainly that the actor rotates payload hashes between download sessions, so name shape plus location is the more durable signal. FP: high by design. Installer bootstrappers and browser download stubs also produce random names in these directories. Treat this as a triage feed, not an alert. Suggested window: 7 days.
// HUNT: eight-character mixed-case executable launched from a user-writable path // MITRE: T1036, T1204.002, T1070.004 | CONF: medium FP: high COST: medium // REQUIRES: ProcessRollup2 / SyntheticProcessRollup2 // FALSE POSITIVES: installer bootstrappers, browser update stubs, unpacked archives // FALSE POSITIVES: and temporary compiler output all produce random names in TEMP // TUNING: this is a triage feed, never a direct alert. Rank by fleet rarity first, // TUNING: then join surviving hosts against Q1, Q3 and Q8. Exclude your software // TUNING: distribution cache path and your developer build hosts by ComputerName. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | ImageFileName=/\\(Users\\Public|AppData\\Local\\Temp|Downloads)\\/i | FileName=/^[A-Za-z]{8}\.(exe|msi)$/ | groupBy([FileName, ImageFileName], function=[ count(aid, distinct=true, as=DistinctHosts), count(as=Executions), collect([ComputerName, UserName, ParentBaseFileName], limit=25), min(@timestamp, as=FirstSeen) ], limit=20000) | DistinctHosts < 5 | sort(FirstSeen, order=desc, limit=300)
Looks for: the actor's newest evasion, stated outright in their own source code as // WAIT 3 MINUTES (Breaks Elastic correlation) with a 180000 ms sleep. Correlation rules that require an installer and its resulting service inside a 60-second window no longer fire. This query widens the window instead of narrowing it: group both event types by host, then keep hosts where the two are separated by more than two minutes but less than fifteen. FP: slow legitimate installs on loaded machines. Suggested window: 30 days.
// HUNT: MSI install and ScreenConnect service creation separated by minutes // MITRE: T1543, T1497, T1218.007 | CONF: medium FP: medium COST: medium // REQUIRES: ProcessRollup2 / SyntheticProcessRollup2 and CreateService // FALSE POSITIVES: genuinely slow installs on loaded hosts, and any sanctioned RMM // FALSE POSITIVES: deployment that stages the package then starts the service later // TUNING: exclude your approved instance identifier from ServiceDisplayName and // TUNING: your deployment service account from UserName. Tighten the lower bound // TUNING: toward 170 seconds to sit right on the actor's hard-coded 180s sleep. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|CreateService)$/ | CommandLine=/msiexec/i or ServiceDisplayName=/(screenconnect|connectwise)/i | groupBy([ComputerName], function=[ min(@timestamp, as=FirstEvent), max(@timestamp, as=LastEvent), count(as=Events), collect([FileName, ServiceName, ServiceDisplayName, ServiceImagePath, CommandLine], limit=20) ], limit=20000) | GapSeconds := (LastEvent - FirstEvent) / 1000 | GapSeconds > 120 | GapSeconds < 900 | sort(FirstEvent, order=desc, limit=300)
Looks for: the macOS branch. Two package variants were recovered, both named to impersonate a Zoom updater, and the primary one connects to the same relay as the Windows MSIs. Securonix did not establish how the Mac installer was distributed and reported no confirmed Mac infections, so treat a hit as a strong lead rather than a confirmed intrusion. Pair this with Q1 and Q4, which are platform-agnostic and will catch the resulting macOS client the moment it beacons. FP: low. A genuine Zoom update does not arrive as a loose .pkg. Suggested window: 90 days.
// HUNT: macOS installer running an update-impersonating package // MITRE: T1204.002, T1219 | CONF: high FP: low COST: low // REQUIRES: ProcessRollup2 / SyntheticProcessRollup2 on macOS sensors // FALSE POSITIVES: an administrator manually installing a genuine vendor package // NOTE: Zoom and Adobe both ship in-app updaters. A loose .pkg named after an // NOTE: update is the anomaly, not the delivery mechanism either vendor uses. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | CommandLine=/\.pkg/i | CommandLine=/(zoomupdateinstaller|zoom.{0,3}update|adobe.{0,3}reader.{0,3}update|screenconnect|connectwise)/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=2000)
Looks for: ScreenConnect client binaries grouped by their install path, ranked so rare ones surface. A sanctioned deployment lands in one consistent location across hundreds of machines. An attacker-installed instance appears on a handful of hosts, often in a different directory, and frequently under a different user context. This is the discovery query to run first if you do not yet know what your sanctioned estate looks like. FP: pilots, contractors and managed service providers legitimately introduce rare instances. Suggested window: 30 days.
// HUNT: rare ScreenConnect client install paths across the fleet // MITRE: T1219, T1550 | CONF: medium FP: medium COST: medium // REQUIRES: ProcessRollup2 / SyntheticProcessRollup2 // FALSE POSITIVES: MSP tooling, contractor laptops, pilot deployments and support // FALSE POSITIVES: sessions initiated by a vendor with a legitimate business reason // TUNING: once you know your approved install path, exclude it outright with // TUNING: | ImageFileName!=/REPLACE_WITH_APPROVED_INSTALL_PATH/i // TUNING: and raise DistinctHosts above your sanctioned instance's install count. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^(screenconnect\.clientservice|screenconnect\.windowsclient|connectwisecontrol\.client|windowsclient)(\.exe)?$/i | groupBy([FileName, ImageFileName], function=[ count(aid, distinct=true, as=DistinctHosts), count(as=Executions), collect([ComputerName, UserName], limit=25), min(@timestamp, as=FirstSeen) ], limit=20000) | DistinctHosts < 10 | sort(FirstSeen, order=desc, limit=300)
Looks for: the published sample set at execution or file-write time. Run it once as a retro-hunt across full retention, then retire it. The primary report is explicit that the actor rotates payload hashes between download sessions, so this decays faster than anything else in the pack. It is included because a hit is unambiguous, not because it will keep firing. FP: none. Suggested window: maximum retention, once.
// HUNT: published SMOKE#SCREEN sample hashes, retro-hunt // MITRE: T1204.002, T1105 | CONF: high FP: low COST: low // REQUIRES: ProcessRollup2 / SyntheticProcessRollup2 / PeFileWritten // FALSE POSITIVES: none. Any match is the sample itself. // NOTE: hashes rotate between download sessions. Run once, then rely on Q1-Q3. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/ | in(SHA256HashData, values=[ "9161a8f7f07741db06b9f9a87b6ec7f277faf2ae3a3a661d6eb09cec4e12b920", "35be1b070f06eb313c3cb818c74aa0a9c2d9f39a05621dac4de6cff6067a5d12", "31260c37cc442719ac84540f4159dd9d4738575d2ab05e92c751a9b4b5f9b91b", "433b61c29aefaa5b55fe78063e6ad8597d3835f36e1242d5402ab23e6dc61194", "c8695906dcefc64becb3123fa0a8058278c8c2f9c86130956b6b10d49c1a35dc", "60c730addd2a15e4213a1d37f55186686976de73a106317b5a258fe0121cfd5c", "dc8b056dd6eb75df21e9721ac2e340f91bb5e94d5a6ff412d7d0c7539e0f06e2", "9d9f3fa5aaf6bc91091873bd7ee04f0cc23e8709e4ad20c61d2779ff1a43c4b4", "8e87a734daddd95322b3f18f71eb9275219e244aac4f62b8dc6da6e2e91525e9", "dd23012b4dc29cf7901185ae4fb2d507e737e9ea4d467846eafd6a86b26486bf", "3cd9b7d583442963261f9985128042bf45d25482efcbf903c9248837cb0d744b", "01e4cb3c60fa50b2927daa11f25a3c412549680406fc121a3d1870a9a33f5d38", "aa84e2ac68f7fc18f4927b89be7b4a7739f2eaf099e489aa0f65c1d3913ce62a", "639430a33c0ecdf5a134501788a3a40f065ae4232efc66e1b82eca2b355e0606", "5253e66f1f493c4e13539749f1aa86fd0c61e3072900fec29a44ba046a6d97e2"]) | table([@timestamp, ComputerName, UserName, FileName, ImageFileName, SHA256HashData], limit=2000)
CrowdStrike Custom IOA Recommendations
Three queries are strong enough to promote to a Custom IOA. The rest stay as scheduled hunts because their false-positive profile depends on estate-specific tooling that no rule can guess.
| Query | IOA name | Rule type | Action | Why it qualifies |
|---|---|---|---|---|
| Q3 | DETECT — Silent MSI install from script host or browser | Process Creation | Detect (Monitor first) | Deterministic parent-child shape. Every SMOKE#SCREEN chain passes through it, and no legitimate deployment agent launches a quiet install from wscript.exe or a browser. |
| Q8 | DETECT — Defender service teardown or drive-root exclusion | Process Creation | Detect | Command-line match on an action that has no benign form. The drive-root exclusion clause alone justifies promotion. Also catches unrelated intrusions. |
| Q1 | DETECT — ScreenConnect relay egress to an unapproved host | Network Connection | Monitor, then Detect | Highest strategic value in the pack, but it must run in Monitor until your relay allowlist is confirmed complete. Promote after the five-day gate in section 11. |
Alert package for the Q3 IOA
| Field | Value |
|---|---|
| Scheduled Search name | DETECT — Silent MSI install from script host or browser (SMOKE#SCREEN) |
| Description | Fires when msiexec.exe runs with a silent-install flag under a script host, browser, or an executable named to impersonate a software updater. Used by the SMOKE#SCREEN campaign to install a signed ScreenConnect RMM agent without user interaction. |
| Alert subject | [HIGH] Detection: SMOKE#SCREEN — silent MSI install from an unexpected parent |
| Severity | High |
| Escalation | L1 triage, escalate to IR if the resulting service is a ScreenConnect instance that is not in the sanctioned inventory. |
Alert body
What fired. A silent Windows Installer execution was observed on HOST-01 with a parent process that does not normally deploy software. In the SMOKE#SCREEN campaign this step installs a genuine, correctly signed ConnectWise ScreenConnect agent, which then beacons to an attacker-controlled relay and hands the operator a full remote desktop session.
Why it matters. The installed package is legitimate signed vendor software, so signature and reputation controls will not stop it and may not even record it as suspicious. The parent process is the discriminator, not the payload.
Triage checklist
- Confirm the parent process and the full command line. A parent of
wscript.exe,cscript.exe,mshta.exeor a browser is an immediate escalation. A parent ofcmd.exeorpowershell.exeneeds the grandparent checked before you decide. - Identify the MSI path in the command line. TEMP, Public and Downloads are all consistent with this campaign. Note the filename, then check whether it still exists on disk. The loaders delete the installer after execution.
- Run Q2 scoped to the host. If a ScreenConnect or ConnectWise service was created within fifteen minutes either side, you have the full chain.
- Run Q1 scoped to the host. Any tcp/8041 or tcp/8040 egress to an address that is not your relay confirms an active foothold.
- Run Q8 scoped to the host. Check whether Defender was stopped, disabled, or given a drive-root exclusion. If it was, the host is degraded independently of this alert and needs remediation regardless of the outcome.
- Check the Defender operational log for event 5007 and confirm the current exclusion list against your baseline.
- Pull the user's mail for the preceding 24 hours and look for a lure themed on a Zoom or Adobe update, a document review, or a system maintenance notice.
- If a foreign ScreenConnect instance is confirmed, move to section 14 and network-contain the host before removing the agent, so the operator cannot react to the uninstall.
Pivot queries
- Host-scoped: add
| ComputerName=/^HOST-01$/ito Q2, Q4 and Q8 to build the timeline on the affected machine. - Estate-wide: run Q16 to find every other host carrying a ScreenConnect client from the same install path.
- Infrastructure: run Q4 and Q5 across full retention to establish whether this is a first contact or a long-running foothold.
Machine-Readable IOC Appendix
Twenty-six atomic indicators, each traced back to a saved source snapshot before publication. Nothing ships at prevent or critical severity, see section 2 for why. Copy each block straight into the tool it names.
type,value,action,severity,expiration,description,tags # SMOKE#SCREEN / ScreenConnect RMM abuse. Source: Securonix Threat Research, 2026-08-04. # No row ships at prevent/critical: all public reporting traces to one vendor investigation. # --- Staging and ScreenConnect relay infrastructure --- ipv4,207.174.0.143,detect,high,2027-02-05,SMOKE#SCREEN WsgiDAV staging (8080) and primary ScreenConnect relay (8041),campaign:SMOKESCREEN ipv4,142.202.191.225,detect,high,2027-02-05,SMOKE#SCREEN secondary ScreenConnect relay (8041 and 80 fallback),campaign:SMOKESCREEN ipv4,207.189.11.170,detect,medium,2026-11-05,SMOKE#SCREEN former C# payload host (reported offline),campaign:SMOKESCREEN domain,blog.derrspecial-onlinedmin.live,detect,high,2027-02-05,SMOKE#SCREEN tertiary ScreenConnect relay (8041),campaign:SMOKESCREEN domain,subscription-magnetic-recommended-meat.trycloudflare.com,detect,medium,2026-11-05,SMOKE#SCREEN Cloudflare Quick Tunnel for MSI delivery (ephemeral),campaign:SMOKESCREEN domain,crestmarkhq.com,detect,medium,2026-11-05,SMOKE#SCREEN former MSI hosting behind Cloudflare proxy,campaign:SMOKESCREEN # --- Initial-access scripts and phishing pages --- sha256,9161a8f7f07741db06b9f9a87b6ec7f277faf2ae3a3a661d6eb09cec4e12b920,detect,high,2027-02-05,zoom-update.vbs XOR-encrypted VBScript dropper,campaign:SMOKESCREEN sha256,35be1b070f06eb313c3cb818c74aa0a9c2d9f39a05621dac4de6cff6067a5d12,detect,high,2027-02-05,RSKAdvGrpSupportingdocuments.vbs WMI-based dropper,campaign:SMOKESCREEN sha256,31260c37cc442719ac84540f4159dd9d4738575d2ab05e92c751a9b4b5f9b91b,detect,high,2027-02-05,SystemCheck security-killing batch loader,campaign:SMOKESCREEN sha256,873011c181d00709fdf66f32bb3cca0c5ff3147d00ef818fef72987a6773ea66,detect,medium,2027-02-05,zoom-update.html Zoom update phishing page,campaign:SMOKESCREEN sha256,2423decbfcf820f41bc356547e4e18e61d60c9829421d7121c374dcef88577f7,detect,medium,2027-02-05,index.html Adobe Flash Player phishing page,campaign:SMOKESCREEN # --- Compiled .NET loaders --- sha256,433b61c29aefaa5b55fe78063e6ad8597d3835f36e1242d5402ab23e6dc61194,detect,high,2027-02-05,AdobeReader_Update.exe compiled loader,campaign:SMOKESCREEN sha256,c8695906dcefc64becb3123fa0a8058278c8c2f9c86130956b6b10d49c1a35dc,detect,high,2027-02-05,NYbiLtvO.exe compiled loader (earlier build),campaign:SMOKESCREEN sha256,60c730addd2a15e4213a1d37f55186686976de73a106317b5a258fe0121cfd5c,detect,high,2027-02-05,SystemCheck.exe compiled loader (primary relay),campaign:SMOKESCREEN sha256,dc8b056dd6eb75df21e9721ac2e340f91bb5e94d5a6ff412d7d0c7539e0f06e2,detect,high,2027-02-05,Document-Viewer.exe compiled loader (tertiary relay),campaign:SMOKESCREEN sha256,9d9f3fa5aaf6bc91091873bd7ee04f0cc23e8709e4ad20c61d2779ff1a43c4b4,detect,high,2027-02-05,zFbJVuiX.exe compiled loader.cs with 180s anti-EDR sleep,campaign:SMOKESCREEN # --- ScreenConnect MSI payloads (legitimately ConnectWise-signed) --- sha256,8e87a734daddd95322b3f18f71eb9275219e244aac4f62b8dc6da6e2e91525e9,detect,high,2027-02-05,BuYUEVqG.msi ScreenConnect payload (primary relay),campaign:SMOKESCREEN sha256,dd23012b4dc29cf7901185ae4fb2d507e737e9ea4d467846eafd6a86b26486bf,detect,high,2027-02-05,Zoomupdateinstaller.msi ScreenConnect payload,campaign:SMOKESCREEN sha256,3cd9b7d583442963261f9985128042bf45d25482efcbf903c9248837cb0d744b,detect,high,2027-02-05,Document-review.msi ScreenConnect payload (secondary relay),campaign:SMOKESCREEN sha256,01e4cb3c60fa50b2927daa11f25a3c412549680406fc121a3d1870a9a33f5d38,detect,high,2027-02-05,DocumentReview.msi ScreenConnect payload (secondary relay),campaign:SMOKESCREEN # --- macOS branch --- sha256,aa84e2ac68f7fc18f4927b89be7b4a7739f2eaf099e489aa0f65c1d3913ce62a,detect,high,2027-02-05,ZoomUpdateInstaller.pkg macOS package (primary relay),campaign:SMOKESCREEN sha256,639430a33c0ecdf5a134501788a3a40f065ae4232efc66e1b82eca2b355e0606,detect,high,2027-02-05,Zoomupdateinstaller.pkg macOS package variant,campaign:SMOKESCREEN # --- Attacker toolchain artefacts recovered from the staging server --- sha256,5253e66f1f493c4e13539749f1aa86fd0c61e3072900fec29a44ba046a6d97e2,detect,medium,2027-02-05,cloudflared.exe tunnel binary on attacker staging server,campaign:SMOKESCREEN sha256,371166ebd83e8318b49ba71321396524fbca7dc42fe1ca4badda8af794bf5a59,no_action,informational,2027-02-05,MemoryLoader.cs C# loader source (not an endpoint artefact),campaign:SMOKESCREEN sha256,63c46b3c090a4b1efef146f2f1efc4f93d44f21db21d7825f43e02c3c5c89de6,no_action,informational,2027-02-05,loader.cs successor loader source (not an endpoint artefact),campaign:SMOKESCREEN sha256,aefac65c42c0c72ed3e08b32774fa1b902f4fd1d53de189d50f38130cc357764,no_action,informational,2027-02-05,system.config staging-server artefact,campaign:SMOKESCREEN # --- NOT shipped, deliberately --- # dropbox.com : payload delivery used a Dropbox shared link. Blocking the domain is # disproportionate. Hunt the path fragment scl/fi/a0hp9g4w2ddkb3ggnkivx # in proxy logs instead. # Cloudflare edge IPs : shared CDN front-ends, not actor infrastructure. # Randomised filenames : BuYUEVqG.msi, JqbMljCi.msi, NYbiLtvO.exe, lirMkvpf.exe, # zFbJVuiX.exe rotate per build. Their hashes ship; the shape is hunted # by Q13 instead of blocklisting the names.
207.174.0.143 142.202.191.225 207.189.11.170 blog.derrspecial-onlinedmin.live subscription-magnetic-recommended-meat.trycloudflare.com crestmarkhq.com # Egress rules worth more than the list above, because they survive rotation: # deny outbound tcp/8041 to any destination except your approved relay # deny outbound tcp/8040 to any destination except your approved relay # alert on outbound tcp/8080 from any workstation to an external address # alert on DNS resolution of any *.trycloudflare.com hostname
9161a8f7f07741db06b9f9a87b6ec7f277faf2ae3a3a661d6eb09cec4e12b920 35be1b070f06eb313c3cb818c74aa0a9c2d9f39a05621dac4de6cff6067a5d12 31260c37cc442719ac84540f4159dd9d4738575d2ab05e92c751a9b4b5f9b91b 873011c181d00709fdf66f32bb3cca0c5ff3147d00ef818fef72987a6773ea66 2423decbfcf820f41bc356547e4e18e61d60c9829421d7121c374dcef88577f7 433b61c29aefaa5b55fe78063e6ad8597d3835f36e1242d5402ab23e6dc61194 c8695906dcefc64becb3123fa0a8058278c8c2f9c86130956b6b10d49c1a35dc 60c730addd2a15e4213a1d37f55186686976de73a106317b5a258fe0121cfd5c dc8b056dd6eb75df21e9721ac2e340f91bb5e94d5a6ff412d7d0c7539e0f06e2 9d9f3fa5aaf6bc91091873bd7ee04f0cc23e8709e4ad20c61d2779ff1a43c4b4 8e87a734daddd95322b3f18f71eb9275219e244aac4f62b8dc6da6e2e91525e9 dd23012b4dc29cf7901185ae4fb2d507e737e9ea4d467846eafd6a86b26486bf 3cd9b7d583442963261f9985128042bf45d25482efcbf903c9248837cb0d744b 01e4cb3c60fa50b2927daa11f25a3c412549680406fc121a3d1870a9a33f5d38 aa84e2ac68f7fc18f4927b89be7b4a7739f2eaf099e489aa0f65c1d3913ce62a 639430a33c0ecdf5a134501788a3a40f065ae4232efc66e1b82eca2b355e0606 5253e66f1f493c4e13539749f1aa86fd0c61e3072900fec29a44ba046a6d97e2 371166ebd83e8318b49ba71321396524fbca7dc42fe1ca4badda8af794bf5a59 63c46b3c090a4b1efef146f2f1efc4f93d44f21db21d7825f43e02c3c5c89de6 aefac65c42c0c72ed3e08b32774fa1b902f4fd1d53de189d50f38130cc357764
XOR key (VBScript dropper) : gc1HXjFtHBbC659t
VBScript state sequence : 185, 626, 616, 518, 442, 509, 821
Sandbox process blacklist : wireshark.exe, procmon.exe, vboxservice.exe,
vmtoolsd.exe, xenservice.exe, fiddler.exe
Sandbox memory floor : aborts if physical memory is under 2 GB
Masquerade MSI name in TEMP : WindowsExplorerSupport.msi
ScreenConnect session params : e=Access&y=Guest
Anti-EDR sleep : 180000 ms between MSI install and service start
Loader source comment : // WAIT 3 MINUTES (Breaks Elastic correlation)
In-memory C# compilation : Add-Type -Language CSharp
Misdirection entry point : [HelloWorld.Program]::SayHello()
Staging URL path convention : /Bin/
Signed MSI component set : Client.dll, ClientService.dll, Core.dll,
WindowsClient.exe, WindowsCredentialProvider.dll
Signer : Connectwise, LLC via the DigiCert chain
Do not blocklist the ScreenConnect binaries or the ConnectWise signing certificate. The payload is genuine, currently supported vendor software with a valid DigiCert-chained Authenticode signature. Blocking the publisher would break every legitimate ConnectWise deployment, including possibly your own support tooling, and the actor would simply switch to another RMM product. The controls in section 12 restrict which instances may run and where they may connect, which is the proportionate answer.
Detection Validation Gates
Four gates. No query in section 8 is trusted, and no Custom IOA in section 9 moves past Monitor, until it clears all four.
| Gate | What it proves | How to clear it |
|---|---|---|
| 1. Telemetry present | The events and fields the query needs actually exist in your tenant. | Run each query with only its #event_simpleName line and confirm a non-zero result. CreateService in particular is not enabled in every configuration. If it returns nothing, Q2 and Q14 are inoperative and you must fall back to Q16 plus the section 7 service inventory. |
| 2. Sanctioned baseline built | You know which ScreenConnect instances, relays and install paths are legitimately yours. | Run the section 7 inventory across the estate first. Record every distinct relay address, instance identifier and install path. Fill the three REPLACE_WITH_ placeholders in Q1, Q2 and Q16. This gate is the one that fails most often, and skipping it makes half the pack unreadable rather than merely noisy. |
| 3. Benign baseline and exclusions | The query's noise floor is known before it is scheduled, not discovered afterwards. | Run over 30 days of history. For every query rated FP medium or higher, build the exclusion from the // TUNING: line inside the card and re-run until the daily volume is triageable. Q13 is expected to stay noisy and ships as a triage feed, not an alert. |
| 4. Positive test | The query actually fires on the behaviour it claims to detect. | On an isolated test host: install any benign MSI silently from a wscript.exe parent (Q3), create a service whose display name contains the string ScreenConnect (Q2), make an outbound connection on tcp/8041 to a lab listener (Q1), and run a Add-MpPreference -ExclusionPath command against a harmless directory (Q8). Confirm each fires. Never test against live campaign infrastructure. |
Promotion rule
A Custom IOA moves from Monitor to Detect only after five consecutive business days with zero unexplained hits. Q1 in particular should sit in Monitor until you are confident the relay allowlist is complete, because a missing entry turns your own RMM into a daily false positive and the rule will be muted within a week.
Field confidence
All field names in section 8 were checked against the Falcon data model before publication. One note for your tenant: RegStringValue in Q10 is populated only when the registry value is a string type. SmartScreen values are frequently DWORDs, so treat that column as advisory and rely on RegValueName and RegObjectName for the match itself.
Hardening — Tiered & Deployable
The controls below are ordered by deployment friction, not by importance. Every one is anchored to a MITRE mitigation and, where a formal benchmark covers the technology, to that benchmark.
H1. Deny outbound tcp/8041 and tcp/8040 except to your approved relay. This is the highest-leverage single control against this campaign. All three attacker relay clusters listen on 8041, and the secondary adds tcp/80 as an explicit firewall-evasion fallback, so pair this with H2. MITRE M1037 Filter Network Traffic. CIS Controls v8 4.5, 13.4.
H2. Restrict which destinations may receive RMM traffic at all. Because the secondary relay falls back to tcp/80, a port rule alone is insufficient. Add the three published addresses to the egress deny list and, where you run a forward proxy, restrict remote-support traffic to your approved relay hostname. MITRE M1037. CIS Controls v8 13.4.
H3. Alert on any Defender exclusion whose path is a drive root. Defender event 5007 records exclusion changes. There is no legitimate reason to exclude C:\, and the compiled loader does exactly that. MITRE M1047 Audit. Microsoft Security Baseline for Windows, Defender Antivirus settings.
H4. Build and publish the sanctioned RMM inventory. Not a technical control, but gate 2 in section 11 and half of section 8 depend on it. Record every approved RMM product, instance identifier, relay address and install path. MITRE M1056 Pre-compromise. CIS Controls v8 2.1, 2.3.
H5. Block MSI execution from user-writable directories with AppLocker or WDAC. Every kill chain in this campaign installs from %TEMP%, Downloads or Users\Public. This is the vendor's own first recommendation. Pilot carefully: a minority of legitimate installers genuinely stage to TEMP. MITRE M1038 Execution Prevention. CIS Benchmark for Windows 11 Enterprise, AppLocker sections. Microsoft WDAC guidance.
H6. Disable the Windows Script Host for standard users. Two of the five kill chains begin with a .vbs file that the user double-clicks. If your estate has no remaining VBScript logon-script dependency, turning WSH off removes the entry point completely rather than detecting it. MITRE M1042 Disable or Remove Feature or Program. CIS Benchmark for Windows 11 Enterprise.
H7. Set User Account Control to Always notify and block standard-user elevation. The SystemCheck batch loader relies on the user approving a UAC prompt for a file that looks like a maintenance utility. Setting ConsentPromptBehaviorUser to automatically deny removes the option entirely for non-administrators. MITRE M1052 User Account Control. CIS Benchmark for Windows 11 Enterprise 2.3.17. Microsoft Security Baseline.
H8. Enforce Defender tamper protection and manage exclusions centrally through policy. Tamper protection prevents the Stop-Service WinDefend and Add-MpPreference sequence from succeeding at all. Where Defender is not the primary AV, apply the equivalent tamper protection in your EDR. MITRE M1024 Restrict Registry Permissions, M1018 User Account Management. Microsoft Security Baseline.
H9. Block .vbs, .js, .hta and archive-wrapped script attachments at the mail gateway. The SystemCheck batch file arrived inside a gzip archive specifically so the victim had to decompress it first, which is a common gateway blind spot. Inspect inside archives. MITRE M1049 Antivirus/Antimalware, M1021 Restrict Web-Based Content.
H10. macOS: require packages to be installed through your MDM, and restrict who may run installer. Gatekeeper alone does not help here, because the point of the campaign is that the software is genuinely signed. MITRE M1038, M1033 Limit Software Installation. CIS Benchmark for macOS. Note the macOS distribution method was never established, so this control is precautionary.
H11. Move to an allowlist model for remote-support tooling. One approved RMM product, one approved relay, enforced by WDAC on the endpoint and by egress policy at the perimeter. This campaign is a direct argument for it: the attacker's advantage is entirely that their tool is indistinguishable from a legitimate one. MITRE M1038. CIS Controls v8 2.5, 2.6.
H12. Remove local administrator rights from standard users. The Defender destruction sequence, the SmartScreen registry teardown and the service installation all require elevation. Without it, the aggressive loader variants fail. MITRE M1026 Privileged Account Management. CIS Controls v8 5.4, 6.8.
H13. Extend EDR correlation windows past five minutes for install-to-service chains. The actor's newest loader sleeps 180 seconds specifically to defeat short correlation windows, and named a competing EDR product in the source comment while doing it. Review every correlation rule in your estate that joins an installer to a resulting service or network connection and confirm the window is wider than three minutes. MITRE M1047 Audit. Note best practice, no formal benchmark covers correlation-window sizing.
H14. Deliver software updates only through managed channels, and tell users so. Every lure in this campaign impersonates an update. If your users know that Zoom, Adobe and Windows updates never arrive as a link or a loose installer in their estate, the social-engineering premise collapses. MITRE M1017 User Training, M1051 Update Software.
Deployable Playbooks
Raw configuration for the four highest-leverage controls. Every step states its prerequisites, whether a reboot is required, and how to undo it.
Playbook 1 — Block RMM relay egress (H1, H2)
Prerequisites: Perimeter firewall change window. Confirmed approved relay address
from the section 7 inventory. Do NOT deploy without it, or you will
break your own support tooling.
Reboot required: No.
Rollback: Delete the four rules created below. No residual state.
# 1. Deny the ScreenConnect relay ports outbound, except to your approved relay.
# Order matters: the permit must sit above the deny.
permit tcp any REPLACE_WITH_SANCTIONED_RELAY_IP eq 8041
deny tcp any any eq 8041 log
deny tcp any any eq 8040 log
# 2. Deny the three published campaign addresses on every port, because the
# secondary relay falls back to tcp/80 where a port rule will not catch it.
deny ip any host 207.174.0.143 log
deny ip any host 142.202.191.225 log
deny ip any host 207.189.11.170 log
# 3. Alert-only rule for workstation-initiated tcp/8080 to external addresses.
# Start in alert mode. Review for two weeks before considering a deny.
alert tcp WORKSTATION_SUBNETS any eq 8080 log
Playbook 2 — Block MSI execution from user-writable paths (H5)
Prerequisites: AppLocker or WDAC already enforcing in at least Audit mode.
A pilot ring of 20 to 50 representative endpoints.
An inventory of legitimate installers that stage to %TEMP%.
Reboot required: No. The Application Identity service must be running and set to
Automatic; if you are enabling it for the first time, that service
change does require a restart to take effect reliably.
Rollback: Remove the rules from the GPO and run gpupdate /force. If you enabled
the AppIdentity service as part of this, set it back to Manual and
reboot. Endpoints revert on the next policy refresh.
# Step 1. Run in AUDIT mode for two weeks first. This is not optional. Some
# legitimate vendor installers genuinely stage an MSI into %TEMP%.
Set-AppLockerPolicy -XmlPolicy .\smokescreen-audit.xml -Merge
# Step 2. Review the 8003 and 8006 audit events before enforcing.
Get-WinEvent -LogName 'Microsoft-Windows-AppLocker/MSI and Script' |
Where-Object { $_.Id -eq 8003 -or $_.Id -eq 8006 } |
Select-Object TimeCreated, Id, Message | Format-List
# Step 3. Policy rule shape: deny Windows Installer files from user-writable
# locations, allow them from your distribution point and from
# %WINDIR%\Installer.
# Denied paths:
# %OSDRIVE%\Users\*\AppData\Local\Temp\*
# %OSDRIVE%\Users\*\Downloads\*
# %OSDRIVE%\Users\Public\*
# Allowed paths:
# %WINDIR%\Installer\*
# REPLACE_WITH_SOFTWARE_DISTRIBUTION_UNC_PATH\*
# Step 4. Enforce only after the pilot ring is clean for 14 days.
Set-AppLockerPolicy -XmlPolicy .\smokescreen-enforce.xml -Merge
Playbook 3 — Defender tamper protection and exclusion hygiene (H3, H8)
Prerequisites: Microsoft Defender Antivirus is the active AV, or the equivalent
tamper control exists in your third-party EDR. Intune or
Configuration Manager for central policy.
Reboot required: No.
Rollback: Set DisableTamperProtection back to 0 through the same policy channel.
Note that tamper protection is deliberately hard to disable locally,
which is the point; roll back centrally, not on the endpoint.
# Step 1. Confirm current state across the fleet.
Get-MpComputerStatus | Select-Object IsTamperProtected, AntivirusEnabled,
RealTimeProtectionEnabled, AMServiceEnabled
# Step 2. Audit existing exclusions. Any drive-root entry is an incident.
Get-MpPreference | Select-Object -ExpandProperty ExclusionPath
# Step 3. Remove a drive-root exclusion if one is found.
Remove-MpPreference -ExclusionPath 'C:\'
# Step 4. Confirm the WinDefend service start type was not tampered with.
Get-Service WinDefend | Select-Object Name, Status, StartType
# Expected: Running / Automatic. If Disabled, restore it:
Set-Service -Name WinDefend -StartupType Automatic
Start-Service -Name WinDefend
# Step 5. Enforce tamper protection centrally (Intune: Endpoint security,
# Antivirus profile, Windows Security experience, TamperProtection = Enabled).
# Verify afterwards:
Get-MpComputerStatus | Select-Object IsTamperProtected
Playbook 4 — UAC hardening and Windows Script Host removal (H6, H7)
Prerequisites: Confirm no remaining VBScript or JScript logon-script dependency
before disabling WSH. Query your logon scripts and any legacy
line-of-business apps first. This one genuinely breaks things
if you skip the check.
Reboot required: No for the UAC values (a sign-out is enough). No for WSH.
Rollback: Set Enabled back to 1 for WSH. Restore ConsentPromptBehaviorUser to 3
and EnableLUA to 1. Both revert on the next GPO refresh if you deploy
through policy rather than directly.
# Step 1. UAC: prompt administrators for consent on the secure desktop, and deny
# elevation requests from standard users outright.
$p = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System'
Set-ItemProperty -Path $p -Name 'ConsentPromptBehaviorAdmin' -Value 2 -Type DWord
Set-ItemProperty -Path $p -Name 'ConsentPromptBehaviorUser' -Value 0 -Type DWord
Set-ItemProperty -Path $p -Name 'PromptOnSecureDesktop' -Value 1 -Type DWord
Set-ItemProperty -Path $p -Name 'EnableLUA' -Value 1 -Type DWord
# Step 2. Verify SmartScreen was not disabled by the batch loader.
Get-ItemProperty -Path $p -Name 'EnableSmartScreen' -ErrorAction SilentlyContinue
# Expected: 1. If 0 or absent on a host that hit Q10, treat as compromised.
Set-ItemProperty -Path $p -Name 'EnableSmartScreen' -Value 1 -Type DWord
# Step 3. Disable Windows Script Host, machine-wide and per-user.
# ONLY after the logon-script dependency check above.
New-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings' -Force | Out-Null
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings' `
-Name 'Enabled' -Value 0 -Type DWord
# Step 4. Confirm. A .vbs double-click should now be refused.
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings' -Name Enabled
Containment Runbook
Contain the network before you touch the agent. The operator has an interactive remote desktop session. If you uninstall the ScreenConnect client while they are connected, they will see it happen and can re-establish access or escalate to destructive action before you finish. Network containment first, always.
Phase 1 — Isolate
- Network-contain the host through Falcon. This preserves your sensor visibility while cutting the operator's session.
- Do not power off and do not reboot. The 180-second sleep in the newest loader means a second-stage action may still be pending in memory, and a reboot destroys the evidence of it.
- Disable the affected user account and revoke active sessions and refresh tokens. Assume any credential typed or cached during the remote session is compromised.
- Push the section 10 network blocklist to the perimeter immediately, so any other compromised host in the estate loses its relay at the same time.
- Run Q4 and Q1 estate-wide before proceeding. If more than one host is talking to a relay, treat this as a campaign against your organisation rather than a single victim, and contain all of them in one action.
Phase 2 — Investigate before eradicating
- Capture the ScreenConnect service configuration and the relay address from the service image path before removing anything. That is your attribution link to one of the three clusters.
- Collect the ScreenConnect session and event logs from the client installation directory. They record when the operator connected and for how long.
- Run Q8 and check the Defender exclusion list and
WinDefendstart type. A host whose Defender was destroyed stays degraded after the RMM agent is gone. - Reconstruct the delivery path with Q3, Q12 and Q13 to identify which lure and which loader variant was used. That tells you what else to look for and whether other users received the same message.
- Search the user's mailbox and the gateway for the originating lure, then sweep for the same message across all recipients.
Phase 3 — Eradicate
- Stop and delete the foreign ScreenConnect service, then remove its installation directory. Verify no second instance remains, and confirm your sanctioned agent, if any, is untouched.
- Restore Defender: re-enable the service, set the start type back to Automatic, remove every attacker-added exclusion, and confirm tamper protection is on.
- Restore SmartScreen and UAC values from playbook 4, then confirm with the verification commands in that playbook.
- Remove any staged installer still present in TEMP, Public or Downloads, and preserve a copy for analysis first.
- Reset credentials for the affected user and for any account whose credentials were used or cached on the host during the exposure window.
- Rebuild is the safer choice where the aggressive loader ran. If Q8 shows Defender was stopped, disabled and given a drive-root exclusion, the host was fully blind for the duration and you cannot prove what else executed. Reimage rather than clean.
Phase 4 — Recover and verify
- Return the host to the network only after Q1, Q2, Q4 and Q8 all return clean for it.
- Monitor the host and the user for 14 days at raised sensitivity. This actor re-lures.
- Deploy the immediate-tier controls in section 12 across the estate, not only the affected host.
- Complete gate 2 in section 11 if it was not already done. The RMM inventory is what turns this from a one-off cleanup into a durable detection.
- Re-run the section 7 fleet-wide service inventory after 30 days to confirm no foreign instance has reappeared.
Detection Coverage Map
| Technique | Behaviour | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1566.002 | Spearphishing link delivering the lure | Q5 | – | GAP No sender addresses or subject lines were published, so there is nothing atomic to hunt. Covered only by the section 7 mail-gateway shape hunts and by control H14. |
| T1204.002 | User runs the VBScript, batch file, EXE or macOS package | Q12, Q13, Q15 | – | Partial The execution is visible; the decision to run it is not. Q13 is deliberately a triage feed rather than an alert. |
| T1497.001 | Sandbox evasion: 2 GB memory floor and analysis-process blacklist | – | – | GAP The checks run inside the script before any observable action, and a WMI query for installed processes is indistinguishable from ordinary inventory activity. Not detectable on the endpoint. |
| T1027 | XOR encryption, flattened state machine, junk arithmetic between builds | – | – | GAP Static-analysis property with no runtime telemetry surface. The XOR key in section 4 is for sample retro-hunting only. |
| T1059.005 / T1047 | VBScript droppers, one using WMI Win32_Process to avoid WScript.Shell | Q12 | – | Good Both parents covered, so the WMI evasion does not help the actor here. |
| T1059.001 | PowerShell cradle and in-memory C# compilation | Q9, Q8 | Yes (Q8) | Good Depends on command-line capture being enabled, which gate 1 confirms. |
| T1562.001 | AMSI patched, WinDefend stopped and disabled, drive-root exclusion, SmartScreen teardown | Q8, Q9, Q10 | Yes (Q8) | Good The strongest behavioural cluster in the pack. Note it only covers the older aggressive loader. The current loader.cs build removed this sequence entirely. |
| T1548.002 | UAC re-launch through shell.application | Q9 | – | Partial Detected at the command-line surface. Control H7 is the stronger answer because it removes the option for standard users. |
| T1553.005 | Zone.Identifier stripped with Unlock-File | Q11 | – | Good Narrow and specific. The second command-line clause keeps developer noise out. |
| T1218.007 | Silent MSI install of the signed ScreenConnect package | Q3 | Yes (Q3) | Good Best endpoint-only detection in the pack and the recommended first IOA. |
| T1036 | Updater masquerades and randomised payload names | Q3, Q13 | Yes (Q3) | Partial Named masquerades are covered by the Q3 parent list. Random names are covered only by shape, at high FP. |
| T1105 / T1102 | Payload fetch over tcp/8080, Cloudflare Quick Tunnel, Dropbox shared link | Q4, Q5, Q6, Q7 | – | Partial The specific tunnel hostname and staging IP will rotate. The generic trycloudflare.com clause in Q5 and the tcp/8080 shape in Q6 are what survive. Dropbox delivery is covered only by the section 7 proxy hunt. |
| T1070.004 | Installer deleted after execution | Q13 | – | Partial The execution is captured before the deletion, so the process event survives even though the file does not. No dedicated deletion query ships. |
| T1543 | ScreenConnect service created and started | Q2, Q14, Q16 | – | Good Provided CreateService is enabled in your tenant. If gate 1 shows it is not, this drops to Partial on Q16 alone. |
| T1219 / T1550 | ScreenConnect agent beaconing to an attacker relay under a valid signature | Q1, Q4, Q16 | Yes (Q1) | Good Q1 is the durable detection and does not decay with infrastructure rotation, but it is entirely dependent on gate 2. Without the relay allowlist it is unusable. |
| T1497 (timing) | 180-second sleep to break EDR correlation windows | Q14 | – | Partial Detected by widening rather than narrowing the window. Control H13 is the more important half, because the gap this exploits exists in correlation rules across the whole estate, not just for this campaign. |
| macOS branch | ZoomUpdateInstaller.pkg to the primary relay | Q15, Q1, Q4 | – | Partial Q15 covers installation. Q1 and Q4 are platform-agnostic and cover the resulting beacon. Service and registry queries do not port, and no distribution method was ever established. |
Seventeen queries ship. Eight rate CONF high, nine medium, none low. Nine carry an FP risk of medium or higher and each of those carries its exclusion inside the query card rather than only in the prose. One, Q13, is rated FP high and is explicitly a triage feed to be joined against Q1, Q3 and Q8 rather than alerted on directly.
The dominant risk in this pack is not a missing query, it is gate 2. Q1, Q2 and Q16 are the three detections that survive infrastructure rotation, and all three compare against a sanctioned RMM inventory that only your organisation can supply. If that inventory is not built, those queries return your own legitimate ScreenConnect estate mixed indistinguishably with the attacker's, an analyst mutes them within a week, and the pack degrades to hash and IP matching that the actor already defeats by rotating both. Section 7 opens with the inventory step for that reason.
Second structural gap: the current loader is quieter than the one most of section 8 was built for. The Defender destruction cluster, Q8 through Q10, is the highest-fidelity behavioural detection here and the actor removed exactly that behaviour from their newest build after concluding it was being caught. Q1, Q2, Q3, Q14 and Q16 are the queries that still fire against loader.cs. Weight your deployment accordingly rather than assuming the loud sequence will announce the intrusion.
Hunt Summary Ticket
TITLE: SMOKE#SCREEN -- fake Adobe/Zoom update lures installing ScreenConnect RMM
VERSION: v0.1 -- 2026-08-05
SEVERITY: High -- active multi-wave campaign, live staging server at disclosure
AUTHOR: HuntPack
SCOPE: All Windows endpoints with an interactive user.
All macOS endpoints (package confirmed, distribution never established).
Perimeter egress on tcp/8040, tcp/8041, tcp/8080.
Any estate running ConnectWise ScreenConnect, sanctioned or not.
HYPOTHESIS: A user has been phished with a lure themed on a Zoom update, an Adobe
update, a business document review, or a system maintenance utility,
has run a VBScript, batch or .NET loader, and now has a genuine
ConnectWise-signed ScreenConnect agent installed and beaconing to one
of three attacker-controlled relays, giving an operator a full remote
desktop session that is indistinguishable from legitimate IT support.
PREREQ: Build the sanctioned RMM inventory FIRST (section 7). Q1, Q2 and Q16
each carry a REPLACE_WITH_ placeholder that only your organisation
can fill. Running them unfilled returns your own RMM as noise.
QUERIES: Q1 ScreenConnect relay-port egress, unapproved dest CONF high *IOA
Q2 ScreenConnect service, foreign instance ID CONF high
Q3 Silent MSI install from script host or browser CONF high *IOA
Q4 Contact with published campaign infrastructure CONF high
Q5 DNS for campaign domains and Quick Tunnels CONF high
Q6 Script host fetching over tcp/8080 CONF med
Q7 WebDAV and search-ms delivery surface CONF med
Q8 Defender destruction sequence CONF high *IOA
Q9 AMSI bypass, UAC re-launch, in-memory C# CONF high
Q10 SmartScreen dismantled via registry CONF high
Q11 Mark-of-the-Web stripped before install CONF med
Q12 VBScript and WMI hidden-process chain CONF med
Q13 Randomised-name EXE from user-writable path CONF med FP HIGH
Q14 Anti-EDR delay, install to service start CONF med
Q15 macOS fake Zoom update package CONF high
Q16 Fleet-wide ScreenConnect client rarity CONF med
Q17 Known sample hashes (run once, then retire) CONF high
IOCS: 26 atomic indicators, all traced to saved source snapshots.
3 IPv4, 3 domains, 20 SHA-256.
NOT shipped: dropbox.com, Cloudflare edge IPs, randomised filenames.
Nothing at prevent/critical: single-vendor sourcing.
KEY RISK: The payload is legitimate, correctly signed vendor software. Hash and
signature controls do not apply. The actor rotates payload hashes
between download sessions and has already removed the loud Defender
destruction sequence from their newest loader after it was detected.
Build around unauthorised-instance signals, not around the binary.
NEXT STEP: 1. Run the section 7 RMM inventory across the fleet.
2. Deploy H1 and H2 (relay egress deny) this week.
3. Run Q4, Q5 and Q17 as a retro-hunt across full retention.
4. Promote Q3 and Q8 to Custom IOA in Monitor mode.
5. Fill the placeholders, then schedule Q1, Q2 and Q16.
Changelog
References
| Tier | Source | Snapshot |
|---|---|---|
| T1 | Securonix Threat Research, Analyzing SMOKE#SCREEN: Threat Actors Abuse Trusted Software Lures and Cloudflare Tunnels to Deploy ScreenConnect RMM Agents Across Windows and macOS. Shikha Sangwan, Akshay Gaikwad, Aaron Beardslee. 2026-08-04. | 01-securonix-smokescreen-primary.txt |
| T2 | The Hacker News, Fake Adobe and Zoom Updates Install ScreenConnect for Persistent Remote Access. Ravie Lakshmanan. 2026-08-04. | 02-thehackernews-fake-adobe-zoom-screenconnect.txt |
| T2 | Security Affairs, SMOKE#SCREEN Campaign Abuses ScreenConnect to Give Attackers Remote Control Access. 2026-08-04. | 03-securityaffairs-smokescreen.txt |
| T3 | AppleInsider, Fake Zoom update malware campaign expands its reach to macOS. 2026-08-04. | 04-appleinsider-macos-expansion.txt |
| Ref | MITRE ATT&CK: T1566.002, T1204.002, T1047, T1059.001, T1059.003, T1059.005, T1027, T1497.001, T1562.001, T1564.003, T1553.005, T1548.002, T1070.004, T1036, T1218.007, T1550, T1219, T1071.001, T1102, T1543. | – |
| Ref | MITRE mitigations cited in section 12: M1017, M1018, M1021, M1024, M1026, M1033, M1037, M1038, M1042, M1047, M1049, M1051, M1052, M1056. | – |
| Ref | CIS Benchmark for Windows 11 Enterprise; CIS Benchmark for macOS; CIS Controls v8; Microsoft Security Baseline for Windows; Microsoft WDAC and AppLocker documentation. | – |
Source snapshots. The verbatim fetched text of all four cited threat-intelligence sources is stored alongside this pack in SmokeScreen-ScreenConnect-FakeUpdate-Hunt-sources/. Every atomic indicator in section 10 was traced back to those files mechanically before publication. An indicator that could not be traced would have been converted to a behavioural signal or a labelled placeholder rather than shipped.
Generated 2026-08-05 by HuntPack. Defensive use only.