SHEET#CREEP — APT36 / Transparent Tribe Google Sheets API RAT

Diplomatic-themed ISO phishing lure delivers a ~20 KB C# RAT (vaultsvc.exe) that abuses the Google Sheets API as its C2 — one victim tab per host, Base64 traffic, XOR-obfuscated config, and PowerShell executed in-process to leave no child process. Pakistan-aligned espionage; Securonix continuation of the Zscaler-documented family.
Threat
SHEET#CREEP · APT36 / Transparent Tribe
Severity
NATION-STATE ESPIONAGE · RAT
Type
Spearphish ISO → C# RAT → Web-Service C2
Access
User-execution (LNK-in-ISO)
Version
v0.2 · 2026-06-22
Author
HuntPack
Confidence
Moderate attribution (Securonix); high TTP confidence
01

Executive Summary

SHEET#CREEP is an ongoing espionage campaign tracked by Securonix Threat Research, attributed with moderate confidence to APT36 / Transparent Tribe (Pakistan-aligned), a group historically targeting Indian government and military entities. The campaign delivers a compact (~20 KB) C# remote access trojan that abuses the Google Sheets API as its entire command-and-control channel. The malware family was first documented by Zscaler ThreatLabz (Jan 2026); the current Securonix analysis is a continuation/evolution with new obfuscation and evasion.

Initial access is a diplomatic-themed ISO lure (e.g. a UAE–India strategic-partnership theme, UAE-India_Strategic_Partnership_Week.iso) containing a LNK shortcut masquerading as a PDF. When the user double-clicks the mounted ISO, the LNK launches a C# dropper that shows a decoy PDF while installing the RAT (vaultsvc.exe) into %LOCALAPPDATA%\Microsoft\Vault\ with Hidden+System attributes, then self-deletes. Persistence is a COM-created scheduled task WindowsVaultSyncService with a deliberately confusing description mixing Edge/Windows/Discord terms.

For C2, the RAT authenticates to a single attacker-owned spreadsheet using an embedded GCP service-account RSA-2048 private key (JWT/OAuth2), then uses one spreadsheet tab per victim (keyed by a username-hostname-4charhash id). Operators write Base64-encoded commands to one column; the victim returns Base64 output in another column. To all network monitoring this looks like ordinary Google Workspace traffic to sheets.googleapis.com / oauth2.googleapis.com.

Two evolutions raise the bar for defenders: (1) C2 config strings (spreadsheet ID, service-account creds) that were previously plaintext are now XOR-obfuscated with the key "discrete" and decrypted only at runtime, defeating static config-string hunting; and (2) the RAT executes PowerShell entirely in-process via the System.Management.Automation namespace — no child powershell.exe is ever spawned. Researchers extracted the embedded creds, authenticated to the live sheet, and found 91 active victim tabs (including a high-confidence target in Islamabad, Pakistan), alongside numerous sandbox/researcher tabs.

Defender priority: The in-process PowerShell design removes the usual child-process command-line signal — this is a deliberate detection gap. Pivot the hunt to the durable spine: (1) a non-browser / unsigned .NET process talking to the Google Sheets API, and (2) the load points — execution from a mounted ISO/removable volume, a binary running out of %LOCALAPPDATA%\Microsoft\Vault\, and the WindowsVaultSyncService scheduled task. Any one confirmed hit is a probable live RAT — treat as active espionage intrusion.

02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry Forward
1 · VendorSecuronix Threat Research — "SHEET#CREEP Evolved"Primary report: APT36 attribution (moderate), Google Sheets C2, embedded GCP key, XOR key "discrete", in-process PowerShell, 91 victim tabs, full IOCs.Yes
1 · VendorZscaler ThreatLabz (Jan 2026)First documentation of the SHEET#CREEP malware family / Google Sheets RAT — origin baseline.Yes
2 · PressCyber Security NewsSHEET#CREEP C# RAT abuses Google Sheets API; hardcoded service account, Base64 columns, XOR "discrete", in-process execution, vaultsvc.exe IOCs.Yes
2 · PressSOC Prime — config-obfuscation analysisMalware returns with new config obfuscation (plaintext → XOR), detection content emphasis.Yes
2 · PressGBHackers — UAE–India diplomatic lureDiplomatic ISO lure theme; targeting context.Partial

Web-hunter note: Atomic file hashes and the C2 spreadsheet ID/service account ARE published and durable enough to block/hunt today, but APT36 routinely re-tools — the campaign-specific creds and ISO names will rotate. Lead with behavioral detection (network-to-Google-API by a non-browser .NET process; load-point execution) and treat the published hashes/IDs as high-value but perishable. The XOR-"discrete" config string is now obfuscated in memory, so do not rely on static plaintext config hunts.

03

Hunt Brief & Attack Chain

Hypotheses (ordered by fidelity)

  1. H1 (high): A non-browser process makes DNS / network connections to sheets.googleapis.com / oauth2.googleapis.com / www.googleapis.com — the signature Google Sheets API C2 channel (T1102.002). Strongest angle; tune hard by excluding browsers and legitimate Google API/sync clients.
  2. H2 (high): A payload executes from a mounted ISO/IMG or removable volume (.exe / .lnk / .NET assembly) shortly after a disk-mount — the lure detonation (T1566.001 + T1204.002 + T1027.006).
  3. H3 (high): A process runs from %LOCALAPPDATA%\Microsoft\Vault\ (e.g. vaultsvc.exe) — the dropped RAT load point, an unusual execution path for a CLR-hosted binary.
  4. H4 (high): A scheduled task named WindowsVaultSyncService is created (or runs) pointing at a user-writable Vault path — the persistence mechanism (T1053.005).
  5. H5 (medium): An unsigned / user-path .NET (CLR-hosted) binary beacons on an interval to googleapis endpoints — correlate CLR load + repeating Google-API connections from the same image.
  6. H6 (medium): A freshly written PE in a user-writable/temp/Vault path is executed soon after (T1105 / T1204) — the dropper-to-RAT staging.
  7. H7 (low): Known atomic IOCs present — file hashes for the ISO/dropper/RAT, the C2 spreadsheet ID, or the service-account string (perishable; APT36 re-tools).

Attack chain

StepTelemetryHunt Angle
1 · Spearphish delivers diplomatic-themed ISOEmail / file write of *.iso; FileCreateInfo TargetFileNameH2 — ISO landing then mount
2 · User mounts ISO, runs LNK-as-PDFDiskMount-type events; ProcessRollup2 ImageFileName on mounted drive letterH2 — exec from mounted volume
3 · C# dropper shows decoy PDF, drops RAT, self-deletesPeFileWritten / FileCreateInfo TargetFileName under Vault; ProcessRollup2H6 — PE written then executed
4 · RAT lands in %LOCALAPPDATA%\Microsoft\Vault\ (Hidden+System)ProcessRollup2 ImageFileName; file eventsH3 — exec from Vault path
5 · Persistence: COM scheduled task WindowsVaultSyncServiceScheduledTask / RegGenericValueUpdate / TaskScheduler treeH4 — named task creation
6 · C2 over Google Sheets API (Base64 columns, JWT auth)DnsRequest DomainName; NetworkConnectIP4 RemoteAddressIP4H1/H5 — non-browser .NET → googleapis
7 · In-process PowerShell command execution (no child proc)Detection gapSystem.Management.Automation in-memoryPivot to H1/H3/H4 (no child powershell.exe)

Known detection gap: Because the RAT runs PowerShell in-process (no powershell.exe child, no script-block command line on a child), the classic "office app spawns powershell" / child-command-line hunts will NOT fire. Coverage is deliberately pivoted to the network (Google-API) and load-point (ISO mount, Vault path, scheduled task) angles. Where available, AMSI/script-block telemetry on the host CLR process is the only in-process visibility.

04

Consolidated IOC Table

APT36 re-tools frequently. The file hashes, spreadsheet ID, and service-account string below are published by Securonix and usable today, but are perishable — validate in your own telemetry and pair with the behavioral signatures, which survive rotation. The C2 IP is a shared Google front (do NOT block).

TypeValueConfidenceActionContext
behaviorNon-browser / unsigned .NET process connects to sheets.googleapis.com / oauth2.googleapis.comhighdetectGoogle Sheets API C2 (H1/H5)
behaviorProcess executes from a mounted ISO/IMG or removable volumehighdetectLure detonation (H2)
path%LOCALAPPDATA%\Microsoft\Vault\vaultsvc.exehighdetectDropped RAT load point (H3)
taskWindowsVaultSyncService (scheduled task)highdetectPersistence (H4)
sha2561ba67bb1cfad42446880cca53cbd05fe66d7514b2bb139b48e5c63adff14be7bmediumhuntLure ISO (perishable)
sha2562cc7c2d8653c98e5bac32fcaf5e45b861efb4bb87df3b3f96285edb475e75bbamediumhuntC# dropper (perishable)
sha25662d62950ff7a0e43550a5d0ba55d32d5083b9de5538e0f012e406b6d951e16aamediumhuntRAT vaultsvc.exe (perishable)
spreadsheet1Lb5BEIsehbCGe8p1jkfWf5Mw1dBAcw5RHWFdga5gFq8mediumhuntC2 Google Sheet ID (perishable)
accountsheet5-495707@appspot.gserviceaccount.commediumhuntEmbedded GCP service account (perishable)
mutexGlobal\WinSync_<username>-<hostname>-<4char-hash>mediumhuntRAT single-instance mutex
ipv4142.251.223.42 (Google LLC, AS15169)lowenrichShared Google front — DO NOT block
05

Affected Surface & Telemetry Matrix

SurfaceRequired TelemetryPriorityGap Risk
Windows endpoints (user workstations — diplomatic / government targets)Falcon for Windows — ProcessRollup2CriticalLow
Endpoint network egress to Google APIsNetworkConnectIP4 (RemoteAddressIP4), DnsRequest (DomainName)CriticalLow
Removable / mounted-image executionProcessRollup2 ImageFileName on mounted drive; DiskMount eventsHighMed — mount-event coverage varies
Dropped payload / file writes (Vault, temp)FileCreateInfo / PeFileWritten (TargetFileName)HighMed — PE-write telemetry coverage varies
Persistence (scheduled task / Run key)ScheduledTask events, RegGenericValueUpdate / RegKeyCreateHighLow
In-process PowerShell (no child process)AMSI / ScriptControlScanTelemetry on the CLR host (if enabled)MediumHigh — in-memory, often invisible
06

ATT&CK Mapping

TacticTechniqueObserved BehaviorQuery / Control
Initial AccessT1566.001 — Spearphishing AttachmentDiplomatic-themed ISO with LNK-as-PDFQ1 · S12
ExecutionT1204.002 — User Execution: Malicious FileUser mounts ISO, runs the LNKQ1 · Q3
ExecutionT1059.001 — PowerShell (in-process)System.Management.Automation, no child procGAP · Q5
Defense EvasionT1027.006 / T1027.013 — Obfuscation (HTML smuggling / XOR config)ISO container; XOR "discrete" configQ1 · Q4
Defense EvasionT1564.001 / T1036.005 — Hidden files / MasqueradingHidden+System in Vault; benign-looking task nameQ3 · Q6
PersistenceT1053.005 — Scheduled TaskWindowsVaultSyncService at logonQ6
Command & ControlT1102.002 — Web Service: Bidirectional CommGoogle Sheets API, Base64 columnsQ2 · Q4 · Q5
Command & ControlT1573.002 — Encrypted Channel (asymmetric)JWT/OAuth2 over TLS to googleapisQ2 · Q5
ExfiltrationT1041 — Exfil Over C2 ChannelBase64 output written to victim tabQ2 · Q5
07

Native Audit-Log Hunts (non-CQL)

Checks that do not require building CQL — run these directly on the host or via Falcon RTR sweeps:

  • Vault directory sweep: on suspect hosts, list %LOCALAPPDATA%\Microsoft\Vault\ for any EXE (especially Hidden+System). The legitimate Windows Credential Vault does not place executables here. RTR: ls -force "$env:LOCALAPPDATA\Microsoft\Vault".
  • Scheduled-task review: enumerate tasks for WindowsVaultSyncService or any task whose description mixes Edge/Windows/Discord terms or points at a user-writable Vault path. RTR: schtasks /query /fo LIST /v then grep for Vault / WinSync.
  • ISO landing review: search Downloads / mail-attachment caches for recently written .iso / .img files with diplomatic-themed names; correlate with a subsequent mount.
  • Mutex check: look for a running handle matching Global\WinSync_* as a quick live-RAT tell.
  • Proxy / firewall logs: review egress to sheets.googleapis.com and oauth2.googleapis.com and identify which process initiated it — a non-browser client to the Sheets API on a host with no Google Workspace use case is suspect.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · Execution from a mounted ISO/IMG or removable volume
CONF HIGHFP MEDCOST LOW

Looks for: a process (.exe / .NET assembly) whose ImageFileName sits on a non-system drive letter (D:–Z:) — the typical mount point for a double-clicked ISO/IMG lure (H2). FP: legitimate software on USB/optical media, portable apps. Tune by excluding known admin/installer media and scoping to interactive user sessions.

// HUNT: Process execution from a mounted ISO/IMG / removable volume (lure detonation)
// MITRE: T1566.001, T1204.002, T1027.006
// CONF: high  FP: medium  COST: low | REQUIRES: Falcon for Windows ProcessRollup2
// FALSE POSITIVES: portable apps / installers run from USB or optical media
// TUNING: exclude known software-distribution media; favor .NET/LNK-launched children
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ImageFileName=/^[D-Z]:\\.*\.(exe|scr|com|dll|lnk)$/i
| ImageFileName!=/\\(Program Files|Windows)\\/i
| table([@timestamp, ComputerName, aid, UserName, ImageFileName, ParentBaseFileName, CommandLine], limit=200)
Q2 · Non-browser process resolves / connects to Google Sheets API (C2 signature)
CONF HIGHFP MEDCOST MED

Looks for: a DNS request to sheets.googleapis.com / oauth2.googleapis.com / www.googleapis.com made by a process that is NOT a known browser or Google sync/API client — the signature Google Sheets API C2 channel (H1, T1102.002). This is the strongest angle; the in-process-PowerShell evasion does not hide it. FP-prone — tune hard.

// HUNT: Non-browser process resolves the Google Sheets / OAuth API (C2 channel)
// MITRE: T1102.002, T1573.002, T1041
// CONF: high  FP: medium  COST: medium | REQUIRES: DnsRequest with ContextBaseFileName
// FALSE POSITIVES: browsers, Google Drive/Backup&Sync, gcloud SDK, dev tooling, Office add-ins
// TUNING: extend the browser/Google-client exclusion list to your fleet's approved apps
#event_simpleName=DnsRequest
| DomainName=/(sheets|oauth2|www)\.googleapis\.com$/i
| ContextBaseFileName!=/^(chrome|msedge|firefox|brave|opera|iexplore|googledrivesync|googledrivefs|backupandsync|gcloud|gsutil|bq|python|svchost|onedrive|teams|outlook|excel)\.exe$/i
| table([@timestamp, ComputerName, aid, UserName, ContextBaseFileName, DomainName], limit=200)
Q3 · Process executing from the %LOCALAPPDATA%\Microsoft\Vault path
CONF HIGHFP LOWCOST LOW

Looks for: any process executing with an ImageFileName under \AppData\Local\Microsoft\Vault\ (H3) — the RAT's drop location (vaultsvc.exe). The legitimate Windows Credential Vault is a system store, not an execution directory. FP: very low — investigate every hit.

// HUNT: Binary executing from the user Microsoft\Vault directory (dropped RAT)
// MITRE: T1204.002, T1564.001, T1036.005
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: rare; the Vault dir is not a normal execution path
// TUNING: none required; broaden to other AppData drop dirs if scoping a wider campaign
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ImageFileName=/\\AppData\\Local\\Microsoft\\Vault\\.*\.exe$/i
| table([@timestamp, ComputerName, aid, UserName, ImageFileName, ParentBaseFileName, CommandLine, SHA256HashData], limit=200)
Q4 · Endpoint connects to the Google API IP range from a non-browser image
CONF MEDFP MEDCOST MED

Looks for: outbound TCP/443 connections to Google's 142.251.0.0/16 / 142.250.0.0/15 fronts from a process that is not a known browser (H1 corroboration via NetworkConnectIP4, complementing the DNS angle in Q2). FP: the IP is a shared Google front — do NOT block on it; use it only to pivot to the initiating image. Pair with Q2/Q5.

// HUNT: Non-browser process opens TCP/443 to Google API IP fronts (C2 corroboration)
// MITRE: T1102.002, T1571
// CONF: medium  FP: medium  COST: medium | REQUIRES: NetworkConnectIP4
// FALSE POSITIVES: ANY Google-backed app shares these IPs — pivot, never block on IP
// TUNING: join to ContextBaseFileName/process; exclude approved browsers + Google clients
#event_simpleName=NetworkConnectIP4
| RemotePort=443
| RemoteAddressIP4=/^142\.(250|251)\./
| ContextBaseFileName!=/^(chrome|msedge|firefox|brave|opera|googledrivesync|googledrivefs|backupandsync|onedrive)\.exe$/i
| table([@timestamp, ComputerName, aid, ContextBaseFileName, RemoteAddressIP4, RemotePort], limit=200)
Q5 · Unsigned / user-path .NET binary beaconing to googleapis (interval)
CONF HIGHFP LOWCOST MED

Looks for: a process running from a user-writable path (AppData / Temp / mounted volume) that repeatedly resolves the Google APIs — the dropped C# RAT beaconing on its poll interval (H5). Aggregating by image + distinct-time bins surfaces the steady-cadence beacon that distinguishes C2 from one-off API use. FP: low once scoped to user-path images.

// HUNT: User-path binary repeatedly resolving the Google API (RAT beacon cadence)
// MITRE: T1102.002, T1573.002
// CONF: high  FP: low  COST: medium | REQUIRES: DnsRequest with ContextBaseFileName/ContextImageFileName
// FALSE POSITIVES: low; user-path apps legitimately hitting Google APIs are rare in a managed fleet
// TUNING: raise the count threshold for noisy hosts; widen window for slow beacons
#event_simpleName=DnsRequest
| DomainName=/(sheets|oauth2|www)\.googleapis\.com$/i
| ContextImageFileName=/\\(AppData|Temp|Windows\\Temp)\\/i
| groupBy([aid, ComputerName, ContextBaseFileName, ContextImageFileName], function=count(as=resolves))
| resolves>=5
| table([ComputerName, aid, ContextBaseFileName, ContextImageFileName, resolves], limit=200)
Q6 · Persistence — WindowsVaultSyncService scheduled task / Run key
CONF HIGHFP LOWCOST LOW

Looks for: creation/modification of a scheduled task or Run-key value referencing WindowsVaultSyncService, WinSync, or the Vault path (H4, T1053.005). Catches the persistence registration directly. FP: low — these strings are campaign-specific.

// HUNT: Persistence registration for the SHEET#CREEP RAT (task / Run key)
// MITRE: T1053.005, T1547.001
// CONF: high  FP: low  COST: low | REQUIRES: RegGenericValueUpdate / RegKeyCreate / ScheduledTask telemetry
// FALSE POSITIVES: low; key on the specific names + Vault path
// TUNING: add other observed task names as the campaign evolves
#event_simpleName=/RegGenericValueUpdate|RegKeyCreate|ScheduledTask.*/
| RegStringValue=/(WindowsVaultSyncService|WinSync|\\Microsoft\\Vault\\)/i OR TaskName=/(WindowsVaultSyncService|WinSync)/i OR TaskExecutable=/\\Microsoft\\Vault\\/i
| table([@timestamp, ComputerName, aid, UserName, RegObjectName, RegStringValue, TaskName, TaskExecutable], limit=200)
Q7 · Atomic IOC sweep — known SHEET#CREEP hashes
CONF HIGHFP LOWCOST LOW

Looks for: any process whose SHA256HashData matches the published ISO/dropper/RAT hashes (H7). Highest precision, lowest durability — APT36 re-tools, so a clean result does not clear the host. Run alongside the behavioral queries. FP: none.

// HUNT: Known SHEET#CREEP file hashes present in process telemetry
// MITRE: T1204.002, T1059.001
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2 with SHA256HashData
// FALSE POSITIVES: none (exact-match hashes)
// TUNING: perishable — refresh hashes as Securonix/Zscaler publish new samples
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| SHA256HashData=/^(2cc7c2d8653c98e5bac32fcaf5e45b861efb4bb87df3b3f96285edb475e75bba|62d62950ff7a0e43550a5d0ba55d32d5083b9de5538e0f012e406b6d951e16aa)$/i
| table([@timestamp, ComputerName, aid, UserName, ImageFileName, SHA256HashData, ParentBaseFileName], limit=200)
09

CrowdStrike Custom IOA Recommendations

Promotion candidates from the hunt queries above (Windows platform, Process Create rule type unless noted):

IOA NamePatternExclusionsAction / Deployment
Exec From Microsoft\Vault (SHEET#CREEP)ImageFileName under \AppData\Local\Microsoft\Vault\*.exeNone knownDetect → Block (from Q3; low FP)
Exec From Mounted/Removable VolumeGrandparent explorer.exe; ImageFileName on drive D:–Z: outside Program Files/WindowsApproved distribution mediaDetect after baseline (from Q1)
Vault Sync Persistenceschtasks/svc task create referencing WindowsVaultSyncService / Vault pathNoneDetect → Block (from Q6)

The Google-Sheets-API C2 queries (Q2/Q4/Q5) are best deployed as scheduled-search detections / NGSIEM correlation rules, not Process-Create IOAs — they key on DNS/network telemetry and need the per-fleet browser/Google-client exclusion list maintained over time. Because the RAT runs PowerShell in-process, there is no child-process IOA for the command execution itself — that gap is covered by the network and load-point IOAs instead.

10

Machine-Readable IOC Appendix

One-click copy blocks for ingestion. File hashes and the C2 sheet ID are published but perishable (APT36 re-tools); the Google IP is a shared front — enrich only, never block.

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
sha256,1ba67bb1cfad42446880cca53cbd05fe66d7514b2bb139b48e5c63adff14be7b,detect,high,2026-12-22,SHEETCREEP lure ISO,campaign:SHEETCREEP
sha256,2cc7c2d8653c98e5bac32fcaf5e45b861efb4bb87df3b3f96285edb475e75bba,detect,critical,2026-12-22,SHEETCREEP C# dropper,campaign:SHEETCREEP
sha256,62d62950ff7a0e43550a5d0ba55d32d5083b9de5538e0f012e406b6d951e16aa,detect,critical,2026-12-22,SHEETCREEP RAT vaultsvc.exe,campaign:SHEETCREEP
Behavioral Signatureshunt logic
non_browser_proc -> DNS/conn: sheets.googleapis.com | oauth2.googleapis.com   # C2
proc_exec FROM mounted ISO/IMG / removable volume (D:-Z:)                     # lure
proc_exec FROM %LOCALAPPDATA%\Microsoft\Vault\*.exe                            # RAT load point
scheduled_task: WindowsVaultSyncService  (Vault path target)                  # persistence
mutex: Global\WinSync_<user>-<host>-<4char>                                     # live RAT tell
NOTE: PowerShell runs in-process (no child powershell.exe) — DETECTION GAP
Named Tooling / Artifactsreference
SHEET#CREEP — APT36 / Transparent Tribe (moderate confidence)
Lure: diplomatic-themed ISO (e.g. UAE-India_Strategic_Partnership_Week.iso) w/ LNK-as-PDF
RAT: vaultsvc.exe (~20 KB C#) in %LOCALAPPDATA%\Microsoft\Vault\ (Hidden+System)
C2: Google Sheets API; one tab per victim; Base64 cmd/response columns
Auth: embedded GCP service account + RSA-2048 PKCS#8 key (JWT/OAuth2)
Config: XOR-obfuscated, key = "discrete"  |  Exec: in-process PowerShell, no child proc
Persistence: scheduled task WindowsVaultSyncService
C2 / Account Indicatorsenrich
# Google Sheets API C2 (hunt / enrich — do NOT block the shared Google IP)
c2_sheet_id      = 1Lb5BEIsehbCGe8p1jkfWf5Mw1dBAcw5RHWFdga5gFq8
service_account  = sheet5-495707@appspot.gserviceaccount.com
c2_domains       = sheets.googleapis.com  oauth2.googleapis.com  www.googleapis.com
c2_ip_shared     = 142.251.223.42  (Google LLC AS15169 — ENRICH ONLY)
mutex            = Global\WinSync_<username>-<hostname>-<4char-hash>
xor_config_key   = discrete
11

Detection Validation Gates

GateCheckPass Criteria
1 · Telemetry readyFalcon for Windows on target endpoints; ProcessRollup2, DnsRequest, NetworkConnectIP4 flowingEvents seen from every in-scope host in last 24h
2 · Benign baselineRun Q2/Q4/Q5 over 7–14 days; enumerate every legitimate process that talks to googleapis (browsers, Drive sync, gcloud, Office add-ins)Approved Google-client allowlist built & excluded
3 · Positive testIn a lab VM, mount a benign ISO and run a benign EXE from it; drop a benign EXE into %LOCALAPPDATA%\Microsoft\Vault\ and run it; create a test task named WindowsVaultSyncServiceQ1, Q3 and Q6 each fire on the test action
4 · PromotionQ3/Q6 FP rate effectively zero after review; Q2 allowlist stablePromote Q3 & Q6 to blocking IOAs; keep Q2/Q4/Q5 as investigate-only correlation
12

Hardening — Tiered

Immediate (this week — low compat risk)
  • Block ISO/IMG/VHD auto-mount on double-click for standard users — strips the primary delivery vector (mark-of-the-web bypass via disk image). Deploy the registry/GPO in S13·A. (T1566.001 / T1204.002; M1042 — Disable or Remove Feature.)
  • Deploy Q3 (Vault-path exec) and Q6 (WindowsVaultSyncService) as detections immediately — both are low-FP and catch live infections regardless of the in-process-PowerShell evasion. (M1040 — Behavior Prevention on Endpoint.)
  • User awareness blast on the diplomatic-lure phishing: warn government/diplomatic staff specifically about ISO/IMG attachments and "PDF" shortcuts inside mounted images. (M1017 — User Training.)
Near term (1–4 weeks — pilot first)
  • Application control / WDAC to block unsigned .NET execution from user paths: deny execution of binaries under AppData / Temp / removable volumes — stops the dropped C# RAT from running at all. (M1038 — Execution Prevention; Microsoft WDAC / AppLocker.)
  • Attack Surface Reduction (ASR) rules: enable "Block executable files from running unless they meet a prevalence/age/trusted-list criterion", "Block untrusted/unsigned processes from USB", and the Office child-process/script rules. (M1042; Microsoft Defender ASR — see S13·C.)
  • Treat mounted-image execution as suspicious: alert on any process launched from a mounted ISO volume even where you cannot fully block auto-mount. (M1042.)
Strategic (1–3 months)
  • Egress governance for Google APIs: you cannot block googleapis.com outright, but you can route it through an inspecting proxy and alert on anomalous Sheets-API usage by non-Workspace processes — the SaaS-as-C2 (T1102) blind spot. Monitor service-account JWT auth patterns. (M1037 — Filter Network Traffic / monitor web service C2.)
  • Privileged-account & least-privilege baseline: non-admin users by default; restrict scheduled-task creation. Reduces persistence options. (M1026 / M1018.)
  • Phishing-resistant program for high-risk staff: recurring diplomatic-lure simulations, hardened mail filtering that quarantines ISO/IMG/VHD attachments by default. (M1017 / M1031.)
13

Deployable Playbooks

A · Block ISO / IMG / VHD double-click auto-mount (GPO / registry)

Removes the mount handler so standard users can't detonate an image lure by double-clicking. Deploy via GPO Preferences or Intune:

# Disable Explorer mount verb for .iso / .img / .vhd / .vhdx
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\RemovableStorageDevices" /v Deny_All /t REG_DWORD /d 0 /f
# Strip the default "mount" handler for disk images:
reg delete "HKCR\Windows.IsoFile\shell\mount" /f 2>nul
reg delete "HKCR\Windows.VhdFile\shell\mount" /f 2>nul
# (Optional) block image mounting policy where supported:
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Explorer" /v NoUseStoreOpenWith /t REG_DWORD /d 1 /f

B · WDAC / AppLocker — deny unsigned .NET from user paths

# AppLocker EXE rule (deny) — block execution from AppData, Temp and removable media
# Computer Config > Windows Settings > Security > Application Control Policies > AppLocker
#   Executable Rules: DENY  Everyone
#     Path: %OSDRIVE%\Users\*\AppData\*
#     Path: %OSDRIVE%\Windows\Temp\*
#     Path: %REMOVABLE%\*
# Enforce signing for the rest:
#     Publisher rule: ALLOW signed by your trusted publishers; default-deny remainder
Set-AppLockerPolicy -XmlPolicy .\sheetcreep-applocker.xml -Merge

C · Microsoft Defender ASR rules (PowerShell)

# Block untrusted/unsigned processes from USB
Add-MpPreference -AttackSurfaceReductionRules_Ids b2b3f03d-6a65-4f7b-a9c7-1c7ef74a9ba4 -AttackSurfaceReductionRules_Actions Enabled
# Block executable files unless prevalence/age/trusted-list criteria met
Add-MpPreference -AttackSurfaceReductionRules_Ids 01443614-cd74-433a-b99e-2ecdc07bfc25 -AttackSurfaceReductionRules_Actions Enabled
# Block Office apps from creating child processes (covers doc-launched chains)
Add-MpPreference -AttackSurfaceReductionRules_Ids d4f940ab-401b-4efc-aadc-ad5f3c50688a -AttackSurfaceReductionRules_Actions Enabled

D · Live triage / IOC sweep (Falcon RTR)

# Vault drop + persistence + mutex sweep on a suspect host
ls -force "$env:LOCALAPPDATA\Microsoft\Vault"
schtasks /query /fo LIST /v | findstr /i "WindowsVaultSyncService WinSync Vault"
Get-ScheduledTask | Where-Object { $_.TaskName -match 'VaultSync|WinSync' }
# confirm what process is talking to the Sheets API:
Get-NetTCPConnection -RemotePort 443 | Sort-Object OwningProcess
14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the host in Falcon; preserve memory + disk before reboot (the RAT and decrypted XOR config live in memory). Snapshot if virtual.SOC / IRFalcon containment record; memory image; snapshot ID
Hunt the C2 patternRun Q2–Q7 fleet-wide to find every host beaconing to the Sheets API or running from Vault. The actor uses one spreadsheet tab per victim (91 active tabs observed) — assume more than one host. Map the full victim set before eradicating.IR / Threat HuntHost list; per-host process + DNS evidence
EradicateRemove vaultsvc.exe from %LOCALAPPDATA%\Microsoft\Vault\; delete the WindowsVaultSyncService task; clear the Global\WinSync_* mutex by terminating the RAT process; remove the lure ISO/LNK.IR / EndpointRemoved-file inventory; task-delete log; process tree
Rotate & blockRotate credentials and tokens for any account used on the host. Report the C2 spreadsheet ID + service account to Google for takedown. Add the file hashes to IOC blocking. Do NOT block the Google IP — proxy-alert on the non-browser Sheets-API path instead.IR / IdAM / NetworkRotation log; Google abuse report ref; IOC entries
Recover & reportRebuild from known-clean image if integrity uncertain; lift containment; monitor Q2/Q3/Q5 for 14 days. Treat as nation-state espionage — assess data accessed and notify per policy.SOC / IR leadRebuild log; post-recovery hunt results; incident report
15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1566.001 / T1204.002Diplomatic ISO lure → exec from mounted volumeQ1Q1 (after baseline)Good
T1102.002 / T1573.002Google Sheets API C2 (non-browser → googleapis)Q2, Q4, Q5Good — FP allowlist must be maintained
T1564.001 / T1036.005RAT in Microsoft\Vault (Hidden+System)Q3Q3 (block)Good
T1053.005 / T1547.001WindowsVaultSyncService persistenceQ6Q6 (block)Good
T1041Base64 exfil over the Sheets C2 channelQ2, Q5 (channel-level)Partial — visible as channel, not content
T1059.001In-process PowerShell (no child process)— (AMSI only, if enabled)GAP — by design; pivot to network + load-points

Validation: The load-point spine (Q1/Q3/Q6) is strong and low-FP — a confirmed hit on any is a probable live RAT. The C2 spine (Q2/Q4/Q5) is the signature angle but FP-prone: it only stays clean if the browser/Google-client allowlist is maintained per fleet. The in-process PowerShell execution is an intentional detection gap — there is no child powershell.exe and no child command line, so command execution itself is only visible via AMSI/script-block telemetry on the CLR host where enabled; detection is deliberately pivoted to the network (Google-API) and load-point (ISO/Vault/task) angles. Validate all field names (esp. ContextBaseFileName, RegStringValue, TaskName/TaskExecutable) against your tenant before deploying.

16

Hunt Summary Ticket

TITLE:      Hunt — SHEET#CREEP (APT36/Transparent Tribe) Google Sheets API C# RAT
SEVERITY:   High (nation-state espionage; moderate-confidence APT36 attribution)
SCOPE:      Windows endpoints — gov/diplomatic users; Falcon for Windows telemetry
HYPOTHESIS: Diplomatic ISO lure detonates a C# RAT that beacons to the Google
            Sheets API (1 tab/victim, Base64) with in-process PowerShell (no child proc).
QUERIES:    Q1 exec-from-mounted-ISO | Q2 non-browser->googleapis | Q3 Vault-path exec |
            Q4 google-IP-from-non-browser | Q5 user-path .NET beacon | Q6 VaultSync task |
            Q7 known-hash sweep
DO FIRST:   1) Deploy Q3 + Q6 as detections now (low-FP, catch live RAT)
            2) Build the Q2 browser/Google-client allowlist, then run Q2/Q4/Q5 fleet-wide
            3) Any hit = treat as active espionage -> containment runbook (S14)
GAP:        In-process PowerShell -> NO child powershell.exe (T1059.001 detection gap).
            Pivot to network (Google-API) + load-points (ISO/Vault/task).
FINDINGS:   <fill: hosts, Vault binaries, beaconing processes, scheduled tasks, victim tabs>
ACTIONS:    Block ISO auto-mount; WDAC deny user-path .NET; ASR; report C2 sheet to Google
OWNER:      HuntPack
VERSION:    v0.2 · 2026-06-22
17

Changelog

v0.22026-07-24CQL correctness pass. All table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.
v0.12026-06-22Initial HuntPack — 7 CQL hunts (Q1–Q7), 3 IOA candidates, tiered hardening, deployable playbooks (ISO auto-mount block, WDAC/AppLocker, ASR, RTR triage), containment runbook, coverage map. Built from Securonix "SHEET#CREEP Evolved" analysis and corroborating press, with the Zscaler ThreatLabz (Jan 2026) origin baseline. Calls out the in-process-PowerShell evasion as an explicit detection gap and pivots coverage to the network (Google Sheets API) and load-point angles.
18

References

TierSourceUsed ForAccess Date
1 · VendorSecuronix Threat Research — SHEET#CREEP Evolved: Google Sheets RATPrimary intel: attribution, C2 mechanism, XOR config, in-process exec, 91 tabs, IOCs2026-06-22
2 · PressCyber Security News — SHEET#CREEP C# RAT abuses Google Sheets APIRAT mechanics, hardcoded service account, Base64 columns, vaultsvc.exe IOCs2026-06-22
2 · PressSOC Prime — SHEET#CREEP returns with new config obfuscationPlaintext → XOR config evolution; detection content2026-06-22
2 · PressGBHackers — UAE–India diplomatic lureLure theme and targeting context2026-06-22
1 · VendorZscaler ThreatLabz (Jan 2026)Origin baseline — first documentation of the SHEET#CREEP family2026-06-22