TASK#STOMP -- VBS-to-PowerShell Windows Backdoor: Document Theft, Timestomping & Runtime C# Compilation
Executive Summary
TASK#STOMP is a VBScript-to-PowerShell Windows backdoor documented by Securonix Threat Research (Akshay Gaikwad and Aaron Beardslee) on 2026-09-21. Its objective is continuous, unattended document theft -- Word, PDF, PowerPoint, Excel, and archives are harvested from every fixed drive, prioritized by type and recency -- combined with credential/clipboard theft, screenshot capture, and open-ended remote-command execution over two redundant, token-authenticated command-and-control servers.
The malware's single highest-value defensive angle is not any one filename or task name -- both rotate -- it is the behavioral spine of the install chain: wscript.exe decodes and runs a VBScript from a user-writable path, that script registers four scheduled tasks from XML definitions staged under a single non-standard %LOCALAPPDATA% folder, drops a Startup-folder re-execution copy, backdates five of its own artifacts to a single fixed historical timestamp, launches two hidden PowerShell modules, and compiles C# at runtime via the legitimate csc.exe. That sequence survives every rename the operator makes to task names, folder names, or script filenames, and none of it resembles normal user or admin activity when correlated end to end.
Securonix built this analysis from one infected machine and explicitly states it cannot say how many organizations are affected, and separately states it is not making an attribution claim -- "nothing in the sample's code, infrastructure, or TTPs overlaps cleanly with a known APT's established toolkit." The document-type priority order (Word → PDF → PowerPoint → Excel, ahead of archives) points to corporate-document espionage rather than opportunistic crimeware, and reused, buggy watchdog code across both PowerShell modules is read by Securonix as the signature of a "competent-but-not-elite," mid-tier operator rather than a mature APT.
Single-source limitation: every atomic indicator in this pack traces back to one Securonix write-up analyzing one infected host. Treat IOCs as high-fidelity for THIS sample but do not assume broad campaign infrastructure, scale, or attribution from them -- see §4 and §18.
Defender priority: hunt the chain wscript.exe → ScheduledTaskRegistered (x4, AppData-rooted) → hidden PowerShell → csc.exe under a WinDefendSvc-style folder in %LOCALAPPDATA%. This behavioral spine is mechanically detectable and survives every filename/task-name rotation the operator makes -- prioritize Q1, Q3, and Q6 (§8) over any single hash or domain block.
Source Review & Web Hunter Notes
Sourcing constraint: Securonix is the sole independent primary source. The Hacker News, Help Net Security, and CyberPress are all derivative coverage of the same Securonix report -- none contributes an independent sample, hash, or infrastructure observation. This pack's confidence and the Falcon IOC-import CSV action column (§4, §10) are both scoped down to reflect that.
| Tier | Source | Key Finding | Carry Forward |
|---|---|---|---|
| 1 -- Primary | Securonix Threat Research blog | Full technical write-up: 9-stage attack chain, all 10 file hashes, both C2 domains, static auth token, 9 API paths, MITRE mapping, and vendor-style hunting queries. States the analysis is built from a single infected machine. | Yes |
| 2 -- Derivative | The Hacker News (Ravie Lakshmanan) | Summarizes the Securonix report; adds the observation that the initial VBS filename is deliberately randomized to defeat filename-based detection, and quotes Securonix directly on native-tooling abuse. | Partial |
| 2 -- Derivative | Help Net Security (Mirko Zorz, interview with Aaron Beardslee) | Original interview quotes not in the primary blog: explicit single-machine/no-attribution statements, a shared watchdog bug in both PowerShell modules, the "mid-tier operator" assessment, the IranTenders lure-theme caveat, and responder-recommended containment order. | Yes |
| 3 -- Derivative, low-confidence capture | CyberPress | Short restatement of the same C2/capability facts. Direct fetch returned HTTP 403 (WAF block); content was captured via a secondary page-text extraction rather than raw HTML, so treat this snapshot as a close paraphrase, not a byte-for-byte capture. | Partial |
Research decisions carried into this pack
- Every atomic IOC in §10's Falcon IOC-management CSV ships as
action=detect, neverprevent, and severity is capped athigh(nevercritical) -- directly because of the single-machine provenance stated above. irantenders[.]comis not shipped as a blockable indicator. Beardslee told Help Net Security the site itself is not treated as malicious and warned against blocking the whole domain on a single decoy-page observation -- see §4's non-atomic indicators note.- Three additional MITRE techniques observed directly in the primary source but not called out in the original tasking brief -- T1016 (System Network Configuration Discovery, via
netsh), T1070.004 (File Deletion,purge.bat), and T1059.003 (Windows Command Shell) -- are folded into §6 and §7 since Falcon endpoint telemetry does not cleanly isolate them into standalone CQL.
Hunt Brief & Attack Chain
Attack chain
| Step | Stage | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 | wscript.exe executes encoded VBScript (95c9050t66.vbs) staged on the user's Desktop | ProcessRollup2 | Q1 |
| 2 | Creates 4 scheduled tasks from XML under %LOCALAPPDATA%\WinDefendSvc (task.xml..task4.xml), named to impersonate Windows components | ScheduledTaskRegistered | Q3 |
| 3 | Drops msdiag.vbs in the user Startup folder for logon persistence | ProcessRollup2 / AsepValueUpdate | Q2 |
| 4 | Terminates existing loader instances via a WMI query before relaunch | ProcessRollup2 | Q10 |
| 5 | Backdates 5 artifacts to a fixed historical timestamp (2024-01-15 08:30:00) -- T1070.006 | ProcessRollup2 (command-line) / MFT-USN forensics | Q7, Q8, native hunt (§7) |
| 6 | Launches two hidden PowerShell modules -- sys_loader.ps1 (decodes diag_pack.dat) and win_conn.ps1 (decodes win_conn_cfg.dat) | ProcessRollup2 | Q5 |
| 7 | Runtime C# compilation via the legitimate .NET compiler csc.exe -- T1027.004 | ProcessRollup2 | Q6 |
| 8 | Opens Chrome to an irantenders[.]com tender-portal URL (decoy/lure, not itself malicious) | ProcessRollup2 (command-line correlation only) | Native hunt (§7); not blocked -- see §4 |
| 9 | purge.bat cleanup routine invoked (contents not recovered by Securonix) | ProcessRollup2 (invocation only) | Native hunt (§7) |
| Ongoing | Recursive document theft, real-time filesystem watch, Wi-Fi password theft (netsh), clipboard theft/clear, screenshot, system-info discovery, arbitrary remote commands over dual token-authenticated C2 | ProcessRollup2 / DnsRequest / NetworkConnectIP4 / proxy logs | Q9, native hunt (§7) |
Hunt hypotheses
- H1 (high):
wscript.exelaunching a.vbsfile from Desktop/Downloads/Temp is a reliable initial-stage signal regardless of filename. → Q1. - H2 (high): A second
wscript.exe → .vbslaunch from the Startup folder on a later logon indicates re-execution persistence has already taken hold. → Q2. - H3 (high): Scheduled tasks that impersonate core Windows component names but resolve to an executable under a user's
AppData\Localpath are almost never legitimate. → Q3. - H4 (high): Any process activity rooted in an AppData folder named to impersonate a Defender/security service (
WinDefendSvc-style) merits review even before other TTPs fire. → Q4. - H5 (medium): Hidden, Base64-encoded PowerShell that references a
.datfile is a strong loader-stage signal once correlated with H3/H4. → Q5. - H6 (high):
csc.exespawned directly bypowershell.exeis rare outside developer/build hosts and is the clearest single-event T1027.004 signal in this chain. → Q6. - H7 (medium): PowerShell invoking
SetLastWriteTimeis a generic but useful timestomping signal fleet-wide. → Q7. - H8 (high): The literal backdate value
2024-01-15 08:30:00is a near-unique, high-confidence pivot once it appears alongside timestomping syntax. → Q8. - H9 (high): DNS resolution of either named C2 domain is a direct, low-noise network signal. → Q9.
- H10 (medium): WMI enumeration/termination that references the loader's own module-name fragments indicates the self-replacement behavior in Stage 4. → Q10.
Consolidated IOC Table
Confidence is capped at medium and action is fixed at detect for every atomic indicator below -- Securonix built this evidence from a single infected machine and explicitly cannot speak to prevalence. This table's Action column matches the Falcon IOC-management CSV in §10 exactly, row for row -- do not deploy any of these in prevent mode without independent corroboration.
Atomic indicators (importable -- matches §10 CSV exactly)
| Type | Value | Confidence | Action | Context | Expiry |
|---|---|---|---|---|---|
| sha256 | 5251098838fab2f3192307cac99ad2d3a71b55ba1f256412d43a9dfb3b93ac58 | Medium | detect | Stage-1/3 VBScript orchestrator -- shared hash for 95c9050t66.vbs and its Startup-folder copy msdiag.vbs | 2027-03-22 |
| sha256 | 7a9e7b4c2f75f7de03838f5c9589148cdbefb76200ea3cf2d6f1a2288c302493 | Medium | detect | Scheduled-task XML definition task.xml ("Local Credential Manager") | 2027-03-22 |
| sha256 | ff12c194128d0733434ce1580691bfde5896f14ba9f360c0f6c3a622eed24312 | Medium | detect | Scheduled-task XML definition task2.xml ("Network Audio Service") | 2027-03-22 |
| sha256 | e46111264ebd91e80bbad85141d254930354faa0f15d3bbfaf4826adf5a53c8d | Medium | detect | Scheduled-task XML definition task3.xml ("Windows Display Manager") | 2027-03-22 |
| sha256 | 335d19f4e757e0c36c9ef1cb4638e151aac041b7814e3eb8bda6f78ff7011f32 | Medium | detect | Scheduled-task XML definition task4.xml ("Device Credential Handler") | 2027-03-22 |
| sha256 | 103b4d4a666bc0a89c10c9df55f54f4be5fa111e8429c37ae14fa8f16cb50fe8 | Medium | detect | Hidden PowerShell module sys_loader.ps1 -- document theft / surveillance branch | 2027-03-22 |
| sha256 | 02ba7c982b68ec8f5a1cb47c6f3969f3f2f38ea9b4ebb8833d1b8b0ba2ab1407 | Medium | detect | Encoded config diag_pack.dat decoded by sys_loader.ps1 | 2027-03-22 |
| sha256 | 8f448080cec5cba2f0ba6a960bc3425a2d99a6767464f581d13476985eaa4a2e | Medium | detect | Hidden PowerShell module win_conn.ps1 -- secondary C2 channel branch | 2027-03-22 |
| sha256 | 41231e7f5db49055dbe4246462e60077a67b1845696df3947eb1121fe392947f | Medium | detect | Encoded config win_conn_cfg.dat decoded by win_conn.ps1 | 2027-03-22 |
| sha256 | bd200756b4e996a6e7cc63036aa760f9585f252c55a60cab12f29e389b96e0ef | Medium | detect | Cleanup script purge.bat (contents not recovered by Securonix) | 2027-03-22 |
| domain | corecloudfileshare[.]xyz | Medium | detect | Primary token-authenticated C2 server | 2027-03-22 |
| domain | attachmentsharingdrive[.]xyz | Medium | detect | Redundant/failover token-authenticated C2 server | 2027-03-22 |
Non-atomic indicators (behavioral -- not Falcon IOC-manageable, hunt only)
| Type | Value | Confidence | Action | Context |
|---|---|---|---|---|
| http-header | X-Auth-Token: rRRcoksYyhkueVRBv4V6yFDW2ZHRwdpKzJjI2wRo | Medium | hunt | Static, hardcoded auth token on every C2 request. Not rotated per victim -- Beardslee called it a durable, high-confidence network indicator if seen against ANY domain. Hunt via proxy/web-gateway logs, not endpoint IOC import. |
| url-path (x9) | /status /upload /api/client_info /api/client_map /api/register /api/client_online /api/heartbeat /api/c2/poll/ /api/c2/result/ | Medium | hunt | C2 API paths. Combine with the auth token or the two C2 domains for a high-confidence proxy-log hit. |
| path | %LOCALAPPDATA%\WinDefendSvc | Medium | hunt | Staging folder for all four task XML files and both PowerShell modules; name impersonates a Windows Defender service. |
| taskname (x8) | "Local Credential Manager", "Network Audio Service", "Windows Display Manager", "Device Credential Handler" (install); "Network Session Agent", "System Audio Controller", "Host Session Broker", "System Registry Handler" (startup re-exec) | Medium | hunt | Camouflage names only -- expect rotation in future samples. See Q3 TUNING for exclusions. |
| domain (do not block) | irantenders[.]com | Low | enrich (context only) | Legitimate third-party Iranian government tender/contracts portal, abused as a decoy page opened in Chrome during Stage 8. Securonix explicitly does not treat this site as malicious and warns against blocking the whole domain on one decoy-page observation. Use only for lure-theme correlation, never as a block/detect indicator. |
| url (context only) | hxxps://www[.]irantenders[.]com/tender/tot-delete-6e137de.php | Low | enrich (context only) | Specific decoy path opened by the VBS orchestrator. Useful as a process-command-line pivot on hosts already flagged by Q1/Q3; not a blocklist candidate. |
| timestamp pivot | 2024-01-15 08:30:00 | High (as a pivot, not a campaign-start date) | hunt | Fixed anti-forensic backdate applied to 5 artifacts. Securonix explicitly cautions this is fabricated by the attacker and must not be used to infer when the real campaign began. |
Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Windows endpoints (workstations/laptops) | Falcon process creation (ProcessRollup2/SyntheticProcessRollup2) | High | Low -- native Falcon sensor coverage |
| Scheduled Task Scheduler | Falcon ScheduledTaskRegistered | High | Low -- direct Falcon event |
| Startup folder / autostart locations | Falcon process creation + AsepValueUpdate | High | Low |
| DNS / network egress | Falcon DnsRequest, NetworkConnectIP4 | High | Low, unless split-DNS or third-party DoH bypasses the sensor |
| Web proxy / TLS-inspected traffic | Proxy/web-gateway logs (HTTP header + URI path) | Medium | Medium -- requires TLS interception to see the X-Auth-Token header and API paths; not all orgs decrypt |
| Fixed-drive document stores | Falcon FileOpenInfo/FileReadInfo (bulk-read pattern), DLP/CASB egress logging | Medium | Medium -- Falcon endpoint telemetry sees the reads but bulk document-exfil detection is stronger with DLP |
| Wi-Fi credential store | Falcon process creation (netsh command-line auditing) | Medium | Low |
| Windows Event Log (non-Falcon estates / IR triage) | Security 4688/4698/4699/4702, Sysmon Event ID 1/11 | Medium | Medium -- coverage depends on audit-policy configuration; see §7 |
| NTFS filesystem metadata (forensics) | MFT $STANDARD_INFORMATION/$FILE_NAME, USN Journal | Low (IR-only, not real-time) | Medium -- requires offline/forensic tooling, not covered by live EDR telemetry |
ATT&CK Mapping
| Tactic | Technique | Name | Observed Behavior | Query / Control |
|---|---|---|---|---|
| Execution | T1059.005 | Visual Basic | Initial and Startup-folder re-execution via wscript.exe | Q1, Q2 |
| Execution | T1059.001 | PowerShell | Hidden, Base64-encoded PowerShell loads both modules | Q5, Q7, Q8, Q10 |
| Execution | T1059.003 | Windows Command Shell | Batch cleanup (purge.bat) and netsh invocations via cmd.exe | Native hunt (§7) |
| Persistence | T1053.005 | Scheduled Task | Four tasks registered from AppData-rooted XML, camouflaged as system components | Q3 |
| Persistence | T1547.001 | Registry Run Keys / Startup Folder | msdiag.vbs dropped to the Startup folder | Q2 |
| Defense Evasion | T1036.005 | Match Legitimate Name or Location | Task names and WinDefendSvc folder impersonate Windows components | Q3, Q4 |
| Defense Evasion | T1070.006 | Timestomp | 5 artifacts backdated to 2024-01-15 08:30:00 | Q7, Q8; native MFT/USN forensics (§7) |
| Defense Evasion | T1070.004 | File Deletion | purge.bat cleanup routine (contents unrecovered) | Native hunt (§7) |
| Defense Evasion | T1027.004 | Compile After Delivery | Runtime C# compilation via csc.exe | Q6 |
| Discovery | T1057 | Process Discovery | WMI query enumerates/terminates existing loader instances | Q10 |
| Discovery | T1082 | System Information Discovery | System metadata collected for C2 registration | Folded into Q5/Q9 correlation; no standalone query (see §15 gap) |
| Discovery | T1016 | System Network Configuration Discovery | netsh used both for Wi-Fi password theft and network context | Native hunt (§7) |
| Collection | T1119 | Automated Collection | Recursive fixed-drive document scan + real-time FileSystemWatcher | §7 native hunt; Falcon FileOpenInfo baseline recommended |
| Collection | T1005 | Data from Local System | Word/PDF/PPT/Excel/archive harvesting, skips files over 500 MB | §7 native hunt |
| Collection | T1113 | Screen Capture | Screenshot of the primary display | §7 native hunt |
| Collection | T1115 | Clipboard Data | Clipboard theft and clipboard clearing | §7 native hunt |
| Credential Access | T1552.001 | Credentials In Files | Saved Wi-Fi passwords harvested via netsh | Native hunt (§7) |
| Command and Control | T1071.001 | Web Protocols | Dual token-authenticated HTTP(S) C2 channels | Q9; proxy-log hunt (§7) |
| Command and Control | T1105 | Ingress Tool Transfer | C2 supports arbitrary remote command execution / additional payload staging | Q9 |
| Exfiltration | T1041 | Exfiltration Over C2 Channel | Stolen documents uploaded to the C2 /upload endpoint | Q9; proxy-log hunt (§7) |
Native Audit-Log Hunts
These checks do not require Falcon and cover techniques (T1016, T1059.003, T1070.004, T1119, T1005, T1113, T1115, T1552.001) that endpoint process telemetry alone represents only partially. Use them to backstop §8's CQL queries, especially in estates with inconsistent sensor coverage.
- Security Event 4698/4699/4702 (Task Created/Deleted/Updated): filter for the eight known camouflage task names in §4, independent of EDR. Requires "Audit Other Object Access Events" enabled.
- Sysmon Event ID 11 (FileCreate): alert on file creation under
%LOCALAPPDATA%\WinDefendSvc\and the Startup folder for any user, regardless of the process that wrote it. - NTFS timestamp forensics: during IR triage, compare $STANDARD_INFORMATION vs $FILE_NAME timestamps in the MFT and review the USN Journal for the five artifacts. Securonix explicitly calls out that several scripts/data files under a user-writable path sharing the identical historical value 2024-01-15 08:30:00 is itself a high-confidence hunting pivot, independent of any live telemetry.
- Wi-Fi credential theft (T1552.001, T1016): Security Event 4688 command-line auditing for
netsh wlan show profilecombined withkey=clear, launched by a non-interactive parent (wscript.exe, powershell.exe, or cmd.exe) rather than an interactively-typed console session. - Proxy / web-gateway log review (T1071.001, T1016): search for the static
X-Auth-Tokenvalue or any request to the nine listed API paths (§4) against ANY destination, not just the two known domains -- the token does not rotate per victim and is Securonix's strongest standalone network indicator. This is also the only practical way to catch the malware on hosts without endpoint telemetry. - Decoy-page correlation (context only, T1059.003): browser history / process-creation review for
chrome.exelaunched with theirantenders[.]com/tender/tot-delete-6e137de.phpURL as a command-line argument. Use strictly to corroborate a host already flagged by Q1/Q3 -- see §4 for why the domain itself is not blocked. - Cleanup-script invocation (T1070.004): Security Event 4688 / Prefetch / AmCache review for any
cmd.exeorpowershell.execommand line ending inpurge.bat. Contents of the script were never recovered by Securonix, so this hunts the invocation, not the payload. - Bulk document read/collection baseline (T1119, T1005): DLP/CASB or Falcon FileOpenInfo baseline for a single process performing high-volume sequential reads of .docx/.pdf/.pptx/.xlsx/archive files across multiple fixed drives in a short window, especially from a process image outside the user's normal office-suite footprint.
- Screenshot / clipboard abuse (T1113, T1115): where available, EDR or DLP clipboard-monitoring telemetry for a script-host or PowerShell process reading clipboard contents and immediately clearing it -- the clear-after-read pattern is unusual for legitimate tooling.
CrowdStrike LogScale CQL Hunt Queries
Looks for: wscript.exe launching a .vbs script from Desktop, Downloads, or a Temp path -- the TASK#STOMP initial-stage signature regardless of the random filename used.
// HUNT: wscript.exe launching an encoded VBScript staged in a user-writable path // MITRE: T1059.005 // CONF: high FP: low COST: low | REQUIRES: Falcon process telemetry (ProcessRollup2 / SyntheticProcessRollup2) // FALSE POSITIVES: a handful of legacy logon/admin scripts still run .vbs from Desktop in some estates -- verify the script name is high-entropy / random rather than a known internal script. #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^wscript\.exe$/i | CommandLine=/\.vbs/i | CommandLine=/(\\Desktop\\|\\Downloads\\|\\AppData\\Local\\Temp\\)/i | table([ComputerName, UserName, FileName, CommandLine, ParentBaseFileName, SHA256HashData, aid])
Looks for: a second wscript.exe/.vbs launch, this time from the Startup folder, indicating the persistence copy is already re-executing at logon.
// HUNT: Startup-folder VBScript re-execution at logon (persistence copy) // MITRE: T1547.001, T1059.005 // CONF: high FP: low COST: low | REQUIRES: Falcon process telemetry (ProcessRollup2) #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^wscript\.exe$/i | CommandLine=/\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\/i | CommandLine=/\.vbs/i | table([ComputerName, UserName, FileName, CommandLine, ParentBaseFileName, SHA256HashData, aid])
Looks for: a scheduled task registered under one of the eight known camouflage names whose executable resolves to a user-writable AppData\Local path. FP: some legitimate per-user updaters also live under AppData\Local -- see TUNING in the card.
// HUNT: Scheduled task registered from an AppData-rooted XML using a camouflaged system-component name // MITRE: T1053.005, T1036.005 // CONF: high FP: medium COST: low | REQUIRES: Falcon ScheduledTaskRegistered telemetry // FALSE POSITIVES: a small number of legitimate per-user updaters (browser/cloud-sync agents) also register scheduled tasks with executables under AppData\Local -- signed, well-known vendor paths cause most of the noise here. // TUNING: exclude TaskExecutable paths signed by trusted vendors (Google\Update, Microsoft\Edge, OneDrive, Dropbox, Adobe) and cross-check the task's referenced binary hash against the known-bad hash table in Section 4 before escalating. #event_simpleName=ScheduledTaskRegistered | TaskName=/^(Local Credential Manager|Network Audio Service|Windows Display Manager|Device Credential Handler|Network Session Agent|System Audio Controller|Host Session Broker|System Registry Handler)$/i | TaskExecutable=/\\AppData\\Local\\/i | table([ComputerName, UserName, TaskName, TaskExecutable, TaskAuthor, aid])
Looks for: any process rooted in a WinDefendSvc-style AppData staging folder. FP: a small number of legitimate security agents use similarly-named folders -- see TUNING in the card.
// HUNT: Process activity rooted in a Defender-impersonating AppData staging folder // MITRE: T1036.005 // CONF: high FP: medium COST: low | REQUIRES: Falcon process telemetry (ProcessRollup2) // FALSE POSITIVES: some legitimate third-party security agents also stage components under an AppData\Local\*Defend*/*Svc* style folder name -- verify against your EDR/AV vendor's real installer paths first. // TUNING: exclude known-good AV/EDR agent install paths (check ImageFileName against your endpoint-security vendor's documented install directory) before treating a WinDefendSvc-style hit as malicious. #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^(wscript\.exe|powershell\.exe|csc\.exe)$/i | ImageFileName=/\\AppData\\Local\\WinDefendSvc\\/i | table([ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, aid])
Looks for: hidden, -enc PowerShell that also references a .dat file -- the loader-stage signature for both hidden modules. FP: RMM/deployment tooling also uses hidden encoded PowerShell -- see TUNING in the card.
// HUNT: Hidden, Base64-encoded PowerShell loading a .dat configuration payload // MITRE: T1059.001, T1027.004 // CONF: high FP: medium COST: low | REQUIRES: Falcon process telemetry (ProcessRollup2) // FALSE POSITIVES: RMM agents and some deployment/orchestration tooling also launch hidden, Base64-encoded PowerShell -- exclude known RMM binary paths and correlate with the WinDefendSvc parent staging folder from Q4 before escalating. // TUNING: exclude signed RMM/agent executables (ConnectWise, NinjaOne, Datto, etc.) and require CommandLine to also reference a .dat file before alerting at high severity. #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^powershell\.exe$/i | CommandLine=/-[Ee][Nn][Cc]/i | CommandLine=/\.dat/i | table([ComputerName, UserName, FileName, CommandLine, ParentBaseFileName, ParentCommandLine, aid])
Looks for: csc.exe spawned directly by powershell.exe -- the runtime C# compilation stage. FP: developer/build hosts do this legitimately -- see TUNING in the card.
// HUNT: Runtime C# compilation via csc.exe spawned directly from PowerShell // MITRE: T1027.004, T1059.001 // CONF: high FP: medium COST: low | REQUIRES: Falcon process telemetry (ProcessRollup2) // FALSE POSITIVES: developer workstations and CI/build hosts legitimately spawn csc.exe from PowerShell-driven build scripts (MSBuild, module publishing pipelines). // TUNING: exclude hosts tagged as developer/build endpoints, and exclude sessions where ParentCommandLine references MSBuild.exe or a known internal build-tooling path. #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^csc\.exe$/i | ParentBaseFileName=/^powershell\.exe$/i | table([ComputerName, UserName, FileName, CommandLine, ParentBaseFileName, ParentCommandLine, aid])
Looks for: PowerShell invoking SetLastWriteTime, a generic timestomping signal. FP: backup/restore/sync tooling can trigger this -- see TUNING in the card.
// HUNT: PowerShell command line invoking LastWriteTime backdating (timestomping) // MITRE: T1070.006 // CONF: medium FP: medium COST: low | REQUIRES: Falcon process telemetry (ProcessRollup2) // FALSE POSITIVES: a small number of backup, sync, and file-restore utilities legitimately reset LastWriteTime during recovery operations. // TUNING: exclude known backup/restore/sync tooling (Robocopy /COPY:DAT workflows, backup-agent restore jobs) and prioritize hits where the same host also matches Q1-Q6 in the same session. #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^powershell\.exe$/i | CommandLine=/SetLastWriteTime/i | table([ComputerName, UserName, FileName, CommandLine, ParentBaseFileName, aid])
Looks for: the same timestomping syntax as Q7, scoped to the literal TASK#STOMP backdate value 2024-01-15 -- a near-unique, high-confidence pivot.
// HUNT: High-confidence pivot on the TASK#STOMP anti-forensic backdate value (2024-01-15 08:30:00) // MITRE: T1070.006 // CONF: high FP: low COST: low | REQUIRES: Falcon process telemetry (ProcessRollup2) #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^powershell\.exe$/i | CommandLine=/2024-01-15/ | CommandLine=/SetLastWriteTime|LastWriteTime/i | table([ComputerName, UserName, FileName, CommandLine, ParentBaseFileName, aid])
Looks for: DNS resolution of either named C2 domain -- a direct, low-noise network signal.
// HUNT: DNS resolution of either TASK#STOMP token-authenticated C2 domain // MITRE: T1071.001, T1105, T1041 // CONF: high FP: low COST: low | REQUIRES: Falcon DNS telemetry (DnsRequest) #event_simpleName=DnsRequest | DomainName=/^(corecloudfileshare\.xyz|attachmentsharingdrive\.xyz)$/i | table([ComputerName, UserName, DomainName, aid])
Looks for: WMI-based process enumeration/termination that references the loader's own module-name fragments. FP: WMI process queries are common in admin tooling -- see TUNING in the card.
// HUNT: WMI process enumeration/termination targeting the loader's own module names before relaunch // MITRE: T1057 // CONF: medium FP: medium COST: low | REQUIRES: Falcon process telemetry (ProcessRollup2) // FALSE POSITIVES: WMI-based process enumeration and termination via Get-WmiObject/Get-CimInstance is common in legitimate monitoring and software-deployment scripts. // TUNING: require the CommandLine to reference Win32_Process together with one of the loader's own module-name fragments (sys_loader, win_conn, sysloader, winconn) before treating this as a TASK#STOMP indicator rather than generic admin tooling. #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^powershell\.exe$/i | CommandLine=/(Get-WmiObject|Get-CimInstance)/i | CommandLine=/Win32_Process/i | CommandLine=/(sys_loader|win_conn|sysloader|winconn)/i | table([ComputerName, UserName, FileName, CommandLine, ParentBaseFileName, aid])
CrowdStrike Custom IOA Recommendations
Given the single-machine provenance (§2, §4), every recommendation below deploys in Detect / Alert-only mode first. None should be promoted to Prevent/Block until a second independent sample or corroborating source confirms the pattern is stable across more than one host.
| IOA Name | Detection Pattern | Exclusions | Deployment Path |
|---|---|---|---|
| Camouflaged Scheduled Task from AppData XML | ScheduledTaskRegistered where TaskName matches one of the 8 known names AND TaskExecutable path contains \AppData\Local\ (source: Q3) | Signed vendor updater paths (Google\Update, Microsoft\Edge, OneDrive, Dropbox, Adobe) | Custom IOA rule group, Detect-only → 14-day monitor → re-evaluate for Prevent only after a second corroborating source is published |
| wscript.exe VBS Launch from User-Writable Path | ProcessRollup2 where FileName=wscript.exe AND CommandLine matches *.vbs AND path is Desktop/Downloads/Temp (source: Q1) | Known internal logon-script VBS names, if any exist in your estate (allowlist by hash, not by path) | Custom IOA rule group, Detect-only → 14-day monitor |
| Runtime C# Compilation from PowerShell | ProcessRollup2 where FileName=csc.exe AND ParentBaseFileName=powershell.exe (source: Q6) | Tagged developer/build hosts; ParentCommandLine referencing MSBuild.exe | Custom IOA rule group, Detect-only → 14-day monitor -- high-value even in Detect mode since it is rare fleet-wide |
Machine-Readable IOC Appendix
type,value,action,severity,expiration,description,tags sha256,5251098838fab2f3192307cac99ad2d3a71b55ba1f256412d43a9dfb3b93ac58,detect,high,2027-03-22,TASK#STOMP VBScript orchestrator (95c9050t66.vbs / msdiag.vbs),campaign:TASKSTOMP sha256,7a9e7b4c2f75f7de03838f5c9589148cdbefb76200ea3cf2d6f1a2288c302493,detect,high,2027-03-22,TASK#STOMP scheduled-task XML (task.xml),campaign:TASKSTOMP sha256,ff12c194128d0733434ce1580691bfde5896f14ba9f360c0f6c3a622eed24312,detect,high,2027-03-22,TASK#STOMP scheduled-task XML (task2.xml),campaign:TASKSTOMP sha256,e46111264ebd91e80bbad85141d254930354faa0f15d3bbfaf4826adf5a53c8d,detect,high,2027-03-22,TASK#STOMP scheduled-task XML (task3.xml),campaign:TASKSTOMP sha256,335d19f4e757e0c36c9ef1cb4638e151aac041b7814e3eb8bda6f78ff7011f32,detect,high,2027-03-22,TASK#STOMP scheduled-task XML (task4.xml),campaign:TASKSTOMP sha256,103b4d4a666bc0a89c10c9df55f54f4be5fa111e8429c37ae14fa8f16cb50fe8,detect,high,2027-03-22,TASK#STOMP PowerShell module (sys_loader.ps1),campaign:TASKSTOMP sha256,02ba7c982b68ec8f5a1cb47c6f3969f3f2f38ea9b4ebb8833d1b8b0ba2ab1407,detect,high,2027-03-22,TASK#STOMP encoded config (diag_pack.dat),campaign:TASKSTOMP sha256,8f448080cec5cba2f0ba6a960bc3425a2d99a6767464f581d13476985eaa4a2e,detect,high,2027-03-22,TASK#STOMP PowerShell module (win_conn.ps1),campaign:TASKSTOMP sha256,41231e7f5db49055dbe4246462e60077a67b1845696df3947eb1121fe392947f,detect,high,2027-03-22,TASK#STOMP encoded config (win_conn_cfg.dat),campaign:TASKSTOMP sha256,bd200756b4e996a6e7cc63036aa760f9585f252c55a60cab12f29e389b96e0ef,detect,high,2027-03-22,TASK#STOMP cleanup script (purge.bat),campaign:TASKSTOMP domain,corecloudfileshare.xyz,detect,high,2027-03-22,TASK#STOMP primary C2,campaign:TASKSTOMP domain,attachmentsharingdrive.xyz,detect,high,2027-03-22,TASK#STOMP redundant C2,campaign:TASKSTOMP
# TASK#STOMP behavioral signatures -- hunt/enrich only, not Falcon-importable IOC types process: wscript.exe -> CommandLine matches *.vbs, launched from Desktop|Downloads|AppData\Local\Temp|Startup process: powershell.exe -> CommandLine matches -enc AND *.dat (hidden loader-stage pattern) process: csc.exe -> ParentBaseFileName = powershell.exe (runtime C# compilation, T1027.004) process: powershell.exe -> CommandLine matches SetLastWriteTime AND 2024-01-15 08:30:00 (timestomp pivot) path: %LOCALAPPDATA%\WinDefendSvc\ (staging folder for task*.xml, sys_loader.ps1, win_conn.ps1) scheduled-task names (install): Local Credential Manager | Network Audio Service | Windows Display Manager | Device Credential Handler scheduled-task names (startup re-exec): Network Session Agent | System Audio Controller | Host Session Broker | System Registry Handler http-header: X-Auth-Token: rRRcoksYyhkueVRBv4V6yFDW2ZHRwdpKzJjI2wRo (static, not rotated per victim) http-paths: /status /upload /api/client_info /api/client_map /api/register /api/client_online /api/heartbeat /api/c2/poll/ /api/c2/result/
# TASK#STOMP named components -> mapped SHA256 (see grab-csv for full detail) 95c9050t66.vbs 5251098838fab2f3192307cac99ad2d3a71b55ba1f256412d43a9dfb3b93ac58 Stage 1 -- Desktop VBScript orchestrator msdiag.vbs 5251098838fab2f3192307cac99ad2d3a71b55ba1f256412d43a9dfb3b93ac58 Stage 3 -- Startup-folder persistence copy (same content/hash as 95c9050t66.vbs) sys_loader.ps1 103b4d4a666bc0a89c10c9df55f54f4be5fa111e8429c37ae14fa8f16cb50fe8 Stage 6 -- document theft / surveillance module diag_pack.dat 02ba7c982b68ec8f5a1cb47c6f3969f3f2f38ea9b4ebb8833d1b8b0ba2ab1407 Encoded config decoded by sys_loader.ps1 win_conn.ps1 8f448080cec5cba2f0ba6a960bc3425a2d99a6767464f581d13476985eaa4a2e Stage 6 -- secondary C2 / command-execution module win_conn_cfg.dat 41231e7f5db49055dbe4246462e60077a67b1845696df3947eb1121fe392947f Encoded config decoded by win_conn.ps1 purge.bat bd200756b4e996a6e7cc63036aa760f9585f252c55a60cab12f29e389b96e0ef Stage 9 -- cleanup routine, contents not recovered
# Context-only -- do NOT add to a block/deny list on this evidence alone
domain: irantenders[.]com
-- legitimate Iranian government tender/contracts portal; Securonix explicitly
states it is not malicious and warns against blocking the whole domain.
url (containment-eligible per Securonix): hxxps://www[.]irantenders[.]com/tender/tot-delete-6e137de.php
-- the SPECIFIC decoy path may be blocked/removed during active containment;
do not extend that action to the parent domain.
# Patch / configuration audit checklist (run before deploying Section 12 hardening)
Confirm Windows Script Host (WSH) execution policy / current restriction state
Confirm PowerShell execution policy and Script Block Logging (Event ID 4104) status
Confirm ASR rule "Block execution of potentially obfuscated scripts" (block/audit/off)
Confirm mail-gateway handling of .iso/.img/.vbs attachments
Confirm Task Scheduler audit logging (4698/4699/4702) is enabled
Detection Validation Gates
| Gate | Requirement | Status Before Promotion |
|---|---|---|
| Telemetry ready | ProcessRollup2/SyntheticProcessRollup2, ScheduledTaskRegistered, and DnsRequest confirmed flowing for the target host group | Verify with a 10-minute head(10) run of Q1 and Q3 before relying on either |
| Benign baseline | Q3-Q7, Q10 (FP medium) run in Detect-only mode for a minimum 14-day window against production traffic | Not yet run against a live tenant -- pending deployment |
| Positive tests | Each query validated against at least one known-bad sample: the published hash set (§4/§10) or a lab replay of the attack chain | Validate field names and regex behavior in a non-production Falcon workspace before relying on results in an active incident |
| Promotion criteria | Zero false positives across the 14-day baseline AND a second independent source corroborates the pattern beyond this single Securonix sample | Not met -- single-source pack; hold all queries at Detect/Hunt, do not promote to Prevent (§9) |
Validation gates fold in the coverage-map caveats from §15: this pack should be re-scored once a second corroborating source or additional infected-host telemetry becomes available.
Hardening -- Tiered & Deployable
Restrict Windows Script Host for standard users (M1042, M1038). Block wscript.exe/cscript.exe from executing scripts located in Desktop, Downloads, and Temp for non-administrative accounts, via an AppLocker or WDAC rule, or Group Policy WSH restriction. Cited directly by Securonix/Beardslee as the top containment recommendation. Verify: Get-AppLockerPolicy -Effective | Select-Object -ExpandProperty RuleCollections shows the WSH deny rule active.
Enable ASR rule "Block execution of potentially obfuscated scripts" (M1040). CIS Microsoft Windows 11 Benchmark and the MS Security Baseline both recommend this ASR rule in Block mode. Verify: Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids includes 5beb7efe-fd9a-4556-801d-275e5ffc04cc with action Block.
Block the two confirmed C2 domains at the DNS/proxy layer (M1037). corecloudfileshare[.]xyz and attachmentsharingdrive[.]xyz only -- do not extend to irantenders[.]com (§4). Verify: a DNS sinkhole/RPZ query against both domains returns NXDOMAIN or the sinkhole address.
Enable PowerShell Script Block Logging and Constrained Language Mode for standard users (M1042, M1045). Captures decoded content of Base64/-enc invocations (Q5, Q7, Q8) even if a future variant changes filenames. Verify: Event ID 4104 is being generated in the Microsoft-Windows-PowerShell/Operational log; $ExecutionContext.SessionState.LanguageMode returns ConstrainedLanguage for standard users.
Strip or sandbox ISO/IMG/VBS attachments at the mail gateway (M1031, M1049). Beardslee's best estimate for the delivery vector is a phishing email carrying a ZIP or ISO/IMG attachment containing the script -- this is the most likely point to stop the chain before Stage 1. Verify: send a benign test message with a .vbs-in-.iso attachment and confirm the gateway strips or detonates it.
Deploy Custom IOA detections from §9 in Detect-only mode. 14-day monitor before any promotion decision, per the single-source validation gate in §11.
Application control (WDAC) for csc.exe and the .NET compiler toolchain on non-developer endpoints (M1038). Runtime C# compilation via csc.exe (T1027.004, Q6) is rare outside build/dev hosts; a WDAC policy denying csc.exe execution fleet-wide except on a tagged developer-host allowlist closes this stage entirely. Verify: citool.exe --policy-list (or legacy Get-CIPolicy) shows the csc.exe deny rule scoped to non-developer device groups.
DLP/CASB bulk-document-egress monitoring (M1057). Addresses T1119/T1005 -- the malware's core objective -- independent of any single detection rule catching the loader stage. Verify: a DLP test policy flags a simulated bulk read/upload of 50+ Office documents from a single endpoint within a short window.
Deployable Playbooks
Playbook 1 -- Restrict Windows Script Host for standard users
# Playbook 1 -- Restrict Windows Script Host for standard users # Prerequisites: Domain Admin or local GPO edit rights; AppLocker/WDAC already # enabled in at least Audit mode on target OUs. # Reboot required: No (GPO refresh via gpupdate /force is sufficient) # Rollback: Set the WSH rule action back to "Not Configured" / delete the # AppLocker rule, then gpupdate /force. No data loss; scripts that # were blocked simply become runnable again. # 1. Create/verify an AppLocker Script Rule collection is in Enforce mode Set-AppLockerPolicy -XmlPolicy "C:\Policies\WSH-Restrict.xml" -Merge # 2. Deny .vbs/.js execution from user-writable roots for the Everyone group, # excluding a signed-script allowlist if one exists in your estate # (Author via Local Security Policy > Application Control Policies > AppLocker # > Script Rules > New Rule > Path: %OSDRIVE%\Users\*\Desktop\*; # %OSDRIVE%\Users\*\Downloads\*; %OSDRIVE%\Users\*\AppData\Local\Temp\*) # 3. Push via GPO and force refresh on a pilot OU first gpupdate /target:computer /force # 4. Verify enforcement Get-AppLockerPolicy -Effective | Select-Object -ExpandProperty RuleCollections
Playbook 2 -- Enable ASR rule: Block execution of potentially obfuscated scripts
# Playbook 2 -- Enable ASR rule: Block execution of potentially obfuscated scripts # Prerequisites: Microsoft Defender Antivirus active (or Defender in passive # mode alongside a third-party AV, ASR rules still apply); # pilot ring identified before fleet-wide Block. # Reboot required: No # Rollback: Re-run with -AttackSurfaceReductionRules_Actions AuditMode (or # Disabled) for the same rule ID to revert; takes effect immediately, # no reboot required. # 1. Pilot in Audit mode first Set-MpPreference -AttackSurfaceReductionRules_Ids 5beb7efe-fd9a-4556-801d-275e5ffc04cc -AttackSurfaceReductionRules_Actions AuditMode # 2. Review Defender ASR audit events (Event ID 1122) for 1-2 weeks for FPs # 3. Promote to Block once the pilot ring shows zero unexpected blocks Set-MpPreference -AttackSurfaceReductionRules_Ids 5beb7efe-fd9a-4556-801d-275e5ffc04cc -AttackSurfaceReductionRules_Actions Enabled # 4. Verify Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids
Playbook 3 -- Block confirmed C2 domains (DNS/proxy)
# Playbook 3 -- Block confirmed C2 domains at DNS / proxy (never irantenders[.]com) # Prerequisites: Access to the DNS sinkhole / RPZ zone or secure web gateway # policy console. # Reboot required: No # Rollback: Remove the two RPZ/deny entries; propagation is immediate to a # few minutes depending on TTL/cache. # 1. Add both confirmed C2 domains to your DNS RPZ / sinkhole zone corecloudfileshare.xyz CNAME sinkhole.internal. attachmentsharingdrive.xyz CNAME sinkhole.internal. # 2. Mirror at the secure web gateway / proxy as an explicit deny category # 3. DO NOT add irantenders.com or any subdomain -- Securonix explicitly # cautions against blocking that domain on this evidence (see Section 4). # If containment requires action, remove only the specific decoy path: # hxxps://www[.]irantenders[.]com/tender/tot-delete-6e137de.php # 4. Verify nslookup corecloudfileshare.xyz nslookup attachmentsharingdrive.xyz
Containment Runbook
Phase order follows Securonix/Beardslee's own responder guidance verbatim: preserve evidence first, then stop, then remove every persistence mechanism in one coordinated pass, then block network, then verify after reboot.
| Phase | Actions | Owner | Evidence to Preserve |
|---|---|---|---|
| 1 -- Isolate | Network-isolate the host in Falcon (contain). Do not power off -- volatile memory and running-process state matter for confirming which of the two PowerShell modules is active. | IR / SOC Analyst | Falcon process tree, network-connection table, running scheduled-task list |
| 2 -- Preserve | Before touching anything, save copies of the malware's files (95c9050t66.vbs, msdiag.vbs, all four task*.xml, sys_loader.ps1, win_conn.ps1, diag_pack.dat, win_conn_cfg.dat, purge.bat) and the scheduled-task XML definitions for analysis. | IR Analyst / Forensics | File hashes, MFT $STANDARD_INFORMATION/$FILE_NAME timestamps, USN Journal entries around the intrusion window |
| 3 -- Stop | Stop the running scripts and both hidden PowerShell processes. | IR Analyst | Process-termination timestamps, final CommandLine values |
| 4 -- Eradicate | In one coordinated pass, remove all four scheduled tasks the malware created, the Startup-folder copy (msdiag.vbs), and the staged files under %LOCALAPPDATA%\WinDefendSvc. Removing only one persistence mechanism at a time risks the others silently rebuilding the infection. | IR Analyst / Endpoint Engineering | Before/after scheduled-task export, Startup-folder listing, WinDefendSvc folder contents |
| 5 -- Block | Block the two confirmed C2 servers (corecloudfileshare[.]xyz, attachmentsharingdrive[.]xyz) at DNS/proxy. Do not block irantenders[.]com; the specific decoy URL path may be removed/blocked during active containment per Securonix guidance (§4). | Network / Security Engineering | Firewall/proxy change ticket, DNS RPZ entry |
| 6 -- Recover | Reboot the host, then verify none of the malware's scripts or scheduled tasks start running again. Re-scan for the WinDefendSvc folder and the eight camouflage task names. | IR Analyst | Post-reboot scheduled-task list, process tree, and a clean run of Q1-Q10 against the host |
| 7 -- Investigate credential/document exposure | Given confirmed clipboard, Wi-Fi password, and document theft capability, rotate any credentials exposed via saved Wi-Fi profiles and assess which documents may have been exfiltrated before containment. | IR Lead / Data Owner | List of documents matching the theft criteria (Word/PDF/PPT/Excel/archives, recently modified, under 500 MB) present on the host at time of compromise |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1059.005 / T1547.001 | VBS initial + Startup re-execution | Q1, Q2 | Candidate (§9) | Good |
| T1053.005 / T1036.005 | Camouflaged scheduled tasks | Q3, Q4 | Candidate (§9) | Good |
| T1059.001 / T1027.004 | Hidden PowerShell loaders + C# compile | Q5, Q6 | Candidate (§9, Q6) | Good |
| T1070.006 | Timestomping to fixed date | Q7, Q8 | No | Partial -- CQL relies on command-line syntax; confirm with MFT/USN forensics (§7) for full confidence |
| T1057 | WMI loader-instance termination | Q10 | No | Partial -- generic WMI-query pattern, FP medium |
| T1071.001 / T1105 / T1041 | Dual-domain C2 + exfil | Q9 | No | Good for DNS; Partial for the auth-token/API-path layer, which needs proxy logs (§7), not endpoint CQL |
| T1552.001 / T1016 | Wi-Fi password theft via netsh | None | No | Gap -- no CQL query; covered only by the native Event 4688 hunt in §7 |
| T1119 / T1005 | Automated document collection | None | No | Gap -- Falcon endpoint process telemetry does not cleanly isolate bulk file reads; requires DLP/CASB baseline (§7, §12) |
| T1113 / T1115 | Screenshot / clipboard theft | None | No | Gap -- no reliable Falcon endpoint event for this behavior class; native hunt only (§7) |
| T1082 | System information discovery | None (folded into Q5/Q9) | No | Partial -- inferred from loader/C2 activity, not independently queried |
| T1070.004 / T1059.003 | purge.bat cleanup invocation | None | No | Gap -- script contents never recovered by Securonix; only the invocation is huntable (§7) |
| Initial access vector | Unconfirmed -- suspected phishing (ZIP/ISO/IMG) | None | No | Gap -- Securonix could not confirm delivery from the recovered sample; mail-gateway hardening in §12 is precautionary, not evidence-driven |
Validation gates (§11): telemetry-readiness and positive-test checks are pending live-tenant deployment; the 14-day benign-baseline window has not yet started as of pack publication (2026-09-22).
Hunt Summary Ticket
TITLE: TASK#STOMP -- VBS-to-PowerShell Windows Backdoor Hunt
SEVERITY: HIGH (single-source -- do not treat as confirmed widespread campaign)
SCOPE: Windows endpoints; all hosts with Falcon sensor coverage
HYPOTHESIS: H1-H10 (Section 3) -- wscript.exe VBS launch, AppData-rooted
scheduled-task persistence, hidden PowerShell loaders, runtime
C# compilation, timestomping, and dual-domain C2 beaconing
together form a detectable behavioral chain independent of any
single filename or task name.
QUERIES: Q1-Q10 (Section 8); Custom IOA candidates in Section 9
DO FIRST: 1. Run Q1 and Q9 fleet-wide (highest confidence, lowest FP)
2. Run Q3 scoped to a pilot OU before fleet-wide due to FP:medium
3. Cross-reference any Q1/Q3/Q9 hit against the hash table in
Section 4/10 and the WinDefendSvc path in Section 7
FINDINGS: [populate after hunt execution -- no findings at time of publish]
GAPS: Initial-access vector unconfirmed; T1552.001/T1119/T1005/T1113/
T1115/T1070.004 have no CQL coverage, native hunts only
(Section 7, Section 15)
ACTIONS: Deploy Q1/Q3/Q6/Q9 as Custom IOAs in Detect-only mode (Section 9);
deploy Immediate-tier hardening (Section 12); do NOT block
irantenders[.]com (Section 4)
OWNER: HuntPack
VERSION: v0.1 -- 2026-09-22
Changelog
References
| Tier | Source | Used For | Access Date |
|---|---|---|---|
| 1 -- Primary | Securonix Threat Research -- "TASK#STOMP: VBS-PowerShell Backdoor Using Rotating Scheduled Tasks, Timestomping, and Runtime C# Compilation for Document Theft and Remote Access" (Akshay Gaikwad, Aaron Beardslee) | Full attack chain, all 10 file hashes, C2 domains/token/API paths, MITRE mapping, vendor hunting queries | 2026-09-22 |
| 2 -- Derivative | The Hacker News -- "TASK#STOMP PowerShell Backdoor Steals Documents, Wi-Fi Passwords, and Clipboard Data" (Ravie Lakshmanan) | Corroboration, filename-randomization observation | 2026-09-22 |
| 2 -- Derivative | Help Net Security -- "The TASK#STOMP Windows backdoor takes Wi-Fi passwords, screenshots, and business files" (Mirko Zorz, interview with Aaron Beardslee) | Single-machine/no-attribution statements, watchdog-bug detail, operator-tier assessment, responder containment order | 2026-09-22 |
| 3 -- Derivative, reduced-confidence capture | CyberPress -- "TASK#STOMP Deploys Dual C2" | Secondary corroboration only; direct HTTP fetch blocked (403), captured via page-text extraction | 2026-09-22 |
All four snapshots were checked for embedded instructions directed at an AI agent (prompt injection). None were found in any of the four sources.
Generated 2026-09-22 · HuntPack v0.1 · TASK#STOMP PowerShell Backdoor Hunt · single-source pack, see §2/§4