Operation SilentCanvas — JPEG-Staged PowerShell → Trojanized ScreenConnect
sysupdate.jpeg with no JPEG magic bytes), compiles a custom launcher on-host via csc.exe, performs a fileless ComputerDefaults.exe UAC bypass, then installs a trojanized ConnectWise ScreenConnect client as a service masquerading as OneDriveServers for persistent remote access. Defensive hunt & harden pack — no offensive code.Executive Summary
Operation SilentCanvas is a stealthy, largely fileless intrusion chain. The first stage is a decoy file named sysupdate.jpeg that is not actually a JPEG — it carries no JPEG magic bytes and instead holds obfuscated PowerShell. A PowerShell stage reads/deobfuscates this payload, then uses the in-box C# compiler csc.exe to compile a custom launcher on the host (living-off-the-land — no precompiled EXE to flag).
The launcher performs a fileless UAC bypass via ComputerDefaults.exe (a known auto-elevating LOLBin hijack — registry-based, no file dropped), then installs a trojanized ConnectWise ScreenConnect remote-access client as a Windows service masquerading as OneDriveServers. ScreenConnect is legitimate RMM software, so the operator gets durable, hands-on remote control that blends in with normal IT tooling. The implant reportedly exposes ~46 capabilities with AMSI-bypass and anti-forensic steps, and beacons to legitserver.theworkpc.com on ports 5443/8041.
.jpeg / file with no image header), Q2 (csc.exe invoked by PowerShell to compile a launcher), Q3 (ComputerDefaults.exe UAC-bypass lineage), and Q4 (a ScreenConnect service named OneDriveServers / beacon to the SilentCanvas C2). Any one of these on a non-IT host is high-signal.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry |
|---|---|---|---|
| 1 · Vendor research | Operation SilentCanvas analysis | sysupdate.jpeg (no magic bytes) → PowerShell → csc.exe launcher → ComputerDefaults UAC bypass → trojanized ScreenConnect (OneDriveServers); C2 + ports | yes |
| 2 · Reference | LOLBAS — ComputerDefaults.exe / csc.exe | Auto-elevating UAC-bypass LOLBin; in-box C# compiler abuse | yes |
| 2 · Vendor / advisory | ConnectWise ScreenConnect abuse reporting (CISA et al.) | Legitimate RMM abused as a backdoor; service-masquerade persistence | yes |
Decisions: behavior-anchored on the fileless tells (PowerShell reading a fake image, csc.exe compile, ComputerDefaults UAC bypass) because hashes/filenames rotate; the named C2 (legitserver.theworkpc.com, 5443/8041) and the OneDriveServers service name are strong but rotatable atoms; ScreenConnect is legit RMM, so detect the abuse pattern (unsanctioned instance, odd service name/path, unexpected relay) not the binary.
Hunt Brief & Attack Chain
Working hypothesis: A PowerShell stage reads sysupdate.jpeg (not a real image), deobfuscates payload, compiles a launcher with csc.exe, UAC-bypasses via ComputerDefaults.exe, and installs trojanized ScreenConnect as the OneDriveServers service beaconing to the SilentCanvas C2.
| Step | Behavior | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 · Delivery | sysupdate.jpeg (no JPEG magic bytes) staged to disk | file; ProcessRollup2 | Q1; N1 |
| 2 · PS stager | PowerShell reads/deobfuscates the fake image | ProcessRollup2; script-block | Q1; N2 |
| 3 · csc.exe build | In-box C# compiler builds a custom launcher | ProcessRollup2; file | Q2 |
| 4 · UAC bypass | Fileless ComputerDefaults.exe elevation | registry; ProcessRollup2 | Q3 |
| 5 · RMM install | Trojanized ScreenConnect service = "OneDriveServers" | service; file; ProcessRollup2 | Q4; N3 |
| 6 · C2 | Beacon to legitserver.theworkpc.com 5443/8041 | NetworkConnectIP4; DNS | Q5; N4 |
Affected surface & telemetry
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Windows endpoints | Process lineage + file events | Critical | Low — process telemetry |
| PowerShell | Script-block + module logging | High | Medium — logging gap |
| Service / registry | Service install + UAC-bypass registry | High | Low |
| Egress | DNS / netflow to C2 | Medium | Low — named atoms |
Consolidated IOC Table
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| Network | legitserver.theworkpc.com — ports 5443 / 8041 | high | block | SilentCanvas C2 |
| File | sysupdate.jpeg (no JPEG magic bytes; holds PowerShell) | high | hunt | Stego-style stager |
| Service | ScreenConnect service named "OneDriveServers" | high | detect | RMM masquerade persistence |
| Behavior | PowerShell → csc.exe compiling an on-host launcher | medium | detect | LOLBin build |
| Behavior | ComputerDefaults.exe fileless UAC bypass | high | detect | Elevation |
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Query / Control |
|---|---|---|---|
| Defense Evasion | T1027.003 / T1564 — Stego / hidden payload | PowerShell in a fake .jpeg (no magic bytes) | Q1; N1 |
| Execution | T1059.001 / T1027.004 — PowerShell / compile-after-delivery | csc.exe builds a launcher on host | Q2; N2 |
| Privilege Esc / Defense Evasion | T1548.002 — Bypass UAC (ComputerDefaults) | Fileless auto-elevation | Q3 |
| Persistence / C2 | T1543.003 / T1219 — Service / remote-access software | Trojanized ScreenConnect = OneDriveServers | Q4; N3 |
| Command & Control | T1071 / T1219 — RMM C2 | Beacon to C2 on 5443/8041 | Q5; N4 |
| Defense Evasion | T1562.001 — AMSI bypass / anti-forensics | Implant disables/clears defenses | Q2; N2 |
Native Audit-Log Hunts
| Hunt | Source | Logic | Response |
|---|---|---|---|
| N1 · Fake-image stager | File inventory / EDR | .jpeg/.jpg/.png files whose first bytes are NOT a valid image header (e.g. read by PowerShell) | Quarantine; analyze |
| N2 · PowerShell script-block | PowerShell Operational (4104) | Reads of sysupdate.jpeg / image files; AMSI-bypass strings; Add-Type/csc usage | Triage host; pull launcher |
| N3 · RMM service masquerade | Service install (7045) / inventory | ScreenConnect service with an odd name (OneDriveServers) or path; unsanctioned RMM instance | Remove; scope access |
| N4 · C2 egress | DNS / proxy / netflow | Resolution/connection to legitserver.theworkpc.com or ports 5443/8041 | Block; identify host |
CrowdStrike LogScale CQL Hunt Queries
SyntheticProcessRollup2. Pair the fileless hunts (Q1-Q3) with PowerShell script-block logging. ScreenConnect is legitimate RMM — Q4 keys on the abuse pattern (odd service name/relay), not the product itself.Looks for: PowerShell command lines referencing an image file with read/Base64/Get-Content (the fake-JPEG stager). Accomplishes: the first fileless tell. FP: low — legit scripts rarely Get-Content a .jpeg as code.
// HUNT: PowerShell reading a fake-image payload (sysupdate.jpeg) // MITRE: T1027.003, T1059.001 | CONF: high FP: low-med COST: low // FP NOTES: legit scripts rarely Get-Content/Base64-decode a .jpeg as executable #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^(powershell|pwsh)\.exe$/i | CommandLine=/\.(jpe?g|png|bmp|gif)\b/i | CommandLine=/(Get-Content|ReadAllBytes|FromBase64|IEX|Invoke-Expression|\[byte\[\]\])/i | table([@timestamp, ComputerName, UserName, FileName, CommandLine], limit=200)
Looks for: the in-box C# compiler (csc.exe) spawned by PowerShell/cmd (compile-after-delivery). Accomplishes: the on-host launcher build. FP: low-med — some dev/.NET tooling; flag PowerShell parent + temp output.
// HUNT: PowerShell-driven csc.exe launcher compile // MITRE: T1027.004, T1059.001 | CONF: med-high FP: low-med COST: low // TUNING: flag csc.exe with a PowerShell/cmd parent writing to a temp path #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^csc\.exe$/i | ParentBaseFileName=/^(powershell|pwsh|cmd)\.exe$/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Looks for: ComputerDefaults.exe spawning a child, or the registry hijack it abuses (ms-settings\\shell\\open\\command). Accomplishes: the fileless UAC bypass. FP: low — ComputerDefaults rarely launches anything.
// HUNT: ComputerDefaults.exe fileless UAC bypass // MITRE: T1548.002 | CONF: high FP: low COST: low // FP NOTES: ComputerDefaults spawning a child / ms-settings command hijack is high-signal #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2|AsepValueUpdate|RegGenericValueUpdate/ | (ParentBaseFileName=/^ComputerDefaults\.exe$/i or RegObjectName=/\\ms-settings\\[Ss]hell\\[Oo]pen\\command/i) | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, RegObjectName, RegStringValue], limit=200)
Looks for: a ScreenConnect client process/service named OneDriveServers or installed from a non-standard path. Accomplishes: the RMM persistence. FP: low-med — allow-list sanctioned RMM relays/instances.
// HUNT: trojanized ScreenConnect service masquerade (OneDriveServers) // MITRE: T1543.003, T1219 | CONF: med-high FP: low-med COST: low // TUNING: allow-list sanctioned ScreenConnect instances/relays; flag odd names/paths #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2|ServiceImagePath|ServiceStarted/ | (FileName=/^(ScreenConnect\.ClientService|ScreenConnect\.WindowsClient)\.exe$/i or ServiceName=/OneDriveServers/i or CommandLine=/ScreenConnect.+(theworkpc\.com|OneDriveServers)/i) | table([@timestamp, ComputerName, UserName, FileName, ServiceName, CommandLine], limit=200)
Looks for: DNS for theworkpc.com or connections on the C2 ports 5443/8041. Accomplishes: confirms beaconing. FP: low for the domain; the ports alone are higher-FP — pair with process context.
// HUNT: SilentCanvas C2 (legitserver.theworkpc.com / 5443 / 8041) // MITRE: T1071, T1219 | CONF: high FP: low COST: low // TUNING: domain is high-fidelity; the bare ports are higher-FP -- add process context #event_simpleName=/DnsRequest|NetworkConnectIP4/ | (DomainName=/(^|\.)theworkpc\.com$/i or RemotePort=5443 or RemotePort=8041) | table([@timestamp, ComputerName, ContextBaseFileName, DomainName, RemoteAddressIP4, RemotePort], limit=200)
Looks for: creation of sysupdate.jpeg (or similar decoy image names) in user/temp paths. Accomplishes: catches the stager on disk. FP: low — combine with Q1 for the read-as-code confirmation.
// HUNT: sysupdate.jpeg (decoy image) staged to disk // MITRE: T1027.003 | CONF: med-high FP: low COST: low // TUNING: combine with Q1 (read-as-code); decoy name may rotate // NOTE: Falcon standard coverage for non-PE file writes is limited; PeFileWritten fires only // if the payload is a PE disguised as .jpeg; NewExecutableWritten covers renamed executables. #event_simpleName=/NewExecutableWritten|PeFileWritten/ | TargetFileName=/\\sysupdate\.jpe?g$/i | table([@timestamp, ComputerName, UserName, ContextBaseFileName, TargetFileName], limit=200)
CrowdStrike Custom IOA Recommendations
| IOA Name | Field Patterns | Benign Exclusions | Deployment Path |
|---|---|---|---|
| SilentCanvas — ComputerDefaults UAC bypass | Parent ComputerDefaults.exe spawns child, or ms-settings\shell\open\command write | None (high-signal) | Endpoint Security → Custom IOA → Process/Registry, Detect+Block |
| SilentCanvas — PowerShell reads image-as-code | PowerShell CommandLine with .jpeg + Get-Content/FromBase64/IEX | Vetted image-processing scripts | Custom IOA → Process Creation, Detect+Block |
Machine-Readable IOC Appendix
Grouped IOC Quick-Copy
One-click blocks for blocking and detection. Named atoms are strong but rotatable; the fileless behaviors are durable. Add per-incident atoms during triage.
legitserver.theworkpc.com # SilentCanvas C2 (domain) theworkpc.com # parent domain 5443/tcp # C2 port 8041/tcp # C2 port # Block domain + ports at proxy/firewall; alert on resolution from any host.
sysupdate.jpeg # fake image stager (NO JPEG magic bytes; holds PowerShell) OneDriveServers # Windows service name masquerade (trojanized ScreenConnect) ScreenConnect.ClientService.exe / ScreenConnect.WindowsClient.exe # abused RMM client csc.exe (PowerShell/cmd parent) # in-box C# compiler building the launcher ComputerDefaults.exe # auto-elevating LOLBin abused for fileless UAC bypass # Note: any image file whose first bytes are not a valid image header is suspect.
PowerShell Get-Content/ReadAllBytes/FromBase64 on a .jpeg/.png then IEX (image-as-code) csc.exe with a PowerShell/cmd parent compiling a launcher to a temp path ComputerDefaults.exe spawning a child, or ms-settings\shell\open\command registry hijack ScreenConnect service with an odd name (OneDriveServers) or non-standard install path DNS/connection to theworkpc.com or ports 5443/8041 sysupdate.jpeg (or similar decoy image) written to a user/temp path
Block legitserver.theworkpc.com + ports 5443/8041 at proxy/firewall RMM governance: allow only sanctioned ScreenConnect instances/relays; alert on the rest PowerShell CLM + script-block/module logging; AMSI on Promote Q3 (ComputerDefaults UAC bypass) + Q1 (image-as-code) to Detect+Block IOAs WDAC/app control: constrain csc.exe + LOLBin abuse on non-dev hosts ASR: block executable content from email/web; block obfuscated scripts
Hardening — Tiered & Deployable
Cut the C2, govern RMM, and surface the fileless tells.
- Block
legitserver.theworkpc.com+ ports 5443/8041 — M1037. Severs the C2 (Q5/N4). - Promote Q3 (ComputerDefaults UAC bypass) + Q1 (image-as-code) to Detect+Block — M1040.
- RMM governance: allow only sanctioned ScreenConnect instances/relays — M1042. Alert on the rest (Q4/N3).
- PowerShell CLM + script-block/module logging; AMSI on — M1038 / M1047. Surfaces stages 1-2.
- WDAC/app control: constrain csc.exe + LOLBin abuse on non-dev hosts — M1038. Blunts the launcher build (Q2).
- ASR: block executable content from email/web; block obfuscated scripts — M1042.
- Monitor service installs (7045) for odd RMM service names/paths — M1047.
- Application allowlisting; default-deny user-path execution — M1038.
- RMM inventory + alerting program (which tools, which hosts, which relays) — M1033.
- UAC at max; tiered admin; phishing-resistant MFA — M1052 / M1026 / M1032.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the host; preserve sysupdate.jpeg + the compiled launcher + the ScreenConnect install + PowerShell logs | SOC L2 | Containment timestamp; Q1/Q3 events |
| Triage | Map stager → csc build → UAC bypass → ScreenConnect install → C2; assess hands-on RMM access & lateral movement; pull C2 list | IR | Process tree; service install; C2 |
| Eradicate | Remove the ScreenConnect service (OneDriveServers) + launcher + stager + UAC-bypass registry; block C2; reset creds | IR | Removal log; cred reset |
| Recover | Reimage if hands-on RMM control occurred; verify; restore from clean backup | IR + IT | Rebuild ticket |
| Harden | Block C2; RMM governance; promote Q1/Q3; CLM + script-block logging; constrain csc.exe | Detection Eng | IOA enabled; egress rule |
Detection Coverage Map & Validation
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1027.003 | Fake-image stager (read-as-code) | Q1, Q6 | IOA-2 | Good |
| T1027.004 / T1059.001 | csc.exe launcher compile | Q2 | — | Partial + script-block (N2) |
| T1548.002 | ComputerDefaults UAC bypass | Q3 | IOA-1 | Good |
| T1543.003 / T1219 | ScreenConnect masquerade persistence | Q4 | — | Good + RMM governance (N3) |
| T1071 / T1219 | C2 beacon (5443/8041) | Q5 | — | Good + proxy (N4) |
| — | Initial delivery of sysupdate.jpeg | — | — | GAP mail/web + file inventory (N1) |
Validation gates: (1) confirm process + file + registry + DNS telemetry + PowerShell script-block; (2) allow-list sanctioned ScreenConnect relays + any vetted image-processing scripts; (3) lab-test a benign powershell Get-Content image.jpg (tune Q1 to require the code-exec verbs) and a benign ComputerDefaults launch (must NOT spawn a child for Q3); (4) block the C2 + promote Q1/Q3. Any one fileless tell on a non-IT host is high-signal.
Hunt Summary Ticket
TITLE: Hunt — Operation SilentCanvas (JPEG-staged PS -> trojanized ScreenConnect)
SEVERITY: High (fileless loader + UAC bypass + RMM persistence)
SCOPE: Windows endpoints; PowerShell logging; service/registry; egress
HYPOTHESIS: PowerShell reads sysupdate.jpeg (no magic bytes) -> csc.exe builds a launcher ->
ComputerDefaults.exe fileless UAC bypass -> trojanized ScreenConnect (OneDriveServers)
-> beacon to legitserver.theworkpc.com 5443/8041.
QUERIES RUN: Q1 image-as-code (IOA) | Q2 csc.exe compile | Q3 ComputerDefaults UAC bypass (IOA) |
Q4 ScreenConnect masquerade | Q5 C2 egress | Q6 sysupdate.jpeg write
+ Native N1-N4 (fake-image stager, script-block, RMM masquerade, C2 egress)
DO FIRST: Block C2; Q3 + Q1 -- escalate any fileless tell on a non-IT host
FINDINGS: <pending analyst execution>
GAPS: Initial delivery of sysupdate.jpeg (mail/web); named atoms may rotate
ACTIONS: Block theworkpc.com + 5443/8041; RMM governance; promote Q1/Q3; CLM + script-block
logging; constrain csc.exe; ASR; reimage affected hosts
OWNER: HuntPack
VERSION: v0.3 - 2026-06-12
Changelog
table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.References
| Tier | Source | Used For |
|---|---|---|
| 1 | Operation SilentCanvas analysis (vendor/news reporting) | Full chain: JPEG stager, csc.exe, UAC bypass, ScreenConnect, C2 + ports |
| 2 | LOLBAS — ComputerDefaults.exe · csc.exe | UAC-bypass LOLBin + in-box C# compiler abuse |
| 2 | CISA — RMM abuse advisories (ConnectWise ScreenConnect) | Legit RMM abused as a backdoor; service-masquerade persistence |
HuntPack v0.3 · Operation SilentCanvas · Generated 2026-06-12 · Defensive use only — no offensive code. Block the named C2 (theworkpc.com, 5443/8041), but anchor durable detection on the fileless tells — image-as-code PowerShell, csc.exe launcher compile, and the ComputerDefaults UAC bypass — and govern RMM so trojanized ScreenConnect stands out. Validate field names before promoting any query.