APT28-Linked HOOKEDGE Backdoor Threat Hunt

Threat Overview

Recorded Future’s Insikt Group documented HOOKEDGE, a lightweight Windows batch backdoor used in campaigns against government and diplomatic organizations in Romania, Spain, and Türkiye. The campaigns ran from late September 2025 through early April 2026 and used macro-enabled Microsoft Word documents with diplomatic-themed lures.

HOOKEDGE creates a scheduled task that runs every 30 minutes, polls webhook.site for .cmd payloads, executes commands, and exfiltrates output through Microsoft Edge launched in headless mode or a hidden window. High-value targets can receive a second-stage payload with a five-minute beacon interval. Recorded Future attributed the activity to BlueDelta/APT28 with moderate confidence based on code and tradecraft overlap with the earlier HEADLACE backdoor; that attribution is an assessment, not a directly proven fact.

References

Impacted Systems

PlatformWindows endpoints
Initial accessMacro-enabled Microsoft Word documents using diplomatic/government-themed lures
ExecutionWindows batch-script backdoor and remotely fetched .cmd payloads
PersistenceScheduled task executing every 30 minutes; second-stage variants can beacon every 5 minutes
Command and controlwebhook.site used for C2, payload staging, and data exfiltration
Living-off-trusted-softwareMicrosoft Edge launched headless or hidden to perform HTTP requests
Targeting observedGovernment and diplomatic organizations in Romania, Spain, and Türkiye
AttributionBlueDelta / APT28 with moderate confidence per Recorded Future
Known activityConfirmed campaign activity; attribution confidence is moderate

What this hunt looks for

Looks for Word-to-script execution, scheduled-task-driven batch activity, headless or hidden Microsoft Edge execution, and outbound connections to webhook.site.

Required logs

DeviceProcessEvents and DeviceNetworkEvents from endpoint telemetry. SecurityEvent Event ID 4688 can provide a fallback where command-line auditing is enabled.

First-Pass — Word Spawning Batch or Command Execution

DeviceProcessEvents
| where TimeGenerated >= ago(30d)
| where InitiatingProcessFileName =~ "WINWORD.EXE"
| where FileName in~ ("cmd.exe", "powershell.exe", "pwsh.exe", "wscript.exe", "cscript.exe")
| project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine, SHA256
| sort by TimeGenerated asc

Behavioral — Headless Edge Contacting webhook.site

DeviceNetworkEvents
| where TimeGenerated >= ago(30d)
| where InitiatingProcessFileName =~ "msedge.exe"
| where RemoteUrl has "webhook.site"
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteIP, RemoteUrl, RemotePort, ActionType
| sort by TimeGenerated asc

Follow-Up — Headless or Hidden Edge From Scripted Context

DeviceProcessEvents
| where TimeGenerated >= ago(30d)
| where FileName =~ "msedge.exe"
| where ProcessCommandLine has_any ("--headless", "--headless=new", "--window-position", "webhook.site")
| where InitiatingProcessFileName in~ ("cmd.exe", "powershell.exe", "wscript.exe", "cscript.exe", "schtasks.exe")
| project TimeGenerated, DeviceName, AccountName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine, SHA256
| sort by TimeGenerated asc

Fallback — Windows 4688 Process Creation for HOOKEDGE Patterns

SecurityEvent
| where TimeGenerated >= ago(30d)
| where EventID == 4688
| where NewProcessName endswith @"\msedge.exe" or NewProcessName endswith @"\cmd.exe"
| where CommandLine has_any ("webhook.site", "--headless", ".cmd", ".bat")
| project TimeGenerated, Computer, Account, NewProcessName, CommandLine, ParentProcessName
| sort by TimeGenerated asc

Leave a comment