TamperedChef (EvilAI) — Signed Fake-Productivity-App Malvertising
Executive Summary
TamperedChef (a.k.a. EvilAI) is a large malvertising operation that hides infostealers, RATs, and browser hijackers inside professional-looking, digitally-signed productivity software. Malicious ads (20,000+ observed) drive victims to convincing fake sites distributing apps such as AppSuite PDF, Calendaromatic, OneZip, and CrystalPDF. These are code-signed with legitimate certificates issued to international shell companies, letting them slip past signature-trust defenses; researchers track the clusters (CL-CRI-1089, CL-UNK-1090, CL-UNK-1110) via certificate and code reuse.
The defining evasion is delayed activation: the malicious behavior typically doesn't begin until ~56 days after download, long after a sandbox or analyst has moved on. The apps are usually Electron-based, establish a scheduled task for persistence/timing, then retrieve second-stage payloads (RATs, browser hijackers, credential stealers). Over 100 unique malware variants masqueraded as productivity tools in 2025.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry |
|---|---|---|---|
| 1 · Vendor research | Unit 42 — Tracking TamperedChef Clusters via Cert/Code Reuse | Cluster taxonomy (CL-CRI-1089/1090/1110), shell-company code-signing, app families | yes |
| 1 · Vendor research | Sophos — TamperedChef serves bad ads | Malvertising → fake PDF/calendar apps; infostealers; signed apps | yes |
| 2 · News of record | Infosecurity / GBHackers / CyberSecurityNews | 56-day delayed activation; 100+ variants; 20k+ ads; RAT/stealer/browser-hijack payloads | yes |
| 2 · Vendor | Cybersecurity Magazine | App names (AppSuite PDF, Calendaromatic, OneZip, CrystalPDF); Electron packaging | partial |
Decisions: hunt the install footprint & persistence (signature trust and sandbox detonation both fail against a signed, dormant app); cert-reuse becomes a powerful pivot (block/flag the shell-company signers); behavior over atomic IOCs since variants/certs rotate by the hundred.
Hunt Brief & Attack Chain
Working hypothesis: A user clicks a malicious ad, downloads and installs a signed fake productivity app from a user-writable path; the app registers a scheduled task and lies dormant, then (~56 days later) retrieves a stealer/RAT and/or hijacks the browser.
| Step | Behavior | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 · Malvertising | Malicious ad → fake download site for a "PDF/calendar" app | Proxy / browser history | N1 |
| 2 · Install | Signed Electron app installed to %LocalAppData%/Program Files (user) | file write; ProcessRollup2 | Q1; N2 |
| 3 · Persistence/timing | Scheduled task created (drives the delay + auto-run) | ScheduledTaskRegistered | Q2; N3 |
| 4 · Dormancy | ~56-day delay before activation | — | Detect install + task before payload fires |
| 5 · Activation | Second-stage beacon; stealer/RAT pull | NetworkConnectIP4; proc | Q3 / Q5 |
| 6 · Browser hijack | Search/homepage/extension changes; credential theft | registry; file read | Q4 |
Affected surface & telemetry
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Windows user endpoints | Process + file writes; PE signer metadata | Critical | Medium — signer telemetry varies |
| Scheduled-task persistence | ScheduledTaskRegistered | High | Low — covered |
| Delayed C2 | NetworkConnectIP4 over long windows; proxy | High | High — 56-day lag defeats short lookbacks |
| Browser hijack | Registry (search/homepage/extensions) | Medium | Medium — needs registry telemetry |
Consolidated IOC Table
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| App name | AppSuite PDF · Calendaromatic · OneZip · CrystalPDF | high | hunt | Known fake productivity apps |
| Behavior | signed Electron app from %LocalAppData% + scheduled task | high | detect | Install footprint — flagship |
| Cert | code-signing cert issued to a shell company (reused across variants) | medium | hunt | Cert-reuse pivot (block the signer) |
| Behavior | delayed (~56-day) first beacon after install | medium | hunt | Activation evasion |
| Behavior | browser search/homepage/extension hijack post-install | medium | hunt | Payload behavior |
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1189 / T1583.008 — Drive-by / malvertising | Malicious ad → fake app download | N1; web filtering (§10) |
| Execution / Defense Evasion | T1204.002 / T1553.002 — User exec / signed binary | User installs a code-signed fake app | Q1, Q6 |
| Persistence / Execution Timing | T1053.005 — Scheduled Task | Task drives the delay + auto-run | Q2; N3 |
| Defense Evasion | T1497.003 — Time-based evasion | ~56-day dormancy before activation | Q3 (long lookback) |
| C2 / Collection | T1071.001 / T1176 / T1555 — Web C2 / browser ext / browser creds | Second-stage beacon; browser hijack; stealer | Q3, Q4, Q5 |
Native Audit-Log Hunts
| Hunt | Source | Logic | Response |
|---|---|---|---|
| N1 · Malvertising delivery | Proxy / browser download history | Downloads of AppSuite/Calendaromatic/OneZip/CrystalPDF installers from ad/redirect sources | Block domain; sweep host |
| N2 · Fake-app inventory | Software inventory / Add-Remove Programs | Installed apps matching the known names or signed by a flagged shell-company cert | Uninstall; treat host as compromised |
| N3 · Scheduled-task persistence | Task Scheduler / EID 4698 | Tasks created by the fake-app installer pointing at its Electron binary | Remove; isolate |
| N4 · Delayed beacon | Proxy / firewall (long retention) | First outbound C2 from the app weeks after install (the 56-day tell) | Block; investigate the host fleet-wide for the same cert/app |
CrowdStrike LogScale CQL Hunt Queries
SyntheticProcessRollup2. Run long lookbacks (60–90 days) — the ~56-day dormancy defeats short windows. Signer-based hunts (Q6) depend on PE certificate telemetry availability.Looks for: the known TamperedChef app binaries running from %LocalAppData%/user paths. Accomplishes: directly identifies installed fake apps. FP: none for the named binaries; extend the list as Unit 42 adds variants.
// HUNT: TamperedChef fake productivity app execution // MITRE: T1204.002, T1553.002 | CONF: high FP: low-med COST: low // TUNING: extend the name list as new variants are published (Unit 42 cluster tracking) #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | (FileName=/^(AppSuite|Calendaromatic|OneZip|CrystalPDF|PDFEditor|Manual-Finder)\.exe$/i or CommandLine=/(AppSuite|Calendaromatic|OneZip|CrystalPDF)/i) | ImageFileName=/\\(AppData|ProgramData|Temp|Program Files)\\/i | table([@timestamp, ComputerName, UserName, ImageFileName, CommandLine, SHA256HashData], limit=200)
Looks for: a scheduled task registered that points at an Electron binary in a user-writable path. Accomplishes: catches the persistence/timing mechanism even before the payload activates.
// HUNT: TamperedChef scheduled-task persistence (Electron binary in user path) // MITRE: T1053.005 | CONF: high FP: low-med COST: low // TUNING: correlate to Q1; legit apps also use tasks — focus on AppData/Temp targets #event_simpleName=ScheduledTaskRegistered | (CommandLine=/(AppSuite|Calendaromatic|OneZip|CrystalPDF)/i or CommandLine=/\\(AppData|Temp|ProgramData)\\.+\.exe/i) | table([@timestamp, ComputerName, UserName, TaskName, CommandLine], limit=200)
Looks for: first outbound connection from a known fake-app binary. Accomplishes: catches the activation beacon. FP: normal app telemetry — scope to the named binaries and run a 60–90 day window.
// HUNT: TamperedChef activation beacon (run over 60-90 days for the ~56-day delay) // MITRE: T1071.001, T1497.003 | CONF: medium FP: medium COST: medium // TUNING: scope to the named binaries; exclude legitimate vendor update endpoints #event_simpleName=NetworkConnectIP4 | ContextBaseFileName=/^(AppSuite|Calendaromatic|OneZip|CrystalPDF|PDFEditor)\.exe$/i | RemoteAddressIP4!=/^(10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.|169\.254\.|127\.)/ | table([@timestamp, ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort], limit=200)
Looks for: registry writes to browser search/homepage/extension keys by a user-path binary. Accomplishes: catches the browser-hijack payload. FP: legit browser config tools — correlate with Q1.
// HUNT: TamperedChef browser hijack (search/homepage/extension) // MITRE: T1176, T1112 | CONF: medium FP: medium COST: low // TUNING: correlate to Q1; allow-list sanctioned browser-management tooling #event_simpleName=/AsepValueUpdate|RegGenericValueUpdate/ | RegObjectName=/\\(Software\\Policies\\(Google|Microsoft|Mozilla)|Chrome\\Extensions|Edge\\Extensions|Main\\Start Page|DefaultScope)/i | table([@timestamp, ComputerName, UserName, RegObjectName, RegStringValue], limit=200)
Looks for: a fake-app binary spawning a shell/script host or a freshly-written executable. Accomplishes: catches the RAT/stealer second stage. FP: low for the named apps.
// HUNT: TamperedChef second-stage payload (child of the fake app) // MITRE: T1059, T1105 | CONF: high FP: low-med COST: low #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^(AppSuite|Calendaromatic|OneZip|CrystalPDF|PDFEditor)\.exe$/i | FileName=/^(cmd|powershell|pwsh|mshta|wscript|cscript|rundll32|regsvr32)\.exe$/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Looks for: binaries signed by a known TamperedChef shell-company certificate (populate from Unit 42 cluster reporting). Accomplishes: a powerful cert-reuse pivot across all variants. FP: depends on signer telemetry; only as good as the cert list you maintain.
// HUNT: TamperedChef cert-reuse pivot (shell-company signer) // MITRE: T1553.002 | CONF: medium FP: medium COST: low // REQUIRES: PE signer telemetry; populate the subject/thumbprint list from Unit 42 reporting // TUNING: populate the signer subject list from the cited reporting before running -- the REPLACE_WITH placeholder matches nothing, so this query silently returns zero rows until it is filled in. Once populated, pivot on the thumbprint rather than the subject string, which shell companies re-register. #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | CertificateSubject=/REPLACE_WITH_SHELL_COMPANY_SUBJECT(S)/i | table([@timestamp, ComputerName, FileName, ImageFileName, CertificateSubject, SHA256HashData], limit=200)
CrowdStrike Custom IOA Recommendations
| IOA Name | Field Patterns | Benign Exclusions | Deployment Path |
|---|---|---|---|
| TamperedChef — known fake app execution | Image *\(AppSuite|Calendaromatic|OneZip|CrystalPDF).exe from *\AppData\* | None — these are not legitimate apps | Endpoint Security → Custom IOA → Process Creation, Detect+Block |
| TamperedChef — fake app spawns shell | Parent *\(AppSuite|CrystalPDF|...).exe; Child cmd/powershell/mshta.exe | None expected | Custom IOA → Process Creation |
Machine-Readable IOC Appendix
Grouped IOC Quick-Copy
One-click blocks for hunting, inventory, and cert-pivoting. Variants/certs rotate by the hundred — the cert-reuse pivot + install footprint are durable.
AppSuite PDF # Electron fake PDF suite Calendaromatic # fake calendar app OneZip # fake archiver CrystalPDF # fake PDF editor # + 100+ rotating variants (PDF editors / calendar / zip / "AI" tools) — extend from Unit 42 # Hunt Add/Remove Programs + %LocalAppData% for these names or unknown Electron "productivity" apps
Signed Electron "productivity" app running from %LocalAppData%/Temp + a scheduled task First outbound C2 from the app weeks after install (~56-day delayed activation) Fake app spawns cmd/powershell/mshta (second-stage payload) Registry writes to browser search/homepage/extension keys post-install (hijack) Binary signed by a shell-company certificate reused across multiple variants Install originating from a malicious ad / fake download site
# Activity clusters (Unit 42): CL-CRI-1089, CL-UNK-1090, CL-UNK-1110 # Pivot: pull the code-signing cert (subject + thumbprint) from any recovered fake-app binary, # then sweep the fleet for OTHER binaries signed by the same shell-company cert. # PowerShell signer check on a suspect file: Get-AuthenticodeSignature 'C:\Path\To\fakeapp.exe' | Select-Object Status, SignerCertificate # Add confirmed shell-company subjects/thumbprints to Q6 + a deny rule.
# Signature trust is NOT sufficient here — the apps are validly signed: WDAC/AppLocker: allow only an explicit publisher/app allow-list (deny unknown signed apps from %AppData%) Block downloads/execution of Electron apps from %LocalAppData%/Temp unless sanctioned Web/ad filtering; block known malvertising redirect infrastructure Revoke trust / add deny rules for confirmed shell-company signing certs (cert pivot) Browser: lock search/homepage/extension policy via GPO to resist hijack
Hardening — Tiered & Deployable
The defining lesson: a valid signature is not trust. Allow-list explicitly and deny unknown signed apps from user paths.
- WDAC/AppLocker: explicit publisher/app allow-list; deny unknown signed apps from
%LocalAppData%/Temp — M1038. A valid cert is not a free pass. - Block/flag the confirmed shell-company signing certs — M1045. Cert-reuse pivot (Q6) defeats all variants of a cluster at once.
- Web + ad filtering; block known malvertising redirect infrastructure — M1021. Cuts delivery.
- Lock browser search/homepage/extension policy via GPO — M1042. Resists the hijack payload.
- Inventory installed apps; alert on unknown Electron "productivity" apps — M1042. Feeds Q1/N2.
- Monitor scheduled tasks pointing at user-path Electron binaries — M1018. Feeds Q2/N3.
- Run Q3/N4 over 60–90 days — M1047. The 56-day dormancy defeats short lookbacks.
- Application allowlisting enterprise-wide; restrict user app installs — M1038 / M1026.
- Software-acquisition governance: approved sources only — M1033. Removes the "download a free PDF tool" path.
- User training on malvertised "free productivity tools" — M1017.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the host; preserve the fake-app binary (extract the signing cert) and scheduled task | SOC L2 | Containment timestamp; Q1/Q2 events; cert |
| Triage | Determine whether the payload activated (Q3/Q5); identify browser hijack + any stealer output; extract the cert for the pivot | SOC L2 | Activation status; cert subject/thumbprint |
| Eradicate | Uninstall the app + scheduled task; remove second-stage payloads; block C2; add the cert to deny rules and Q6 | IR | Removal log; cert deny rule |
| Recover | If a stealer activated, rotate browser creds/cookies/tokens; reset browser policy; rebuild if a RAT had access | IR + IT | Cred rotation; policy reset |
| Hunt-the-fleet | Sweep all endpoints for binaries signed by the same shell-company cert (Q6) | Detection Eng | Fleet sweep results |
Detection Coverage Map & Validation
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1204.002 / T1553.002 | Fake signed app execution | Q1 | IOA-1 | Good |
| T1053.005 | Scheduled-task persistence | Q2 | — | Good |
| T1497.003 / T1071.001 | Delayed activation beacon | Q3 | — | Partial needs 60–90d lookback (N4) |
| T1176 / T1112 | Browser hijack | Q4 | — | Partial needs registry telemetry |
| T1059 / T1105 | Second-stage payload | Q5 | IOA-2 | Good |
| T1553.002 | Shell-company cert reuse | Q6 | — | Partial needs signer telemetry + cert list |
| T1583.008 (delivery) | Malvertising | — | — | GAP ad/web filtering (N1) |
Validation gates: (1) confirm process + file + scheduled-task telemetry; verify whether PE signer fields are available (for Q6); (2) baseline legitimate Electron apps in your environment; (3) lab-test a benign app run from %LocalAppData% with a scheduled task (Q1/Q2); (4) promote Q1/Q5 to Custom IOA Detect+Block; maintain the cert list for Q6; run Q3 on a 60–90 day schedule.
Hunt Summary Ticket
TITLE: Hunt — TamperedChef (EvilAI) signed fake-app malvertising
SEVERITY: High (signed, delayed-activation infostealer/RAT; signature trust fails)
SCOPE: Windows user endpoints; long lookback required (~56-day dormancy)
HYPOTHESIS: Malicious ad -> signed fake productivity app (AppSuite/Calendaromatic/OneZip/
CrystalPDF) installed to %LocalAppData% -> scheduled task -> dormant ~56 days ->
second-stage stealer/RAT + browser hijack.
QUERIES RUN: Q1 fake app exec (IOA) | Q2 scheduled task | Q3 delayed beacon (60-90d) |
Q4 browser hijack | Q5 second-stage child (IOA) | Q6 shell-company cert pivot
+ Native N1-N4 (malvertising, app inventory, task persistence, delayed beacon)
DO FIRST: Q1, Q2 — uninstall + isolate; extract the cert for the fleet pivot
FINDINGS: <pending analyst execution>
GAPS: Delivery (ad filtering); cert pivot needs signer telemetry + maintained list
ACTIONS: Explicit app allow-list (deny unknown signed apps from %AppData%); block the
shell-company certs; lock browser policy; promote Q1/Q5; cert-pivot the fleet (Q6)
OWNER: HuntPack
VERSION: v0.4 - 2026-06-12
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 |
|---|---|---|
| 1 | Unit 42 — Tracking TamperedChef Clusters via Cert/Code Reuse | Cluster taxonomy, shell-company signing, cert pivot, app families |
| 1 | Sophos — TamperedChef serves bad ads | Malvertising → fake apps; infostealer payloads |
| 2 | Infosecurity — TamperedChef malvertising / fake PDF · GBHackers — hides in signed apps | 56-day delay; 100+ variants; 20k+ ads; RAT/stealer payloads |
| 2 | Cybersecurity News — signed productivity apps | App names, Electron packaging |
HuntPack v0.3 · TamperedChef (EvilAI) · Generated 2026-06-12 · Defensive use only. The apps are validly signed and dormant — signature trust and short-window sandboxing both fail; hunt the install footprint and pivot on the shell-company cert. Validate field names (esp. PE signer telemetry) in your tenant before promoting any query.