E4del & PINHOLE — FTP Banner Dead-Drop RATs
Executive Summary
Researchers have identified a new, early-stage campaign deploying two previously-unreported Windows RATs — E4del (a Node.js/Electron-based RAT) and PINHOLE (a shellcode-based RAT) — that share a novel command-and-control dead-drop technique: retrieving initial tasking directly from an FTP server's connection banner, the plaintext welcome string a server sends before authentication. Because the "malicious" content lives in a protocol handshake field rather than a file body or HTTP response, it evades most content-inspection tooling that isn't specifically looking there. The technique has reportedly been active since early July 2026; at analysis time the operators' own stats panel showed only 11 execution events, indicating the campaign is still in its infancy — which makes this an unusually good moment to get ahead of it.
The attack starts conventionally (a phishing-delivered ZIP containing an LNK shortcut) but diverges sharply downstream: PINHOLE resolves its C2 configuration from Pinterest pins and SurveyMonkey survey questions — legitimate web services abused as dead-drop resolvers — and injects a 119 KB native PE payload into a suspended ApplicationFrameHost.exe via Early Bird APC injection, preceded by six unpacking layers and Halo's Gate syscall-hooking evasion. E4del, meanwhile, masquerades as a digitally-signed Discord Electron client and carries a Node.js native module (crypto32.node) for privilege-escalation attempts.
The highest-value defensive angle is the FTP banner and Cloudflare Workers infrastructure itself: both RATs still have to make an outbound connection to attacker-controlled infrastructure to receive tasking, and that infrastructure is currently small and stable (four IPs, one domain). Endpoint-side, the injection target (ApplicationFrameHost.exe spawned abnormally) and the Discord masquerade are durable behavioral signals that will outlast any single IP rotation.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Forward |
|---|---|---|---|
| 1 | The Hacker News, 2026-08-25 | Attack chain, FTP banner technique, both RATs' capability sets, beaconing states, all four infrastructure IPs + domain | Yes |
| 1 | BleepingComputer, 2026-08-21 | Discord masquerade + crypto32.node module (E4del), Pinterest/SurveyMonkey dead-drop resolver + ApplicationFrameHost.exe injection target (PINHOLE) | Yes |
Web Hunter Notes
- Both cited sources attribute the underlying research to SOCRadar's STRU team (original report at socradar.io); that source returned an HTTP 403 to automated fetch and its content was not independently retrieved, so no claim in this pack rests on it directly — only the corroborated subset that both THN and BleepingComputer independently reported is carried forward.
- No file hashes were published in either accessible source. IOC coverage below is infrastructure- and behavior-based.
- Confirmed via
check_coverage.pyagainst the four IPs and the Cloudflare Workers domain that no published pack in the library shares this infrastructure — this is genuinely new coverage, not a rename of an existing campaign. - No indicator in either cited source contained any instruction directed at an AI agent or automated tooling; both were treated as pure threat-intel data.
Hunt Brief & Attack Chain
Hunt Hypotheses
| # | Hypothesis | MITRE | Telemetry | Confidence |
|---|---|---|---|---|
| H1 | A user double-clicked an LNK from a ZIP and a shell process is retrieving content from an FTP connection (banner dead-drop) | T1204.002, T1105 | ProcessRollup2, SyntheticProcessRollup2 | Medium |
| H2 | Endpoints are connecting outbound to one of the four confirmed FTP/stats-panel IPs | T1071.002 | NetworkConnectIP4 | High |
| H3 | Endpoints are resolving/connecting to the Cloudflare Workers second-stage domain | T1071.001, T1102.002 | DnsRequest, NetworkConnectIP4 | High |
| H4 | rundll32.exe is executing a DLL downloaded over WebDAV under a conhost.exe parent (E4del delivery path) | T1105, T1218.011 | ProcessRollup2, SyntheticProcessRollup2 | Medium |
| H5 | ApplicationFrameHost.exe is being spawned by an unexpected parent process, consistent with use as a suspended-process injection target | T1055.004 | ProcessRollup2, SyntheticProcessRollup2 | Medium |
| H6 | An Electron/Node.js process is running under the name "Discord" from a non-standard install path (masquerade) | T1036.005 | ProcessRollup2, SyntheticProcessRollup2 | Medium |
Attack Chain
| Step | Action | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 | Phishing delivers a ZIP containing an LNK shortcut | ProcessRollup2 (explorer.exe → shell) | Q1 |
| 2 | LNK connects to an FTP server and reads the malicious banner as its first command | NetworkConnectIP4 (port 21) | Q1, Q2 |
| 3 | Banner content drives a PowerShell script that fetches the next stage | ProcessRollup2 | Q1 |
| 4a | E4del path: a DLL is fetched over WebDAV and executed via rundll32.exe under conhost.exe; the resulting Electron app masquerades as Discord and loads crypto32.node | ProcessRollup2 | Q4, Q6 |
| 4b | PINHOLE path: a PowerShell stage saves a secondary script to %TEMP%\u.cmd, retrieves C2 config from a Pinterest pin / SurveyMonkey survey, unpacks six layers, uses Halo's Gate to evade EDR hooks, then Early Bird APC-injects a 119 KB PE into a suspended ApplicationFrameHost.exe | ProcessRollup2 | Q5 |
| 5 | Both RATs establish ongoing C2 (E4del over WebSocket; PINHOLE via its resolved config) to campaign infrastructure, reporting to a shared stats panel | NetworkConnectIP4, DnsRequest | Q2, Q3 |
Consolidated IOC Table
| Type | Value | Confidence | Action | Context |
|---|---|---|---|---|
| IPv4 | 157.254.194.31:21 | High | detect | Primary FTP banner dead-drop server |
| IPv4 | 167.148.41.164:21 | High | detect | Secondary FTP banner dead-drop server |
| IPv4 | 209.99.185.38:21 | High | detect | PINHOLE-specific FTP banner dead-drop server |
| IPv4 | 69.48.228.126:5000 | High | detect | Operator stats/tracking panel |
| Domain | cloudflare.milicare.in | High | detect | Cloudflare Workers second-stage script host (path /app/c) |
| Filename | crypto32.node | Medium | hunt | E4del Node.js native module used for privilege-escalation attempts |
| Filename | u.cmd | Low | hunt | PINHOLE secondary script, saved to %TEMP% then deleted (forensic evasion) — generic filename, pair with process lineage before alerting |
| Behavioral | Early Bird APC injection into suspended ApplicationFrameHost.exe | High | hunt | PINHOLE process-injection target |
| Behavioral | Halo's Gate syscall-hooking evasion + six unpacking layers | Medium | enrich | PINHOLE defense evasion; not directly Falcon-queryable, useful for IR/malware analysis triage |
| Behavioral | C2 configuration retrieved from Pinterest pins / SurveyMonkey surveys | Medium | enrich | PINHOLE dead-drop resolver; a proxy/DLP visibility angle, not Falcon-native |
| Behavioral | Electron app masquerading as Discord, digitally signed | Medium | hunt | E4del delivery disguise |
No file hashes were published in either accessible source (the primary SOCRadar research report returned HTTP 403 on fetch and was not used directly). Treat the IP/domain list as perishable given the campaign's early stage; the behavioral signatures are the durable part of this pack.
Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Windows endpoint (process execution) | ProcessRollup2, SyntheticProcessRollup2 | Critical | Covered on sensor-deployed endpoints |
| Network egress (FTP + Cloudflare Workers) | NetworkConnectIP4, DnsRequest | High | Partial — visible only for on-sensor/on-network traffic |
| Legitimate-web-service C2 (Pinterest, SurveyMonkey) | Web/proxy content inspection | Medium | Gap — Falcon network telemetry sees the connection but not which pin/survey was fetched; needs proxy/DLP-level visibility |
| In-memory injection (Early Bird APC) | Falcon sensor behavioral/ML detections | High | Partial — no standard CQL-queryable "injection" event exists in the public Falcon data model; rely on process-lineage anomaly hunting (Q5) plus the sensor's own ML-based injection detections |
ATT&CK Mapping
| Tactic | Technique ID | Technique Name | Observed Behavior |
|---|---|---|---|
| Initial Access | T1566.001 | Phishing: Spearphishing Attachment | ZIP archive containing an LNK shortcut |
| Execution | T1204.002 | User Execution: Malicious File | Victim double-clicks the LNK |
| Command and Control | T1071.002 | Application Layer Protocol: File Transfer Protocols | LNK connects to an FTP server; the banner IS the command channel |
| Command and Control | T1102.001 | Web Service: Dead Drop Resolver | PINHOLE resolves C2 config from Pinterest pins and SurveyMonkey surveys |
| Ingress Tool Transfer | T1105 | Ingress Tool Transfer | DLL fetched over WebDAV; secondary script fetched from Cloudflare Workers |
| Defense Evasion | T1055.004 | Process Injection: Asynchronous Procedure Call | Early Bird APC injection into suspended ApplicationFrameHost.exe |
| Defense Evasion | T1562.001 | Impair Defenses: Disable or Modify Tools | Halo's Gate indirect-syscall technique to evade EDR usermode hooks |
| Defense Evasion | T1140 | Deobfuscate/Decode Files or Information | Six unpacking layers; "shellcode fluctuation" keeping only one 4KB section resident |
| Defense Evasion | T1036.005 | Masquerading: Match Legitimate Name or Location | E4del signed Electron binary presenting as Discord |
| Privilege Escalation | T1068 | Exploitation for Privilege Escalation | E4del's crypto32.node native module used for privilege-escalation attempts |
| Credential Access | T1555.003 | Credentials from Password Stores: Credentials from Web Browsers | PINHOLE browser credential-theft module |
| Collection | T1113 | Screen Capture | Both RATs support screenshot/desktop-streaming commands |
Native Audit-Log Hunts
Two parts of this attack chain sit outside standard Falcon endpoint telemetry entirely and need proxy/DLP or mail-gateway visibility instead:
- Outbound FTP control-channel traffic (port 21) from user workstations: most modern organizations have no legitimate business reason for a user endpoint to make outbound FTP connections at all — a network firewall or NDR log review for any port-21 outbound traffic, not just to the four listed IPs, is a durable hunt that survives IP rotation.
- Proxy/web-gateway logs for requests to pinterest.com and surveymonkey.com content-fetch endpoints correlated with a recent LNK/PowerShell execution on the same host: the connection to these legitimate services is not inherently suspicious, but the timing correlation with a fresh malicious-process chain is.
- Mail gateway / attachment sandbox review of ZIP archives containing LNK files: confirm LNK files are detonated or blocked by the sandbox rather than passed through as "non-executable" content.
- EDR/AV product self-health telemetry: Halo's Gate and similar syscall-hooking evasion techniques specifically target usermode EDR hooks — a spike in "sensor tamper" or "hook integrity" alerts from the Falcon sensor itself around the same time as a suspicious process chain is a meaningful corroborating signal.
CrowdStrike LogScale CQL Hunt Queries
Looks for: PowerShell/cmd launched directly by Explorer (consistent with a user double-clicking an LNK) with an FTP URI in the command line. FP: legitimate internal FTP automation scripts launched this way will match — tune with a path/hash allowlist.
// HUNT: Explorer-spawned shell referencing an FTP URI (LNK banner dead-drop retrieval) // MITRE: T1204.002, T1105 // CONF: medium FP: medium COST: low | REQUIRES: ProcessRollup2, SyntheticProcessRollup2 // LOOKBACK: 30d (set in the Falcon time picker, not in-query) // TUNING: allowlist known internal FTP automation by ParentBaseFileName + script hash before alerting #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^explorer\.exe$/i | FileName=/^(powershell|pwsh|cmd)\.exe$/i | CommandLine=*ftp:* | table([aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, timestamp])
Looks for: outbound connections to the four confirmed campaign IPs (three FTP dead-drops, one stats panel). FP: none expected — infrastructure is campaign-specific.
// HUNT: Connection to E4del/PINHOLE FTP banner dead-drop or stats-panel infrastructure // MITRE: T1071.002 // CONF: high FP: low COST: low | REQUIRES: NetworkConnectIP4 // LOOKBACK: 30d #event_simpleName=NetworkConnectIP4 | in(field=RemoteAddressIP4, values=["157.254.194.31","167.148.41.164","209.99.185.38","69.48.228.126"]) | table([aid, ComputerName, UserName, RemoteAddressIP4, RemotePort, ContextBaseFileName, timestamp])
Looks for: resolution of or connection to the confirmed Cloudflare Workers domain used to serve the PINHOLE second-stage script. FP: none expected — this specific subdomain is campaign-registered, not shared Cloudflare infrastructure.
// HUNT: DNS/network activity to PINHOLE Cloudflare Workers second-stage host // MITRE: T1102.001, T1071.001 // CONF: high FP: low COST: low | REQUIRES: DnsRequest, NetworkConnectIP4 // LOOKBACK: 30d #event_simpleName=/DnsRequest|NetworkConnectIP4/ | DomainName=/^cloudflare\.milicare\.in$/i | table([aid, ComputerName, UserName, DomainName, ContextProcessId_decimal, timestamp])
Looks for: rundll32.exe spawned under conhost.exe with a WebDAV-style UNC path in the command line — the reported E4del delivery mechanic. FP: some legitimate software installers use this pattern; tune with a path/publisher allowlist.
// HUNT: rundll32 under conhost executing a WebDAV-hosted DLL (E4del delivery) // MITRE: T1105, T1218.011 // CONF: medium FP: medium COST: low | REQUIRES: ProcessRollup2, SyntheticProcessRollup2 // LOOKBACK: 30d // TUNING: allowlist known-legitimate installers that use this rundll32/conhost/WebDAV pattern by publisher or hash #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^conhost\.exe$/i | FileName=/^rundll32\.exe$/i | CommandLine=*\\DavWWWRoot\\* | table([aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, timestamp])
Looks for: ApplicationFrameHost.exe, which under normal Windows operation is launched by explorer.exe/svchost.exe as the UWP app frame host, being spawned by anything else — the profile of a process being started suspended for injection. FP: medium — baseline your environment first, since some legitimate UWP/RuntimeBroker chains vary by Windows build.
// HUNT: ApplicationFrameHost.exe spawned by an unexpected parent (suspended-process injection target) // MITRE: T1055.004 // CONF: medium FP: medium COST: low | REQUIRES: ProcessRollup2, SyntheticProcessRollup2 // LOOKBACK: 30d // TUNING: baseline normal ApplicationFrameHost.exe parents for your Windows build (typically explorer.exe/svchost.exe) for 7 days before alerting; exclude RuntimeBroker.exe chains #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^ApplicationFrameHost\.exe$/i | ParentBaseFileName!=/^(explorer|svchost|RuntimeBroker)\.exe$/i | table([aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, timestamp])
Looks for: a process named Discord.exe (or Update.exe, Discord's legitimate updater name) whose ImageFileName path is NOT under the standard per-user or Program Files Discord install location — the reported E4del masquerade. FP: portable or enterprise-packaged legitimate Discord installs in nonstandard paths will match — allowlist known-good paths for your environment.
// HUNT: Discord-named process running from a non-standard install path (E4del masquerade) // MITRE: T1036.005 // CONF: medium FP: medium COST: low | REQUIRES: ProcessRollup2, SyntheticProcessRollup2 // LOOKBACK: 30d // TUNING: allowlist your environment's actual Discord install paths (default %LocalAppData%\Discord) before alerting #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^(Discord|Update)\.exe$/i | ImageFileName!=*\\AppData\\Local\\Discord\\* | table([aid, ComputerName, UserName, ImageFileName, FileName, CommandLine, timestamp])
CrowdStrike Custom IOA Recommendations
| Candidate | Source Query | Pattern | Exclusions | Deployment Path |
|---|---|---|---|---|
| IOA: FTP dead-drop infrastructure connection | Q2 | RemoteAddressIP4 in confirmed IP list | None known | Promote directly — low FP, high confidence; set to detect/alert |
| IOA: Cloudflare Workers second-stage host | Q3 | DomainName = cloudflare.milicare.in | None known | Promote directly |
| Investigate-only: ApplicationFrameHost anomalous parent | Q5 | Unexpected parent process | Windows-build-specific UWP chains (see TUNING) | Scheduled hunt search until baselined per Windows build in your fleet |
| Investigate-only: Discord path masquerade | Q6 | Discord-named process outside standard path | Enterprise-packaged installs (see TUNING) | Scheduled hunt search feeding SOC triage |
Machine-Readable IOC Appendix
type,value,action,severity,expiration,description,tags ipv4,157.254.194.31,detect,high,2027-02-28,E4del/PINHOLE primary FTP banner dead-drop server,campaign:E4del-PINHOLE ipv4,167.148.41.164,detect,high,2027-02-28,E4del/PINHOLE secondary FTP banner dead-drop server,campaign:E4del-PINHOLE ipv4,209.99.185.38,detect,high,2027-02-28,PINHOLE-specific FTP banner dead-drop server,campaign:E4del-PINHOLE ipv4,69.48.228.126,detect,medium,2027-02-28,E4del/PINHOLE operator stats/tracking panel (port 5000),campaign:E4del-PINHOLE domain,cloudflare.milicare.in,detect,high,2027-02-28,PINHOLE Cloudflare Workers second-stage script host,campaign:E4del-PINHOLE filename,crypto32.node,hunt,medium,2026-11-29,E4del Node.js native module for privilege escalation,campaign:E4del-PINHOLE
# E4del / PINHOLE behavioral fingerprints
C2 mechanism (both): FTP server connection-banner text used as initial command channel
PINHOLE dead-drop: C2 config retrieved from Pinterest pins / SurveyMonkey survey questions
PINHOLE injection: Early Bird APC injection of a 119 KB native x86-64 PE into a
suspended ApplicationFrameHost.exe
PINHOLE evasion: Halo's Gate indirect-syscall EDR-hook bypass; six unpacking layers;
"shellcode fluctuation" (only one 4KB section resident at a time)
E4del masquerade: Digitally-signed Electron app presenting as Discord
E4del module: crypto32.node (Node.js native module, privilege-escalation attempts)
E4del beaconing states: Active 0-20s (200ms-2s check-in) -> Semi-Active 20-40s (2-5s) ->
Inactive 40s+ (5-9s)
Forensic evasion: PINHOLE secondary script saved to %TEMP%\u.cmd then deleted post-use
RAT 1: E4del -- Node.js/Electron RAT, 8 commands, Discord masquerade RAT 2: PINHOLE -- shellcode-based RAT, 14 commands, browser-stealer module Novel technique: FTP server connection banners used as a dead-drop resolver (DDR) Secondary DDR: Legitimate web services (Pinterest, SurveyMonkey) for C2 config Campaign stage: Early / low-volume at time of reporting (11 execution events observed)
# Run against firewall / ASR / EDR console, not Falcon LogScale 1. Confirm outbound FTP (port 21) from general user workstations is blocked or requires proxy/allowlist exception -- most orgs have no legitimate need for it. 2. Confirm Attack Surface Reduction rule "Block execution of potentially obfuscated scripts" and LNK detonation in the mail/attachment sandbox are both enabled. 3. Confirm WebDAV client (WebClient service) is disabled on workstations that don't need it. 4. Review Falcon sensor tamper-protection / hook-integrity alert history for the same time window as any Q5 hit -- Halo's Gate specifically targets usermode EDR hooks.
Detection Validation Gates
| Gate | Requirement | Status |
|---|---|---|
| Telemetry ready | ProcessRollup2/SyntheticProcessRollup2, DnsRequest, NetworkConnectIP4 enabled and flowing for target hosts | Verify per-tenant before deployment |
| Benign baseline | Run Q1, Q4, Q5, Q6 in investigate mode for 7 days to characterize normal volume before alerting | Required before promotion |
| Positive test | Confirm Q2/Q3 fire against a synthetic network/DNS event using the listed IPs/domain in a lab/test environment | Recommended |
| Promotion criteria | Q2/Q3 → Custom IOA (low FP, high conf). Q1/Q4/Q5/Q6 stay scheduled hunts until each is tuned per §9. | See §9 |
Hardening — Tiered
Block confirmed C2 infrastructure at the network egress. Add the four IPs and the Cloudflare Workers domain from §10 to your firewall/DNS filter deny list. Authority: MITRE M1037 (Filter Network Traffic). Verify: a test connection attempt to a listed IP is blocked/logged.
Block or restrict outbound FTP from general user workstations. Most organizations have no legitimate reason for a standard user endpoint to make outbound FTP connections; this single control defeats the core dead-drop mechanism for both RATs regardless of infrastructure rotation. Authority: MITRE M1037; CIS Microsoft Windows Benchmark (network hardening section). Verify: outbound port-21 connection attempts from a test workstation are blocked.
Confirm LNK files inside ZIP archives are detonated by the mail/attachment sandbox, not passed through as benign "shortcut" content. Authority: MITRE M1049 (Antivirus/Antimalware). Verify: a test ZIP+LNK sample is flagged or blocked by the mail gateway.
Disable the WebDAV client (WebClient service) on workstations that don't require it, closing the delivery path E4del reportedly uses to fetch its DLL. Authority: MITRE M1042 (Disable or Remove Feature or Program); CIS Microsoft Windows Benchmark. Verify: Get-Service WebClient shows the service disabled and a test WebDAV connection fails.
Enable an Attack Surface Reduction rule blocking obfuscated/encoded script execution to raise the cost of the multi-layer PowerShell staging both RATs rely on. Authority: Microsoft ASR rule guidance; MITRE M1040 (Behavior Prevention on Endpoint). Verify: ASR rule shows "Block" mode in Defender/Intune reporting and a test obfuscated script is blocked.
Deploy application allowlisting (WDAC or AppLocker) for Electron/Node.js-packaged applications, restricting execution to known-good publisher signatures and install paths — this directly defeats the Discord-masquerade delivery path and similar future masquerades. Authority: MITRE M1038 (Execution Prevention); Microsoft WDAC design guide. Verify: a test Electron binary signed by an unapproved publisher is blocked from executing.
Extend EDR/NDR monitoring to generically flag legitimate-web-service dead-drop patterns (recently-executed suspicious process chain followed shortly by a request to a consumer content site such as Pinterest, Pastebin, or similar) rather than only alerting on this campaign's specific URLs — the technique is reusable by other actors. Authority: MITRE M1031 (Network Intrusion Prevention). Verify: a simulated process-chain-then-web-request test sequence generates a correlated alert.
Deployable Playbooks
Playbook 1 — Block outbound FTP (port 21) from standard workstations (Windows Firewall / GPO)
Prerequisites: Domain Admin or GPO-edit rights; identify any legitimate business FTP users first and place them in an exception security group Reboot required: No (policy applies on next gpupdate) Rollback: Disable or unlink the GPO; no persistent endpoint state is modified # PowerShell equivalent for a single host / test group (Windows Defender Firewall) New-NetFirewallRule -DisplayName "Block Outbound FTP (E4del-PINHOLE hardening)" ` -Direction Outbound -Protocol TCP -RemotePort 21 -Action Block ` -Profile Any -Group "HuntPack-Hardening" # Exception example for an approved FTP automation host New-NetFirewallRule -DisplayName "Allow Outbound FTP - Approved Host" ` -Direction Outbound -Protocol TCP -RemotePort 21 -Action Allow ` -Program "C:\Approved\ftp-automation.exe" -Profile Any -Group "HuntPack-Hardening"
Playbook 2 — Disable the WebDAV client service
Prerequisites: Confirm no line-of-business application depends on the WebClient service in your environment first Reboot required: No (service stop takes effect immediately; set to Disabled to survive reboot) Rollback: Set-Service -Name WebClient -StartupType Automatic; Start-Service -Name WebClient Stop-Service -Name WebClient -Force Set-Service -Name WebClient -StartupType Disabled # Verify Get-Service -Name WebClient | Select-Object Status, StartType
Playbook 3 — Block confirmed C2 infrastructure (DNS sinkhole + firewall)
Prerequisites: Administrative access to DNS filtering platform and perimeter firewall Reboot required: No Rollback: Remove the entries below and reload the zone/firewall policy; purely resolver/firewall-side, no endpoint state changed ; DNS RPZ entry cloudflare.milicare.in. CNAME . # Firewall deny rules deny ip any host 157.254.194.31 deny ip any host 167.148.41.164 deny ip any host 209.99.185.38 deny ip any host 69.48.228.126
Containment Runbook
| Phase | Actions | Owner | Evidence to Preserve |
|---|---|---|---|
| Isolate | Falcon RTR network-contain any host matching Q2/Q3/Q5/Q6; block the four IPs and the Cloudflare Workers domain at the perimeter immediately | IR team | Isolation timestamp; full process tree around the matching event |
| Eradicate | Terminate and remove the E4del Electron process and PINHOLE-injected process; delete dropped artifacts (masquerading Electron app, any residual %TEMP% scripts); rotate any credentials the host's browser had stored if PINHOLE's stealer module executed | IR / Endpoint team | Sample of the Discord-masquerading binary; memory capture of the injected ApplicationFrameHost.exe process if feasible before termination |
| Recover | Reimage if injection/privilege-escalation success cannot be ruled out; reissue credentials; confirm firewall/WebDAV hardening (Playbooks 1-2) is applied before returning the host to service | Endpoint / Identity team | Reimage record; hardening compliance confirmation |
| Post-incident | Add any newly-observed FTP/dead-drop infrastructure to the blocklist in §10; feed the ApplicationFrameHost.exe parent baseline (Q5) back into tuning if false positives were found | Detection engineering | Updated IOC list; query tuning changelog |
Detection Coverage Map
| Technique | Behavior | CQL Coverage | Native/IOA Coverage | Status |
|---|---|---|---|---|
| T1204.002/T1105 Initial delivery | LNK → FTP banner → PowerShell | Q1 | Mail sandbox LNK detonation (§7) | Partial |
| T1071.002 FTP banner C2 | Command retrieval from banner | Q2 | Firewall port-21 egress review (§7) | Good |
| T1102.001 Dead Drop Resolver | Pinterest/SurveyMonkey C2 config | — | Proxy/DLP correlation hunt (§7) | Gap — not Falcon-visible |
| T1055.004 Process Injection (APC) | Early Bird APC into ApplicationFrameHost.exe | Q5 | Falcon sensor ML injection detections (vendor-side) | Partial — no public CQL-queryable injection event |
| T1562.001 Impair Defenses | Halo's Gate syscall-hook evasion | — | Sensor tamper/hook-integrity alerting (§7) | Gap |
| T1036.005 Masquerading | Discord-branded Electron app | Q6 | Application allowlisting (§12, strategic) | Good |
| T1105/T1218.011 DLL delivery via rundll32 | WebDAV-hosted DLL execution | Q4 | WebDAV client disable (§12) | Good |
Validation gates (§11) must pass before Q2/Q3 promote to Custom IOA; Q1/Q4/Q5/Q6 remain scheduled hunts pending environment-specific tuning.
Hunt Summary Ticket
TITLE: Hunt for E4del / PINHOLE FTP-banner dead-drop RAT campaign
SEVERITY: High (novel evasive RATs; low current volume but rapidly reusable technique)
SCOPE: All Windows endpoints; network egress logs for outbound FTP and Cloudflare
Workers traffic
HYPOTHESIS: Endpoints show contact with confirmed FTP/stats-panel/Workers infrastructure,
LNK-triggered FTP retrieval, or the ApplicationFrameHost/Discord-masquerade
behavioral signatures
QUERIES: Q1-Q6 (this pack, section 8); native hunts (section 7)
DO FIRST: Run Q2 and Q3 (high-confidence, low-FP) across the full fleet; review
firewall logs for any outbound port-21 traffic fleet-wide
FINDINGS: [fill in after execution]
GAPS: No Falcon-native visibility into which Pinterest pin/SurveyMonkey survey was
fetched, and no public CQL-queryable process-injection event -- native hunts
and sensor-side ML detections in section 7 are required, not optional
ACTIONS: Block IPs/domain (section 10); deploy Playbooks 1-3 (section 13); begin
WDAC/AppLocker rollout for Electron apps (section 12, strategic tier)
OWNER: [assign]
VERSION: v0.1 -- 2026-08-29
Changelog
References
| Tier | Source | Used For | Access Date |
|---|---|---|---|
| 1 | The Hacker News — E4del and PINHOLE RATs Turn FTP Banners Into Dead Drops for Malware Commands (2026-08-25) | Attack chain, infrastructure IPs/domain, capability sets, beaconing states | 2026-08-29 |
| 1 | BleepingComputer — Hackers abuse FTP server banners to deliver new Windows malware (2026-08-21) | Discord masquerade, crypto32.node, Pinterest/SurveyMonkey dead-drop resolver, ApplicationFrameHost.exe injection target | 2026-08-29 |