Claude Cowork VM Boot Image Tamper
editClaude Cowork VM Boot Image Tamper
editDetects unexpected modification of Claude Desktop Cowork VM boot images (kernel, initrd, root filesystem). Adversaries with user-context access can rewrite these stored images so later Cowork sessions boot attacker-controlled code inside a virtual instance that host EDR cannot inspect by default.
Rule type: eql
Rule indices:
- logs-endpoint.events.file-*
Severity: medium
Risk score: 47
Runs every: 5m
Searches indices from: now-9m (Date Math format, see also Additional look-back time)
Maximum alerts per execution: 100
References:
Tags:
- Domain: Endpoint
- OS: macOS
- OS: Windows
- Use Case: Threat Detection
- Tactic: Defense Evasion
- Data Source: Elastic Defend
- Resources: Investigation Guide
- Domain: LLM
Version: 1
Rule authors:
- Elastic
Rule license: Elastic License v2
Investigation guide
editTriage and analysis
Investigating Claude Cowork VM Boot Image Tamper
Cowork boots a local Linux VM from images under the user’s Claude AppData / Application Support tree. Those files are writable by the user and are not integrity-checked before boot. A non-Claude writer changing them is a strong signal of post-compromise defense evasion: later Cowork sessions can run attacker code inside a sanctioned Hyper-V / Virtualization.framework guest that host EDR does not see by default. This does not grant new privileges.
Possible investigation steps
-
Confirm the writer:
process.name,process.executable,process.parent.executable, anduser.name. This rule already excludes Claude Desktop (claude.exeunderWindowsApps\Claude_*\app\, andClaude/Claude Helperunder/Applications/Claude.app/). Any other writer (script host, LOLBin, unsigned binary) is unexpected. -
Note which artifact changed (
file.name/file.path) andevent.action: -
initrd/initrd.zst: primary PoC target; both are often replaced together so the service cannot re-extract a clean initrd from the.zst. -
vmlinuz/rootfs.*/smol-bin.vhdx: full guest control if replaced. -
Pivot on
process.entity_id/host.idfor ~30m around the alert: how the writer started, other file writes under the Claude package path, and whetherclaude.exe/ Claude.app then started a Cowork session. - If Cowork runs afterward, check whether the session failed and Claude re-downloaded images (careless tamper) or continued normally (payload may have kept the expected guest daemon alive).
- Treat this as evidence of existing host compromise; hunt for the initial access that produced the writer process.
False positive analysis
- Claude Desktop updates should not alert; if they do, the install path likely changed (new WindowsApps package layout or non-AppX install) and the allowlist needs updating, not an exception for the writer name alone.
-
Backup or sync tools rewriting these exact filenames are uncommon; require a stable
process.executablebefore adding an exception. This rule watches create/overwrite/rename/modification only; deletions are out of scope.
Response and remediation
-
Delete or restore the affected bundle directory (Windows:
%LOCALAPPDATA%\Packages\Claude_*\LocalCache\Roaming\Claude\vm_bundles\claudevm.bundle\; macOS:~/Library/Application Support/Claude/vm_bundles/claudevm.bundle/) and let Claude re-download trusted images, or restore from a known-good backup. - Isolate the host and investigate the writer process lineage; rotate credentials and secrets available to that user.
- Search the environment for the same writer hash/path and for other unexpected modifications under Claude package paths.
Rule query
editfile where host.os.type in ("windows", "macos") and
event.action in ("creation", "modification", "overwrite", "rename") and
event.outcome == "success" and
file.path : (
"/Users/*/Library/Application Support/Claude/vm_bundles/claudevm.bundle/initrd",
"/Users/*/Library/Application Support/Claude/vm_bundles/claudevm.bundle/initrd.zst",
"/Users/*/Library/Application Support/Claude/vm_bundles/claudevm.bundle/vmlinuz",
"/Users/*/Library/Application Support/Claude/vm_bundles/claudevm.bundle/vmlinuz.zst",
"/Users/*/Library/Application Support/Claude/vm_bundles/claudevm.bundle/rootfs.img",
"?:\\Users\\*\\AppData\\Local\\Packages\\Claude_*\\LocalCache\\Roaming\\Claude\\vm_bundles\\claudevm.bundle\\initrd",
"?:\\Users\\*\\AppData\\Local\\Packages\\Claude_*\\LocalCache\\Roaming\\Claude\\vm_bundles\\claudevm.bundle\\initrd.zst",
"?:\\Users\\*\\AppData\\Local\\Packages\\Claude_*\\LocalCache\\Roaming\\Claude\\vm_bundles\\claudevm.bundle\\vmlinuz",
"?:\\Users\\*\\AppData\\Local\\Packages\\Claude_*\\LocalCache\\Roaming\\Claude\\vm_bundles\\claudevm.bundle\\rootfs.vhdx",
"?:\\Users\\*\\AppData\\Local\\Packages\\Claude_*\\LocalCache\\Roaming\\Claude\\vm_bundles\\claudevm.bundle\\smol-bin.vhdx"
) and
not (
(process.name : "claude.exe" and
process.executable : "?:\\Program Files\\WindowsApps\\Claude_*\\app\\claude.exe") or
(process.name : ("Claude", "Claude Helper") and
process.executable like "/Applications/Claude.app/*")
)
Framework: MITRE ATT&CKTM
-
Tactic:
- Name: Defense Evasion
- ID: TA0005
- Reference URL: https://attack.mitre.org/tactics/TA0005/
-
Technique:
- Name: Hide Artifacts
- ID: T1564
- Reference URL: https://attack.mitre.org/techniques/T1564/
-
Sub-technique:
- Name: Run Virtual Instance
- ID: T1564.006
- Reference URL: https://attack.mitre.org/techniques/T1564/006/