PhantomEnigma — hijacked Brazilian .gov.br portals delivering an Electron/Node.js backdoor
Executive Summary
ANY.RUN researchers documented PhantomEnigma, a Brazil-focused crimeware operation active since at least January 2026 (231 sandbox detonations tracked through July 2026, peaking in March and May) that has hijacked at least 20 .gov.br municipal and police web portals and gained access to legitimate government mailboxes, using both as trusted delivery infrastructure against banking and public-sector targets. The campaign evolved from a 2025 banking-focused browser-extension banker into a 2026 modular backdoor delivered through abused government trust.
The lure is a fake police notice ("Ofício Polícia Civil") or a digital power-of-attorney document ("Procuração Digital"), sometimes carrying a QR code, sent from a genuinely compromised government mailbox — so the message legitimately passes SPF, DKIM and DMARC. Clicking through routes the victim via a compromised .gov.br host or a lookalike domain to a Delphi-compiled Inno Setup installer (Procuracao_Digital.exe) that silently deploys a patched Electron application — observed as a modified Boostnote build (decoy binaries App.exe / renamed Grape.exe) — hiding an obfuscated index.js Node.js backdoor inside an install directory following the pattern UltraSuiteSmartCoreware / SmartSuiteSmartCoreware / ProSoftxUltraToolator under a transient is-*.tmp\<Name>Application\ folder.
The backdoor persists via Registry Run Keys, fingerprints the host, executes attacker JavaScript through eval(), and beacons to rotating C2 roughly every 180 seconds. ANY.RUN identified two beacon generations: an older GET /laravel.php?api=api&hash=<b64>&message=<b64> pattern and a newer POST /nbw/ pattern carrying JSON with machine ID, COMPUTERNAME, USERNAME and a campaign tag. A related "Ofício-PC" phishing arm delivers the same fake police documents from compromised government hosts before pivoting to a Shellter-packed Cobalt Strike loader via what the source calls the "Zab agent" kit.
ANY.RUN's own detection guidance is the pack's organizing principle: C2 domains and IPs rotate near-weekly and are already perishable, but the Delphi + Inno Setup + Node.js/Electron build chain, the install-directory naming pattern, and the beacon URI shapes are structural and durable. Hunt and detect on the build chain and install-directory pattern first; treat the domain/IP list as a fast-expiring supplement, not the primary control.
Defender priority: ten queries follow. Q1, Q2 and Q4 (lure installer execution, patched-Electron decoy in a campaign install directory, and Registry Run persistence pointing at that directory) are the highest-confidence, lowest-noise detections and catch this actor at deployment, before any beacon traffic exists. Run those three first.
Source Review & Web Hunter Notes
| Tier | Source | Key finding | Carry forward |
|---|---|---|---|
| 1 | ANY.RUN Cybersecurity Blog, "20+ Government Websites Hijacked: PhantomEnigma Investigation," 2026-07-16 | Primary technical analysis. Every hash, IP, domain, install-directory pattern, filename and MITRE technique in this pack traces to this source (fetched via WebFetch and an independent reader-proxy pass; both passes agreed). | Yes |
| 2 | The Hacker News, "20+ Hijacked Government Websites Became an Attack Channel," 2026-07-16 | Corroborates scope, lure themes, SPF/DKIM/DMARC bypass, and 180-second beacon interval. Adds four specific compromised .gov.br hostnames as context (not detection targets — they are victim infrastructure, not attacker-owned). | Partial (context only) |
| 2 | SC World brief, "PhantomEnigma campaign hijacks Brazilian government websites for malware delivery," 2026-07-17 | Corroborates the campaign's evolution from 2025 banking focus to 2026 .gov.br abuse, and the Electron/Boostnote masquerade. No independent atomic indicators. Cited in a 2026-08-17 weekly recap as still-active, which is why this pack was built this week. | Partial (context only) |
| 2 | Cyber Press, "When trusted gov infrastructure becomes an attack channel: PhantomEnigma puts banks at risk," 2026-07-21 | Corroborates the infection chain and business-impact framing. No independent atomic indicators. | Partial (context only) |
| 2 | Cybersecurity News, "Hackers Hijack 20+ Government Websites to Deliver Malware Through Trusted Links," 2026-07-21 (supplementary — surfaced during verification, not in the original source list) | Independently confirms the zsxocjarsate[.]com C2 domain and the GET-to-POST beacon evolution (/laravel.php → /nbw/) from outside the direct ANY.RUN citation chain. | Partial (corroboration only) |
| Failed | HackRead, "PhantomEnigma Infects Organizations with Malware via Hijacked Government Websites" | Not accessible. Direct fetch returned HTTP 403; a Google-cache attempt returned only search-interface chrome; a reader-proxy attempt returned the site's bot-verification interstitial. No article content was ever retrieved from this URL by any method tried. | No — dropped from citations |
Research decisions
- Single-source atomic indicators, cross-verified with an independent fetch pass. Every hash, IP, domain and install-directory pattern in this pack comes from ANY.RUN. To reduce single-source risk, the ANY.RUN page was fetched twice by two different methods (a summarizing fetch and an independent reader-proxy extraction); both passes returned the same values, including the exact partial Shellter-loader hash prefix supplied in the task brief, which the reader-proxy reproduced without being given that value first — strong evidence the extraction reflects genuine page content rather than pattern-completion.
- HackRead dropped, not fabricated around. The HackRead URL in the task brief could not be retrieved by direct fetch, cache, or reader-proxy (bot-wall/CAPTCHA in all three cases). No content was ever returned from it, so nothing from it was used, and it is not cited as a source below. This is a straightforward access failure, not a content or safety issue — no injected instructions were observed because no content was ever served.
- No prompt-injection or manipulated content was found in any of the five sources that did return content. All read as ordinary security journalism/research; none contained instructions directed at an AI agent.
- Compromised .gov.br hostnames are victim infrastructure, not detection targets. The Hacker News lists specific compromised government hosts (timon.ma.gov.br, loginam.sesp.es.gov.br, aplicacao.cbm.mt.gov.br, prodoc.ap.gov.br). These are recorded as attack-chain context in section 3 only. They are not shipped as block/detect indicators anywhere in this pack — they are real Brazilian government systems, and blocking them would be pointless for any organization outside Brazil and harmful if applied indiscriminately.
- Shellter-loader hash is partial by design of the source, not by omission here. The task brief and both ANY.RUN fetch passes converge on the same truncated value,
7de52b73…296e1f64. The missing middle digits are not published anywhere found. This value is carried as a named, flagged partial indicator in section 4 — never treated as a complete SHA256 and never placed in an exact-match CQL query or the Falcon IOC CSV, where a truncated hash would either fail to match or silently match nothing. - Categorization discrepancy on 91.92.241.181, noted not resolved. The task brief lists this IP as a beacon IP alongside 185.219.83.191 and 188.137.246.189. The reader-proxy pass of the ANY.RUN source groups it instead with the 158.94.208.120 origin node under AS202412 OMEGATECH-AS. Both framings appear in ANY.RUN-derived reporting and the IP value itself is consistently attributed to the campaign either way — this pack ships it as a detect-worthy network indicator regardless of which infrastructure role it plays, and flags the categorization ambiguity here rather than silently picking one.
- Perishability. ANY.RUN states C2 domains and IPs rotate on a near-weekly basis. Network indicators in section 4 are marked with a 30-day expiry, materially shorter than the build-chain/install-directory behavioral signals, which the source explicitly frames as the durable detection surface and which carry no expiry.
- Two additional C2 domains found during verification. The reader-proxy pass of ANY.RUN surfaced
pccvill[.]comandtaaeiuep[.]comalongside the five domains in the task brief. These are included in the IOC table as source-confirmed but lower-priority (they were not in the original task list and appear only in the supplementary extraction pass), not fabricated additions.
Hunt Brief & Attack Chain
Attack chain
| # | Step | Observed behavior | Telemetry | Hunt angle |
|---|---|---|---|---|
| 1 | Resource development | Attackers compromise 20+ .gov.br municipal and police web portals and gain access to legitimate government mailboxes ahead of any specific campaign wave. | Not endpoint-visible; this is attacker-side infrastructure abuse of third-party government systems. | Not a hunt target for a customer SOC — no detection built for this step. Context only (section 2). |
| 2 | Delivery | Phishing email sent from a genuinely compromised government mailbox, so it passes SPF, DKIM and DMARC. Lure is a fake police notice ("Ofício Polícia Civil") or a "Procuração Digital" (digital power-of-attorney) document, sometimes with a QR code linking to a lookalike government resource. | Mail-gateway / M365 audit logs (not native Falcon endpoint telemetry) | Gap for endpoint EDR. See section 5 and section 12 strategic tier. |
| 3 | Redirect through compromised or lookalike infrastructure | Victim is routed through a compromised .gov.br host (e.g. the four hosts The Hacker News lists as context) or a lookalike government domain to the malicious installer. | DnsRequest, proxy/web logs | Behavioral only — the compromised hosts are legitimate government systems and are not shipped as indicators (see section 2). |
| 4 | Installer execution | Victim runs the Delphi-compiled Inno Setup installer, observed as Procuracao_Digital.exe (SHA256 confirmed) or, in the Ofício-PC arm, an oficio<digits>PCAP.exe naming pattern. | ProcessRollup2 | Q1 |
| 5 | Payload deployment | Installer silently deploys a patched Electron application — observed as a modified Boostnote build, decoy binary App.exe or a renamed Grape.exe — into an install directory matching UltraSuiteSmartCoreware, SmartSuiteSmartCoreware or ProSoftxUltraToolator, staged under a transient is-*.tmp\<Name>Application\ path typical of Inno Setup extraction. | ProcessRollup2, PeFileWritten | Q2, Q3 |
| 6 | Backdoor drop | Obfuscated index.js (SHA256 confirmed) is written inside the Electron app's resources, under the same is-*.tmp staging tree. Not independently visible — no Falcon event covers generic non-PE file writes; inferred from the decoy's PE write/execution (Q3/Q2) and hash match (Q9). | PeFileWritten (indirect) | Q3, Q9 |
| 7 | Persistence | Backdoor sets a Registry Run Key pointing back at the decoy Electron executable inside the campaign install directory, so the patched app (and the backdoor packaged inside it) survives reboot. | RegGenericValueUpdate, AsepValueUpdate | Q4 |
| 8 | Host fingerprinting & execution | Backdoor collects system information (machine ID, COMPUTERNAME, USERNAME) and executes attacker-supplied JavaScript through eval(). | ProcessRollup2 (child processes spawned by the Electron/Node runtime) | Q10 |
| 9 | C2 beacon — generation 1 (older) | GET /laravel.php?api=api&hash=<base64>&message=<base64> to rotating infrastructure, observed against zsxocjarsate[.]com, psznaoehteeh[.]com, eeresofeuae[.]com, dahieenloo[.]com, and historically policiacivilmg[.]com (now inactive), plus IPs 185.219.83.191, 188.137.246.189, 91.92.241.181, and origin node 158.94.208.120. | DnsRequest, NetworkConnectIP4; URI path visible only with web-proxy/HTTP log ingestion | Q6, Q7, Q8 |
| 10 | C2 beacon — generation 2 (newer) | POST /nbw/ carrying JSON (machine ID, COMPUTERNAME, USERNAME, campaign tag) on an approximately 180-second interval. | NetworkConnectIP4; URI path visible only with web-proxy/HTTP log ingestion | Q5, Q6, Q7, Q8 |
| 11 | Secondary payload / modular expansion | Backdoor downloads and launches additional modules (stealers, loaders, remote-management tooling) via the same C2 channel, matching the "modular" framing consistent across all five sources. | ProcessRollup2, NetworkConnectIP4 | Q7, Q10 |
| 12 | Related arm — Ofício-PC to Cobalt Strike | A parallel "Ofício-PC" phishing arm distributes the same police-document lure from compromised government hosts, then pivots to a Shellter-packed Cobalt Strike loader (naming pattern oficio<digits>PCAP.exe, partial SHA256 7de52b73…296e1f64) delivered through what the source calls the "Zab agent" kit. | ProcessRollup2 | Q10 (behavioral, hash incomplete) |
| 13 | Impact | Credential theft, unauthorized access, fraud and data exposure against banking and public-sector victims. Detection delay is compounded because samples frequently receive clean sandbox verdicts, so related incidents get triaged as unrelated one-offs. | N/A | This is the business case for the build-chain-first detection strategy in section 1. |
Hunt hypotheses, ordered by fidelity
| # | Hypothesis | MITRE | Falcon events | Expected FP sources | Conf |
|---|---|---|---|---|---|
| H1 | The Delphi/Inno Setup lure installer (Procuracao_Digital.exe or the oficio<digits>PCAP.exe naming pattern) executes on an endpoint. | T1566.002, T1204.002 | ProcessRollup2 | None known — these are campaign-specific lure filenames | High |
| H2 | A patched Electron decoy (App.exe, Boost Note.exe, Grape.exe) runs from an install directory matching the campaign naming pattern. | T1036, T1204.002 | ProcessRollup2 | Low — these decoy names collide with genuine Boostnote/Electron installs only if the install path also matches, which genuine installs will not | High |
| H3 | The decoy Electron PE binary bundling index.js is written under an is-*.tmp Inno Setup staging directory. | T1027, T1036 | PeFileWritten | Low — legitimate Inno Setup extractions rarely stage a decoy binary under this campaign's directory pattern | High |
| H4 | A Registry Run Key value points at an executable inside the campaign install-directory pattern. | T1547.001 | RegGenericValueUpdate, AsepValueUpdate | None known | High |
| H5 | An endpoint sends a JSON POST to a /nbw/ path or a GET to a /laravel.php?api=api&hash= path on any host — this requires web-proxy/HTTP log telemetry, not native Falcon sensor data. | T1071.001 | Web-proxy / Next-Gen SIEM HTTP logs | Low if path-matched; generic paths like /nbw/ could theoretically collide with unrelated apps, but the combination with the JSON body shape is specific | Medium — telemetry-dependent |
| H6 | A host resolves or connects to published PhantomEnigma C2 domains or IPs. | T1071.001, T1090 | DnsRequest, NetworkConnectIP4 | Sinkholes, security-vendor scanners; infrastructure reassignment after rotation | High while infrastructure is live |
| H7 | A process beacons outbound at a roughly 180-second cadence to the same external endpoint. | T1071.001, T1071 | NetworkConnectIP4 (aggregated) | Legitimate polling agents (telemetry, licensing, update checkers) also beacon on fixed intervals | Medium |
| H8 | A known campaign SHA256 (installer or index.js) appears on an endpoint. | T1105, T1204.002 | ProcessRollup2, PeFileWritten | None | High |
| H9 | An Electron/Node.js process (running from the campaign install-directory pattern) spawns a child shell or PowerShell process. | T1059.007, T1059.001 | ProcessRollup2 | Some legitimate Electron apps do spawn helper processes; the install-path filter narrows this substantially | Medium |
| H10 | The partial Shellter-loader naming pattern (oficio<digits>PCAP.exe) executes — behavioral only, since the hash is incomplete. | T1027, T1204.002 | ProcessRollup2 | Unknown — insufficient published detail to assess | Medium — name-only, unverified hash |
Consolidated IOC Table
All values below trace to the ANY.RUN source snapshot (PhantomEnigma-Hunt-sources/01-anyrun-research.txt), independently corroborated by a second reader-proxy fetch pass and, for the zsxocjarsate[.]com domain and the /nbw/ beacon path, by Cybersecurity News. Domains are shown defanged. Compromised .gov.br victim hostnames are intentionally excluded from this table — see section 2.
| Type | Value | Conf | Action | Context | Expiry |
|---|---|---|---|---|---|
| sha256 | e0dae1a04b7a3b2ae07377b0fd00681e9633532788870b3709a9e149f3ccf0e0 | high | detect | Anchor installer, Procuracao_Digital.exe (Delphi/Inno Setup) | 2027-02-20 |
| sha256 | 71f69978667dc421e7edf8885e9f3bde9dd527d9f7974228c9a6eac84c2ab71c | high | detect | Dropped backdoor, index.js | 2027-02-20 |
| sha256 (partial) | 7de52b73…296e1f64 incomplete | medium | enrich / hunt-only | Shellter-packed Cobalt Strike loader, oficio<digits>PCAP.exe. Middle digits not published by any source found. Do not use in an exact-match CQL in() clause or the Falcon IOC CSV — it will not match. Recorded here for analyst awareness only; hunt this loader by filename pattern (Q10) instead. | 2027-02-20 |
| domain | zsxocjarsate[.]com | high | detect | C2, confirmed live 2026-07-12 (fresh detonation); independently corroborated by Cybersecurity News | 2026-09-20 |
| domain | psznaoehteeh[.]com | high | detect | C2 | 2026-09-20 |
| domain | eeresofeuae[.]com | high | detect | C2 | 2026-09-20 |
| domain | dahieenloo[.]com | high | detect | C2 | 2026-09-20 |
| domain | policiacivilmg[.]com | medium | hunt | Historical C2 / largest seed domain (appeared in 34 of 231 sandbox sessions, ~15% of the cluster). Reported inactive at time of publication — kept for historical pivoting and retro-hunting, not as a live-block target. | 2026-09-20 |
| domain | pccvill[.]com | medium | hunt | C2, surfaced only in the supplementary reader-proxy extraction pass — not in the original task-provided list. Lower confidence than the four primary domains above. | 2026-09-20 |
| domain | taaeiuep[.]com | medium | hunt | C2, same supplementary-pass caveat as pccvill[.]com. | 2026-09-20 |
| ipv4 | 185.219.83.191 | high | detect | Beacon IP, AS214943 RAILNET | 2026-09-20 |
| ipv4 | 188.137.246.189 | high | detect | Beacon IP | 2026-09-20 |
| ipv4 | 91.92.241.181 | medium | detect | Beacon IP per task brief; grouped with origin infrastructure (AS202412 OMEGATECH-AS) in the reader-proxy source pass instead — see section 2 categorization note. Value is consistently campaign-attributed either way. | 2026-09-20 |
| ipv4 | 158.94.208.120 | high | detect | Origin infrastructure, AS202412 OMEGATECH-AS (Seychelles) | 2026-09-20 |
| filename | Procuracao_Digital.exe | high | detect | Delphi/Inno Setup lure installer | 2027-02-20 |
| filename | App.exe | medium | hunt | Dropped decoy Electron binary under an is-*.tmp directory — hunt by full path, this generic name alone is not unique | 2027-02-20 |
| filename | Boost Note.exe / Grape.exe | medium | hunt | Patched Boostnote decoy / renamed decoy variant — hunt by install-directory pattern, not filename alone | 2027-02-20 |
| filename pattern | oficio<digits>PCAP.exe | medium | hunt | Ofício-PC arm, Shellter-packed Cobalt Strike loader naming pattern | 2027-02-20 |
| path pattern | UltraSuiteSmartCoreware, SmartSuiteSmartCoreware, ProSoftxUltraToolator | high | detect | Install-directory naming patterns used by the Inno Setup deployment. Per ANY.RUN, this build-chain/directory fingerprint is more durable than the rotating C2 list. | No expiry — behavioral/structural |
| path pattern | is-*.tmp\<Name>Application\ | high | detect | Transient Inno Setup extraction directory pattern hosting the decoy app and index.js | No expiry — behavioral/structural |
| uri pattern | GET /laravel.php?api=api&hash=<b64>&message=<b64> | high | detect (requires HTTP/proxy log source) | Beacon generation 1 (older) | No expiry — behavioral |
| uri pattern | POST /nbw/ (JSON: machine ID, COMPUTERNAME, USERNAME, campaign tag) | high | detect (requires HTTP/proxy log source) | Beacon generation 2 (newer) | No expiry — behavioral |
| behavior | ~180-second beacon interval | high | hunt | Consistent across both beacon generations per ANY.RUN and The Hacker News | No expiry — behavioral |
Affected Surface & Telemetry Matrix
| Surface | Required telemetry | Priority | Gap risk |
|---|---|---|---|
| Windows workstations, banking and public-sector estates | ProcessRollup2, PeFileWritten, RegGenericValueUpdate | Critical | Low for the installer/decoy/persistence chain. Medium for the index.js file write specifically — no dedicated Falcon event covers generic non-PE file writes, so that single step is inferred rather than directly observed. |
| Endpoint network egress | NetworkConnectIP4, DnsRequest | High | Low, but the beacon URI path (/laravel.php, /nbw/) is not visible in native Falcon network telemetry — see the HTTP/proxy gap below. |
| Registry autostart configuration | RegGenericValueUpdate, AsepValueUpdate | High | Medium. Registry value telemetry is sometimes filtered for volume in high-volume environments; Q4 is blind without it — confirm in validation gate 1. |
| Web-proxy / HTTP log source (Next-Gen SIEM ingested) | Third-party proxy or web-gateway logs with URI path visibility | Medium | High for organizations without HTTP-log ingestion. Native Falcon sensor telemetry does not expose the URI path of an HTTP request, so the /laravel.php and /nbw/ beacon shapes (Q8) can only be matched if proxy/gateway logs are ingested into Next-Gen SIEM. Falcon's IP/domain telemetry (Q6, Q7) still catches the underlying connection without this. |
| Mail gateway / M365 audit logs | Mail-platform audit and authentication logs | Medium | High. The initial phishing delivery from a compromised government mailbox is invisible to the endpoint sensor entirely — it is a mail-platform event, not an endpoint event. See section 12. |
| Brazilian government (.gov.br) hosting infrastructure | N/A — third-party infrastructure, not customer-managed | Out of scope | N/A. This pack is written for organizations defending endpoints that might receive the lure or run the payload, not for the compromised government portals themselves. Those operators should be notified separately through appropriate national CERT channels. |
| macOS / Linux estate | N/A | Not applicable | None published. All observed artifacts (Inno Setup .exe, Windows Registry Run Keys, Electron decoy) are Windows-specific. No cross-platform indicators found in any source. |
ATT&CK Mapping
| Tactic | Technique | Observed behavior | Query or control |
|---|---|---|---|
| Resource Development | T1584 Compromise Infrastructure | 20+ .gov.br municipal and police portals and government mailboxes compromised and reused as delivery infrastructure | Context only, section 2/3 — not a hunt target for a customer SOC |
| Initial Access | T1566.002 Spearphishing Link | Fake police / power-of-attorney email from a compromised government mailbox, SPF/DKIM/DMARC-passing, with a link or QR code | Mail-side telemetry gap; see section 12 |
| Execution | T1204.002 User Execution: Malicious File | Victim runs Procuracao_Digital.exe or the oficio<digits>PCAP.exe installer | Q1 |
| Execution | T1059.007 JavaScript | Backdoor executes attacker-supplied JavaScript via eval() | Q10 (child-process behavioral proxy — the eval() call itself is not directly observable) |
| Execution | T1059.001 PowerShell | Modular follow-on payloads may invoke PowerShell; not directly confirmed in the fetched sources beyond the general "modular" framing | Q10 |
| Defense Evasion | T1027 Obfuscated Files or Information | Obfuscated index.js backdoor code | Q3, Q9 |
| Defense Evasion | T1036 Masquerading | Patched Electron application disguised as Boostnote (decoy App.exe / Grape.exe) | Q2 |
| Defense Evasion | T1497 Virtualization/Sandbox Evasion | Per ANY.RUN's MITRE table for this campaign; consistent with samples receiving clean sandbox verdicts noted across sources | No direct CQL — sandbox-evasion behavior is not endpoint-visible |
| Persistence | T1547.001 Registry Run Keys | Backdoor persists via a Registry Run Key pointing at the decoy Electron app | Q4 |
| Persistence | T1053.005 Scheduled Task | Per ANY.RUN's MITRE table; not detailed further in the fetched prose beyond the technique listing | No dedicated query — flagged as a coverage gap in section 15, add a generic scheduled-task hunt if evidence emerges |
| Discovery | T1082 System Information Discovery | Backdoor collects machine ID, COMPUTERNAME, USERNAME | Q10 (behavioral proxy) |
| Discovery | T1016 System Network Configuration Discovery | Per ANY.RUN's MITRE table for this campaign | No dedicated query — behavioral gap, see section 15 |
| Command and Control | T1071.001 Web Protocols | HTTP GET/POST beacon over /laravel.php and /nbw/ to rotating C2 | Q5, Q6, Q7, Q8 |
| Command and Control | T1090 Proxy | Per ANY.RUN's MITRE table; rotating infrastructure consistent with proxying/relay use | Q6, Q7 |
| Exfiltration | T1041 Exfiltration Over C2 Channel | Stolen data and additional payload delivery over the same beacon channel | Q7 (volume/behavior review, not a dedicated exfil query) |
Native Audit-Log Hunts
Run these where Falcon coverage is thin, on hosts with agent gaps, or as a second opinion on a host the CQL flagged. They need no EDR.
| Check | Where | What good looks like |
|---|---|---|
| Process creation, Sysmon EventID 1 or Security 4688 | Every workstation | Procuracao_Digital.exe, App.exe, or any process whose image path contains UltraSuiteSmartCoreware, SmartSuiteSmartCoreware or ProSoftxUltraToolator |
| File creation, Sysmon EventID 11 | Every workstation | A file named index.js appearing under any is-*.tmp directory outside a developer's normal Node.js project tree |
| Registry value set, Sysmon EventID 13 / Security 4657 | Every workstation | A Run or RunOnce value whose data points into the campaign install-directory pattern |
| DNS query logs (resolver or Sysmon EventID 22) | All hosts / internal resolver | Resolution of any domain in the section 4 IOC table |
| Mail gateway / M365 audit | Mail platform | Inbound mail from a Brazilian government (.gov.br) sender domain containing "Ofício," "Polícia Civil," or "Procuração Digital" in the subject or body, especially with an embedded QR code image or shortened link |
| Web-proxy / gateway logs | Egress proxy or SWG | A GET request containing laravel.php?api=api&hash= or a POST to a path ending in /nbw/, at roughly 180-second intervals from the same host |
Sweep for the campaign install-directory pattern and dropped files
Get-ChildItem -Path C:\ -Recurse -ErrorAction SilentlyContinue -Directory |
Where-Object { $_.FullName -match 'UltraSuiteSmartCoreware|SmartSuiteSmartCoreware|ProSoftxUltraToolator' } |
Select-Object FullName, CreationTime, LastWriteTime
Get-ChildItem -Path C:\Users\*\AppData\Local\Temp -Recurse -ErrorAction SilentlyContinue -Filter 'is-*.tmp' -Directory |
ForEach-Object {
Get-ChildItem -Path $_.FullName -Recurse -Filter 'index.js' -ErrorAction SilentlyContinue |
Select-Object FullName, Length, LastWriteTime,
@{ n='SHA256'; e={ (Get-FileHash $_.FullName -Algorithm SHA256).Hash } }
}
Check Run/RunOnce keys for the campaign install-directory pattern
$paths = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce'
foreach ($p in $paths) {
Get-ItemProperty -Path $p -ErrorAction SilentlyContinue |
Get-Member -MemberType NoteProperty |
Where-Object { $_.Name -notmatch '^PS' } |
ForEach-Object {
$val = (Get-ItemProperty -Path $p).($_.Name)
if ($val -match 'UltraSuiteSmartCoreware|SmartSuiteSmartCoreware|ProSoftxUltraToolator') {
[pscustomobject]@{ Key = $p; Name = $_.Name; Value = $val }
}
}
}
Check for the installer and backdoor hashes anywhere on disk
$targets = @{
'e0dae1a04b7a3b2ae07377b0fd00681e9633532788870b3709a9e149f3ccf0e0' = 'Procuracao_Digital.exe installer'
'71f69978667dc421e7edf8885e9f3bde9dd527d9f7974228c9a6eac84c2ab71c' = 'index.js backdoor'
}
Get-ChildItem -Path C:\ -Recurse -ErrorAction SilentlyContinue -Include *.exe,*.js |
ForEach-Object {
$h = (Get-FileHash $_.FullName -Algorithm SHA256 -ErrorAction SilentlyContinue).Hash
if ($h -and $targets.ContainsKey($h)) {
[pscustomobject]@{ File = $_.FullName; SHA256 = $h; Match = $targets[$h] }
}
}
CrowdStrike LogScale CQL Hunt Queries
No query carries an in-query time filter. Set the window with the console time picker. Each card records the intended lookback as a // LOOKBACK: comment.
Looks for: the Delphi/Inno Setup lure installer landing and running by its campaign filenames. This is the earliest actionable moment in the chain, before any decoy app or backdoor exists on disk.
// HUNT: PhantomEnigma lure installer executed (Procuracao_Digital / Ofício-PC arm) // MITRE: T1566.002, T1204.002 | CONF: high FP: low COST: low // REQUIRES: ProcessRollup2 // LOOKBACK: 30d // FALSE POSITIVES: none known -- these are campaign-specific lure filenames #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^(Procuracao_Digital|oficio\d{1,8}PCAP)\.exe$/i | table([@timestamp, aid, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData]) | sort(@timestamp, order=desc, limit=200)
Looks for: the decoy Electron app (dropped as App.exe, or a renamed Boostnote build) running from one of the campaign's published install-directory naming patterns. Combining a generic decoy filename with a highly specific path keeps this precise.
// HUNT: Patched Electron/Boostnote decoy running from campaign install directory // MITRE: T1036, T1204.002 | CONF: high FP: low COST: low // REQUIRES: ProcessRollup2 // LOOKBACK: 30d // FALSE POSITIVES: none known -- genuine Boostnote/Electron installs do not use these path names #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^(App|Boost ?Note|Grape)(\.exe)?$/i | ImageFileName=/\\(UltraSuiteSmartCoreware|SmartSuiteSmartCoreware|ProSoftxUltraToolator|is-[a-z0-9]{4,8}\.tmp)\\/i | table([@timestamp, aid, ComputerName, UserName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData]) | sort(@timestamp, order=desc, limit=200)
Looks for: the decoy Electron executable (PE file) landing on disk under a transient is-*.tmp Inno Setup extraction folder or the campaign install-directory pattern — the on-disk write moment that precedes Q2's execution-moment detection. FP: low. Coverage gap: Falcon has no dedicated event for generic non-PE file writes, so the companion index.js backdoor bundled in the same resources tree is not independently visible here — its presence is inferred once the decoy process executes (Q2) or via hash match (Q9).
// HUNT: Decoy Electron PE binary written under Inno Setup is-*.tmp staging directory // MITRE: T1027, T1036 | CONF: high FP: low COST: low // REQUIRES: PeFileWritten // LOOKBACK: 30d // FALSE POSITIVES: none known // GAP: index.js itself is not independently visible -- no Falcon event covers generic non-PE file writes #event_simpleName=/^PeFileWritten$/ | TargetFileName=/\\(UltraSuiteSmartCoreware|SmartSuiteSmartCoreware|ProSoftxUltraToolator|is-[a-z0-9]{4,8}\.tmp)\\.*(App|Boost ?Note|Grape)\.exe$/i | table([@timestamp, aid, ComputerName, UserName, TargetFileName, ContextBaseFileName, SHA256HashData]) | sort(@timestamp, order=desc, limit=200)
Looks for: the backdoor's autostart entry. Fires at the moment persistence is established, independent of any C2 activity, and survives a rename of the decoy binary since it matches on the directory pattern.
// HUNT: Run/RunOnce key set to an executable inside the campaign install-directory pattern // MITRE: T1547.001 | CONF: high FP: low COST: low // REQUIRES: RegGenericValueUpdate or AsepValueUpdate (registry value telemetry must be on) // LOOKBACK: 30d // FALSE POSITIVES: none known #event_simpleName=/RegGenericValueUpdate|AsepValueUpdate/ | RegObjectName=/\\(Run|RunOnce)$/i | RegStringValue=/\\(UltraSuiteSmartCoreware|SmartSuiteSmartCoreware|ProSoftxUltraToolator)\\/i | table([@timestamp, aid, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue]) | sort(@timestamp, order=desc, limit=200)
Looks for: a host making frequent, regular outbound connections to the same external address, consistent with the documented ~180-second beacon interval. This is a generic beaconing detector, useful when the destination itself is not yet on the known-C2 list. FP: legitimate polling agents (telemetry, licensing, update checkers) also beacon on fixed intervals — use this as a triage feed, not a standalone alert.
// HUNT: High-frequency outbound connections consistent with ~180s beacon cadence // MITRE: T1071.001, T1071 | CONF: medium FP: medium COST: medium // REQUIRES: NetworkConnectIP4 // LOOKBACK: 24h (short window keeps the cadence calculation meaningful) // FALSE POSITIVES: telemetry/licensing/update-check agents that poll on a fixed interval // TUNING: exclude known-good polling agents by ContextBaseFileName (your EDR, MDM, // TUNING: patch-management and telemetry agents) before triaging what remains. #event_simpleName=/^NetworkConnectIP4$/ | groupBy([aid, ComputerName, RemoteAddressIP4], function=[count(as=ConnCount), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)]) | ConnCount >= 15 | DurationSec := (LastSeen - FirstSeen) / 1000 | AvgIntervalSec := DurationSec / ConnCount | AvgIntervalSec > 150 and AvgIntervalSec < 210 | sort(ConnCount, order=desc, limit=200)
Looks for: resolution of any published PhantomEnigma C2 domain, including the two lower-confidence supplementary domains. Perishable: ANY.RUN reports near-weekly infrastructure rotation — treat a clean result here as much weaker evidence than a clean Q1–Q4 result.
// HUNT: PhantomEnigma C2 domain resolution // MITRE: T1071.001, T1090 | CONF: high FP: low COST: low // REQUIRES: DnsRequest // LOOKBACK: 30d (infrastructure rotates near-weekly per source -- do not extend much further) // FALSE POSITIVES: security-vendor scanners and sinkhole research hosts #event_simpleName=/^DnsRequest$/ | in(DomainName, values=["zsxocjarsate.com", "psznaoehteeh.com", "eeresofeuae.com", "dahieenloo.com", "policiacivilmg.com", "pccvill.com", "taaeiuep.com"]) | table([@timestamp, aid, ComputerName, UserName, DomainName, ContextBaseFileName]) | sort(@timestamp, order=desc, limit=500)
Looks for: direct connections to the published beacon and origin IPs, catching the case where the backdoor connects by hard-coded address without a DNS lookup.
// HUNT: Connections to published PhantomEnigma beacon/origin IPs // MITRE: T1071.001, T1090 | CONF: high FP: low COST: low // REQUIRES: NetworkConnectIP4 // LOOKBACK: 30d // FALSE POSITIVES: shared VPS ranges can host unrelated services after reassignment #event_simpleName=/^NetworkConnectIP4$/ | in(RemoteAddressIP4, values=["185.219.83.191", "188.137.246.189", "91.92.241.181", "158.94.208.120"]) | table([@timestamp, aid, ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort, LocalAddressIP4]) | sort(@timestamp, order=desc, limit=500)
Looks for: the two documented beacon URI shapes. This is not native Falcon sensor telemetry — Falcon's endpoint sensor does not expose HTTP URI paths. This query template assumes a web-proxy or secure-web-gateway log source ingested into Next-Gen SIEM; the field names (url, http_method) are generic placeholders and must be validated against your actual proxy log schema before use.
// HUNT: PhantomEnigma HTTP beacon URI pattern (GET /laravel.php or POST /nbw/) // MITRE: T1071.001 | CONF: medium FP: low COST: low // REQUIRES: Web-proxy / secure-web-gateway HTTP logs ingested into Next-Gen SIEM. // REQUIRES: NOT available from native Falcon sensor telemetry (no URI-path field). // LOOKBACK: 30d // FALSE POSITIVES: low if both the path and method match, but field names below are // FALSE POSITIVES: generic placeholders -- confirm against your proxy log's actual schema. // ⚠ Field unverified -- validate url / http_method against your tenant's log source before deploying. #event_simpleName=/^(HttpRequestEvent|ProxyEvent)$/ | (http_method=/^GET$/i and url=/\/laravel\.php\?api=api&hash=/i) or (http_method=/^POST$/i and url=/\/nbw\/?$/i) | table([@timestamp, aid, ComputerName, http_method, url, RemoteAddressIP4]) | sort(@timestamp, order=desc, limit=500)
Looks for: the two published, complete SHA256 hashes across process execution and PE file-write telemetry. The partial Shellter-loader hash is deliberately excluded here — see section 4 for why it cannot be used in an exact-match query. Coverage gap: the installer hash reliably matches (it's a PE); the index.js hash only surfaces here if your tenant's telemetry happens to capture it on a process/module event — Falcon has no dedicated non-PE file-write event, so treat a miss on that hash as inconclusive, not clean, and fall back to an RTR-based file hash sweep if you need certainty.
// HUNT: Published PhantomEnigma installer and backdoor hashes // MITRE: T1105, T1204.002 | CONF: high FP: low COST: medium // REQUIRES: ProcessRollup2, PeFileWritten // LOOKBACK: 60d // FALSE POSITIVES: none. Only two complete, published hashes are used -- the partial // FALSE POSITIVES: Shellter-loader hash is intentionally excluded (see section 4). // GAP: the index.js hash is not guaranteed to appear -- no Falcon event covers generic non-PE file writes #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2|PeFileWritten/ | in(SHA256HashData, values=["e0dae1a04b7a3b2ae07377b0fd00681e9633532788870b3709a9e149f3ccf0e0", "71f69978667dc421e7edf8885e9f3bde9dd527d9f7974228c9a6eac84c2ab71c"]) | table([@timestamp, aid, ComputerName, UserName, FileName, ImageFileName, TargetFileName, SHA256HashData]) | sort(@timestamp, order=desc, limit=500)
Looks for: two related behaviors in one query — the patched Electron decoy spawning a command shell or PowerShell (its eval()-driven follow-on execution), and standalone execution of the Ofício-PC arm's Shellter-packed loader naming pattern. FP: some legitimate Electron apps spawn helper processes; the campaign install-path filter on the first branch keeps that narrow, but the second branch (loader filename only, hash unverified) is name-only.
// HUNT: Campaign decoy spawning a shell, or the Ofício-PC Shellter-loader naming pattern // MITRE: T1059.007, T1059.001, T1027 | CONF: medium FP: medium COST: low // REQUIRES: ProcessRollup2 // LOOKBACK: 14d // FALSE POSITIVES: legitimate Electron apps that spawn helper processes // TUNING: for the shell-spawn branch, exclude known-good Electron apps by ParentBaseFileName // TUNING: once you have confirmed which ones legitimately run in your estate. The loader-name // TUNING: branch has no exclusion list yet -- the hash is unverified, so treat every hit as // TUNING: needing manual review, not auto-triage. #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | (FileName=/^(cmd|powershell|pwsh)\.exe$/i and ParentBaseFileName=/^(App|Boost ?Note|Grape)(\.exe)?$/i and ImageFileName=/\\(UltraSuiteSmartCoreware|SmartSuiteSmartCoreware|ProSoftxUltraToolator)\\/i) or (FileName=/^oficio\d{1,8}PCAP\.exe$/i) | table([@timestamp, aid, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData]) | sort(@timestamp, order=desc, limit=200)
CrowdStrike Custom IOA Recommendations & Alert Package
Four queries are tight enough to promote to real-time detection. The rest stay Investigate-only hunts until tuned or until proxy/HTTP telemetry is confirmed available.
| IOA name | From | Type | Pattern | Exclusions | Action |
|---|---|---|---|---|---|
| INITIAL-ACCESS — PhantomEnigma lure installer executed | Q1 | Process Creation | FileName matches Procuracao_Digital.exe or the oficio<digits>PCAP.exe pattern | None | Detect, Critical. Promote immediately. |
| DEFENSE-EVASION — Patched Electron decoy in campaign install path | Q2 | Process Creation | Decoy filename plus campaign install-directory regex match | None | Detect, Critical. Promote immediately. |
| PERSIST — Run key targets campaign install directory | Q4 | Registry Operation | Run/RunOnce value data matches campaign install-directory regex | None | Detect, Critical. Promote immediately. |
| C2 — Known PhantomEnigma hash execution | Q9 | Process Creation / File Write | SHA256 in the two-hash published set | None | Detect, Critical. Promote immediately. |
| C2 — Beaconing to published domains/IPs | Q6, Q7 | DNS / Network Connection | Domain or IP in the section 4 list | None for primary four domains/IPs; monitor the two supplementary domains and 91.92.241.181 for one week before treating as equally tight | Detect, High. Promote after confirming the supplementary indicators independently in your own telemetry. |
Scheduled Search: lure installer or decoy-in-campaign-path execution
| Field | Value |
|---|---|
| Name | DETECT — PhantomEnigma installer or patched-Electron decoy execution |
| Description | Fires when the published PhantomEnigma lure installer runs, or when a patched Electron decoy executes from the campaign's install-directory naming pattern. Both are deployment-stage signals with no legitimate-software collision published. |
| Schedule | Every 15 minutes, 30-minute lookback |
| Severity | Critical |
Alert email
Subject: [CRITICAL] Detection: PhantomEnigma — lure installer or backdoor decoy executed
WHAT FIRED
A process matching the published PhantomEnigma lure installer or patched-Electron
decoy pattern ran on HOST-01 as user jdoe.
Process : {{FileName}}
Path : {{ImageFileName}}
Host : {{ComputerName}} ({{aid}})
User : {{UserName}}
SHA256 : {{SHA256HashData}}
Time : {{@timestamp}}
WHY IT MATTERS
ANY.RUN documented this build chain (Delphi-compiled Inno Setup installer, patched
Electron/Boostnote decoy, obfuscated index.js backdoor) as PhantomEnigma -- a Brazil-
focused campaign that hijacked 20+ .gov.br government portals and compromised
government mailboxes to deliver this payload against banking and public-sector
targets. A hit means a user ran the lure installer or the decoy app is now present
on this host. The backdoor persists via a Registry Run Key and beacons to rotating
C2 roughly every 180 seconds -- containment before the first beacon matters.
IMMEDIATE ACTIONS
1. Network-contain the host in Falcon.
2. Check for a Registry Run Key pointing into the campaign install-directory pattern
(Q4) -- if present, persistence is already established.
3. Run Q3 scoped to this host to confirm the index.js backdoor is on disk.
4. Run Q6, Q7 and Q5 (beacon-cadence hunt) scoped to this host to determine whether
C2 contact has already occurred.
5. Preserve the installer, the decoy binary, and the index.js file for analysis.
6. If this is a banking or financial-services environment, treat any credentials
entered on this host in the last 24 hours as potentially exposed.
ESCALATION
Page IR on-call. This is an active, evolving campaign per the 2026-08-17 weekly
threat recap -- do not assume commodity/low-priority handling.
L1 triage checklist
- Confirm the filename and path against the published lure-installer and decoy patterns in section 4. A near-miss on the install-directory string is still worth escalating.
- Pull the file's SHA256 and compare against Q9. A miss does not clear it -- ANY.RUN notes the build chain is more durable than any single sample hash.
- Run Q4 scoped to this host to confirm or rule out Registry Run Key persistence.
- Run Q3 scoped to this host to look for the dropped
index.js. - Run Q6 and Q7 scoped to this host, then estate-wide, to check for beacon contact.
- Run Q5 scoped to this host for the ~180-second beacon-cadence signal, which can catch contact with infrastructure not yet on the known-IOC list.
- Identify how the installer arrived -- check mail logs for an "Ofício" or "Procuração Digital" themed message from a .gov.br sender in the prior 24 hours.
- If web-proxy/HTTP logs are available, run Q8 to check for the
/laravel.phpor/nbw/beacon shapes.
Pivot queries
Host-scoped: append | aid = "<the aid from the alert>" to Q3, Q4, Q5, Q6, Q7 and Q10. Environment-wide: run Q1, Q2, Q6, Q7 and Q9 unscoped across the longest retention window you have -- the campaign's own detonation data shows repeated waves against the same sectors, so one hit is reason to sweep broadly.
Investigate-only: Q5, Q8 and Q10 are hunt queries, not alert candidates as shipped. Q5 needs an environment-specific polling-agent exclusion list, Q8 needs your proxy log schema validated first, and Q10's loader-name branch has an unverified hash. Their value is in a weekly review or as an enrichment pivot from a Q1/Q2/Q4/Q9 hit, not a standalone real-time page.
Machine-Readable IOC Appendix
type,value,action,severity,expiration,description,tags sha256,e0dae1a04b7a3b2ae07377b0fd00681e9633532788870b3709a9e149f3ccf0e0,prevent,critical,2027-02-20,PhantomEnigma anchor installer Procuracao_Digital.exe,campaign:PhantomEnigma sha256,71f69978667dc421e7edf8885e9f3bde9dd527d9f7974228c9a6eac84c2ab71c,prevent,critical,2027-02-20,PhantomEnigma dropped backdoor index.js,campaign:PhantomEnigma domain,zsxocjarsate.com,detect,critical,2026-09-20,PhantomEnigma C2 confirmed live 2026-07-12,campaign:PhantomEnigma domain,psznaoehteeh.com,detect,critical,2026-09-20,PhantomEnigma C2,campaign:PhantomEnigma domain,eeresofeuae.com,detect,critical,2026-09-20,PhantomEnigma C2,campaign:PhantomEnigma domain,dahieenloo.com,detect,critical,2026-09-20,PhantomEnigma C2,campaign:PhantomEnigma domain,policiacivilmg.com,detect,high,2026-09-20,PhantomEnigma historical C2 (reported inactive),campaign:PhantomEnigma domain,pccvill.com,detect,medium,2026-09-20,PhantomEnigma C2 (supplementary source pass),campaign:PhantomEnigma domain,taaeiuep.com,detect,medium,2026-09-20,PhantomEnigma C2 (supplementary source pass),campaign:PhantomEnigma ipv4,185.219.83.191,detect,critical,2026-09-20,PhantomEnigma beacon IP AS214943 RAILNET,campaign:PhantomEnigma ipv4,188.137.246.189,detect,critical,2026-09-20,PhantomEnigma beacon IP,campaign:PhantomEnigma ipv4,91.92.241.181,detect,high,2026-09-20,PhantomEnigma beacon/origin IP -- see categorization note section 2,campaign:PhantomEnigma ipv4,158.94.208.120,detect,critical,2026-09-20,PhantomEnigma origin infrastructure AS202412 OMEGATECH-AS,campaign:PhantomEnigma # PARTIAL HASH -- DO NOT IMPORT, WILL NOT MATCH ANYTHING # 7de52b73...296e1f64 Shellter-packed Cobalt Strike loader (oficio<digits>PCAP.exe) -- hash incomplete, hunt by filename pattern only (Q10)
PhantomEnigma behavioral signals -- these survive infrastructure rotation
BUILD CHAIN (most durable signal per ANY.RUN)
Delphi-compiled Inno Setup installer + Node.js/Electron runtime + patched
Boostnote application. Recurring across 231 tracked sandbox detonations
Jan-Jul 2026.
INSTALL-DIRECTORY PATTERN
UltraSuiteSmartCoreware
SmartSuiteSmartCoreware
ProSoftxUltraToolator
Staged under a transient is-*.tmp\<Name>Application\ Inno Setup extraction path
DROP / PERSISTENCE SHAPE
Decoy Electron binary: App.exe, or a renamed/patched Boost Note.exe / Grape.exe
Obfuscated backdoor: index.js, inside the decoy app's resources
Persistence: Registry Run/RunOnce value pointing at the decoy binary inside the
campaign install directory
BEACON SHAPE
Generation 1 (older): GET /laravel.php?api=api&hash=<base64>&message=<base64>
Generation 2 (newer): POST /nbw/ JSON body: machine ID, COMPUTERNAME, USERNAME,
campaign tag
Cadence: ~180 seconds between beacons, consistent across both generations
RELATED ARM
"Ofício-PC" phishing arm: same police-document lure, compromised .gov.br
delivery hosts, pivots to a Shellter-packed Cobalt Strike loader named
oficio<digits>PCAP.exe via a kit the source calls "Zab agent"
Partial SHA256 (incomplete, do not exact-match): 7de52b73...296e1f64
LURE THEMES (subject/body content to search mail logs for)
"Ofício Polícia Civil" (fake police notice)
"Procuração Digital" (digital power-of-attorney notice)
QR code linking to a lookalike government resource
Sent from a genuinely compromised .gov.br mailbox -- passes SPF, DKIM, DMARC
# Reported by The Hacker News as compromised .gov.br hosts used in the delivery # chain. These are legitimate Brazilian government systems that were compromised, # NOT attacker-owned infrastructure. Do not block. Included here for situational # awareness only -- if your organization interacts with Brazilian government # portals, treat unexpected redirects through these hosts as suspicious context, # not as a standalone detection rule. timon.ma.gov.br loginam.sesp.es.gov.br (state public security) aplicacao.cbm.mt.gov.br (fire department) prodoc.ap.gov.br
# Does the campaign install-directory pattern exist anywhere on disk right now?
Get-ChildItem -Path C:\ -Recurse -ErrorAction SilentlyContinue -Directory |
Where-Object { $_.FullName -match 'UltraSuiteSmartCoreware|SmartSuiteSmartCoreware|ProSoftxUltraToolator' }
# Any Run/RunOnce value pointing into that pattern?
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -ErrorAction SilentlyContinue
Get-ItemProperty 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -ErrorAction SilentlyContinue
# Is DNS or process telemetry actually flowing for the events these queries need?
# (validate in Falcon: non-zero counts for ProcessRollup2, PeFileWritten,
# RegGenericValueUpdate/AsepValueUpdate, DnsRequest, NetworkConnectIP4 over the last 24h)
# Do you have web-proxy / HTTP log ingestion at all? If not, Q8 cannot run and the
# /laravel.php and /nbw/ beacon shapes are a coverage gap until you do (section 15).
Detection Validation Gates
| Gate | What to prove | How | Pass criterion |
|---|---|---|---|
| 1 · Telemetry ready | The events each query depends on are actually arriving | Run each #event_simpleName filter alone over 24 hours across the estate | Non-zero for ProcessRollup2, PeFileWritten, DnsRequest, NetworkConnectIP4. If RegGenericValueUpdate/AsepValueUpdate is zero, Q4 is blind and must be marked as a gap, not as coverage. If no web-proxy/HTTP log source exists, Q8 cannot run at all. |
| 2 · Benign baseline | The noisy queries have a knowable steady state | Run Q5 and Q10 over 14 days without exclusions and count distinct hosts and distinct causes | Fewer than 20 distinct benign causes per query. More than that means the exclusion list is not yet tractable and the query stays Investigate-only. |
| 3 · Positive test, installer/decoy path | Q1, Q2 and Q4 fire on the real behavior | In a lab, create a directory named C:\ProgramData\UltraSuiteSmartCoreware\, drop a benign renamed App.exe inside it, and set a Run key value pointing at it | Q1 (if you also name a harmless test binary Procuracao_Digital.exe), Q2 and Q4 each return the lab host within one search window |
| 4 · Positive test, network | Q6 and Q7 fire | In a lab, resolve one of the published domains via a test DNS query and connect to a benign listener on one of the published IPs if you control test infrastructure there, or use a lab-only synthetic domain added temporarily to the query | Q6 and Q7 return the lab host |
| 5 · Negative test | The exclusions did not blind the query | Re-run gate 3 with any production exclusion list applied | Still fires. If an exclusion suppresses the lab case, the exclusion is too broad. |
| 6 · Promotion | Only tight queries become alerts | Review 14 days of results per query | Promote to Custom IOA only if fewer than 1 false positive per week. Q1, Q2, Q4 and Q9 are expected to clear this immediately. Q6/Q7 clear it once the two supplementary domains and 91.92.241.181 are independently confirmed in your own telemetry. |
Hardening — Tiered
- Block the published C2 domains and IPs at the resolver and egress proxy. M1031, M1037. Block the four primary domains, the historical
policiacivilmg[.]com, the two supplementary domains, and the four IPs from section 4. These are perishable (near-weekly rotation per source) but cost nothing to deploy and remove one active channel immediately. - Alert on execution of the published lure-installer and decoy filenames from any location. M1040, M1038.
Procuracao_Digital.exe, theoficio<digits>PCAP.exepattern, and any process from the campaign install-directory pattern have no legitimate-software collision published anywhere in the source material. - Audit and alert on new Run/RunOnce Registry values estate-wide, not just for this campaign. M1047. The backdoor's entire persistence mechanism is a single Registry write with no service or scheduled-task fallback documented — this is the cheapest possible detection point for this specific family and a generally useful control regardless.
- Add the "Ofício Polícia Civil" / "Procuração Digital" lure themes and .gov.br-sender QR-code pattern to mail-gateway content rules. M1031. Since the sending mailbox is a genuinely compromised government account, SPF/DKIM/DMARC will not catch this — content and QR-code heuristics are the only mail-side lever available.
- Brief the workforce, especially anyone in banking-adjacent or public-sector-facing roles, on the specific lure themes. M1017. A government-branded "digital power of attorney" or police notice with a QR code is an unusual enough combination that user awareness training targeted at exactly this pattern is disproportionately effective.
- Deploy an AppLocker or WDAC publisher/path rule denying unsigned installers from user Downloads and Temp directories from silently deploying secondary applications. M1038, CIS Windows Benchmark. Inno Setup installers are legitimate software, so this needs to target the silent, unattended secondary deployment behavior rather than Inno Setup itself. Playbook 1.
- Ingest web-proxy / secure-web-gateway logs into Next-Gen SIEM if not already done. Best practice This closes the section 5 telemetry gap that makes Q8 unusable today and is the only way to see the
/laravel.phpand/nbw/URI beacon shapes directly rather than inferring them from IP/domain telemetry alone. - Enable the "block executable content from email client and webmail" Defender ASR rule. M1040, MS Defender ASR guidance. Reduces the chance the Inno Setup installer executes directly from a webmail-delivered link without a separate download step. Playbook 2.
- Require SmartScreen / reputation-based execution warnings for newly downloaded executables estate-wide. M1038. The installer and decoy are not yet broadly flagged by all engines per the "clean verdict" problem the source describes — reputation/prevalence-based friction is a useful supplementary layer while signature coverage catches up.
- Set DNS-layer or SWG category blocking for newly-registered and algorithmically-suspicious domains. M1021. The C2 domain set (
zsxocjarsate.com,psznaoehteeh.com,eeresofeuae.com,dahieenloo.com) follows a randomized-string naming pattern typical of DGA-adjacent infrastructure; category/reputation blocking catches the next rotation before it is individually published.
- Move to WDAC application control with a signed-and-managed-installer policy for endpoints in banking-adjacent business units. M1038, MS App Control guidance. Stops a patched Electron application from ever executing regardless of how it arrived, independent of any published indicator.
- Establish a mail-side anomaly-detection baseline for authenticated-but-anomalous senders. Best practice no formal benchmark for this control Because this campaign's entire delivery model depends on abusing a mailbox that legitimately passes SPF/DKIM/DMARC, the only durable mail-side defense is detecting anomalous content and behavior from an otherwise-trusted sender, not authentication failure.
- Segment and monitor banking-transaction workstations separately from general user population. M1030. Limits blast radius given the campaign's explicit banking-sector targeting.
- Coordinate with your national CERT / financial-sector ISAC on Brazilian government-portal-themed lure intelligence sharing. Best practice The campaign explicitly abuses trust in a specific national government's digital infrastructure; sector-level intelligence sharing on lure themes is more durable than any single organization's indicator list.
Deployable Playbooks
Playbook 1 — Deny silent secondary-installer deployment from user-writable directories (AppLocker)
# Prerequisites: AppLocker already deployed in Audit mode with a working default rule set;
# Application Identity service (AppIDSvc) set to Automatic and running;
# a pilot ring of 20 to 50 representative endpoints. Confirm your legitimate
# software-deployment tooling (SCCM, Intune, RMM) does not stage installers
# under Users\<user>\AppData\Local\Temp before enforcing.
# Reboot required: no. Policy applies at the next Group Policy refresh; AppIDSvc must be running.
# Rollback: re-import the policy saved in step 1 --
# Set-AppLockerPolicy -XmlPolicy C:\Backup\AppLocker-pre-change.xml -Merge:$false
# then gpupdate /force. Removing the deny rule from the GPO has the same effect.
# 1. Save the current effective policy first. Do not skip this -- it is the rollback.
New-Item -ItemType Directory -Path C:\Backup -Force | Out-Null
Get-AppLockerPolicy -Effective -Xml | Out-File C:\Backup\AppLocker-pre-change.xml -Encoding utf8
# 2. Confirm the enforcement service is running, or the policy is inert.
Set-Service -Name AppIDSvc -StartupType Automatic
Start-Service -Name AppIDSvc
# 3. Add a DENY rule for the campaign install-directory naming pattern specifically --
# this is narrower and safer to enforce immediately than a blanket Temp-directory deny.
# Author as a Path rule in the GPO editor under
# Computer Configuration > Policies > Windows Settings > Security Settings >
# Application Control Policies > AppLocker, Executable Rules:
#
# DENY Everyone %OSDRIVE%\ProgramData\UltraSuiteSmartCoreware\*
# DENY Everyone %OSDRIVE%\ProgramData\SmartSuiteSmartCoreware\*
# DENY Everyone %OSDRIVE%\ProgramData\ProSoftxUltraToolator\*
#
# Broader Temp-directory silent-installer denial is a near-term, not immediate,
# control -- pilot it separately after confirming your deployment tooling is unaffected.
# 4. Verify the rules are live on a pilot host.
Get-AppLockerPolicy -Effective |
Select-Object -ExpandProperty RuleCollections |
ForEach-Object { $_ } |
Where-Object { $_.Action -eq 'Deny' } |
Select-Object RuleCollectionType, Name, Action
# 5. Post-deployment CQL spot-check: Q2 should return nothing new from these paths.
Playbook 2 — Enable the "block executable content from email/webmail" ASR rule
# Prerequisites: Microsoft Defender Antivirus active (not passive alongside another AV).
# Run in Audit (2) for one week and review Defender/Operational event 1121
# before enforcing, since some legitimate workflows email installers directly.
# Reboot required: no.
# Rollback: re-run the same command with -AttackSurfaceReductionRules_Actions Disabled (0)
# or AuditMode (2). Rule ID is unchanged, so the revert is symmetrical.
# 1. Record current state -- this is the rollback reference.
$p = Get-MpPreference
$ruleId = '3B576869-A4EC-4529-8536-B80A7769E899' # Block executable content from email/webmail
$idx = [array]::IndexOf($p.AttackSurfaceReductionRules_Ids, $ruleId)
if ($idx -ge 0) { '{0} = {1}' -f $ruleId, $p.AttackSurfaceReductionRules_Actions[$idx] } else { "$ruleId not currently configured" }
# 2. Audit first.
Add-MpPreference -AttackSurfaceReductionRules_Ids $ruleId -AttackSurfaceReductionRules_Actions AuditMode
# 3. After a clean audit week, enforce.
Add-MpPreference -AttackSurfaceReductionRules_Ids $ruleId -AttackSurfaceReductionRules_Actions Enabled
# 4. Verify.
$p = Get-MpPreference
$idx = [array]::IndexOf($p.AttackSurfaceReductionRules_Ids, $ruleId)
'{0} = {1}' -f $ruleId, $p.AttackSurfaceReductionRules_Actions[$idx]
# 5. Tamper Protection must be on, or this is trivially reversible by anyone with local admin.
(Get-MpComputerStatus).IsTamperProtected
Playbook 3 — Block published PhantomEnigma C2 domains and IPs at the resolver/egress
# Prerequisites: DNS sinkhole or resolver-side blocklist capability, or an egress proxy /
# firewall capable of FQDN and IP blocking. Confirm none of the four
# compromised .gov.br context hosts in section 10 are accidentally included --
# they are victim infrastructure and should NOT be blocked.
# Reboot required: no.
# Rollback: remove the entries added in step 1/2 from the resolver blocklist or firewall
# rule set. No other system state is changed.
# 1. Resolver-side (example: Windows DNS Server RPZ zone, adapt to your resolver)
$domains = 'zsxocjarsate.com','psznaoehteeh.com','eeresofeuae.com','dahieenloo.com',
'policiacivilmg.com','pccvill.com','taaeiuep.com'
foreach ($d in $domains) {
Add-DnsServerQueryResolutionPolicy -Name "Block-PhantomEnigma-$d" `
-Action IGNORE -FQDN "EQ,$d" -ErrorAction SilentlyContinue
}
# 2. Egress firewall / proxy (example: Windows host firewall for lab validation --
# use your perimeter firewall or SWG for production enforcement)
$ips = '185.219.83.191','188.137.246.189','91.92.241.181','158.94.208.120'
foreach ($ip in $ips) {
New-NetFirewallRule -DisplayName "HuntPack - Block PhantomEnigma $ip" `
-Direction Outbound -RemoteAddress $ip -Action Block -Profile Any -ErrorAction SilentlyContinue
}
# 3. Verify
Get-NetFirewallRule -DisplayName 'HuntPack - Block PhantomEnigma*' |
Get-NetFirewallAddressFilter | Select-Object RemoteAddress
Playbook 4 — Alert on new Run/RunOnce Registry values estate-wide
# Prerequisites: RegGenericValueUpdate / AsepValueUpdate telemetry confirmed flowing
# (validation gate 1, section 11). This is a detection-only playbook --
# it does not change endpoint state, so risk of breakage is minimal.
# Reboot required: no.
# Rollback: none required -- this deploys a Falcon Scheduled Search / Custom IOA, it does
# not modify endpoint configuration. Disable or delete the saved search to revert.
# 1. Baseline current Run/RunOnce contents across a representative host sample, so you can
# tell a genuinely new value from one that has always been there.
$paths = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce'
foreach ($p in $paths) {
Get-ItemProperty -Path $p -ErrorAction SilentlyContinue |
Select-Object * -ExcludeProperty PS*
} | Export-Csv C:\Backup\RunKey-baseline.csv -NoTypeInformation
# 2. Create the Falcon Scheduled Search from Q4 in section 8, scheduled every 15 minutes
# with a 30-minute lookback, severity High, scoped estate-wide (no aid filter).
# 3. Verify the saved search returns the lab-created value from validation gate 3
# (section 11) before considering this playbook deployed.
Containment Runbook
Do not assume a clean sandbox or AV verdict clears a host. All five sources agree the campaign's samples frequently receive clean verdicts, which is explicitly why ANY.RUN recommends detecting the build chain and behavioral pattern rather than relying on signature or reputation alone.
| Phase | Actions | Owner | Evidence to capture |
|---|---|---|---|
| 0 · Triage 0 to 1 hour | Confirm the hit against the Q1, Q2, Q4 or Q9 criteria. Determine whether the host has banking-transaction access or handles sensitive public-sector data. Decide containment scope before touching anything. | SOC L2 | Alert record, query output, host role and owner |
| 1 · Isolate 1 to 4 hours | Network-contain in Falcon. Block the published C2 domains and IPs at the resolver/egress if not already deployed (Playbook 3). Preserve, do not delete, the Registry Run/RunOnce value and the decoy application directory so the configuration is available for analysis. | SOC L2 with IR lead | Registry Run key export, decoy application directory (full copy), index.js file, installer binary if still present |
| 2 · Scope 4 to 24 hours | Run Q1, Q2, Q6, Q7 and Q9 estate-wide over full retention. Check mail logs for the same "Ofício Polícia Civil" / "Procuração Digital" lure sent to other recipients. If this is a banking environment, check for any transaction or credential activity from this host in the period between likely infection and containment. | Threat hunting | Query exports, host list, mail-recipient list, transaction/credential review notes |
| 3 · Credential reset 24 to 72 hours | Reset credentials for any account used on the host since likely infection, prioritizing banking or financial-application credentials. Rotate any stored browser or password-manager credentials on the host. | Identity team with IR lead | Reset log, affected-account inventory |
| 4 · Eradicate 72 hours onward | Remove the decoy application, the Registry Run/RunOnce value, and any secondary payloads the backdoor downloaded. Given the modular download capability, a targeted removal is riskier than a rebuild for high-value (banking-transaction) hosts — rebuild those from known-good media. | Endpoint engineering | Removal record or rebuild record, disposal of original disk image after forensic copy |
| 5 · Recover 1 to 2 weeks | Return hosts to production only after the Immediate and Near-term hardening in section 12 is applied. Keep Q1, Q2, Q4 and Q9 alerting at critical severity for 90 days. | IR lead | Hardening attestation per host, 90-day monitoring plan |
| 6 · Report Ongoing | Notify your national CERT / financial-sector ISAC, especially if the affected host has banking-transaction access. If the lure referenced a specific .gov.br entity, that entity's IT/security team should be notified so they are aware their portal or mail infrastructure may be under active abuse (do not assume they already know). | IR lead with legal | Timeline, indicator set, notification record |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1584 | Compromise of .gov.br infrastructure and mailboxes | None | No | Out of scope attacker-side resource development on third-party government infrastructure, not a customer-SOC detection target |
| T1566.002 | Spearphishing link/QR from a compromised, SPF/DKIM/DMARC-passing mailbox | None (mail-side) | No | GAP needs mail-gateway/M365 audit telemetry, not endpoint. See section 12. |
| T1204.002 | User executes the lure installer | Q1 | Yes | Good |
| T1036 | Patched Electron/Boostnote decoy in campaign install directory | Q2 | Yes | Good |
| T1027 | Obfuscated index.js dropped under Inno Setup staging | Q3 | No | Good |
| T1497 | Sandbox/analysis evasion (samples receiving clean verdicts) | None | No | GAP evasion behavior itself is not endpoint-visible; mitigated indirectly by build-chain and path-based detection (Q1-Q4) instead of relying on verdict/reputation |
| T1547.001 | Registry Run Key persistence | Q4 | Yes | Good if registry value telemetry is on |
| T1053.005 | Scheduled Task (listed in ANY.RUN's MITRE table, no behavioral detail published) | None | No | GAP technique is attributed by the source but no task name, path or trigger detail was published to build a query from |
| T1082 / T1016 | Host/network fingerprinting by the backdoor | Q10 (partial, behavioral proxy only) | No | Partial the fingerprinting itself happens inside the Node.js runtime and is not separately observable from process telemetry |
| T1059.007 / T1059.001 | eval()-driven JavaScript execution, PowerShell follow-on | Q10 | No | Partial catches a shell spawned by the decoy process; does not catch in-process eval() execution with no child process |
| T1071.001 / T1090 | C2 beacon (domain, IP, URI shape) | Q6, Q7, Q8 | Q6/Q7 yes, Q8 no | Good for domain/IP while infrastructure is live (Q6, Q7); Partial for the URI-path shape (Q8), which needs web-proxy/HTTP telemetry most environments do not have ingested by default |
| Beacon cadence (behavioral) | ~180-second beacon interval, generation-independent | Q5 | No | Partial generic cadence detector, needs environment-specific polling-agent exclusions before it is low-noise |
| T1105 / T1204.002 | Known installer/backdoor hashes | Q9 | Yes | Good for the two complete published hashes only; the partial Shellter-loader hash cannot be matched at all (see section 4) |
| T1041 | Exfiltration and secondary payload delivery over the C2 channel | Q7 (volume/behavior review) | No | Partial no dedicated exfil-volume query; the C2-connection queries provide the pivot point for manual review |
| Ofício-PC / Shellter-loader arm | Cobalt Strike delivery via the "Zab agent" kit | Q10 (filename-only branch) | No | GAP the loader's hash is incomplete and no other published detail (network indicators, Cobalt Strike beacon config, "Zab agent" mechanics) exists to build a stronger query |
Ten queries, of which five are high confidence with no material FP source (Q1, Q2, Q3, Q4, Q9) and two more are high confidence but perishable (Q6, Q7). The pack's strongest coverage sits at installer execution and persistence — exactly where ANY.RUN's own guidance says to focus, since the build chain and install-directory pattern are described as more durable than the domain/IP list. Before deploying, clear validation gate 1 in section 11: if RegGenericValueUpdate/AsepValueUpdate is not flowing in your tenant, Q4 returns nothing forever. If you have no web-proxy/HTTP log ingestion, Q8 cannot run at all and the URI-beacon shape stays a permanent gap until that telemetry exists — Q6 and Q7 partially compensate by catching the underlying network connection even without URI visibility.
Hunt Summary Ticket
TITLE Hunt: PhantomEnigma - hijacked .gov.br portals delivering an Electron/Node.js backdoor
SEVERITY Critical (active, evolving campaign against banking and public-sector targets)
SCOPE All Windows endpoints, prioritizing banking-transaction workstations and any
organization with staff who interact with Brazilian government (.gov.br) portals
or receive .gov.br-sourced correspondence.
HYPOTHESIS PhantomEnigma delivers a Delphi/Inno-Setup-installed, patched-Electron-decoy
Node.js backdoor via phishing from genuinely compromised .gov.br government
mailboxes (so SPF/DKIM/DMARC pass), using fake police or digital
power-of-attorney lures. The backdoor persists via a single Registry Run Key
and beacons to rotating C2 roughly every 180 seconds. Per the primary source,
the Delphi+Inno+Electron/Node build chain and install-directory naming pattern
are more durable detection surfaces than the domain/IP list, which rotates
near-weekly.
QUERIES Q1 Lure installer execution CONF high FP low
Q2 Patched Electron decoy in campaign install path CONF high FP low
Q3 index.js dropped under Inno Setup staging CONF high FP low
Q4 Run key targets campaign install directory CONF high FP low
Q5 ~180s beacon-cadence detector (generic) CONF med FP med
Q6 C2 domain resolution CONF high FP low
Q7 C2 IP connections CONF high FP low
Q8 Beacon URI pattern (needs proxy/HTTP telemetry) CONF med FP low
Q9 Known campaign SHA256 hashes CONF high FP low
Q10 Decoy-spawned shell / Ofício-PC loader pattern CONF med FP med
DO FIRST 1. Run Q1, Q2 and Q4 estate-wide over full retention. These fire at deployment
and persistence, before any beacon exists, and carry no known FP source.
2. Import the Falcon IOC CSV from section 10. Do NOT import the partial
Shellter-loader hash line -- it is commented out and will not match anyway.
3. Confirm RegGenericValueUpdate/AsepValueUpdate telemetry is flowing, or Q4
is blind.
4. Block the published C2 domains and IPs at the resolver and egress (Playbook 3).
5. If you have web-proxy/HTTP log ingestion, validate and deploy Q8. If not,
log the gap and rely on Q6/Q7 for network-layer coverage.
FINDINGS [ ] No hits [ ] Hits pending triage [ ] Confirmed compromise
GAPS - No detection for the initial phishing delivery itself (mail-side telemetry).
- No detection for in-process eval() execution that does not spawn a child.
- No detection for the Ofício-PC Shellter-loader beyond its filename pattern --
the hash is incomplete and no network indicators were published for that arm.
- T1053.005 (Scheduled Task) is attributed by the source with no behavioral
detail to build a query from.
- Beacon URI-path detection (Q8) requires telemetry most environments lack.
ACTIONS [ ] Q1, Q2, Q4, Q9 promoted to Custom IOA after validation gates 3, 5, 6
[ ] Q6, Q7 promoted after the two supplementary domains and 91.92.241.181 are
independently confirmed in your own telemetry
[ ] Q5, Q8, Q10 baselined / telemetry-validated before promotion
[ ] Immediate hardening tier deployed (C2 block, installer/decoy alerting,
Run-key monitoring, mail content rules, user awareness)
[ ] Near-term hardening piloted (AppLocker deny, proxy log ingestion, ASR rule,
SmartScreen/reputation friction, DNS category blocking)
[ ] Containment runbook rehearsed with the clean-verdict-does-not-mean-clean
constraint understood
OWNER HuntPack
VERSION v0.1 - 2026-08-20
Changelog
References
| Tier | Source | Used for | Accessed |
|---|---|---|---|
| 1 | ANY.RUN Cybersecurity Blog — 20+ Government Websites Hijacked: PhantomEnigma Investigation (2026-07-16) | Primary technical analysis. Every hash, domain, IP, install-directory pattern, filename, beacon shape and MITRE technique in this pack. | 2026-08-20 |
| 2 | The Hacker News — 20+ Hijacked Government Websites Became an Attack Channel (2026-07-16) | Corroboration of scope, lure themes, SPF/DKIM/DMARC bypass, 180-second beacon interval. Source of the four compromised .gov.br context hostnames. | 2026-08-20 |
| 2 | SC World — PhantomEnigma campaign hijacks Brazilian government websites for malware delivery (2026-07-17) | Corroboration of campaign evolution and Electron/Boostnote masquerade. Cited in the 2026-08-17 weekly recap as still-active, motivating this pack. | 2026-08-20 |
| 2 | Cyber Press — When trusted gov infrastructure becomes an attack channel: PhantomEnigma puts banks at risk (2026-07-21) | Corroboration of infection chain and business-impact framing. | 2026-08-20 |
| 2 | Cybersecurity News — Hackers Hijack 20+ Government Websites to Deliver Malware Through Trusted Links (2026-07-21, supplementary) | Independent corroboration of the zsxocjarsate[.]com domain and the /laravel.php-to-/nbw/ beacon evolution. | 2026-08-20 |
| Ref | MITRE ATT&CK | Technique identifiers used throughout sections 6, 12 and 15. | 2026-08-20 |
| Ref | Microsoft Security Baselines and Windows security documentation | ASR rule identifiers, AppLocker and Defender configuration in sections 12 and 13. | 2026-08-20 |
Source snapshots. The fetched text of all sources — including the one that failed to load (HackRead) — is preserved alongside this file in PhantomEnigma-Hunt-sources/. Every atomic indicator shipped in section 4 is traced back to those snapshots.