CleanUpLoader / Oyster Backdoor
Executive Summary
What happened: Red Canary elevated CleanUpLoader—also tracked as Oyster, Broomstick, OysterLoader, and related names—in its 2026 Threat Detection Report after observing poisoned-search and malvertising delivery through fake PuTTY and other administrative-tool pages. Rapid7 independently analyzed a fake Microsoft Teams installer chain in 2024, Microsoft published OysterLoader behavior and indicators, and Sekoia documented a 2026 multi-stage evasion variant. These sources corroborate the family while showing that filenames, task names, packaging, and protocol details vary by campaign.
How it works: a user searching for PuTTY, WinSCP, Teams, or another utility reaches a lookalike landing page or advertisement and runs a trojanized installer from a user-writable path. Observed chains write DLL payloads such as twain_96.dll or CleanUp30.dll and create recurring tasks—WindowsCodecs, BluetoothDesktopHandlers, Security Updater, or ClearMngs—that invoke rundll32 with DLLRegisterServer against an AppData or temporary DLL. Follow-on execution can launch net, nltest, systeminfo, ipconfig, or whoami for discovery. Reported Oyster traffic uses generic api/connect or api/session-style HTTP paths and encoded content, but endpoint DNS events cannot prove that application-layer protocol.
Why detection belongs on behavior: search advertisements, landing domains, filenames, and C2 names rotate, while signed or plausible installers can still be hostile. The stronger defensive sequence combines administrative-tool installers launched from Downloads/AppData/Temp, schtasks creating a rundll32 DLLRegisterServer action, source-named scheduled tasks, and discovery children from the suspicious lineage. Five CQL queries expose those process, task, and historical DNS pivots. HTTP URI/content, signer certificate identity, DLL export semantics, IPv6, and wrapper ancestry remain tenant-specific gaps.
Operational consequence: Oyster establishes recurring execution and a remote tasking foothold that can outlive removal of the original installer. Preserve task XML, DLLs and hashes, process trees, browser/download provenance, DNS/proxy records, and user context before disabling persistence. Historical domains should be hunted and time-bounded rather than presented as permanent blocks. Prevention should center on managed software distribution and audit-mode application control, with narrow rollback paths for legitimate legacy installers.
| Priority | Why now | Coverage delivered | Key limitation |
|---|---|---|---|
| Review scheduled rundll32 persistence and user-path installers, then move administrative software acquisition to managed sources. | Current annual-report prominence plus independent technical corroboration | 5 CQL queries, 11 source-bound indicators, 3 explicit telemetry gaps | Published infrastructure is historical; HTTP paths, certificate identity, and IPv6 need tenant-specific telemetry. |
Source and Claim Review
Only sanitized plain-text evidence from the current run is retained. Source pages were treated as untrusted data; no embedded instructions, commands, scripts, credentials, or active content were used.
| ID | Publisher | Tier | Independence group | Accessed | Status |
|---|---|---|---|---|---|
| S01 | Red Canary | T1 | red-canary | 2026-09-04T11:35:00Z | sanitized plain-text extraction |
| S02 | Rapid7 | T1 | rapid7 | 2026-09-04T11:35:00Z | sanitized plain-text extraction |
| S03 | Microsoft Security Intelligence | T1 | microsoft | 2026-09-04T11:35:00Z | sanitized plain-text extraction |
| S04 | Sekoia.io | T1 | sekoia | 2026-09-04T11:35:00Z | sanitized plain-text extraction |
| S05 | Microsoft Learn | AUTH | microsoft-docs | 2026-09-04T11:35:00Z | sanitized plain-text extraction |
Claim ledger
| Claim | Statement | Sources | Basis | Confidence | Caveat |
|---|---|---|---|---|---|
| C01 | CleanUpLoader is a signed backdoor and loader also known as Oyster and Broomstick | S01 | direct | high | none |
| C02 | Recent campaigns use SEO poisoning and malvertising to impersonate PuTTY, WinSCP, and Microsoft Teams downloads | S01 | direct | high | delivery brands rotate |
| C03 | The loader drops a DLL into a random AppData Roaming directory and persists with a scheduled task invoking rundll32 and DLLRegisterServer | S01 | direct | high | task names and intervals vary |
| C04 | Operators use built-in commands including net, nltest, systeminfo, and ipconfig for discovery | S01 | direct | high | commands are shared by many threats |
| C05 | Red Canary links signing-certificate activity to campaigns that later delivered Rhysida ransomware | S01 | direct | medium | association does not prove every infection leads to ransomware |
| C06 | Rapid7 independently observed Oyster delivered by a fake Microsoft Teams installer | S02 | direct | high | 2024 campaign |
| C07 | Rapid7 describes Oyster Main as a host-enumerating backdoor with remote-command capability | S02 | direct | high | none |
| C08 | The Rapid7 sample used MSTeamsSetup_c_l_.exe and CleanUp30.dll | S02 | direct | high | historical artifacts |
| C09 | Microsoft independently documents a ClearMngs scheduled task, mutex, and three hard-coded C2 domains | S03 | direct | high | historical variant |
| C10 | Microsoft observed HTTP POST traffic to api/connect and api/session after host enumeration | S03 | direct | high | application paths require proxy telemetry |
| C11 | Sekoia documents continued OysterLoader evolution into 2026 with signed MSI delivery and multi-stage evasion | S04 | direct | high | version-specific internals vary |
| C12 | Sekoia recommends behavior-centered detection because encoding and artifacts evolve | S04 | direct | medium | analyst guidance |
| C13 | Microsoft application control supports staged audit and enforcement policies based on signer, publisher, path, and hash | S05 | direct | high | hardening authority only |
Hunt Brief and Attack Chain
The chain is evidence-led: product or lure execution, placement and persistence, command behavior, and remote communications are kept separate so an analyst can stop at the strongest corroborated step.
| Step | Claims | Behavior | Platform | Detection goal |
|---|---|---|---|---|
| 1 | C02, C06 | a user reaches a poisoned software-download page and launches a signed fake installer | windows | identify delivery and masquerade context |
| 2 | C03, C08 | the installer drops an Oyster DLL beneath AppData Roaming | windows | identify payload placement |
| 3 | C03, C09 | a scheduled task invokes rundll32 with DLLRegisterServer against the AppData DLL | windows | identify durable high-signal persistence |
| 4 | C04, C07 | the backdoor performs host and domain discovery and accepts remote commands | windows | correlate discovery with the suspicious parent |
| 5 | C09, C10 | the backdoor beacons to historical C2 and HTTP API paths | network | use source-bound indicators and preserve proxy visibility gap |
Hypotheses
| ID | Behavior | Events / repository | Use | Lookback | Validation |
|---|---|---|---|---|---|
| H01 | a PuTTY, WinSCP, or Teams-named installer from a user download path writes or launches an unexpected AppData DLL | ProcessRollup2, PeFileWritten | hunt | 30d — campaign delivery is intermittent | Run a benign signed installer in a lab that writes a test DLL to AppData, then baseline approved PuTTY/WinSCP/Teams installation paths. |
| H02 | schtasks creates a recurring task whose action uses rundll32 and DLLRegisterServer on a user-profile DLL | ProcessRollup2 | alert-candidate | 30d — recurring task is durable | Create a harmless lab task that calls a signed test DLL export from a disposable user path, verify telemetry, then baseline authorized task creators. |
| H03 | a ScheduledTaskRegistered event names a source-published Oyster task or points to rundll32 with a user-profile DLL | ScheduledTaskRegistered | hunt | 90d — historical persistence sweep | Register a benign task in a lab and verify actual populated task fields before relying on name or executable logic. |
| H04 | rundll32 or the suspicious task lineage spawns a burst of net, nltest, systeminfo, ipconfig, or whoami commands | ProcessRollup2 | hunt | 14d — recent discovery with manageable analyst review | Invoke benign discovery tools from a lab harness and confirm parent/host fields; baseline approved management tooling. |
| H05 | an endpoint resolves a source-published Oyster C2 domain with suspicious process context | DnsRequest | hunt | 90d — IOC sweep only | Issue a controlled lookup for a documentation domain to validate DNS context fields; never contact the malicious domains. |
| H06 | Oyster sends encoded HTTP requests to api/connect or api/session and receives tasking | #repo=base_sensor | gap | 30d — application-layer review | Map proxy/TLS fields and safe recorded traffic in the target environment; endpoint telemetry alone must not claim HTTP path visibility. |
Affected surface and telemetry
Coverage assumes managed Windows endpoints with ProcessRollup2, ScheduledTaskRegistered, and DnsRequest where populated, plus native task, browser, DNS, proxy, and application-control records. Direct-parent depth, non-PE file writes, signer certificate identity, HTTP content, IPv6, and tenant field population require environment-specific confirmation.
Consolidated IOC Table
Indicators below are source-bound historical hunt pivots, not proof of compromise or timeless block entries. Require behavior, host, user, process, and timing context; assign review/expiry dates to infrastructure.
| ID | Type | Value | Sources | Context | Confidence | Volatility | Action |
|---|---|---|---|---|---|---|---|
| I01 | task | WindowsCodecs | S01 | observed persistence task | high | medium | hunt |
| I02 | task | BluetoothDesktopHandlers | S01 | observed persistence task | high | medium | hunt |
| I03 | task | Security Updater | S01 | observed persistence task | high | medium | hunt |
| I05 | domain | putty-ssh.com | S01 | historical fake PuTTY landing domain | high | high | hunt |
| I06 | domain | putty.run | S01 | historical fake PuTTY landing domain | high | high | hunt |
| I07 | path | MSTeamsSetup_c_l_.exe | S02, S03 | historical fake Teams installer | high | medium | hunt |
| I08 | path | CleanUp30.dll | S02, S03 | historical Oyster DLL | high | medium | hunt |
| I09 | task | ClearMngs | S03 | historical persistence task | high | medium | hunt |
| I10 | mutex | ITrkfSaV-4c7KwdfnC-Ds165XU4C-lH6R9pk1 | S03 | historical mutex | high | medium | hunt |
| I11 | domain | supfoundrysettlers.us | S03 | historical C2 domain | high | high | hunt |
| I12 | domain | whereverhomebe.com | S03 | historical C2 domain | high | high | hunt |
ATT&CK Mapping
ATT&CK rows describe attacker behavior supported by named claims. Every mapping is explicitly an analyst inference; neither product inventory nor hardening is mislabeled as adversary behavior.
| Tactic | Technique | Name | Behavior | Basis | Sources | Claims |
|---|---|---|---|---|---|---|
| Initial Access | T1189 | Drive-by Compromise | malvertising and poisoned search results lead to trojanized software downloads | analyst_inference | S01 | C02 |
| Execution | T1218.011 | Rundll32 | rundll32 executes the backdoor through DLLRegisterServer | analyst_inference | S01 | C03 |
| Persistence | T1053.005 | Scheduled Task/Job: Scheduled Task | a recurring task launches the malicious DLL | analyst_inference | S01 | C03 |
| Discovery | T1016 | System Network Configuration Discovery | operators invoke ipconfig and related commands | analyst_inference | S01 | C04 |
| Command and Control | T1071.001 | Web Protocols | the backdoor communicates with web C2 and receives commands | analyst_inference | S02 | C07 |
Native / Non-CQL Hunts
These native pivots supply evidence that portable endpoint CQL cannot safely invent. Complete them alongside the query set and preserve original records before remediation.
| Hunt | Log source | Logic | Response |
|---|---|---|---|
| Scheduled-task evidence | Windows Task Scheduler Operational log; Event IDs 106, 140, 141 and Security 4698 where enabled | Find WindowsCodecs, BluetoothDesktopHandlers, Security Updater, ClearMngs, or tasks invoking rundll32 against user-profile DLLs; preserve the XML and creator. | Disable only confirmed malicious tasks after evidence capture; re-hunt the DLL and parent installer. |
| Download provenance | Browser/download logs, secure web gateway, SmartScreen, and software inventory | Trace PuTTY, WinSCP, or Teams installers launched from Downloads, AppData, or Temp to referrer, landing domain, signer, digest, prevalence, and approved-package catalog. | Block confirmed poisoned sources with expiry; replace software from an owner-approved repository. |
| Proxy application-layer review | Proxy or TLS inspection telemetry | Search for api/connect and api/session paths only when process/host context supports Oyster; distinguish generic application traffic with destination and lineage. | Preserve full request metadata; do not alert on generic URI strings alone. |
CrowdStrike LogScale CQL Hunt Queries
All queries are static-only. Start with a one-hour manual window, confirm the repository, fields, and row semantics, then expand to the documented lookback.
Looks for: PuTTY, WinSCP, or Teams-themed executables launched from Downloads, AppData, or Temp. Accomplishes: surfaces the masqueraded delivery layer for validation against approved software sources and signer evidence.
// HUNT: User-path administrative-tool installers // HYPOTHESIS: H01 // USE: hunt // MITRE: T1036 // CONF: medium // FP: medium // COST: low // TIMEFRAME: 30d — review intermittent fake-installer delivery // REQUIRES: #event_simpleName=ProcessRollup2; ImageFileName, CommandLine, ParentBaseFileName // FALSE POSITIVES: legitimate PuTTY, WinSCP, Teams, and deployment installers // TUNING: exclude approved vendor paths and software-distribution parents // VALIDATION: STATIC-ONLY #event_simpleName = ProcessRollup2 | test(@timestamp >= now() - 2592000000) | ImageFileName = /\\(putty|winscp|msteam(?:s|ssetup)[^\\]*)\.exe$/i | ImageFileName = /\\users\\[^\\]+\\(?:downloads|appdata|temp)\\/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, SHA256HashData, aid]) | sort(@timestamp, order=desc, limit=1000)
Looks for: schtasks creating a task that executes an AppData Roaming DLL through rundll32 and DLLRegisterServer. Accomplishes: catches the durable Oyster persistence invariant with enough context for a high-priority analyst review.
// HUNT: Scheduled rundll32 AppData DLL persistence // HYPOTHESIS: H02 // USE: alert-candidate // MITRE: T1053.005, T1218.011 // CONF: high // FP: medium // COST: low // TIMEFRAME: 30d — recurring persistence remains durable // REQUIRES: #event_simpleName=ProcessRollup2; ImageFileName, CommandLine, ParentBaseFileName // FALSE POSITIVES: legacy installers that create rundll32 tasks // TUNING: exclude approved task creators and signed DLLs in managed paths // VALIDATION: STATIC-ONLY #event_simpleName = ProcessRollup2 | test(@timestamp >= now() - 2592000000) | ImageFileName = /\\schtasks\.exe$/i | CommandLine = /\/create/i | CommandLine = /rundll32(?:\.exe)?/i | CommandLine = /\\users\\[^\\]+\\appdata\\roaming\\/i | CommandLine = /\.dll\s+dllregisterserver/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, CommandLine, SHA256HashData, aid]) | sort(@timestamp, order=desc, limit=1000)
Looks for: registration of six scheduled-task names reported across Oyster variants. Accomplishes: supplies a fast historical persistence sweep while requiring executable-path review because generic task names can collide.
// HUNT: Source-named Oyster scheduled tasks // HYPOTHESIS: H03 // USE: hunt // MITRE: T1053.005 // CONF: medium // FP: medium // COST: low // TIMEFRAME: 90d — source-name persistence sweep // REQUIRES: #event_simpleName=ScheduledTaskRegistered; ScheduledTaskName, TaskName, TaskExecutable // FALSE POSITIVES: legitimate tasks using generic update or codec names // TUNING: exclude owner-approved tasks only after verifying executable and path // VALIDATION: STATIC-ONLY #event_simpleName = ScheduledTaskRegistered | test(@timestamp >= now() - 7776000000) | ScheduledTaskName = /^(WindowsCodecs|BluetoothDesktopHandlers|Security Updater|WMSysPr9|FireFox Agent INC|ClearMngs)$/i | table([@timestamp, ComputerName, UserName, ScheduledTaskName, TaskName, TaskExecutable, aid]) | sort(@timestamp, order=desc, limit=1000)
Looks for: rundll32 or lure-installer parents spawning common discovery commands. Accomplishes: adds suspicious lineage to otherwise generic reconnaissance, supporting host scoping after a task or installer lead.
// HUNT: Oyster-lineage discovery children // HYPOTHESIS: H04 // USE: hunt // MITRE: T1082, T1016 // CONF: medium // FP: medium // COST: low // TIMEFRAME: 14d — recent discovery correlation // REQUIRES: #event_simpleName=ProcessRollup2; ParentBaseFileName, ImageFileName, CommandLine // FALSE POSITIVES: administrator troubleshooting and inventory agents // TUNING: exclude approved management tooling and documented scripts // VALIDATION: STATIC-ONLY #event_simpleName = ProcessRollup2 | test(@timestamp >= now() - 1209600000) | ParentBaseFileName = /^(rundll32|msteamss?setup_c_l_|putty|winscp)\.exe$/i | ImageFileName = /\\(net|nltest|systeminfo|ipconfig|whoami)\.exe$/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, aid]) | sort(@timestamp, order=desc, limit=1000)
Looks for: DNS requests to three Microsoft-documented Oyster C2 domains. Accomplishes: provides a high-confidence retrospective pivot with process context while acknowledging that current variants may rotate infrastructure.
// HUNT: Historical Oyster C2 DNS hits // HYPOTHESIS: H05 // USE: hunt // MITRE: T1071.001 // CONF: high // FP: low // COST: low // TIMEFRAME: 90d — historical C2 indicator sweep // REQUIRES: #event_simpleName=DnsRequest; DomainName, ContextBaseFileName, ContextProcessId_decimal // FALSE POSITIVES: research and sinkhole lookups // VALIDATION: STATIC-ONLY #event_simpleName = DnsRequest | test(@timestamp >= now() - 7776000000) | in(DomainName, values=["supfoundrysettlers.us","whereverhomebe.com","retdirectyourman.eu"]) | table([@timestamp, ComputerName, DomainName, ContextBaseFileName, ContextProcessId_decimal, aid]) | sort(@timestamp, order=desc, limit=1000)
Operationalization and IOA Candidates
Stage 4 is deliberately degraded: every candidate remains hunt-only and design-only because no tenant parse, positive test, benign baseline, suppression, volume, routing, owner, or SLA evidence exists. No Custom IOA or scheduled alert is shipped.
| Alert | Query | Design use | Decision | Readiness | Rationale |
|---|---|---|---|---|---|
| A01 | Q01 | hunt | hunt-only | design-only | Tenant parsing, positive testing, benign baseline, result-volume, scheduling, suppression, routing, ownership, SLA, and failure-monitoring evidence are absent. |
| A02 | Q02 | alert-candidate | hunt-only | design-only | Tenant parsing, positive testing, benign baseline, result-volume, scheduling, suppression, routing, ownership, SLA, and failure-monitoring evidence are absent. |
| A03 | Q03 | hunt | hunt-only | design-only | Tenant parsing, positive testing, benign baseline, result-volume, scheduling, suppression, routing, ownership, SLA, and failure-monitoring evidence are absent. |
| A04 | Q04 | hunt | hunt-only | design-only | Tenant parsing, positive testing, benign baseline, result-volume, scheduling, suppression, routing, ownership, SLA, and failure-monitoring evidence are absent. |
| A05 | Q05 | hunt | hunt-only | design-only | Tenant parsing, positive testing, benign baseline, result-volume, scheduling, suppression, routing, ownership, SLA, and failure-monitoring evidence are absent. |
Promotion gate
Confirm tenant parsing and populated fields; run safe positive and representative benign tests; measure prevalence and cost; define grouping, deduplication, suppressions, routing, owner, SLA, and rollback; then re-review independently.
Machine-Readable IOC Appendix
CSV-style copy blocks retain source IDs and context. Historical infrastructure is supplied for retrospective hunting only; validate ownership and expiry before any prevention action.
type,value,action,severity,expiration,description,tags task,WindowsCodecs,detect,medium,2027-09-04,observed persistence task,source:S01 task,BluetoothDesktopHandlers,detect,medium,2027-09-04,observed persistence task,source:S01 task,Security Updater,detect,medium,2027-09-04,observed persistence task,source:S01 domain,putty-ssh.com,detect,medium,2026-12-04,historical fake PuTTY landing domain,source:S01 domain,putty.run,detect,medium,2026-12-04,historical fake PuTTY landing domain,source:S01 path,MSTeamsSetup_c_l_.exe,detect,medium,2027-09-04,historical fake Teams installer,source:S02 source:S03 path,CleanUp30.dll,detect,medium,2027-09-04,historical Oyster DLL,source:S02 source:S03 task,ClearMngs,detect,medium,2027-09-04,historical persistence task,source:S03 mutex,ITrkfSaV-4c7KwdfnC-Ds165XU4C-lH6R9pk1,detect,medium,2027-09-04,historical mutex,source:S03 domain,supfoundrysettlers.us,detect,medium,2026-12-04,historical C2 domain,source:S03 domain,whereverhomebe.com,detect,medium,2026-12-04,historical C2 domain,source:S03
WindowsCodecs,sources=S01,context=observed persistence task,volatility=medium BluetoothDesktopHandlers,sources=S01,context=observed persistence task,volatility=medium Security Updater,sources=S01,context=observed persistence task,volatility=medium ClearMngs,sources=S03,context=historical persistence task,volatility=medium
putty-ssh.com,sources=S01,context=historical fake PuTTY landing domain,volatility=high putty.run,sources=S01,context=historical fake PuTTY landing domain,volatility=high supfoundrysettlers.us,sources=S03,context=historical C2 domain,volatility=high whereverhomebe.com,sources=S03,context=historical C2 domain,volatility=high
MSTeamsSetup_c_l_.exe,sources=S02+S03,context=historical fake Teams installer,volatility=medium CleanUp30.dll,sources=S02+S03,context=historical Oyster DLL,volatility=medium
ITrkfSaV-4c7KwdfnC-Ds165XU4C-lH6R9pk1,sources=S03,context=historical mutex,volatility=medium
Hardening — Tiered and Deployable
- Disable confirmed Oyster persistence after exporting evidence (CTRL01) — Export the scheduled-task XML, command, creator, timestamps, and referenced DLL; hash the DLL; then disable only the confirmed malicious task under incident authority. deployable-design Verify: Verify the task is disabled, rundll32 no longer launches the DLL, and owner-approved tasks remain healthy. Expected: Confirmed persistence stops without collateral task failures and evidence remains retained. Rollback: Re-enable only if ownership proves the task legitimate; otherwise restore affected business software from a trusted package. Authority: S01 · Red Canary 2026 Threat Detection Report; accessed 2026-09-04.
- Remove poisoned-download exposure from managed browsing paths (CTRL02) — Block source-bound malicious landing domains with expiry and review controls, suppress search advertisements where policy permits, and direct PuTTY, WinSCP, and Teams installation to managed packages. deployable-design Verify: Confirm historical malicious domains are denied, official vendor sources work, and block events are logged. Expected: Users can reach approved sources but historical poisoned destinations are denied and attributable. Rollback: Remove an erroneous domain entry through change control and retain the event for rule correction. Authority: S01 · Red Canary 2026 Threat Detection Report; accessed 2026-09-04.
- Pilot application control against user-path DLL registration (CTRL03) — Deploy an audit-mode App Control policy covering rundll32 execution of DLLs from user-writable paths and unapproved signed installers, then promote only reviewed rules after benign testing. deployable-design Verify: Exercise approved installers and a harmless lab DLL-registration test; compare audit results with software inventory. Expected: Approved installers work and the risky user-path DLL pattern is visible before enforcement. Rollback: Remove or revert the pilot policy through the documented management channel and restore the prior signed policy. Authority: S05 · Microsoft App Control for Business; accessed 2026-09-04.
- Alert on discovery bursts from installer or rundll32 lineage (CTRL04) — After tenant parsing and baseline validation, review same-host sequences where a lure installer or rundll32 parent launches multiple discovery utilities within a short window; keep it analyst-led until measured. deployable-design Verify: Replay benign discovery commands from a lab harness and compare with 30 days of approved administrative activity. Expected: The lab sequence is visible and exclusions name only verified management tooling. Rollback: Disable the saved search or revert exclusions; no prevention action is attached. Authority: S01 · Red Canary 2026 Threat Detection Report; accessed 2026-09-04.
- Require managed software acquisition for administrative utilities (CTRL05) — Distribute PuTTY, WinSCP, Teams, and similar tools from verified managed repositories; record publisher and digest; restrict unmanaged installers from search-result downloads where compatible. deployable-design Verify: Install each approved package in a pilot and verify publisher, digest, update, launch, and rollback behavior. Expected: Managed packages function and unapproved lookalikes require review. Rollback: Restore a time-bounded named package exception under approval and correct the repository package. Authority: S05 · Microsoft App Control for Business; accessed 2026-09-04.
- Centralize scheduled-task, process, DNS, and proxy evidence (CTRL06) — Forward protected copies of task registration, process command line, DNS, application-control, and proxy request records with source-health monitoring and at least 90-day retention. deployable-design Verify: Create an owner-approved benign task and web request, verify linked fields and timestamps, then test source-health alerting. Expected: The full chain is attributable across host and network logs and a collection interruption is detected. Rollback: Restore the previous forwarding and retention configuration while preserving collected records and documenting the gap. Authority: S03 · Microsoft Security Intelligence; accessed 2026-09-04.
Deployable playbook · CTRL01 + CTRL02
- Confirm incident authority, owner, business dependencies, evidence storage, and recovery path.
- Capture task definitions, process trees, files and hashes, DNS/network records, user/session state, and current policy before change.
- Pilot the containment or domain/task change on one confirmed endpoint or small cohort.
- Verify the expected malicious behavior stops and evidence remains accessible.
- Run application, authentication, network, and user workflow health checks.
- Expand only to confirmed matching systems after the pilot remains healthy.
- If a stop condition occurs, apply the documented narrow rollback and verify restored service without reintroducing suspect artifacts.
- Retain before/after exports, approvals, test evidence, and owner sign-off.
Deployable playbook · CTRL03 + CTRL05
- Inventory approved applications, publishers, install paths, owners, and exception requirements.
- Export current application-control policy and confirm a tested rollback channel.
- Deploy the new policy to an isolated audit-only pilot.
- Exercise approved applications and harmless representative tests; review every unexpected audit event.
- Verify business workflows, software updates, and developer exceptions.
- Promote narrowly only when audit data and owners support each allow/deny decision.
- Rollback to the previous signed policy if a critical application fails and verify endpoint health.
- Retain policy hashes, audit samples, approvals, exceptions, and review dates.
Containment Runbook
| Phase | Trigger | Authority | Owner | Evidence | Recovery |
|---|---|---|---|---|---|
| 1 · Validate | Corroborated process, task, file, or C2 evidence | SOC lead | SOC | query row, raw event, process tree, task XML, file/hash, DNS and user context | No disruptive action; close as benign only with documented owner evidence. |
| 2 · Preserve | Probable compromise after triage | Incident commander | Incident Response | volatile context, files, hashes, task/config exports, network/DNS, identity/session state | Preservation is additive; verify evidence hashes and custody before changes. |
| 3 · Contain | Confirmed persistence, remote tasking, or follow-on payload | Incident commander plus system owner | IR / Network Security | containment approval, endpoint/network controls, timestamps, exceptions | Maintain response access and business continuity; release only after eradication gates. |
| 4 · Eradicate and recover | Evidence secured and clean rebuild/reinstall path approved | Change authority | Endpoint Engineering | trusted package/image digest, removed persistence, credential review, health tests | Restore from known-good media/packages; never restore the suspect task or DLL. |
| 5 · Close and re-hunt | Recovery checks pass | Incident commander and owner | SOC / Endpoint Engineering | clean 24h and 7d re-hunts, source health, owner sign-off, lessons learned | Recontain and reopen if persistence, C2, or unexplained process activity returns. |
Continuity rule: preserve evidence first. Do not isolate critical systems, remove tasks/files, revoke credentials, or impose application-control enforcement without incident authority, the service owner, known dependencies, and a tested recovery path.
Detection Coverage and Validation Evidence
Validation state: STATIC REVIEW PASSED after local structure/safety, field/event, CQL syntax, and source-snapshot provenance gates. The offline dry run records extraction and profile readiness only; it does not contact Falcon or prove parsing, detection, canary success, or deployment.
| Technique | Coverage | Queries / handoff | Evidence | Limitation |
|---|---|---|---|---|
| T1189 | Gap | Native handoff | Evidence-backed design gap | Published infrastructure is historical; HTTP paths, certificate identity, and IPv6 need tenant-specific telemetry. |
| T1218.011 | Gap | Native handoff | Evidence-backed design gap | Published infrastructure is historical; HTTP paths, certificate identity, and IPv6 need tenant-specific telemetry. |
| T1053.005 | Static | Q02, Q03 | Local structure/field/syntax/provenance review | Published infrastructure is historical; HTTP paths, certificate identity, and IPv6 need tenant-specific telemetry. |
| T1016 | Gap | Native handoff | Evidence-backed design gap | Published infrastructure is historical; HTTP paths, certificate identity, and IPv6 need tenant-specific telemetry. |
| T1071.001 | Static | Q05 | Local structure/field/syntax/provenance review | Published infrastructure is historical; HTTP paths, certificate identity, and IPv6 need tenant-specific telemetry. |
Recorded gaps and next evidence
- Every query remains tenant-unverified and design-only.
- Direct-parent lineage, field population, IPv6, proxy content, and environment-specific exclusions require tenant review.
- Historical atomics require context and expiry; no query result was generated by this build.
- Next step: run the named DO FIRST query manually for one hour, confirm fields and semantics, then record positive and benign tests before promotion.
Hunt Summary Ticket
TITLE: CleanUpLoader / Oyster Backdoor hunt — v0.3 Draft SEVERITY: high — source-corroborated remote execution or persistence behavior warrants prioritized review SCOPE: managed Windows endpoints; Falcon process/task/DNS telemetry; native task, proxy, browser, and application-control evidence HYPOTHESIS: H01 a PuTTY, WinSCP, or Teams-named installer from a user download path writes or launches an unexpected AppData DLL; H02 schtasks creates a recurring task whose action uses rundll32 and DLLRegisterServer on a user-profile DLL; H03 a ScheduledTaskRegistered event names a source-published Oyster task or points to rundll32 with a user-profile DLL; H04 rundll32 or the suspicious task lineage spawns a burst of net, nltest, systeminfo, ipconfig, or whoami commands; H05 an endpoint resolves a source-published Oyster C2 domain with suspicious process context; H06 Oyster sends encoded HTTP requests to api/connect or api/session and receives tasking QUERIES RUN: Q01 hunt; Q02 alert-candidate; Q03 hunt; Q04 hunt; Q05 hunt DO FIRST: Q02 over 30 days, then Q03 and Q04 on matching hosts; do not contact historical malicious domains. FINDINGS: GAPS: Published infrastructure is historical; HTTP paths, certificate identity, and IPv6 need tenant-specific telemetry. No tenant execution evidence exists. ACTIONS: SOC preserves and hunts evidence; IR contains corroborated infections; Endpoint and Network owners pilot controls with rollback OWNER: SOC / Incident Response / Endpoint Security / Network Security VERSION: v0.3 Draft · 2026-09-04 · STATIC REVIEW PASSED
Changelog
References
| ID | Publisher | Edition / date | Accessed | Use | URL |
|---|---|---|---|---|---|
| S01 | Red Canary | Current cited edition | 2026-09-04T11:35:00Z | C01, C02, C03, C04, C05, I01, I02, I03, I05, I06 | https://redcanary.com/threat-detection-report/threats/cleanuploader/ |
| S02 | Rapid7 | Current cited edition | 2026-09-04T11:35:00Z | C06, C07, C08, I07, I08 | https://www.rapid7.com/blog/post/2024/06/17/malvertising-campaign-leads-to-execution-of-oyster-backdoor/ |
| S03 | Microsoft Security Intelligence | Current cited edition | 2026-09-04T11:35:00Z | C09, C10, I07, I08, I09, I10, I11, I12 | https://www.microsoft.com/en-us/wdsi/threats/malware-encyclopedia-description?Name=Trojan%3AWin64%2FOysterLoader%21MTB&ThreatID=2147947243 |
| S04 | Sekoia.io | Current cited edition | 2026-09-04T11:35:00Z | C11, C12 | https://www.sekoia.com/blog/oysterloader-unmasked-the-multi-stage-evasion-loader |
| S05 | Microsoft Learn | Current cited edition | 2026-09-04T11:35:00Z | C13 | https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/appcontrol |