VulcanRAT207.A: WhatsApp-Delivered BYOVD Intrusion Chain

Statement.exe lure reportedly via WhatsApp · PoolParty Variant 7 into Task Scheduler · GoFly64.sys kills Baidu security processes · Vulkan DLL side-loading SYSTEM task · WebSocket RAT
Threat
VulcanRAT207.A (Morphisec name) / GoFly64.sys BYOVD / Vulkan side-load
Severity
HIGH SYSTEM RAT with security-product termination
Type
RAT, BYOVD, DLL side-loading, WebSocket C2
Initial Access
Financial-document lure Statement.exe, reportedly over WhatsApp (not confirmed)
Version
v0.1 · 2026-10-09
Author
HuntPack
Confidence
HIGH behavior (primary vendor plus catalogue); MEDIUM campaign IOCs (single source)
01

Executive Summary

Attacker objective: remote, interactive control of Windows endpoints with SYSTEM authority, after first blinding the endpoint security products installed on them. Morphisec (Shmuel Uzan, published 2026-10-07) traces a multi-stage intrusion that starts with a financial-document lure, reportedly delivered over WhatsApp as Statement.exe inside a ZIP, and ends in a WebSocket remote access trojan that Morphisec tracks as VulcanRAT207.A. The Hacker News ThreatsDay bulletin of the same week summarizes the report.

How it works: the loader screens the host, attempts elevation, then uses PoolParty Variant 7 to place a downloader inside the Task Scheduler service host without CreateRemoteThread. Everything that follows inherits that LocalSystem token. A deployment DLL then does three things: it installs the signed GoFly64.sys driver and sends it the process IDs of Baidu security processes (bdservicehost.exe, bduserhost.exe) so the driver kills them from ring 0; it starts the RAT directly from memory; and it writes a persistent Vulkan DLL side-loading package (vulkaninfo-64.exe, vulkan-1.dll, vulkan-1.bin) to C:\Program Files\Common Files with a SYSTEM scheduled task named USOPrivate Kit or USOPrivate to bring the RAT back.

Commodity tooling, handled accordingly: GoFly64.sys is a legitimately Authenticode-signed Chinese network-filter driver, catalogued on LOLDrivers and abused by unrelated actors. vulkaninfo-64.exe is a genuine Intel-signed Khronos build, and its hash is shared with a separate package (port 1234) that this pack does not cover. Neither is a unique marker of this campaign, so both ship detect only, matched by behavior and placement rather than by identity.

Defender angle: the durable signals are the component boundaries Morphisec recommends correlating: a Vulkan host sitting in Common Files, a USOPrivate SYSTEM task, a tp_-named driver staged under System32\drivers, and the VulkanInfo process making network connections or spawning children. The hard parts are blind to a host sensor: the PoolParty injection into Task Scheduler, the memory-resident RAT, the GoFly IOCTL itself, and the Windows Filtering Platform filters. The Coverage Map flags each as a gap.

Scope: this pack covers the Statement.exe and VulcanRAT207.A chain only. Morphisec describes a related port 1234 package leading to RomulusLoader and a different RAT as a separate follow-up article. No RomulusLoader indicator is shipped here.

Defender priority: run Q1, Q3, Q4, Q5, Q6 and Q12 over 30 days first (near-zero FP, no indicator dependency). Run Q13 for host-level correlation. Then enable the ASR rule that blocks abuse of exploited vulnerable signed drivers in audit mode (section 12, I1).

02

Source Review & Web Hunter Notes

TierSourceKey findingCarry forward
1Morphisec: From WhatsApp to SYSTEM, Inside the VulcanRAT207.A Intrusion Chain (2026-10-07)Primary source. Eight-stage chain, GoFly64.sys BYOVD analysis, Vulkan side-load persistence, RAT capabilities, IOC table.Yes. Source of every atomic IOC and every campaign behavior. Single vendor, so every indicator ships detect. Snapshot 01-morphisec-vulcanrat207.txt.
2The Hacker News: ThreatsDay bulletin, section "VulcanRAT207.A" (October 2026)Secondary coverage quoting Morphisec: Statement.exe lure reportedly via WhatsApp, loader screening, PoolParty Variant 7, GoFly driver used to terminate Baidu security processes, Vulkan DLL side-loading task, WebSocket RAT.Partial. Corroborates the behavior; it republishes Morphisec and adds no indicators, so it is not an independent source for any IOC. Snapshot 02-thn-threatsday.txt.
1LOLDrivers: GoFly64.sysIndependent catalogue entry: WFP network filter driver signed by a Chinese company, IOCTL 0x12227A terminates any process by PID via ZwTerminateProcess, same SHA-256, aliases PandaSpeed64.sys and drv_02581.sys, heavy abuse in the wild.Yes. Second source for GoFly64.sys, its aliases and its commodity status. Snapshot 03-loldrivers-gofly64.txt.
1Microsoft Learn: Microsoft recommended driver block rulesVulnerable driver blocklist, App Control deny policy, Event ID 3099 verification, ASR rule to stop vulnerable signed drivers being written.Yes. Authority for hardening I1 and I2. Snapshot 04-ms-driver-blocklist.txt.
1Microsoft Learn: Attack surface reduction rules referenceRule "Block abuse of exploited vulnerable signed drivers", GUID 56a863a9-875e-4185-98a7-b882c64b5ce5, audit action types.Yes. Authority for hardening I1. Snapshot 05-ms-asr-rules-reference.txt.
1MITRE ATT&CK: T1574.001, T1053.005, T1068, T1685, T1055, T1543.003Technique definitions and mitigation M-codes for the mapping and hardening tiers.Yes. Snapshots 06 to 11.

Web Hunter decisions and discrepancies

  • Delivery channel is hedged by the source. Morphisec says the lure "reportedly" arrived over WhatsApp as a ZIP attachment. This pack repeats the hedge and does not state WhatsApp delivery as confirmed.
  • The Hacker News adds no indicators. Its section is a paraphrase of Morphisec, so no IOC counts as two-source on its strength. The only item with a genuine second source is GoFly64.sys (LOLDrivers), and it is commodity tooling, so it ships hunt only.
  • The VulkanInfo host hash is shared. Morphisec states the hash is shared with the separate port 1234 package. It identifies a stock Intel-signed binary, so it is used only together with SYSTEM context (Q2) and is not imported as an IOC.
  • Unverified blocklist status. No fetched source states whether GoFly64.sys is on Microsoft's vulnerable driver blocklist. The hardening section therefore says to test it in audit mode rather than assuming coverage.
  • HVCI wording. LOLDrivers records the sample as HVCI FALSE with no sample confirmed loading despite HVCI. The pack treats that as encouraging but unproven for your fleet.
  • Related cluster excluded. The port 1234 package and RomulusLoader are explicitly out of scope; no indicator for them is shipped.
  • Page extras ignored. The Morphisec and Hacker News pages carry navigation, promotional and unrelated-news text (including a bulletin item about prompt injection in phishing emails). None of it was addressed to this agent, none asked for any action, and none was used.
  • No injected instructions. Every fetched page was scanned for text directed at an automated agent. None was found.
03

Hunt Brief & Attack Chain

Hypotheses (ordered by fidelity)

IDHypothesisMITREFalcon eventsConfidence
H1The Vulkan side-load host runs from, or is written to, Program Files\Common Files.T1574.001, T1036.005ProcessRollup2, PeFileWrittenHIGH
H2A scheduled task named like USOPrivate, or that launches the Vulkan host, is registered.T1053.005ScheduledTaskRegisteredHIGH
H3A PE is staged as System32\drivers\tp_<digits>.tmp and a kernel service is created from it.T1068, T1543.003PeFileWritten, CreateServiceHIGH
H4The VulkanInfo host process makes network connections or spawns children (the RAT runs inside it).T1071.001, T1059.003NetworkConnectIP4, ProcessRollup2HIGH
H5Campaign-specific hashes or the C2 address appear in execution, file or network telemetry.T1204.002, T1071.001ProcessRollup2, NetworkConnectIP4HIGH
H6The GoFly64.sys vulnerable driver is present or loaded (commodity signal, context required).T1068PeFileWritten, NewExecutableWrittenMEDIUM
H7VulkanInfo runs as SYSTEM outside a Vulkan SDK folder.T1574.001, T1053.005ProcessRollup2MEDIUM
H8Two or more of the above signals co-occur on one host.multiplemultipleHIGH

Attack chain

StepBehaviorTelemetryQuery
1 DeliveryFinancial-document lure Statement.exe, reportedly sent over WhatsApp inside a ZIP; NRV2E-compressed wrapper unpacks in memoryHash only if written (PeFileWritten)Q8
2 Stage oneLoader screens the host (display, disk over 3 GiB, event-log IDs 4624 and 1102, registry markers), tries COM auto-elevation, enables SeDebugPrivilege, restores a clean ntdll.dllIn-process; none exposedGAP
3 InjectionPoolParty Variant 7: IoCompletion and TP_DIRECT callback queued with ZwSetIoCompletion into the Task Scheduler host, no CreateRemoteThreadNot visible to process or file queriesGAP
4 StagingDownloader shellcode registers over HTTP to the C2 address and retrieves a 2,868,701-byte compound bundleNetworkConnectIP4 from the Schedule service hostQ10, Q13
5 DeploymentDeployment DLL (mutex Global\Admindllhost!!!) launches the RAT in memory, installs the driver, writes the Vulkan trio, registers the taskPeFileWritten, ScheduledTaskRegistered, CreateServiceQ3, Q4, Q5, Q6
5A BYOVDGoFly64.sys staged as tp_<tick>.tmp, service tp_<tick> at SERVICE_SYSTEM_START, device \\.\GoFly, IOCTL 0x12227A with a 4-byte PID kills bdservicehost.exe and bduserhost.exe from ring 0File write and service creation visible; IOCTL and device open are notQ5, Q6, Q7, Q9
6 PersistenceSYSTEM task USOPrivate Kit / USOPrivate under \Microsoft\Windows (fallback \AppID) runs vulkaninfo-64.exe, which loads vulkan-1.dll by an unqualified nameProcessRollup2, ScheduledTaskRegisteredQ1, Q2, Q4
7 Containervulkan-1.dll reads the encrypted sidecar vulkan-1.bin and rebuilds the RAT in memoryIn-memory onlyGAP
8 RATVulcanRAT207.A: WebSocket v13 C2 to the same address, mutex analplug<suffix>, pipe \\.\pipe\<PID>_pipe, DXGI remote desktop, keylogging, shell, clipboard replacement, local account creation, six injection methods, WFP filters, operator-supplied driversNetworkConnectIP4, ProcessRollup2 (children), CreateServiceQ10, Q11, Q12, Q7

Hunt hint: a host sensor sees the artifacts around the loader but not the loader. Treat the Vulkan trio, the USOPrivate task and the tp_ driver as the three durable footprints and look for any two together (Q13). The RAT command table includes 0x22000 (inject into explorer.exe) and 0x10002 (forward to the GoFly device); neither has a verified Falcon event.

04

Consolidated IOC Table

Every atomic indicator below appears in the saved snapshot 01-morphisec-vulcanrat207.txt; the GoFly64.sys file names and commodity status are corroborated by 03-loldrivers-gofly64.txt. All are detect. None is set to prevent: the campaign values are single-sourced to Morphisec, and the two commodity items are legitimate signed binaries.

TypeValueConfidenceActionContextExpiry
SHA-2560c418989bbc836208a087dee8fd64210f58909dddf736bc94769c269f65c26ebMEDIUMdetectTax-202609078869.exe, WhatsApp-delivered outer wrapper2027-04-09
SHA-256be740b05caead2fa4521f42da0653a10f53029df5455ebafe4701ab3d41afdf9MEDIUMdetectPacked Statement.exe, WhatsApp-delivered outer wrapper2027-04-09
SHA-2566833b1946ac219cf6ddf6cfbde1f81352b12d9125c8735961b5256216c4fdc49MEDIUMdetectUnpacked Statement loader (stage 1)2027-04-09
SHA-256cbf8ffe904a030c02b9def094f609b2c05a78fa5c7745d2d371d38dd460c58beMEDIUMdetectDownloaded deployment stage, 2,868,701-byte compound bundle2027-04-09
IPv4:port61.18.208.27:8888MEDIUMdetectHTTP staging and WebSocket v13 C2; all four config slots resolve here2027-04-09
DriverGoFly64.sys (aliases PandaSpeed64.sys, drv_02581.sys)HIGHhuntCommodity. Legitimately signed third-party driver, two sources (Morphisec, LOLDrivers), reused by unrelated actors. Hunt only by file name (Q9). Its SHA-256 is on the LOLDrivers record and in Morphisec's IOC table; it is not re-listed in this pack because an earlier library pack already carries itn/a
SHA-256facf78d474b66ed821288db41fa6ad8a7b6f30650eb12127cb3e9a3cc6146116MEDIUMhuntCommodity. vulkaninfo-64.exe, Intel-signed Khronos build. Shared with the separate port 1234 package. Hunt only (Q2), not importedn/a
PathC:\Program Files\Common Files\vulkaninfo-64.exe, vulkan-1.dll, vulkan-1.binHIGHhuntSide-load trio. vulkan-1.dll is also the genuine Vulkan loader name, so the path is the signal (Q1, Q3)n/a
Path%WINDIR%\System32\drivers\tp_<tick>.tmpHIGHhuntStaged driver (Q5)n/a
Servicetp_<GetTickCount>HIGHhuntKernel service, SERVICE_SYSTEM_START (Q6)n/a
TaskUSOPrivate Kit / USOPrivateHIGHhuntSYSTEM scheduled task under \Microsoft\Windows (fallback \Microsoft\Windows\AppID) (Q4)n/a
MutexGlobal\Admindllhost!!! and analplug<config suffix>MEDIUMhuntDeployment DLL and RAT single-instance mutexes. No Falcon mutex event is used; native hunt onlyn/a
Named pipe / device\\.\pipe\<PID>_pipe, \\.\GoFly, IOCTL 0x12227AMEDIUMhuntRAT IPC (255 instances, 64 KiB) and driver device. Not visible in CQLn/a
Process namesbdservicehost.exe, bduserhost.exe, ZhuDongFangYu.exe, 360Tray.exe, QQPCRTP.exe, QQPCTray.exeMEDIUMenrichChinese security products terminated or injected. Victim-side products, not malwaren/a
WFP / windowNetstatBlockSession, BlockAllTrafficSession, BlockAddr_Out, BlockAddr_In, window class PrivacyScreenClassMEDIUMenrichRAT network-blocking and remote-desktop privacy screen artifacts. Not visible in CQLn/a
Protocol0x00013009 (registration), 0x02072024 (framework magic)MEDIUMenrichNeeds packet inspection; not visible in endpoint telemetryn/a

Not shipped: the RAT configuration key and nonce quoted in the report, and every indicator of the port 1234 RomulusLoader package. Key material is not a detection indicator, and the other package is a different cluster.

05

Affected Surface & Telemetry Matrix

SurfaceRequired telemetryPriorityGap risk
Windows endpoints (all editions) that receive files over chat appsProcess creation with parent and path, PE file writes, scheduled task and service creation, network with process contextCRITICALLoader, injection, RAT and driver IOCTL are in-process or kernel-side and not visible
Endpoints where Falcon or another EDR is the only defenseSensor health and tamper telemetryHIGHThe chain targets Baidu, 360 and QQ products specifically; non-Chinese EDR is not named as a target in the source. Do not assume immunity: the operator can supply any driver
Egress firewall or proxyConnection logs to the C2 address, TCP 8888MEDIUMAddress is perishable and single-sourced
Chat and messaging channels (WhatsApp Web or Desktop on corporate devices)File transfer policy, download foldersMEDIUMDelivery is reported, not confirmed; no host telemetry for the chat app itself
Windows Security and Task Scheduler logsEvent 4698 or TaskScheduler Operational, CodeIntegrity OperationalMEDIUMAuditing may be off by default (playbook P3)
Linux / macOS / cloud workloadsNone requiredLOWChain is Windows specific; the sources describe no non-Windows behavior
06

ATT&CK Mapping

TacticTechniqueNameObserved behaviorQueryMitigations
ExecutionT1204.002User Execution: Malicious FileStatement.exe lure opened by the userQ8Not mapped from a saved page
Privilege Escalation / Defense EvasionT1055Process InjectionPoolParty Variant 7 into the Task Scheduler host; six RAT injection methods incl. explorer.exeNone (in-process)M1026, M1040
Privilege EscalationT1068Exploitation for Privilege EscalationAbuse of the vulnerable signed driver GoFly64.sys IOCTL 0x12227A (LOLDrivers maps the driver to T1068)Q5, Q6, Q7, Q9M1038, M1048, M1050, M1051, M1019
Defense EvasionT1685Disable or Modify ToolsBaidu security processes terminated from ring 0; 360 and QQ product-specific bypass stubsNone (kernel IOCTL)M1018, M1022, M1024, M1038, M1042, M1047, M1054
Persistence / Privilege EscalationT1543.003Create or Modify System Process: Windows ServiceService tp_<tick> at SERVICE_SYSTEM_START running the staged driverQ5, Q6, Q7M1018, M1028, M1040, M1045, M1047
Persistence / Privilege EscalationT1053.005Scheduled Task/Job: Scheduled TaskSYSTEM task USOPrivate Kit / USOPrivate runs the side-load hostQ4, Q2M1018, M1026, M1028, M1047
Persistence / Defense EvasionT1574.001Hijack Execution Flow: DLLvulkaninfo-64.exe loads attacker vulkan-1.dll via LoadLibraryA search orderQ1, Q2, Q3, Q11, Q12M1013, M1038, M1044, M1047, M1051
Defense EvasionT1036.005Masquerading: Match Legitimate Name or LocationTask names mimic Update Session Orchestrator; legitimate signed host reusedQ1, Q4Not mapped from a saved page
Command and ControlT1071.001Application Layer Protocol: Web ProtocolsHTTP registration then WebSocket v13 upgrade to TCP 8888Q10, Q11Not mapped from a saved page
ExecutionT1059.003Windows Command ShellRedirected cmd.exe shell sessionQ12Not mapped from a saved page

Mitigation M-codes for T1068, T1685, T1543.003, T1053.005, T1574.001 and T1055 were read from the saved MITRE snapshots (06 to 11). Rows marked "Not mapped from a saved page" were not checked against a saved MITRE page and carry no M-code.

07

Native Audit-Log Hunts

Hunts that need no CQL. Several are the only way to see stages the Falcon sensor cannot.

N1 · Filesystem and task sweep (read-only)

Run on any suspect host or through RTR. It checks for the Vulkan trio, the staged driver, the USOPrivate task and tp_ services.

# Vulkan side-load package under Common Files
Get-ChildItem 'C:\Program Files\Common Files' -Include vulkaninfo-64.exe,vulkan-1.dll,vulkan-1.bin -Recurse -Force -ErrorAction SilentlyContinue |
  Get-FileHash -Algorithm SHA256 | Select-Object Path, Hash

# Staged driver files and tp_ driver services
Get-ChildItem "$env:WINDIR\System32\drivers" -Filter 'tp_*.tmp' -Force -ErrorAction SilentlyContinue | Select-Object FullName, Length, LastWriteTime
Get-CimInstance Win32_SystemDriver | Where-Object { $_.Name -like 'tp_*' -or $_.PathName -like '*\drivers\tp_*.tmp' } | Select-Object Name, State, StartMode, PathName

# USOPrivate scheduled task or any task running the Vulkan host
Get-ScheduledTask | Where-Object { $_.TaskName -like '*USOPrivate*' -or ($_.Actions.Execute -like '*vulkaninfo-64.exe') } |
  Select-Object TaskPath, TaskName, @{n='Run';e={$_.Actions.Execute}}, @{n='User';e={$_.Principal.UserId}}

N2 · Windows event cross-reference

  • Security 4698 (scheduled task created, needs auditing on): task name containing USOPrivate under \Microsoft\Windows or \Microsoft\Windows\AppID.
  • System 7045 (service installed): service name tp_ followed by digits, image under System32\drivers ending .tmp, type kernel driver, start type system.
  • CodeIntegrity Operational: a load or audit of GoFly64.sys or a .tmp driver image. Event 3099 only confirms that a block policy is active (Microsoft Learn).
  • Sysmon (if deployed): Event ID 6 (driver loaded) for GoFly64.sys, Event ID 1 for vulkaninfo-64.exe with a SYSTEM user, Event ID 7 (image load) of vulkan-1.dll from Common Files by vulkaninfo-64.exe, Event ID 17 or 18 for pipe <PID>_pipe.

N3 · Mutex and pipe hunt on a live host

With a handle-enumeration tool, look for the mutexes Global\Admindllhost!!! and one starting with analplug, and for a named pipe called <PID>_pipe where the number equals its owning process ID. These are runtime artifacts and are not visible in CQL.

N4 · Network hunt for TCP 8888

In firewall or NetFlow data, search for the C2 address on any port, then for long-lived TCP sessions from SYSTEM-context processes to unfamiliar public hosts on 8888 that start with an HTTP request and continue as WebSocket frames. Without TLS, an HTTP Upgrade: websocket to a bare IP is a strong signal; this is behavior drawn from the report's description and should be validated on your sensors.

N5 · Security product health check

The chain kills security processes. For each managed endpoint, alert on a security-product service or process that stopped without an administrator action, and compare it to sensor heartbeat gaps. This applies to any EDR or AV, not only the Chinese products Morphisec names.

08

CrowdStrike LogScale CQL Hunt Queries

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

Events and fields were checked against the crowdstrike-logscale-v3 references. Queries marked "Field unverified" depend on scheduled-task and service fields that vary by sensor version: run each event filter alone with count() over 24 hours first (gate G1). No query uses a driver-load, module-load or mutex event, because none is verified in the reference.

Q1 · vulkaninfo-64.exe running from Program Files\Common Files
CONF HIGHFP LOWCOST LOW

Looks for: the signed VulkanInfo host launched from C:\Program Files\Common Files\. Morphisec reports that the deployment DLL writes vulkaninfo-64.exe there and registers a SYSTEM task that runs it so it side-loads vulkan-1.dll. VulkanInfo is a Khronos diagnostic tool normally found in a Vulkan SDK folder, not in Common Files. FP: none expected. The binary is legitimate, so this query matches the placement, never the hash alone.

// HUNT: vulkaninfo-64.exe executing from Program Files\Common Files (side-load host placement)
// MITRE: T1574.001, T1036.005
// CONF: high | FP: low | COST: low | REQUIRES: ProcessRollup2 with ImageFileName
// SOURCE: Morphisec VulcanRAT207.A (Stage 6, vulkaninfo-64.exe in Common Files)
// FALSE POSITIVES: none expected; a legitimate VulkanInfo is not installed under Common Files
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^vulkaninfo-64(\.exe)?$/i
| ImageFileName=/\\Program Files( \(x86\))?\\Common Files\\vulkaninfo-64\.exe$/i
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData, aid], limit=200)
Q2 · VulkanInfo running as SYSTEM outside a Vulkan SDK folder
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: any vulkaninfo process, or any binary carrying the published VulkanInfo host hash, running as S-1-5-18 from a path that is not a VulkanSDK folder. The scheduled task runs the host as SYSTEM. The hash is a stock Intel-signed Khronos build and is also reported in a separate package (port 1234) that this pack does not cover, so it is matched here only together with the SYSTEM context. FP: GPU driver or diagnostics tooling that runs VulkanInfo as SYSTEM through an RMM agent.

// HUNT: VulkanInfo (by name or published host hash) running as SYSTEM outside a Vulkan SDK folder
// MITRE: T1574.001, T1053.005
// CONF: medium | FP: medium | COST: low | REQUIRES: ProcessRollup2 with ImageFileName, UserSid
// SOURCE: Morphisec VulcanRAT207.A (task runs vulkaninfo-64.exe as SYSTEM; host hash in IOC table)
// FALSE POSITIVES: GPU diagnostics or RMM tooling that runs VulkanInfo as SYSTEM
// TUNING: exclude your RMM or driver-management parent on a named asset group, for example | ParentBaseFileName!=/^(YourRmmAgent)\.exe$/i, and keep the query unfiltered elsewhere
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^vulkaninfo(-64)?(\.exe)?$/i OR SHA256HashData=facf78d474b66ed821288db41fa6ad8a7b6f30650eb12127cb3e9a3cc6146116
| UserSid="S-1-5-18"
| ImageFileName!=/\\VulkanSDK\\/i
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData, aid], limit=200)
Q3 · vulkan-1.dll or vulkaninfo-64.exe written to Common Files
CONF HIGHFP LOWCOST LOW

Looks for: a PE write of vulkan-1.dll or vulkaninfo-64.exe into Program Files\Common Files. The deployment DLL writes the side-load trio there (the third file, vulkan-1.bin, is an encrypted sidecar and is not a PE, so this event cannot see it). Morphisec notes the DLL appends randomized overlay data to vary hashes, so file hashes alone are fragile; the path is the stable signal. FP: none expected.

// HUNT: Vulkan side-load package PE written under Program Files\Common Files
// MITRE: T1574.001, T1036.005
// CONF: high | FP: low | COST: low | REQUIRES: PeFileWritten or NewExecutableWritten with TargetFileName
// SOURCE: Morphisec VulcanRAT207.A (deployment DLL writes the Vulkan triplet to Common Files)
// FALSE POSITIVES: none expected; Vulkan runtime installers write vulkan-1.dll to System32, not Common Files
// LOOKBACK: 30d
#event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/
| TargetFileName=/\\Program Files( \(x86\))?\\Common Files\\(vulkan-1\.dll|vulkaninfo-64\.exe)$/i
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, TargetFileName, SHA256HashData, aid], limit=200)
Q4 · SYSTEM task named USOPrivate or launching vulkaninfo-64.exe
CONF HIGHFP LOWCOST LOW

Looks for: a scheduled task registered with a name containing USOPrivate, or whose executable is the VulkanInfo host in Common Files. Morphisec reports task names USOPrivate Kit and USOPrivate under \Microsoft\Windows (fallback \Microsoft\Windows\AppID), chosen to resemble Update Session Orchestrator task labels. FP: none expected. ⚠ Field unverified: TaskName and TaskExecutable population varies by sensor version; validate in tenant (gate G1).

// HUNT: scheduled task USOPrivate / USOPrivate Kit or task that launches the Vulkan side-load host
// MITRE: T1053.005
// CONF: high | FP: low | COST: low | REQUIRES: ScheduledTaskRegistered with TaskName and TaskExecutable (validate in tenant)
// SOURCE: Morphisec VulcanRAT207.A (Stage 5, task registration via Task Scheduler COM APIs)
// FALSE POSITIVES: none expected; Windows Update Orchestrator tasks are named UpdateOrchestrator style, not USOPrivate
// LOOKBACK: 30d
#event_simpleName=ScheduledTaskRegistered
| TaskName=/USOPrivate/i OR TaskExecutable=/\\Common Files\\vulkaninfo-64\.exe/i
| table([@timestamp, ComputerName, UserName, TaskName, TaskExecutable, aid], limit=200)
Q5 · Driver-shaped file tp_<tick>.tmp written under System32\drivers
CONF HIGHFP LOWCOST LOW

Looks for: a PE written to %WINDIR%\System32\drivers\tp_<digits>.tmp. Morphisec reports that both the deployment DLL and the RAT stage the driver under this name (tp_ plus GetTickCount) before creating the kernel service. A .tmp PE inside the drivers folder is unusual on its own. FP: none expected.

// HUNT: PE staged as System32\drivers\tp_<tick>.tmp (BYOVD driver staging)
// MITRE: T1068, T1543.003
// CONF: high | FP: low | COST: low | REQUIRES: PeFileWritten or NewExecutableWritten with TargetFileName
// SOURCE: Morphisec VulcanRAT207.A (driver staged to tp_<GetTickCount>.tmp)
// FALSE POSITIVES: none expected
// LOOKBACK: 30d
#event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/
| TargetFileName=/\\System32\\drivers\\tp_[0-9]+\.tmp$/i
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, TargetFileName, SHA256HashData, aid], limit=200)
Q6 · Kernel service whose image is tp_<tick>.tmp
CONF HIGHFP LOWCOST LOW

Looks for: a service created with an image path of System32\drivers\tp_<digits>.tmp. Morphisec reports a file-system-driver service named tp_<GetTickCount> started at SERVICE_SYSTEM_START. FP: none expected. ⚠ Field unverified: ServiceImagePath and ServiceDisplayName depend on sensor version; validate in tenant.

// HUNT: service created from System32\drivers\tp_<tick>.tmp
// MITRE: T1543.003, T1068
// CONF: high | FP: low | COST: low | REQUIRES: CreateService with ServiceImagePath (validate in tenant)
// SOURCE: Morphisec VulcanRAT207.A (service tp_<GetTickCount>, SERVICE_SYSTEM_START)
// FALSE POSITIVES: none expected
// LOOKBACK: 30d
#event_simpleName=CreateService
| ServiceImagePath=/\\System32\\drivers\\tp_[0-9]+\.tmp/i OR ServiceDisplayName=/^tp_[0-9]+$/i
| table([@timestamp, ComputerName, UserName, ServiceDisplayName, ServiceImagePath, aid], limit=200)
Q7 · Generic BYOVD staging: kernel service with a .tmp driver image or a user-writable .sys
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: a service created whose image is a .tmp file inside a drivers folder, or a .sys in a user-writable location. This is the behavior behind Q6 without the tp_ naming, so it still fires if the operator-supplied driver uses another name. It is a generic BYOVD signal, not unique to this campaign. FP: driver installers and imaging tools that stage drivers in temporary folders. ⚠ Field unverified: validate ServiceImagePath in tenant.

// HUNT: service created from a .tmp driver image or a .sys in a user-writable path (generic BYOVD staging)
// MITRE: T1068, T1543.003
// CONF: medium | FP: medium | COST: low | REQUIRES: CreateService with ServiceImagePath (validate in tenant)
// SOURCE: Morphisec VulcanRAT207.A (operator-supplied driver written to a tp_ .tmp path); generic behavior
// FALSE POSITIVES: driver installers and imaging or OEM tools staging .sys files in temporary folders
// TUNING: exclude your deployment tool by parent or by signer-approved path on named assets, for example | ServiceImagePath!=/\\ProgramData\\YourVendor\\/i
// LOOKBACK: 30d
#event_simpleName=CreateService
| ServiceImagePath=/\\drivers\\[^\\]+\.tmp$|\\(Users|ProgramData|Temp)\\.*\.sys$/i
| table([@timestamp, ComputerName, UserName, ServiceDisplayName, ServiceImagePath, aid], limit=200)
Q8 · Campaign file hash sweep (wrapper, loader, bundle)
CONF HIGHFP LOWCOST LOW

Looks for: execution or write of the four campaign-specific SHA-256 values Morphisec lists: the WhatsApp wrapper Tax-202609078869.exe, the packed and unpacked Statement loader and the downloaded deployment bundle. These are the only hashes in the pack that belong to this chain alone. Perishable: a rebuild changes them. The deployment bundle may not be written as a PE, so it can only match where the sensor hashes it. FP: none (exact hash).

// HUNT: campaign-specific SHA-256 sweep (WhatsApp wrapper, Statement loader, deployment bundle)
// MITRE: T1204.002
// CONF: high | FP: low | COST: low | REQUIRES: ProcessRollup2, PeFileWritten, NewExecutableWritten with SHA256HashData
// SOURCE: Morphisec VulcanRAT207.A (IOC table, SHA-256 values)
// FALSE POSITIVES: none (exact hash match)
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/
| in(field="SHA256HashData", values=["0c418989bbc836208a087dee8fd64210f58909dddf736bc94769c269f65c26eb", "be740b05caead2fa4521f42da0653a10f53029df5455ebafe4701ab3d41afdf9", "6833b1946ac219cf6ddf6cfbde1f81352b12d9125c8735961b5256216c4fdc49", "cbf8ffe904a030c02b9def094f609b2c05a78fa5c7745d2d371d38dd460c58be"])
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, TargetFileName, SHA256HashData, aid], limit=200)
Q9 · GoFly64.sys file-name sightings (commodity tooling, hunt only)
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: any of the three file names LOLDrivers lists for GoFly64.sys. The driver hash is deliberately not embedded: it is commodity tooling already listed in an earlier library pack, so it is referenced on the LOLDrivers record instead (the duplicate gate treats a shared hash as a shared campaign). A renamed copy is caught by Q5, Q6 and Q7 instead. This driver is a legitimately signed third-party network-filter driver catalogued in LOLDrivers and abused by unrelated actors, so a hit means a vulnerable driver is present, not that this campaign is. Triage by context: is it a known GoLink or PandaSpeed install, or was it dropped by a process from a user-writable path? Pair with Q5, Q6 and Q12. FP: a genuine install of the vendor product.

// HUNT: GoFly64.sys vulnerable driver sighting by LOLDrivers file name (commodity tooling, detect only)
// MITRE: T1068
// CONF: medium | FP: medium | COST: low | REQUIRES: PeFileWritten or NewExecutableWritten with TargetFileName
// SOURCE: Morphisec VulcanRAT207.A (GoFly64.sys) and LOLDrivers GoFly64.sys entry (alias file names)
// FALSE POSITIVES: a legitimate install of the GoLink or PandaSpeed product that ships this driver
// TUNING: exclude the specific hosts that run the vendor product after confirming the install is sanctioned, for example | !in(field="aid", values=["REPLACE_WITH_AID_1"]); keep it unfiltered elsewhere
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/
| TargetFileName=/\\(GoFly64|PandaSpeed64|drv_02581)\.sys$/i
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, TargetFileName, ImageFileName, SHA256HashData, aid], limit=200)
Q10 · Connection to the published C2 address
CONF HIGHFP LOWCOST LOW

Looks for: any outbound IPv4 connection to 61.18.208.27. Morphisec reports HTTP registration and WebSocket v13 C2 to this address on TCP 8888, and all four RAT configuration slots resolve to it. The port is not in the filter so a different port is still caught. Perishable and single-sourced. FP: none expected.

// HUNT: outbound connection to the VulcanRAT207.A C2 address
// MITRE: T1071.001
// CONF: high | FP: low | COST: low | REQUIRES: NetworkConnectIP4 with RemoteAddressIP4
// SOURCE: Morphisec VulcanRAT207.A (C2 61[.]18[.]208[.]27:8888)
// FALSE POSITIVES: none expected
// LOOKBACK: 30d
#event_simpleName=NetworkConnectIP4
| RemoteAddressIP4="61.18.208.27"
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, RemoteAddressIP4, RemotePort, aid], limit=200)
Q11 · VulkanInfo host making any network connection
CONF HIGHFP LOWCOST LOW

Looks for: any outbound IPv4 connection initiated by vulkaninfo or vulkaninfo-64.exe. The genuine tool enumerates local GPUs and has no reason to talk to the network. After the side-load, the host process runs the RAT, so the connection is made by this process name. Catches C2 on a new address or port. FP: none expected.

// HUNT: vulkaninfo host process making network connections (post side-load RAT C2)
// MITRE: T1071.001, T1574.001
// CONF: high | FP: low | COST: low | REQUIRES: NetworkConnectIP4 with ContextBaseFileName
// SOURCE: Morphisec VulcanRAT207.A (RAT runs inside vulkaninfo-64.exe on the persistent route)
// FALSE POSITIVES: none expected
// LOOKBACK: 30d
#event_simpleName=NetworkConnectIP4
| ContextBaseFileName=/^vulkaninfo(-64)?(\.exe)?$/i
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, RemoteAddressIP4, RemotePort, aid], limit=200)
Q12 · Child processes of vulkaninfo-64.exe
CONF HIGHFP LOWCOST LOW

Looks for: any process whose parent is the VulkanInfo host. The RAT offers a redirected cmd.exe shell, tscon execution and operator-driven actions, so a shell or tool spawned from vulkaninfo-64.exe is the operator at work. Genuine VulkanInfo spawns nothing. FP: none expected.

// HUNT: process spawned by vulkaninfo / vulkaninfo-64.exe (RAT shell and operator actions)
// MITRE: T1059.003, T1574.001
// CONF: high | FP: low | COST: low | REQUIRES: ProcessRollup2 with ParentBaseFileName
// SOURCE: Morphisec VulcanRAT207.A (redirected cmd.exe shell, tscon, operator actions)
// FALSE POSITIVES: none expected
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^vulkaninfo(-64)?(\.exe)?$/i
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData, aid], limit=200)
Q13 · Host-level correlation: two or more chain signals on one host
CONF HIGHFP LOWCOST MEDIUM

Looks for: hosts where at least two distinct chain signals appear: Vulkan package write, driver staging, tp_ service, USOPrivate task or the C2 address. Morphisec stresses that correlating the Task Scheduler injection, GoFly use, SYSTEM task registration and the Vulkan package beats matching the final RAT. Run over 7 to 30 days. FP: very low because each signal is already rare.

// HUNT: correlate VulcanRAT207.A chain signals per host (two or more distinct signals)
// MITRE: T1574.001, T1053.005, T1543.003, T1071.001
// CONF: high | FP: low | COST: medium | REQUIRES: PeFileWritten, NewExecutableWritten, ScheduledTaskRegistered, CreateService, NetworkConnectIP4
// SOURCE: Morphisec VulcanRAT207.A (defensive considerations: correlate component boundaries)
// FALSE POSITIVES: very low; each signal is rare on its own
// LOOKBACK: 30d
#event_simpleName=/^(PeFileWritten|NewExecutableWritten|ScheduledTaskRegistered|CreateService|NetworkConnectIP4)$/
| case {
    #event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/ | TargetFileName=/\\Common Files\\(vulkan-1\.dll|vulkaninfo-64\.exe)$/i | Signal := "vulkan_package_write";
    #event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/ | TargetFileName=/\\System32\\drivers\\tp_[0-9]+\.tmp$/i | Signal := "driver_staging";
    #event_simpleName=ScheduledTaskRegistered | TaskName=/USOPrivate/i | Signal := "usoprivate_task";
    #event_simpleName=CreateService | ServiceImagePath=/\\drivers\\tp_[0-9]+\.tmp/i | Signal := "tp_service";
    #event_simpleName=NetworkConnectIP4 | RemoteAddressIP4="61.18.208.27" | Signal := "c2_address";
    * | Signal := "none";
  }
| !in(field="Signal", values=["none"])
| groupBy([aid, ComputerName], function=[count(Signal, distinct=true, as=DistinctSignals), collect([Signal], limit=10), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)], limit=20000)
| DistinctSignals>1
| sort(DistinctSignals, order=desc, limit=200)
09

CrowdStrike Custom IOA Recommendations

Four queries are clean enough to promote from hunt to Custom IOA. All four are detect only. The pack recommends no prevention action anywhere: campaign indicators are single-sourced to Morphisec, and the two commodity items (GoFly64.sys, vulkaninfo-64.exe) are legitimately signed binaries whose blocking by hash or name would break production and miss reuse by other actors.

IOA nameFromRule typePatternExclusionsAction
VulcanRAT207, VulkanInfo Host in Common FilesQ1Process Creation (Windows)Image filename .*\\Common Files\\vulkaninfo-64\.exeNoneDetect: High
VulcanRAT207, Process Spawned by VulkanInfoQ12Process Creation (Windows)Parent image filename .*\\vulkaninfo(-64)?\.exeNoneDetect: High
VulcanRAT207, Driver Staged as tp_tick.tmpQ5File Creation (Windows)File path .*\\System32\\drivers\\tp_[0-9]+\.tmpNoneDetect: High
VulcanRAT207, Vulkan Side-Load DLL in Common FilesQ3File Creation (Windows)File path .*\\Common Files\\vulkan-1\.dllNoneDetect: High

Pattern syntax follows the Custom IOA regular-expression fields. Confirm the exact escaping in your console before saving, then create each rule in Monitor on a pilot policy for one business week. The campaign hashes and the C2 address belong in IOC Management (section 10) as detect, not in IOAs.

Not recommended as IOAs: Q2 (SYSTEM VulkanInfo is noisy where RMM tools run it), Q7 (generic driver staging), Q9 (commodity driver, context required), Q4 and Q6 (field population varies by sensor version), Q13 (correlation, better as a scheduled search).

10

Machine-Readable IOC Appendix

Blocks tuned to this campaign. The CSV is the only block meant for import: it holds the five campaign-specific values, every one traced to snapshot 01-morphisec-vulcanrat207.txt. The commodity items are deliberately kept out of it.

Falcon IOC Management CSVbulk import, detect only
type,value,action,severity,expiration,description,tags
sha256,0c418989bbc836208a087dee8fd64210f58909dddf736bc94769c269f65c26eb,detect,medium,2027-04-09,Tax-202609078869.exe WhatsApp wrapper,campaign:VulcanRAT207.A
sha256,be740b05caead2fa4521f42da0653a10f53029df5455ebafe4701ab3d41afdf9,detect,medium,2027-04-09,Packed Statement.exe,campaign:VulcanRAT207.A
sha256,6833b1946ac219cf6ddf6cfbde1f81352b12d9125c8735961b5256216c4fdc49,detect,medium,2027-04-09,Unpacked Statement loader,campaign:VulcanRAT207.A
sha256,cbf8ffe904a030c02b9def094f609b2c05a78fa5c7745d2d371d38dd460c58be,detect,medium,2027-04-09,Downloaded deployment bundle,campaign:VulcanRAT207.A
ipv4,61.18.208.27,detect,medium,2027-04-09,VulcanRAT207.A C2 (TCP 8888 HTTP then WebSocket),campaign:VulcanRAT207.A
Commodity Tooling, Hunt Onlydo not import, do not block
Commodity tooling reused by this chain. Legitimately signed. Hunt with context (Q2, Q9); never import as block.

GoFly64.sys   Authenticode-signed third-party WFP network filter driver; aliases PandaSpeed64.sys, drv_02581.sys.
              Hunt by file name (Q9). The SHA-256 is on the LOLDrivers record (see References) and is not re-listed here.
vulkaninfo-64.exe (SHA-256) facf78d474b66ed821288db41fa6ad8a7b6f30650eb12127cb3e9a3cc6146116
                            Intel-signed Khronos VulkanInfo 1.3.204.1; hash shared with a separate package this pack does not cover
Behavioral Signaturesdurable, outlives the IOCs
VulcanRAT207.A - behavioral signatures (survive hash and IP rotation)

B1  vulkaninfo-64.exe present or executing under C:\Program Files\Common Files\
B2  vulkan-1.dll or vulkan-1.bin beside it (vulkan-1.bin is a non-PE encrypted sidecar)
B3  Scheduled task USOPrivate Kit or USOPrivate under \Microsoft\Windows or \Microsoft\Windows\AppID, running as SYSTEM
B4  PE staged as %WINDIR%\System32\drivers\tp_<digits>.tmp
B5  Kernel service tp_<digits> with system start type
B6  vulkaninfo-64.exe making network connections or parenting a shell
B7  Mutex Global\Admindllhost!!! (deployment DLL) or a mutex starting analplug (RAT)
B8  Named pipe <PID>_pipe (255 instances, 64 KiB) owned by the process whose PID it names
B9  Security-product process (Baidu bdservicehost.exe, bduserhost.exe) vanishing while a tp_ driver loads
B10 WFP session names NetstatBlockSession or BlockAllTrafficSession; filter names BlockAddr_Out, BlockAddr_In
B11 Window class PrivacyScreenClass (RAT remote-desktop privacy screen)
Named Malware / Toolingas named by the source
Names exactly as the sources use them

VulcanRAT207.A    WebSocket RAT (Morphisec); 207 is also visible in the 0x02072024 framework magic
GoFly64.sys       signed vulnerable driver; device \\.\GoFly; IOCTL 0x12227A (LOLDrivers, Morphisec)
Statement.exe     financial-document lure; wrapper Tax-202609078869.exe
Vulkan DLL side-load   vulkaninfo-64.exe + vulkan-1.dll + vulkan-1.bin
PoolParty Variant 7    injection technique into the Task Scheduler host

C2 protocol: HTTP registration then WebSocket v13 over TCP 8888; registration id 0x00013009, framework magic 0x02072024
Audit Helpersread-only PowerShell
# Read-only audit helpers (run per endpoint or through RTR / your RMM)

# A. Vulkan trio and its hashes
Get-ChildItem 'C:\Program Files\Common Files' -Include vulkaninfo-64.exe,vulkan-1.dll,vulkan-1.bin -Recurse -Force -ErrorAction SilentlyContinue |
  Get-FileHash -Algorithm SHA256 | Select-Object Path, Hash

# B. Task and service footprints
Get-ScheduledTask | Where-Object { $_.TaskName -like '*USOPrivate*' } | Select-Object TaskPath, TaskName
Get-CimInstance Win32_SystemDriver | Where-Object { $_.Name -like 'tp_*' } | Select-Object Name, State, PathName

# C. ASR vulnerable-driver rule state
(Get-MpPreference).AttackSurfaceReductionRules_Ids -contains '56a863a9-875e-4185-98a7-b882c64b5ce5'

Action policy: nothing is set to prevent. Campaign values are single-sourced (two-source rule), the hashes change on every rebuild (the deployment DLL appends randomized overlay data), and the commodity items are stock signed binaries. Promote a campaign value to prevent only after a second independent vendor lists it.

11

Detection Validation Gates

Work these in order. A query that has not cleared gate 2 has no business being an alert.

GateWhat to proveHowPass criteria
G1 · Telemetry readyThe events each query depends on arrive in your tenantRun each #event_simpleName filter alone over 24h with count(). Pay particular attention to ScheduledTaskRegistered (Q4) and CreateService (Q6, Q7) and the fields TaskName, TaskExecutable, ServiceImagePath, ServiceDisplayName.Non-zero counts and the named fields populated.
G2 · Benign baselineYou know what normal looks likeRun Q2, Q7 and Q9 across 30 days of history and classify every hit.Every recurring hit is explained and excluded, or escalated.
G3 · Positive testThe query fires on the behavior it claimsOn an isolated test host in a change window: copy a harmless signed executable to a folder under Common Files named vulkaninfo-64.exe and run it (Q1, Q11); register a test task named USOPrivate Test that runs a harmless command (Q4); create a harmless file named tp_12345.tmp in a scratch folder only if your policy permits (the real path is protected). Never load a real vulnerable driver or malware.Matching queries fire.
G4 · Negative testTuning did not blind the queryRe-run G3 with the TUNING exclusions applied.Test events still fire.
G5 · PromotionSafe to alertCustom IOA in Monitor mode for one business week on a pilot policy.Zero unexplained detections.
G6 · Response readinessThe team can act on a hitTabletop the section 14 runbook, including the case where the sensor itself was killed.Analyst can describe how to confirm sensor health and isolate by other means.
12

Hardening: Tiered

Controls are mapped to the technique, then to a MITRE mitigation (the why) and a vendor authority (the what and where). The chain's decisive step is loading a signed vulnerable driver, so the first tier is about stopping the driver from landing and loading.

Immediate (this week, low compatibility risk)
  • I1 · ASR rule "Block abuse of exploited vulnerable signed drivers" in Audit mode first, then Block. It prevents an application from writing a vulnerable signed driver to disk, which is how the deployment DLL and the RAT stage the driver. Microsoft states the rule does not block a driver already on the system from loading. Addresses T1068. M1038 Execution Prevention, M1050 Exploit Protection. Authority: Microsoft Learn, recommended driver block rules and ASR rules reference (GUID 56a863a9-875e-4185-98a7-b882c64b5ce5; audit action type AsrVulnerableSignedDriverAudited). Playbook P1. Whether GoFly64.sys is covered by Microsoft's list was not confirmed by any fetched source, so verify in audit mode.
  • I2 · Microsoft vulnerable driver blocklist and HVCI. Microsoft states the blocklist is on by default on Windows 11 2022 and later and is enforced when memory integrity (HVCI), Smart App Control or S mode is active. Confirm it is on across the fleet, and for older builds apply the recommended block policy via App Control for Business, audit first. M1038, M1051 Update Software. Authority: Microsoft Learn driver block rules. Playbook P2. LOLDrivers records no sample of GoFly64.sys confirmed loading despite HVCI; validate on your hardware.
  • I3 · Audit scheduled task creation and service installation so a SYSTEM task such as USOPrivate and a tp_ driver service leave a trail even when the sensor is killed. M1047 Audit. Authority: MITRE T1053.005 and T1543.003 mitigation lists. best-practice, no formal benchmark cited Playbook P3.
  • I4 · Load the section 10 CSV into IOC Management as detect and run Q8 and Q10 retrospectively. Detection, not prevention, listed because it is free and immediate.
  • I5 · Alert on security-product tamper (stopped service, missing sensor heartbeat). The chain's first goal is to kill security processes. M1047 Audit. best-practice, no formal benchmark
Near term (1 to 4 weeks, pilot first)
  • N1 · ASR rule "Block executable files from running unless they meet a prevalence, age, or trusted list criterion" in audit mode, to catch the unknown freshly dropped Statement.exe and wrapper. M1038 Execution Prevention. Authority: Microsoft Learn ASR rules reference (GUID 01443614-cd74-433a-b99e-2ecdc07bfc25; requires cloud-delivered protection). Expect developer-build noise. Playbook P4.
  • N2 · Restrict chat-delivered executables on managed endpoints: block or quarantine executable and archive attachments from consumer messaging apps, or disallow the apps on corporate devices. Delivery is reported rather than confirmed, so treat this as risk reduction. M1017 User Training and M1038, per the T1204.002 context. best-practice, no formal benchmark
  • N3 · Egress control: alert on outbound connections to unfamiliar public addresses on TCP 8888 from SYSTEM-context processes, and on the published C2 address. Alert rather than block until a second source confirms the address. best-practice, no formal benchmark
  • N4 · Application control for DLL side-loading: allow-list signed binaries by path so a signed utility running from Common Files is flagged or blocked. M1038, M1044 Restrict Library Loading, M1013 Application Developer Guidance. Authority: MITRE T1574.001 mitigation list. best-practice, no CIS item cited
  • N5 · Local administrator and privileged account hygiene so that a lure run by a standard user cannot reach SYSTEM via COM auto-elevation prompts. M1026 Privileged Account Management. Authority: MITRE T1053.005 and T1055 mitigation lists.
Strategic (1 to 3 months)
  • S1 · App Control for Business (WDAC) with a vulnerable driver deny list and kernel driver allow-listing. Block driver loads that are not on an approved list rather than chasing individual bad drivers. M1038, M1048 Application Isolation and Sandboxing. Authority: Microsoft Learn driver block rules. Needs a pilot ring; blocking kernel drivers without testing can cause device failure or blue screens (Microsoft's own caution).
  • S2 · Hypervisor-enforced code integrity (HVCI) fleet rollout where hardware and driver compatibility allow. M1050 Exploit Protection. Authority: Microsoft Learn driver block rules.
  • S3 · Tamper protection and out-of-band sensor health monitoring, so a killed agent is noticed within minutes. M1047 Audit. best-practice, no formal benchmark
  • S4 · Threat intelligence for drivers: subscribe to the LOLDrivers feed and review new entries against installed drivers. M1019 Threat Intelligence Program. Authority: MITRE T1068 mitigation list.
13

Deployable Playbooks

Test every playbook on a pilot ring first. P1, P2 and P4 are audit-first by design. Each playbook lists its prerequisites, reboot requirement and rollback.

P1 · ASR vulnerable signed driver rule, audit (I1)

# P1 - ASR: Block abuse of exploited vulnerable signed drivers (AUDIT first)
# Prerequisites: Microsoft Defender Antivirus active; local administrator
# Reboot required: no
# Rollback: Remove-MpPreference -AttackSurfaceReductionRules_Ids 56a863a9-875e-4185-98a7-b882c64b5ce5
#           (or Add-MpPreference with -AttackSurfaceReductionRules_Actions Disabled)

$id = '56a863a9-875e-4185-98a7-b882c64b5ce5'
Add-MpPreference -AttackSurfaceReductionRules_Ids $id -AttackSurfaceReductionRules_Actions AuditMode

# Verify
$p = Get-MpPreference
$i = [array]::IndexOf($p.AttackSurfaceReductionRules_Ids, $id)
if ($i -ge 0) { "Rule present, action = " + $p.AttackSurfaceReductionRules_Actions[$i] }   # 2 = Audit, 1 = Block

# Review audit hits (Defender advanced hunting action type AsrVulnerableSignedDriverAudited) for 2 to 4 weeks, then move a pilot ring to Enabled.

P2 · Microsoft vulnerable driver blocklist as an App Control policy, audit (I2)

# P2 - Apply the Microsoft recommended vulnerable driver blocklist in AUDIT mode
# Prerequisites: local administrator; the audit-only SiPolicy.p7b and the App Control policy refresh tool,
#                downloaded from the Microsoft pages cited in the Microsoft Learn driver block rules article.
#                Skip if Windows 11 2022+ already enforces the default blocklist and you do not need the newest list.
# Reboot required: only if a driver the policy would block is already running (Microsoft Learn)
# Rollback: Remove-Item "$env:windir\System32\CodeIntegrity\SiPolicy.p7b"; run the refresh tool again; reboot

Copy-Item .\SiPolicy.p7b "$env:windir\System32\CodeIntegrity\SiPolicy.p7b" -Force
# Run the downloaded App Control policy refresh tool now to activate the policy.

# Verify: CodeIntegrity Operational log, Event ID 3099, PolicyName/PolicyId matches the blocklist XML
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-CodeIntegrity/Operational'; Id=3099} -MaxEvents 5 |
  Select-Object TimeCreated, Message

P3 · Task and service audit (I3)

# P3 - Audit scheduled task creation and enlarge the Task Scheduler operational log
# Prerequisites: local administrator; size the log first
# Reboot required: no
# Rollback: auditpol /set /subcategory:"Other Object Access Events" /success:disable /failure:disable
#           wevtutil sl Microsoft-Windows-TaskScheduler/Operational /e:false

auditpol /set /subcategory:"Other Object Access Events" /success:enable /failure:enable
wevtutil sl Microsoft-Windows-TaskScheduler/Operational /e:true /ms:67108864

# Verify
auditpol /get /subcategory:"Other Object Access Events"
wevtutil gl Microsoft-Windows-TaskScheduler/Operational | Select-String 'enabled|maxSize'
# Service installs already log System Event 7045 by default; forward 4698 and 7045 to your SIEM.

P4 · ASR prevalence rule, audit (N1)

# P4 - ASR: block executables that fail prevalence, age or trusted-list checks (AUDIT first)
# Prerequisites: Microsoft Defender Antivirus active; cloud-delivered protection enabled; local administrator
# Reboot required: no
# Rollback: Remove-MpPreference -AttackSurfaceReductionRules_Ids 01443614-cd74-433a-b99e-2ecdc07bfc25

$id = '01443614-cd74-433a-b99e-2ecdc07bfc25'
Add-MpPreference -AttackSurfaceReductionRules_Ids $id -AttackSurfaceReductionRules_Actions AuditMode

# Verify
$p = Get-MpPreference
$i = [array]::IndexOf($p.AttackSurfaceReductionRules_Ids, $id)
if ($i -ge 0) { "Rule present, action = " + $p.AttackSurfaceReductionRules_Actions[$i] }

P5 · Evidence collection for a confirmed host

# P5 - Containment evidence collection (read-only; run BEFORE any cleanup)
# Prerequisites: local administrator or Falcon RTR with the needed role; host already network-contained
# Reboot required: no. Do NOT reboot: the RAT lives in memory.
# Rollback: none required (read-only). Cleanup is in the section 14 runbook.

$out = "$env:SystemDrive\IR-vulcan"; New-Item -ItemType Directory -Path $out -Force | Out-Null
Get-ChildItem 'C:\Program Files\Common Files' -Include vulkaninfo-64.exe,vulkan-1.dll,vulkan-1.bin -Recurse -Force -ErrorAction SilentlyContinue |
  Get-FileHash -Algorithm SHA256 | Export-Csv "$out\vulkan-trio-hashes.csv" -NoTypeInformation
Get-ChildItem "$env:WINDIR\System32\drivers" -Filter 'tp_*.tmp' -Force -ErrorAction SilentlyContinue |
  Get-FileHash -Algorithm SHA256 | Export-Csv "$out\tp-driver-hashes.csv" -NoTypeInformation
Get-CimInstance Win32_SystemDriver | Where-Object { $_.Name -like 'tp_*' } | Export-Csv "$out\tp-services.csv" -NoTypeInformation
Get-ScheduledTask | Where-Object { $_.TaskName -like '*USOPrivate*' } | Export-ScheduledTask | Out-File "$out\usoprivate-task.xml"
Get-NetTCPConnection -State Established | Select-Object LocalPort, RemoteAddress, RemotePort, OwningProcess | Export-Csv "$out\netstat.csv" -NoTypeInformation
Get-Process | Select-Object Id, ProcessName, Path | Export-Csv "$out\processes.csv" -NoTypeInformation
14

Containment Runbook

Sequencing rule: the chain is built to kill security software and runs as SYSTEM. Treat the host as fully compromised, assume the endpoint sensor may be dead or lying, and confirm host state with out-of-band tools. The RAT has keylogging, clipboard replacement and local account creation, so treat every credential typed on the host as exposed.

PhaseActionsOwnerEvidence to capture
C0 · Triage
0 to 15 min
Confirm which query fired. Identify user, host and time. Check whether Q1, Q3, Q4, Q5, Q6 and Q13 also fired on the same aid. Check sensor heartbeat: a silent sensor on a host that just hit Q5 or Q6 is itself a strong signal.SOC L1Falcon process tree; query output; aid and ComputerName; last sensor check-in
C1 · Isolate
15 to 30 min
Network-contain the host in Falcon, or at the switch or firewall if the sensor is not responding. Do not power off or reboot: the RAT runs from memory. Run P5 before cleanup. Capture memory if your tooling supports it.SOC L2Containment timestamp; P5 output; memory image
C2 · ScopeRun Q1 to Q13 across 30 to 90 days for other hosts. Pivot on the C2 address in firewall and NetFlow logs. Run the N1 sweep on neighboring hosts. Search mail and chat gateways for Statement.exe and Tax-202609078869.exe.Threat hunterList of affected hosts and users; delivery message if found
C3 · Credentials
parallel with C1
Reset passwords and revoke sessions and tokens for every account used on the host. Audit local accounts for additions (the RAT creates local accounts and adds them to administrators). Rotate secrets reachable from the host.IAMRotation timestamps; local account list diff
C4 · EradicateAfter imaging: delete scheduled task USOPrivate Kit / USOPrivate; stop and remove service tp_<digits>; remove System32\drivers\tp_<digits>.tmp (the driver may need a reboot or offline removal to unload); remove vulkaninfo-64.exe, vulkan-1.dll, vulkan-1.bin from Common Files. Prefer a full reimage, because a kernel driver ran as SYSTEM.SOC L2 / ITRemoval log; post-clean Q1 to Q7 re-run
C5 · RecoverReimage, restore from known-good, re-enroll the sensor, verify tamper protection and the ASR vulnerable-driver rule (I1) before reconnecting. Restore credentials only after C3.ITReimage ticket; sensor and policy verification
C6 · LessonsAdd confirmed values to IOC Management. If the driver turns out to be a different vulnerable driver, submit it to LOLDrivers. Feed new hashes and infrastructure back into this pack as a v0.2 revision.Threat intelUpdated IOC list; revision ticket
15

Detection Coverage Map

TechniqueBehaviorCQLIOAHardeningCoverage
T1204.002Statement.exe / wrapper executedQ8NoN2, N1PARTIAL hash only; hashes change per build and the delivery channel is reported, not confirmed
T1055PoolParty Variant 7 into Task Scheduler; six RAT injection methodsNoneNoN5GAP in-process injection is not exposed by a verified Falcon event; sensor prevention policy is the control
T1068GoFly64.sys staged and loadedQ5, Q6, Q7, Q9Yes (Q5)I1, I2, S1, S2PARTIAL staging and service creation visible; the driver load and IOCTL 0x12227A are not (no verified driver-load event used)
T1685Security processes killed from ring 0; 360 and QQ bypass stubsNoneNoI5, S3GAP a killed process produces no host event from the victim product. Detect via sensor heartbeat and tamper alerts, not CQL
T1543.003Service tp_<tick>Q6, Q7, Q13NoI3PARTIAL depends on CreateService field population (gate G1)
T1053.005USOPrivate SYSTEM taskQ4, Q13No (Q4 optional)I3PARTIAL depends on ScheduledTaskRegistered field population; fallback task path is covered by the name match
T1574.001Vulkan side-loadQ1, Q2, Q3, Q11, Q12Yes (Q1, Q3, Q12)N4, S1GOOD placement and process relationships are near-zero FP. No module-load query because no verified module-load event is in the reference
T1071.001WebSocket C2 over TCP 8888Q10, Q11, Q13IOC MgmtN3PARTIAL address is perishable and single-sourced; Q11 catches new addresses via the host process name; the WebSocket framing is invisible to the endpoint
T1059.003RAT shell, tsconQ12YesN5GOOD children of the Vulkan host
Other RAT featuresKeylogging, DXGI remote desktop, clipboard replacement, local account creation, WFP filters, mutexes, pipes, window classNoneNoC3 in runbookGAP in-memory or API-level behavior with no verified host event; native hunts N1 to N3 and the account-diff step in C3 are the fallback

Validation gates (summary): telemetry ready (G1), benign baseline (G2), positive test (G3), negative test (G4), Monitor-mode promotion (G5), response readiness (G6). Full table in section 11.

Honest scope: this pack detects the on-disk footprints (Vulkan trio, staged driver, service, task), the process relationships of the side-load host, and the C2 consequences. It cannot see the injection into Task Scheduler, the in-memory RAT, the driver IOCTL, the killed security processes or the WFP filters. If the first hit is a Q10 or Q11 network detection, assume the earlier stages already ran and the sensor may have been tampered with.

16

Hunt Summary Ticket

TITLE:      VulcanRAT207.A: WhatsApp-delivered chain, GoFly64.sys BYOVD, Vulkan DLL side-load, WebSocket RAT
SEVERITY:   High. Morphisec reporting 2026-10-07; SYSTEM-level RAT, kernel driver abuse, security-process termination
SCOPE:      Windows endpoints. Priority: hosts that open files from chat apps, and hosts where the sensor went quiet.

HYPOTHESIS: A user ran Statement.exe. The loader injected a downloader into the Task Scheduler host (SYSTEM), fetched a deployment
            bundle, staged GoFly64.sys as tp_<tick>.tmp to kill Baidu security processes, wrote vulkaninfo-64.exe, vulkan-1.dll and
            vulkan-1.bin to Common Files, registered SYSTEM task USOPrivate, and runs a WebSocket RAT that talks to 61.18.208.27:8888.

QUERIES:    Q1  vulkaninfo-64.exe in Common Files                CONF high | FP low  | COST low
            Q2  VulkanInfo as SYSTEM outside SDK                 CONF med  | FP med  | COST low
            Q3  vulkan-1.dll / vulkaninfo-64.exe PE written      CONF high | FP low  | COST low
            Q4  USOPrivate task or Vulkan task                   CONF high | FP low  | COST low
            Q5  tp_tick.tmp driver staging                       CONF high | FP low  | COST low
            Q6  service from tp_tick.tmp                         CONF high | FP low  | COST low
            Q7  generic BYOVD service staging                    CONF med  | FP med  | COST low
            Q8  campaign hash sweep (4 hashes)                   CONF high | FP low  | COST low
            Q9  GoFly64.sys sighting (commodity)                 CONF med  | FP med  | COST low
            Q10 C2 address connection                            CONF high | FP low  | COST low
            Q11 VulkanInfo network connections                   CONF high | FP low  | COST low
            Q12 children of vulkaninfo-64.exe                    CONF high | FP low  | COST low
            Q13 two or more chain signals per host               CONF high | FP low  | COST med

DO FIRST:   1. Q1, Q3, Q4, Q5, Q6, Q12 across 30 days (near-zero FP)
            2. Q13 correlation, then Q10 and Q11 on any host that hit 1
            3. Check sensor health for hosts that hit any of the above
            4. Enable ASR vulnerable-driver rule in audit mode (I1) and confirm the driver blocklist (I2)
            5. N1 filesystem sweep on suspect hosts

FINDINGS:   [ ] Q1 hits: ______    [ ] Q4 hits: ______    [ ] Q5/Q6 hits: ______
            [ ] Q9 hits (commodity, triage by context): ______    [ ] Hosts with 2+ signals (auto-escalate): ______
            [ ] Hosts with silent sensors: ______

GAPS:       - PoolParty injection, in-memory RAT and driver IOCTL are not visible to CQL
            - Killed security processes produce no victim-side event
            - Task and service queries depend on field population (validate in tenant)
            - All campaign IOCs single-sourced to Morphisec; nothing ships at prevent
            - GoFly64.sys and vulkaninfo-64.exe are commodity signed binaries; detect only
            - Delivery over WhatsApp is reported, not confirmed

ACTIONS:    [ ] Promote Q1, Q3, Q5, Q12 to Custom IOA (Monitor mode, pilot policy, 1 week)
            [ ] Import the section 10 CSV into IOC Management (detect)
            [ ] Deploy Immediate hardening: I1 ASR driver rule (audit), I2 blocklist check, I3 task/service audit, I5 tamper alerts
            [ ] Confirm ScheduledTaskRegistered and CreateService field population (gate G1)
            [ ] Re-run this pack when a second vendor publishes indicators

OWNER:      ______________________
VERSION:    v0.1 - 2026-10-09
17

Changelog

v0.1 2026-10-09 Initial draft. Built from the Morphisec VulcanRAT207.A report (2026-10-07), The Hacker News ThreatsDay summary and the LOLDrivers GoFly64.sys entry, with Microsoft Learn and MITRE ATT&CK pages for hardening and mapping. Thirteen CQL hunt queries, five campaign-specific atomic indicators imported as detect, two commodity items (GoFly64.sys by file name, the VulkanInfo host hash) held as hunt only. Nothing ships at prevent. The related port 1234 RomulusLoader package was deliberately excluded.
18

References

TierSourceUsed forAccessed
1Morphisec: From WhatsApp to SYSTEM, Inside the VulcanRAT207.A Intrusion ChainPrimary source: chain, driver, side-load, RAT, IOCs2026-10-09
2The Hacker News: ThreatsDay bulletin (VulcanRAT207.A section)Secondary coverage, behavior corroboration only2026-10-09
1LOLDrivers: GoFly64.sysDriver catalogue entry, second source for the hash and commodity status2026-10-09
1Microsoft Learn: Microsoft recommended driver block rulesHardening I1, I2, S1, S22026-10-09
1Microsoft Learn: Attack surface reduction rules referenceHardening I1, N12026-10-09
1MITRE ATT&CK T1574.001: DLLTechnique definition and mitigation M-codes2026-10-09
1MITRE ATT&CK T1053.005: Scheduled TaskTechnique definition and mitigation M-codes2026-10-09
1MITRE ATT&CK T1068: Exploitation for Privilege EscalationTechnique definition and mitigation M-codes2026-10-09
1MITRE ATT&CK T1685: Disable or Modify ToolsTechnique definition and mitigation M-codes2026-10-09
1MITRE ATT&CK T1055: Process InjectionTechnique definition and mitigation M-codes2026-10-09
1MITRE ATT&CK T1543.003: Windows ServiceTechnique definition and mitigation M-codes2026-10-09