Interlock Ransomware — CORNFLAKE / FLUTECLICK Web-Compromise Chain
Executive Summary
Interlock (a.k.a. Nefarious Mantis; earlier RAT iteration tracked by Mandiant as WINDYTWIST.SEA) is a double-extortion ransomware operation that has industrialized the ClickFix initial-access technique. In GTI campaign CAMP.26.095, a financially motivated reconnaissance cluster (Mandiant UNC5518) compromises legitimate websites and serves fake CAPTCHA / “fix-it” pages that trick a visitor into pasting a PowerShell one-liner into the Windows Run dialog. That one-liner pulls down a portable Node.js v22.11.0 runtime and runs the CORNFLAKE.V3 backdoor in-memory (node.exe -e), establishing persistence through an HKCU\\...\\Run\\ChromeUpdater value and masquerading scheduled tasks.
CORNFLAKE performs Active Directory reconnaissance (SPN sweeps, nltest domain-trust enumeration, Kerberoasting) and hands the intrusion to a RHYSIDA-linked operator (UNC5774). The operator abuses legitimate Cloudflare Tunnel (*.trycloudflare.com) to mask C2 with hard-coded fallback IPs, steals Active Directory ntds.dit offline by cloning a virtual disk / snapshotting the domain controller (evading EDR that only watches live ntdsutil/vssadmin on the DC), exfiltrates 100s of GB via AzCopy to Azure blobs, and finally pushes the Interlock encryptor across the estate with PsExec running a remote .ps1 from an \\out\\ share. Windows (.interlock / .!nt3rlock) and Linux/ESXi/Nutanix encryptors have both been observed.
Defender priority: The two chokepoints that no other stage can hide are (1) node.exe executing an inline script out of %APPDATA%\\Roaming\\node-v22.11.0-win-x64\\ and (2) offline ntds.dit acquisition via disk-snapshot / VHD-clone tooling on or around a domain controller. Hunt both first — they sit before encryption and before the operator has your credentials.
Source Review & Web Hunter Notes
| Tier | Source | Key finding carried forward | Carry |
|---|---|---|---|
| 1 | Mandiant / GTIG — CORNFLAKE.V3 analysis | UNC5518 ClickFix downloader → UNC5774 CORNFLAKE.V3 backdoor; Node.js persistence (ChromeUpdater Run key), /init1234 C2, node.exe -e, Kerberoasting, WINDYTWIST.SEA | yes |
| 1 | CISA #StopRansomware: Interlock (AA25-203A) | ClickFix fake-CAPTCHA IA, drive-by fake updaters, .interlock/.1nt3rlock, !__README__!.txt, AzCopy/Azure exfil, Rhysida overlap, full MITRE mapping | yes |
| 1 | FortiGuard Labs — “New Techniques, Same Old Tricks” | NodeSnake/CORNFLAKE & Interlock RAT C2 IPs and trycloudflare domains, crypter byte pattern 488b041f483345f04889041e, PsExec mass-deploy command, BYOVD Hotta Killer, masquerading scheduled tasks | yes |
| 1 | Sekoia.io TDR — “evolving under the radar” | Large IOC set (C2 IPs, trycloudflare C2, ransomware SHA256, RAT SHA256), four RAT variants, Cloudflare Tunnel fallback IPs, /init1234, port 443 raw TCP | yes |
| 2 | Forescout Vedere Labs — “A Year Later” | ntds.dit theft via VHD/virtual-disk snapshot clone to evade EDR; four RAT variants; vssadmin shadow deletion; ESXi/Nutanix targeting | partial |
| 2 | SOC Prime — detection guidance | cht.exe stealer, klg.dll keylogger, PHP RAT, “Chrome Updater” Run key, Base64 PowerShell via fake CAPTCHA | partial |
Snapshots of every cited source are saved verbatim under Interlock-CORNFLAKE-Hunt-sources/ and drive the atomic-IOC provenance gate. Concrete C2 IPs / domains / hashes below appear in at least one snapshot; the operator’s Let’s Encrypt fallback domains were reported as a behavior but not disclosed as specific values, so they ship as REPLACE_WITH_ placeholders.
Hunt Brief & Attack Chain
Hunt hypotheses (fidelity-ordered)
| # | Hypothesis | MITRE | Conf |
|---|---|---|---|
| H1 | node.exe runs an inline -e script from %APPDATA%\\Roaming\\node-v22.11.0-win-x64\\ — CORNFLAKE.V3 in-memory backdoor | T1059.007 | HIGH |
| H2 | PowerShell one-liner spawned by explorer/browser using irm|iex to a :8080 host — ClickFix paste-execution | T1204.004 | HIGH |
| H3 | Offline ntds.dit acquisition via diskshadow / Mount-VHD / ntdsutil ifm near a DC — EDR-evading credential theft | T1003.003 | HIGH |
| H4 | HKCU Run value ChromeUpdater (or TimeSync*) pointing at AppData — CORNFLAKE persistence | T1547.001 | MED |
| H5 | Node/rundll32 out of AppData resolving *.trycloudflare.com — Cloudflare-Tunnel-masked C2 | T1572 | MED |
| H6 | SPN sweep + domain-trust enumeration (setspn -T, nltest /domain_trusts, whoami /all) shortly after a node.exe parent — recon payload | T1558.003 | MED |
| H7 | PsExec launching powershell -ExecutionPolicy Bypass -file \\HOST\\out\\1.ps1 — estate-wide ransomware push | T1021.002 | HIGH |
| H8 | Mass file writes with .interlock / .!nt3rlock extension — encryption impact | T1486 | HIGH |
Attack chain
| Step | Behavior | Telemetry | Hunt angle |
|---|---|---|---|
| 1 · Initial access | Compromised site serves fake CAPTCHA; victim pastes PowerShell into Run | ProcessRollup2 | explorer → powershell w/ irm/iex + :8080 |
| 2 · Execution | Portable Node.js pulled; CORNFLAKE.V3 run in-memory | ProcessRollup2, NetworkConnectIP4 | node.exe -e from AppData; nodejs.org zip fetch |
| 3 · Persistence | Run key ChromeUpdater; masquerading scheduled tasks | AsepValueUpdate, ScheduledTaskRegistered | Run value / task action pointing at AppData |
| 4 · C2 | HTTP XOR to Cloudflare Tunnel with hard-coded fallback IPs; /init1234 | DnsRequest, NetworkConnectIP4 | node.exe → *.trycloudflare.com; fallback IPs |
| 5 · Discovery | AD recon, SPN sweep, Kerberoasting | ProcessRollup2 | setspn/nltest/whoami with node parent |
| 6 · Cred access | Offline ntds.dit via VHD snapshot / disk clone | ProcessRollup2, FileCreateInfo | diskshadow / Mount-VHD / ntdsutil ifm |
| 7 · Exfil | AzCopy to Azure blob (100s of GB) | ProcessRollup2, NetworkConnectIP4 | azcopy/win64.exe egress to *.blob.core.windows.net |
| 8 · Impact | PsExec pushes encryptor; .interlock/.!nt3rlock; shadow deletion | ProcessRollup2, FileCreateInfo | PsExec remote .ps1; extension writes; vssadmin delete |
Consolidated IOC Table
Cloudflare Tunnel subdomains and C2 IPs are highly perishable (free, disposable). Hunt on them retrospectively; rely on the behavioral queries in §8 for durable detection. Only indicators present in a saved source snapshot are listed as atomic values.
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| ipv4 | 216.245.184.181 | med | hunt | NodeSnake/CORNFLAKE C2 |
| ipv4 | 168.119.96.41 | med | hunt | NodeSnake/CORNFLAKE C2 |
| ipv4 | 128.140.120.188 | med | hunt | Interlock RAT C2 (Fortinet + Mandiant) |
| ipv4 | 138.199.161.141 | med | hunt | ClickFix PowerShell loader host (:8080) |
| domain | speak-head-somebody-stays.trycloudflare.com | med | hunt | Cloudflare Tunnel C2 |
| domain | suffering-arnold-satisfaction-prior.trycloudflare.com | med | hunt | Cloudflare Tunnel C2 |
| sha256 | fa3cdb0656522db7409fda54e9a9780cefbd4458c4ad77fdbbb06367207eaf56 | high | detect | NodeSnake / CORNFLAKE sample |
| sha256 | 000b24076cae8dbb00b46bb59188a0da5a940e325eaac7d86854006ec071ac5b | high | detect | CORNFLAKE.V3 (Node.js) persistence copy |
| sha256 | 4a97599ff5823166112d9221d0e824af7896f6ca40cd3948ec129533787a3ea9 | high | detect | Interlock Windows encryptor |
| sha256 | 28c3c50d115d2b8ffc7ba0a8de9572fbe307907aaae3a486aabd8c0266e9426f | high | detect | Interlock Linux/ESXi encryptor |
| byte-pattern | 488b041f483345f04889041e | high | hunt | Crypter decryption-loop signature (memory/YARA) |
| reg-value | HKCU\\...\\CurrentVersion\\Run\\ChromeUpdater | high | hunt | CORNFLAKE persistence |
| filepath | %APPDATA%\\Roaming\\node-v22.11.0-win-x64\\ | high | hunt | Portable Node.js staging dir |
| c2-uri | /init1234 | high | hunt | CORNFLAKE.V3 initial POST |
| extension | .interlock / .!nt3rlock / .1nt3r10ck | high | hunt | Encrypted-file marker |
| filename | !__README__!.txt | high | hunt | Ransom note |
Affected Surface & Telemetry Matrix
| Surface | Telemetry required | Priority | Gap risk |
|---|---|---|---|
| Windows endpoints (user) | ProcessRollup2, CommandLine, AsepValueUpdate | P1 | Low — core Falcon coverage |
| Domain controllers | ProcessRollup2, FileCreateInfo, Directory Services audit | P1 | Med — offline VHD clone bypasses live DC watch |
| DNS / egress | DnsRequest, NetworkConnectIP4 | P2 | Med — Cloudflare Tunnel blends with legit CDN |
| Virtualization (ESXi / Nutanix) | SSH auth logs, ELF exec on hypervisor | P2 | High — Falcon rarely on hypervisor |
| Cloud storage (Azure) | Azure Storage / NSG egress logs | P2 | High — AzCopy egress often unmonitored |
| Linux servers | ProcessRollup2 (Falcon for Linux) | P2 | Med |
ATT&CK Mapping
| Tactic | Technique | Observed behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1189 Drive-by; T1204.004 Malicious Copy&Paste | Fake CAPTCHA on compromised sites; PowerShell paste | Q1 |
| Execution | T1059.001 PowerShell; T1059.007 JavaScript | irm/iex loader; node.exe -e CORNFLAKE | Q1, Q2 |
| Persistence | T1547.001 Run Keys; T1053.005 Scheduled Task | ChromeUpdater; TimeSync/Defrag tasks | Q3, Q4 |
| Command & Control | T1071.001 Web; T1572 Tunneling | Cloudflare Tunnel + fallback IPs; /init1234 | Q5 |
| Discovery | T1482 Domain Trust; T1087.002 Domain Account | nltest, setspn, whoami /all | Q6 |
| Credential Access | T1558.003 Kerberoasting; T1003.003 NTDS | SPN sweep; offline ntds.dit via VHD clone | Q6, Q7 |
| Lateral Movement | T1021.002 SMB/Admin Shares; T1570 | PsExec remote .ps1 push | Q8 |
| Exfiltration | T1567.002 Cloud; T1048 Alt Protocol | AzCopy to Azure blob | Native §7 |
| Impact | T1486 Encrypt; T1490 Inhibit Recovery | .interlock writes; vssadmin shadow delete | Q9 |
| Defense Evasion | T1070 Indicator Removal; T1006 Direct Volume Access | Self-delete; BYOVD Hotta Killer; disk-level ntds read | Q7, native |
Native Audit-Log Hunts (non-CQL)
- Windows Security 4688 — new-process with
node.execommand line containing-eand an AppData path; parentpowershell.exe/cmd.exe. - Sysmon 1 / 11 / 13 — process create for node.exe from AppData; file create of
*.log/*.jarunderAppData\\Roaming\\node-v22.11.0-win-x64; RegSetValue on...\\Run\\ChromeUpdater. - Directory Services / DC audit — correlate
diskshadow.exe,vssadmin create shadow, orMount-VHDon or adjacent to a domain controller with any subsequent copy ofntds.dit. Offline clone means the read may happen on a non-DC host after the VHD is mounted — watch member servers that suddenly mount a DC’s virtual disk. - Azure Storage analytics / NSG flow logs — large PUT volume to
*.blob.core.windows.netfrom a workstation runningazcopyorwin64.exe. - ESXi / Nutanix — unexpected SSH logins (PuTTY / Posh-SSH) followed by ELF execution named
scriptfrom/usr/tmpor/usr/bin. - Scheduled Tasks 4698 — task registration named
TimeSync,TimeSyncro,TempDefrag, or a rogueScheduledDefragswhose action is node.exe/rundll32 out of AppData.
CrowdStrike LogScale CQL Hunt Queries
Looks for: a hidden-window PowerShell child of explorer/a browser that pulls and executes remote code from a :8080 host — the ClickFix paste-execution pattern.
// HUNT: ClickFix PowerShell one-liner spawned from Run dialog / browser // MITRE: T1204.004, T1059.001 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: rare admin one-liners using irm/iex interactively #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ImageFileName=/\\powershell(\.exe)?$/i | ParentBaseFileName=/^(explorer|mshta|msedge|chrome|firefox|brave)\.exe$/i | CommandLine=/(irm|Invoke-RestMethod|iex|Invoke-Expression)/i | CommandLine=/:8080|TotalSeconds|-band|-w\s+h|windowstyle\s+hidden/i | table([ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, aid], limit=200)
Looks for: the portable node.exe dropped under AppData\Roaming\node-v22.11.0-win-x64 running an inline -e script or the init1234 beacon path — the CORNFLAKE in-memory backdoor. This is the single highest-value hunt in the pack.
// HUNT: Node.js runtime executing inline script from AppData (CORNFLAKE.V3) // MITRE: T1059.007, T1105 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: legitimate node.exe normally runs from Program Files, not AppData\Roaming #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ImageFileName=/\\node\.exe$/i | ImageFileName=/\\AppData\\Roaming\\node-v22\.11\.0-win-x64\\/i | CommandLine=/\s-e\s|init1234/i | table([ComputerName, UserName, ImageFileName, CommandLine, SHA256HashData, aid], limit=200)
Looks for: a CurrentVersion\Run value named ChromeUpdater or TimeSync. FP: genuine Google updates use GoogleUpdate/GoogleChromeAutoLaunch, not ChromeUpdater; still baseline before alerting.
// HUNT: CORNFLAKE persistence via HKCU Run key (ChromeUpdater / TimeSync) // MITRE: T1547.001 // CONF: high FP: medium COST: low | REQUIRES: AsepValueUpdate // FALSE POSITIVES: legitimate updater Run values on some OEM images // TUNING: alert only when RegStringValue points at AppData\Roaming and ends in .log/.js or node.exe; exclude signed GoogleUpdate paths under Program Files #event_simpleName=/AsepValueUpdate|RegGenericValueUpdate/ | RegObjectName=/\\CurrentVersion\\Run$/i | RegValueName=/ChromeUpdater|TimeSync/i | table([ComputerName, UserName, RegObjectName, RegValueName, RegStringValue, aid], limit=200)
Looks for: scheduled tasks named to blend with time-sync / defrag maintenance. FP: the built-in ScheduledDefrags task exists on many builds — discriminate on the task action.
// HUNT: Masquerading scheduled task (TimeSync / Defrag) for RAT persistence // MITRE: T1053.005 // CONF: medium FP: medium COST: low | REQUIRES: ScheduledTaskRegistered // FALSE POSITIVES: genuine Windows ScheduledDefrags maintenance task // TUNING: exclude TaskExecutable=%SystemRoot%\System32\defrag.exe and w32tm.exe; alert when the action runs node.exe/rundll32/powershell from AppData #event_simpleName=ScheduledTaskRegistered | TaskName=/TimeSync|TimeSyncro|TimeSyncDrive|TempDefrag|ScheduledDefrags/i | table([ComputerName, UserName, TaskName, TaskExecutable, aid], limit=200)
Looks for: a *.trycloudflare.com lookup made by node/rundll32/conhost — free Quick-Tunnel C2. FP: developers legitimately use Cloudflare Quick Tunnels.
// HUNT: node.exe/rundll32 resolving a trycloudflare.com tunnel (masked C2) // MITRE: T1071.001, T1572 // CONF: medium FP: medium COST: medium | REQUIRES: DnsRequest // FALSE POSITIVES: developer / IT use of Cloudflare Quick Tunnels // TUNING: restrict to requestors under AppData and exclude known developer hosts/allowlisted tunnel names #event_simpleName=DnsRequest | DomainName=/\.trycloudflare\.com$/i | ContextBaseFileName=/^(node|rundll32|conhost|cloudflared)\.exe$/i | table([ComputerName, DomainName, ContextBaseFileName, aid], limit=200)
Looks for: the CORNFLAKE recon combo — SPN sweep, domain-trust listing, privilege check. FP: admins run these interactively; the discriminator is a node.exe/powershell-from-AppData parent.
// HUNT: SPN sweep + domain-trust enumeration (CORNFLAKE recon) // MITRE: T1558.003, T1482, T1087.002 // CONF: medium FP: medium COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: administrators running setspn/nltest interactively // TUNING: exclude tier-0 admin jump hosts; prioritize when ParentBaseFileName is node.exe or powershell launched from AppData #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | CommandLine=/setspn\s+-t|nltest\s+\/(dclist|domain_trusts)|whoami\s+\/all/i | table([ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, aid], limit=200)
Looks for: disk-snapshot / virtual-disk-clone tooling used to read ntds.dit at the volume level, evading EDR that only watches live ntdsutil on the DC. Rare and high-signal.
// HUNT: Offline NTDS.dit extraction via disk snapshot / VHD clone (EDR evasion) // MITRE: T1003.003, T1006 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: backup/imaging software using VSS on schedule (baseline your backup account) #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | CommandLine=/diskshadow|Mount-VHD|Mount-DiskImage|ntdsutil.*ifm|ntdsutil.*create\s+full|vssadmin\s+create\s+shadow/i | table([ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, aid], limit=200)
Looks for: PsExec launching a bypass PowerShell that runs a remote .ps1 off a UNC \out\ share — the estate-wide encryptor deployment.
// HUNT: Ransomware push via PsExec running a remote .ps1 from an \out\ share // MITRE: T1021.002, T1570, T1486 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: legit software deployment via PsExec (baseline your deployment accounts) #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ImageFileName=/\\PsExec(64)?\.exe$/i | CommandLine=/-accepteula/i | CommandLine=/powershell.*-ExecutionPolicy\s+Bypass.*-file\s+\\\\/i | table([ComputerName, UserName, ImageFileName, CommandLine, aid], limit=200)
Looks for: files renamed with the Interlock extension family — encryption in progress. Pair with a per-host count threshold in a scheduled search.
// HUNT: Mass file writes with Interlock encryption extension // MITRE: T1486 // CONF: high FP: low COST: medium | REQUIRES: FileCreateInfo // FALSE POSITIVES: none expected; extension is attacker-specific #event_simpleName=/FileCreateInfo|FileRename|RansomwareOpenFile/ | TargetFileName=/\.(interlock|1nt3r10ck|1nt3rlock)$/i | table([ComputerName, UserName, TargetFileName, aid], limit=200)
CrowdStrike Custom IOA Recommendations
| IOA name | Pattern | Action | Exclusions |
|---|---|---|---|
| CORNFLAKE Node-from-AppData | Process: node.exe with ImageFileName under AppData\Roaming\node-v22.11.0-win-x64 and CommandLine containing -e | Block | None — legit node runs from Program Files |
| ClickFix paste loader | Process: powershell.exe child of explorer/browser, CommandLine matches irm|iex + :8080 | Detect (high) | Allowlisted admin automation hosts |
| Offline NTDS via VHD clone | Process CommandLine matches diskshadow|Mount-VHD|ntdsutil.*ifm on member server or DC | Detect (high) | Backup service account + imaging window |
| Interlock extension writer | File write with extension .interlock / .!nt3rlock | Block | None |
Promotion path: Q2 and Q9 are strong Block-tier IOA candidates (attacker-specific, near-zero FP). Q1/Q7 promote to high-severity Detect IOAs after one baseline pass. Q3–Q6 stay Investigate-only hunts until tuned in-tenant.
Machine-Readable IOC Appendix
type,value,action,severity,expiration,description,tags sha256,fa3cdb0656522db7409fda54e9a9780cefbd4458c4ad77fdbbb06367207eaf56,detect,critical,2027-01-23,NodeSnake CORNFLAKE sample,campaign:Interlock sha256,000b24076cae8dbb00b46bb59188a0da5a940e325eaac7d86854006ec071ac5b,detect,critical,2027-01-23,CORNFLAKE.V3 Node persistence copy,campaign:Interlock sha256,4a97599ff5823166112d9221d0e824af7896f6ca40cd3948ec129533787a3ea9,prevent,critical,2027-01-23,Interlock Windows encryptor,campaign:Interlock sha256,28c3c50d115d2b8ffc7ba0a8de9572fbe307907aaae3a486aabd8c0266e9426f,prevent,critical,2027-01-23,Interlock Linux/ESXi encryptor,campaign:Interlock ipv4,216.245.184.181,detect,high,2026-10-23,NodeSnake CORNFLAKE C2,campaign:Interlock ipv4,168.119.96.41,detect,high,2026-10-23,NodeSnake CORNFLAKE C2,campaign:Interlock ipv4,128.140.120.188,detect,high,2026-10-23,Interlock RAT C2,campaign:Interlock ipv4,138.199.161.141,detect,high,2026-10-23,ClickFix PowerShell loader host,campaign:Interlock domain,speak-head-somebody-stays.trycloudflare.com,detect,high,2026-10-23,Cloudflare Tunnel C2,campaign:Interlock domain,suffering-arnold-satisfaction-prior.trycloudflare.com,detect,high,2026-10-23,Cloudflare Tunnel C2,campaign:Interlock domain,REPLACE_WITH_LETSENCRYPT_FALLBACK_1,detect,high,2026-10-23,operator Lets Encrypt fallback domain,campaign:Interlock ipv4,REPLACE_WITH_HARDCODED_FALLBACK_IP,detect,high,2026-10-23,hardcoded Cloudflare Tunnel fallback IP,campaign:Interlock
# Interlock RAT / ransomware SHA256 (hunt, evaluate hits manually) 1105a3050e6c842fb9411d4f21fd6fdb119861c15f7743e244180a4e64b19b83 33dc991e61ba714812aa536821b073e4274951a1e4a9bc68f71a802d034f4fb9
# Node.js CORNFLAKE staging dir %APPDATA%\Roaming\node-v22.11.0-win-x64\ # In-memory exec node.exe -e "<base64_script>" # CORNFLAKE.V3 initial C2 POST /init1234 (C2 replies: ooff=exit, atst=persist) # Persistence HKCU\Software\Microsoft\Windows\CurrentVersion\Run\ChromeUpdater # Crypter decryption-loop byte pattern (YARA / memory) 488b041f483345f04889041e # Ransomware markers ext: .interlock .!nt3rlock .1nt3r10ck note: !__README__!.txt FIRST_READ_ME.txt # Offline cred theft diskshadow | Mount-VHD | ntdsutil ifm -> ntds.dit
# ASR rules to enforce (audit -> block) Block JavaScript/VBScript launching downloaded executable content Block process creations from PSExec and WMI commands Block credential stealing from lsass.exe # Disable Run-dialog paste-execution surface Remove Windows+R for standard users via GPO where feasible # DC hardening Restrict VSS / disk-snapshot rights to backup service accounts only Audit Directory Service access + ntds.dit reads # Egress Block/inspect *.trycloudflare.com and unsanctioned AzCopy egress
Detection Validation Gates
| Gate | Check | Pass criteria |
|---|---|---|
| Telemetry ready | ProcessRollup2, AsepValueUpdate, DnsRequest, FileCreateInfo flowing from workstations + DCs | Events present in last 24h across sample hosts |
| Benign baseline | Run Q3/Q4/Q5/Q6 over 7 days; catalogue legitimate node/updater/tunnel usage | Known-good documented and excluded before alerting |
| Positive test | In a lab: node.exe -e from AppData; register a ChromeUpdater Run value; write a .interlock test file | Q2, Q3, Q9 each fire |
| Promotion | Q2 & Q9 to Block IOA; Q1/Q7 to high Detect IOA | Zero FP over baseline window, then promote |
Hardening — Tiered
- Kill the ClickFix surface: deploy ASR rule Block JavaScript or VBScript from launching downloaded executable content and Block process creations originating from PsExec and WMI commands in Block mode (MITRE M1042; MS Security Baseline / Defender ASR).
- Constrained Language Mode + logging: enable PowerShell Script Block Logging (4104) and Module Logging estate-wide; set CLM for standard users (MITRE M1038/M1042; CIS Windows 2.3).
- Block disposable tunnels & unsanctioned egress: DNS/proxy block
*.trycloudflare.comand alert onazcopyto*.blob.core.windows.netfrom workstations (MITRE M1037).
- Lock down offline DC-disk theft: restrict the Back up files and directories / VSS and virtual-disk-snapshot rights to a dedicated backup account; alert on any
diskshadow/Mount-VHDoutside the backup window (MITRE M1015; MS AD hardening). - Tier-0 isolation: block workstation-to-workstation and workstation-to-DC SMB/RDP; enforce the authentication-silo / PAW model for DA accounts (MITRE M1030/M1026; CIS AD Benchmarks).
- App control: WDAC/AppLocker policy denying
node.exe,rundll32.exe, andPsExecexecution from user-writable paths (MITRE M1038).
- Kerberoasting resistance: migrate service accounts to gMSA / 25+ char passwords; audit SPNs on privileged accounts (MITRE M1027; MS baseline).
- Immutable, offline-verified backups for DCs, ESXi/Nutanix datastores, and file servers; rehearse restore (MITRE M1053).
- Hypervisor EDR / logging on ESXi and Nutanix; SSH allow-list and MFA on management planes (vendor hardening guides — best-practice).
Deployable Playbooks
1 · Enforce the two highest-leverage ASR rules (PowerShell)
# Block JS/VBScript launching downloaded content, and PsExec/WMI-spawned processes Add-MpPreference -AttackSurfaceReductionRules_Ids D3E037E1-3EB8-44C8-A917-57927947596D -AttackSurfaceReductionRules_Actions Enabled Add-MpPreference -AttackSurfaceReductionRules_Ids d1e49aac-8f56-4280-b9ba-993a6d77406c -AttackSurfaceReductionRules_Actions Enabled # Verify (Get-MpPreference).AttackSurfaceReductionRules_Ids
2 · Enable PowerShell script-block + module logging (GPO / registry)
$k = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging' New-Item $k -Force | Out-Null Set-ItemProperty $k EnableScriptBlockLogging -Value 1 -Type DWord $m = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging' New-Item $m -Force | Out-Null Set-ItemProperty $m EnableModuleLogging -Value 1 -Type DWord
3 · Detect rogue node.exe persistence (spot-check)
# Flag any Run value that launches node/rundll32 out of AppData
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run' |
Select-Object * |
Where-Object { $_ -match 'AppData' -and $_ -match 'node|rundll32|\.log' }
# Look for the portable node staging dir
Test-Path "$env:APPDATA\node-v22.11.0-win-x64"
4 · Restrict VSS / disk-snapshot rights on DCs (audit)
# Who holds SeBackupPrivilege / can run diskshadow? Review and prune. whoami /priv | findstr /i "SeBackupPrivilege SeRestorePrivilege" # Alert source: 4688 for diskshadow.exe or powershell Mount-VHD outside backup window
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain hosts running node.exe-from-AppData or with the ChromeUpdater Run value; suspend suspected compromised accounts; block C2 IPs/domains and *.trycloudflare.com | SOC / IR | Q2/Q3/Q5 hits, aid list |
| Eradicate | Remove Run value + scheduled tasks + node staging dir; kill node/rundll32 chains; rotate ALL credentials (assume ntds.dit stolen); revoke Kerberos tickets (krbtgt 2x) | IR / IAM | Persistence artifacts, ntds access logs |
| Recover | Restore from offline-verified backups; rebuild DCs if ntds.dit confirmed cloned; re-image encrypted hosts; validate ESXi/Nutanix integrity | IT / IR | Backup restore logs |
| Post-incident | Enforce Immediate + Near-term hardening; promote Q2/Q9 to Block IOAs; hunt for BYOVD Hotta Killer and AzCopy egress you missed | Detection Eng | This pack §12–13 |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1204.004 | ClickFix paste-exec | Q1 | Detect | Good |
| T1059.007 | CORNFLAKE node -e | Q2 | Block | Good |
| T1547.001 | Run key persistence | Q3 | — | Good |
| T1053.005 | Masquerade task | Q4 | — | Partial |
| T1572 | Cloudflare Tunnel C2 | Q5 | — | Partial |
| T1558.003 / T1482 | Kerberoast / AD recon | Q6 | — | Partial |
| T1003.003 / T1006 | Offline ntds.dit | Q7 | Detect | Good |
| T1021.002 / T1570 | PsExec ransomware push | Q8 | — | Good |
| T1486 | Encryption | Q9 | Block | Good |
| T1567.002 / T1048 | AzCopy exfil | — (native §7) | — | GAP |
| T1490 | Shadow-copy deletion | — (native §7) | — | Partial |
Known gaps: Azure exfil (T1567.002) and hypervisor-side ESXi/Nutanix activity have no CQL coverage — Falcon rarely sits on cloud storage or hypervisors. Cover these with Azure Storage analytics / NSG flow logs and hypervisor logging per §7. Validation gates (§11) must be green before Q2/Q9 promote to Block IOAs.
Hunt Summary Ticket
TITLE: Interlock ransomware - CORNFLAKE/FLUTECLICK ClickFix chain (CAMP.26.095)
SEVERITY: Critical (active RaaS, double extortion)
SCOPE: Windows workstations + domain controllers + ESXi/Nutanix + Azure egress
HYPOTHESIS: ClickFix -> node.exe CORNFLAKE from AppData -> AD recon/Kerberoast ->
offline ntds.dit via VHD clone -> PsExec Interlock encryptor + AzCopy exfil
QUERIES: Q1 ClickFix PS | Q2 node-from-AppData | Q3 Run key | Q4 sched task |
Q5 trycloudflare C2 | Q6 SPN/nltest | Q7 offline NTDS | Q8 PsExec push | Q9 .interlock
DO FIRST: Run Q2 and Q7 - both sit before encryption and before creds are stolen
FINDINGS: <fill in per environment>
GAPS: Azure exfil + hypervisor activity have no CQL (see Coverage Map)
ACTIONS: Enforce ASR + PS logging (S12/13); promote Q2/Q9 to Block IOA after baseline
OWNER: HuntPack
VERSION: v0.2 - 2026-07-23
Changelog
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.References
| Tier | Source | Used for | Accessed |
|---|---|---|---|
| 1 | Mandiant / GTIG — Analyzing the CORNFLAKE.V3 Backdoor | CORNFLAKE variants, Node.js persistence, C2, Kerberoasting, WINDYTWIST.SEA, UNC5518/UNC5774 | 2026-07-23 |
| 1 | CISA — #StopRansomware: Interlock (AA25-203A) | ClickFix IA, TTPs, extensions, ransom note, MITRE mapping, Rhysida overlap | 2026-07-23 |
| 1 | FortiGuard Labs — New Techniques, Same Old Tricks | C2 IPs/domains, crypter byte pattern, PsExec deploy, scheduled tasks, BYOVD | 2026-07-23 |
| 1 | Sekoia.io TDR — Interlock evolving under the radar | Full IOC set (C2, ransomware/RAT SHA256), four RAT variants, /init1234 | 2026-07-23 |
| 2 | Forescout Vedere Labs — A Year Later | Offline ntds.dit via VHD snapshot clone; ESXi/Nutanix; four RATs | 2026-07-23 |
| 2 | SOC Prime — Detect Interlock Ransomware Attacks | cht.exe, klg.dll, PHP RAT, Chrome Updater Run key | 2026-07-23 |