Back to Intelligence

APT28 HOOKEDGE Batch-Script Backdoor Targets European Government Networks — Detection and Hunting Guide

SA
Security Arsenal Team
August 29, 2026
12 min read

Recorded Future's Insikt Group has attributed a fresh wave of intrusions against government and diplomatic organizations in Romania, Spain, and Türkiye — active between late September 2025 and early April 2026 — to infrastructure and tooling linked to APT28 (also tracked as Fancy Bear, Forest Blizzard, STRONTIUM, and Sofacy), the threat group long associated with Russia's GRU military intelligence service (Unit 26165). The campaigns culminate in the deployment of a previously undocumented unauthorized access mechanism dubbed HOOKEDGE: a lightweight Windows batch script backdoor.

That detail matters. HOOKEDGE is not a bloated implant with a mature signature set — it's a deliberately minimal, living-off-the-land persistence and access mechanism. Batch-script backdoors survive precisely because they look like administration. They execute under cmd.exe, often invoke native utilities, and leave almost no binary footprint for EDR engines tuned to portable executable inspection. If you defend a government, diplomatic, defense-adjacent, or NATO-aligned network — or any organization in the supply chain of one — assume your adversary has read the same reporting you have and is already testing whether your detections cover script-based tradecraft.

This post breaks down the threat from a defender's perspective, then gives you deployable Sigma rules, Sentinel/Defender hunts, a Velociraptor artifact, and a hardening script.

Threat Context: Why HOOKEDGE Deserves Immediate Attention

APT28 is one of the most operationally persistent state actors targeting Western government and diplomatic entities. Their historical playbook includes credential harvesting against webmail, exploitation of edge devices and Outlook/Exchange weaknesses, and rapid re-tooling after public disclosure. The HOOKEDGE campaigns fit that pattern: geographically focused targeting of foreign ministries and diplomatic missions in three NATO and EU member states, spread over roughly six months of sustained operations.

Key characteristics defenders should internalize:

  • Implant type: Windows batch script (.bat/.cmd) executed via cmd.exe — T1059.003 (Windows Command Shell) and T1053.005 (Scheduled Task) are the most likely ATT&CK mappings for execution and persistence.
  • Targeting: Government and diplomatic organizations in Romania, Spain, and Türkiye — late September 2025 through early April 2026.
  • Attribution: APT28-linked, per Recorded Future Insikt Group.
  • Design philosophy: Lightweight, low forensic footprint, high blend-in potential against environments where IT staff legitimately run batch files.

There is no CVE associated with this campaign — this is not a patch-and-move-on problem. The initial access vector in these campaigns is consistent with APT28's well-documented reliance on spearphishing and credential theft, meaning the defensive burden sits squarely on identity controls, email security, and post-compromise behavioral detection.

Technical Analysis: Anatomy of a Batch-Script Backdoor

Because HOOKEDGE is a batch script, defenders should reason about it in terms of the observable behaviors this class of implant must exhibit to function — regardless of the specific script contents, which operators can and will mutate:

  1. Delivery and staging. The script lands on disk via phishing attachment, extracted archive, or dropper — commonly in user-writable, low-scrutiny paths: %TEMP%, %APPDATA%, %LOCALAPPDATA%, %PUBLIC%, or %ProgramData%. Watch for .bat/.cmd files written by Office applications, archive utilities, or browser processes.
  2. Execution under cmd.exe. Batch backdoors execute via cmd.exe /c or cmd.exe /q /c, frequently launched from explorer.exe (user double-click), Office processes, wscript.exe, or scheduled tasks. The parent-child relationship is your highest-fidelity signal — legitimate batch files in most environments are launched interactively or by known software deployment tooling, not by winword.exe.
  3. Living-off-the-land reconnaissance and C2. Batch backdoors typically chain native utilities: systeminfo, ipconfig, net user, whoami, tasklist for host profiling; curl.exe, certutil.exe, bitsadmin.exe, or powershell.exe -enc for egress and payload retrieval; schtasks.exe /create or reg add for persistence.
  4. Persistence. Scheduled tasks (T1053.005) or Run-key registry entries referencing a script in a user-writable directory are the dominant patterns. A scheduled task whose action is cmd.exe /c <path>\something.bat in %APPDATA% is almost never legitimate.
  5. Obfuscation. Expect variable substitution (%COMSPEC:~0,1%), excessive caret escaping (^), environment-variable slicing, and randomized filenames to defeat naive string matching. Detect on behavior chains, not script names.

Exploitation status: This is confirmed, active, in-the-wild state-sponsored operations spanning roughly six months against named government targets. This is not theoretical. There is no CISA KEV entry because no CVE is involved — the threat is post-access tooling, so your controls must be behavioral.

Detection & Response

Sigma Rules

The following rules target the observable execution and persistence behaviors of batch-script backdoors like HOOKEDGE. Tune the false-positive guidance to your environment before enabling at high.

YAML
---
title: Batch Script Launched by Office or Archive Process
description: Detects cmd.exe executing batch scripts where the parent process is an Office application, browser, or archive utility — a hallmark of phishing-delivered script backdoors such as HOOKEDGE (APT28).
id: 4f6b2c91-7d3a-4e58-b1c9-2a5f8d0e6b31
status: experimental
references:
  - https://thehackernews.com/2026/08/apt28-linked-hookedge-backdoor-targets.html
  - https://attack.mitre.org/techniques/T1059/003/
  - https://attack.mitre.org/techniques/T1566/001/
author: Security Arsenal
date: 2026/08/10
tags:
  - attack.execution
  - attack.t1059.003
  - attack.initial_access
  - attack.t1566.001
logsource:
  category: process_creation
  product: windows
detection:
  selection_parent:
    ParentImage|endswith:
      - '\winword.exe'
      - '\excel.exe'
      - '\powerpnt.exe'
      - '\outlook.exe'
      - '\msedge.exe'
      - '\chrome.exe'
      - '\firefox.exe'
      - '\winrar.exe'
      - '\7z.exe'
      - '\7zG.exe'
  selection_child:
    Image|endswith: '\cmd.exe'
    CommandLine|contains:
      - '.bat'
      - '.cmd'
  condition: selection_parent and selection_child
falsepositives:
  - Rare legitimate IT distribution of scripts via email — investigate rather than suppress
level: high
---
title: Scheduled Task Persistence via Batch Script in User-Writable Path
description: Detects scheduled task creation or Run-key persistence referencing batch scripts in user-writable directories, consistent with HOOKEDGE-style lightweight backdoor persistence.
id: 8c1e5a47-3b92-4f6d-9e2a-7c4d1b8f5a06
status: experimental
references:
  - https://thehackernews.com/2026/08/apt28-linked-hookedge-backdoor-targets.html
  - https://attack.mitre.org/techniques/T1053/005/
author: Security Arsenal
date: 2026/08/10
tags:
  - attack.persistence
  - attack.t1053.005
  - attack.privilege_escalation
logsource:
  category: process_creation
  product: windows
detection:
  selection_schtasks:
    Image|endswith: '\schtasks.exe'
    CommandLine|contains:
      - '/create'
  selection_path:
    CommandLine|contains:
      - '.bat'
      - '.cmd'
  selection_writable:
    CommandLine|contains:
      - '%APPDATA%'
      - '\AppData\'
      - '%TEMP%'
      - '\Temp\'
      - '%PUBLIC%'
      - '\Users\Public\'
      - '%LOCALAPPDATA%'
      - '%ProgramData%'
  condition: selection_schtasks and selection_path and selection_writable
falsepositives:
  - Software updaters using ProgramData tasks — allowlist known publisher task names
level: high
---
title: Reconnaissance Utility Chain from cmd.exe
description: Detects cmd.exe chaining multiple host-profiling utilities in a single command line, a common behavior in lightweight batch backdoors performing post-compromise reconnaissance.
id: 2d9a4f18-6c73-4b15-a8e0-5f3c9d2e7b44
status: experimental
references:
  - https://thehackernews.com/2026/08/apt28-linked-hookedge-backdoor-targets.html
  - https://attack.mitre.org/techniques/T1033/
  - https://attack.mitre.org/techniques/T1082/
author: Security Arsenal
date: 2026/08/10
tags:
  - attack.discovery
  - attack.t1033
  - attack.t1082
  - attack.t1057
logsource:
  category: process_creation
  product: windows
detection:
  selection:
    Image|endswith: '\cmd.exe'
    CommandLine|contains:
      - 'whoami'
      - 'systeminfo'
      - 'ipconfig'
      - 'net user'
      - 'tasklist'
      - 'netstat'
  filter_interactive:
    ParentImage|endswith: '\explorer.exe'
  condition: selection and not filter_interactive
falsepositives:
  - Helpdesk troubleshooting scripts — restrict to non-interactive parents and known IT accounts
level: medium

KQL — Microsoft Sentinel / Defender

This hunt correlates batch-script file creation by suspicious processes with subsequent execution and scheduled task registration — the full HOOKEDGE behavior chain in a single query.

KQL — Microsoft Sentinel / Defender
let Lookback = 14d;
let SuspiciousParents = dynamic(["winword.exe","excel.exe","powerpnt.exe","outlook.exe","chrome.exe","msedge.exe","firefox.exe","winrar.exe","7z.exe","7zg.exe"]);
let ScriptDrops =
    DeviceFileEvents
    | where TimeGenerated > ago(Lookback)
    | where FileName endswith ".bat" or FileName endswith ".cmd"
    | where FolderPath has_any ("\\AppData\\", "\\Temp\\", "\\Users\\Public\\", "\\ProgramData\\")
    | where InitiatingProcessFileName in~ (SuspiciousParents)
    | project DropTime=TimeGenerated, DeviceName, FileName, FolderPath, SHA256, Dropper=InitiatingProcessFileName, AccountName;
let ScriptExec =
    DeviceProcessEvents
    | where TimeGenerated > ago(Lookback)
    | where FileName =~ "cmd.exe"
    | where ProcessCommandLine has_any (".bat", ".cmd")
    | project ExecTime=TimeGenerated, DeviceName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine, ExecAccount=AccountName;
let Persistence =
    DeviceProcessEvents
    | where TimeGenerated > ago(Lookback)
    | where FileName =~ "schtasks.exe" and ProcessCommandLine has "/create"
    | where ProcessCommandLine has_any (".bat", ".cmd")
    | project TaskTime=TimeGenerated, DeviceName, TaskCommand=ProcessCommandLine, TaskAccount=AccountName;
ScriptDrops
| join kind=leftouter ScriptExec on DeviceName
| join kind=leftouter Persistence on DeviceName
| where isnotempty(ExecTime) or isnotempty(TaskTime)
| project DeviceName, DropTime, FileName, FolderPath, Dropper, ExecTime, ProcessCommandLine, TaskTime, TaskCommand, AccountName
| order by DeviceName asc, DropTime asc

Velociraptor VQL

Use this artifact to sweep your fleet for scheduled tasks and Run-key entries whose actions reference batch scripts in user-writable paths — the persistence layer a HOOKEDGE-class implant needs to survive reboot.

VQL — Velociraptor
-- Hunt for batch-script persistence: suspicious tasks, run keys, and staged scripts
LET tasks = SELECT Name, Command, UserID
FROM parse_xml(filename='C:/Windows/System32/Tasks', accessor='auto')
WHERE Command =~ '(?i)\\.(bat|cmd)'

LET scripts = SELECT FullPath, Mtime, Size
FROM glob(globs=['C:/Users/*/AppData/**/*.bat', 'C:/Users/*/AppData/**/*.cmd', 'C:/Users/Public/**/*.bat', 'C:/ProgramData/**/*.bat', 'C:/Users/*/AppData/**/*.cmd', 'C:/ProgramData/**/*.cmd'])
WHERE Mtime > now() - 1209600

LET runkeys = SELECT FullPath AS KeyPath, Data.value AS Value
FROM glob(globs=['HKEY_USERS/*/Software/Microsoft/Windows/CurrentVersion/Run/*'], accessor='registry')
WHERE Value =~ '(?i)\\.(bat|cmd)'

SELECT 'ScheduledTask' AS Artifact, Name AS Detail, Command AS Indicator, UserID AS Context FROM tasks
UNION ALL
SELECT 'StagedScript' AS Artifact, FullPath AS Detail, format(format='%d bytes', args=Size) AS Indicator, timestamp(epoch=Mtime) AS Context FROM scripts
UNION ALL
SELECT 'RunKey' AS Artifact, KeyPath AS Detail, Value AS Indicator, '' AS Context FROM runkeys

Remediation & Hardening Script

This PowerShell script audits a Windows endpoint for the HOOKEDGE persistence patterns, lists suspicious scheduled tasks and Run-key entries, and reports recently created batch scripts in user-writable locations. Run it fleet-wide via your RMM, GPO scheduled task, or Defender Live Response; it is read-only by default.

PowerShell
# HOOKEDGE-style batch backdoor audit — run as Administrator / SYSTEM
$lookbackDays = 90
$cutoff = (Get-Date).AddDays(-$lookbackDays)
$writablePaths = @("$env:APPDATA", "$env:LOCALAPPDATA", "$env:TEMP", "C:\Users\Public", "C:\ProgramData")
$findings = @()

# 1) Scheduled tasks whose action invokes a batch script
Get-ScheduledTask | ForEach-Object {
    foreach ($action in $_.Actions) {
        $cmd = "$($action.Execute) $($action.Arguments)"
        if ($cmd -match '\.(bat|cmd)' ) {
            $findings += [pscustomobject]@{Type='ScheduledTask'; Detail=$_.TaskName; Indicator=$cmd.Trim()}
        }
    }
}

# 2) Run/RunOnce keys referencing batch scripts (HKLM + HKCU for loaded users)
$runKeys = @(
    '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 ($key in $runKeys) {
    if (Test-Path $key) {
        (Get-ItemProperty $key).PSObject.Properties | Where-Object {
            $_.Value -match '\.(bat|cmd)' -and $_.Name -notmatch '^PS'
        } | ForEach-Object {
            $findings += [pscustomobject]@{Type='RunKey'; Detail="$key\$($_.Name)"; Indicator=$_.Value}
        }
    }
}

# 3) Recently created batch scripts in user-writable directories
foreach ($base in $writablePaths) {
    if (Test-Path $base) {
        Get-ChildItem -Path $base -Recurse -Include *.bat,*.cmd -ErrorAction SilentlyContinue |
            Where-Object { $_.CreationTime -gt $cutoff } |
            ForEach-Object {
                $findings += [pscustomobject]@{Type='StagedScript'; Detail=$_.FullName; Indicator="Created $($_.CreationTime)"}
            }
    }
}

# 4) Script Block Logging + process command-line auditing status (required for detection)
$sbl = (Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging' -ErrorAction SilentlyContinue).EnableScriptBlockLogging
$cmdAudit = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit' -ErrorAction SilentlyContinue).ProcessCreationIncludeCmdLine_Enabled
Write-Host "[i] Script Block Logging enabled: $sbl | CmdLine auditing enabled: $cmdAudit"
if (-not $sbl)    { Write-Warning 'Enable PowerShell Script Block Logging via GPO.' }
if (-not $cmdAudit) { Write-Warning 'Enable "Include command line in process creation events" via GPO.' }

if ($findings) {
    Write-Host "[!] $($findings.Count) suspicious artifact(s) found:" -ForegroundColor Red
    $findings | Format-Table -AutoSize
    $findings | Export-Csv -Path "$env:TEMP\hookedge_audit_$(Get-Date -Format yyyyMMdd_HHmm).csv" -NoTypeInformation
} else {
    Write-Host '[+] No batch-script persistence artifacts detected.' -ForegroundColor Green
}

Remediation and Hardening Recommendations

Because HOOKEDGE is post-compromise tooling rather than a patchable vulnerability, remediation is about eliminating the execution conditions and shrinking the detection gap:

  1. Constrain script execution. Use AppLocker or Windows Defender Application Control (WDAC) to restrict .bat/.cmd execution to signed, approved paths. In high-security environments (foreign ministries, diplomatic missions), block batch execution from all user-writable directories outright. Pair with PowerShell Constrained Language Mode where operationally feasible.
  2. Enforce identity controls at the initial access layer. APT28 campaigns of this profile typically begin with spearphishing and credential theft. Mandate phishing-resistant MFA (FIDO2/passkeys) for all mail and VPN access, disable legacy authentication protocols (IMAP/POP/basic auth) on Exchange/Microsoft 365 tenants, and deploy conditional access policies blocking logins from unexpected geographies and anonymizing infrastructure.
  3. Harden email and attachment handling. Block or detonate .bat, .cmd, .lnk, .js, and password-protected archives at the gateway. Enable Office macro restrictions and Attack Surface Reduction (ASR) rules — specifically "Block executable content from email client and webmail" and "Block Office applications from creating child processes."
  4. Turn on the telemetry these detections need. Deploy Sysmon (with command-line logging) or ensure Defender for Endpoint is reporting process creation with full command lines, enable PowerShell Script Block Logging, and forward Windows Task Scheduler operational logs to your SIEM. You cannot detect a batch-script backdoor without command-line visibility — full stop.
  5. Hunt scheduled tasks continuously. Baseline legitimate scheduled tasks per host class and alert on new tasks created by non-system accounts or whose actions reference user-writable paths. This single control catches the majority of lightweight backdoor persistence.
  6. Network egress filtering. Batch-script implants still need C2. Deny direct outbound internet access from workstations except via authenticated proxy, alert on curl.exe/certutil.exe/bitsadmin.exe making external connections, and apply DNS-based blocking of newly registered and low-reputation domains. APT28 rotates infrastructure aggressively — reputation and novelty scoring matter more than static IOC lists.
  7. Incident response readiness. If your organization is a government, diplomatic, or defense-sector entity in or aligned with Romania, Spain, or Türkiye — or handles their data — treat any phishing report from the September 2025–April 2026 window as potentially compromised until proven otherwise. Pull historical proxy, mail gateway, and authentication logs for the campaign window and review Recorded Future Insikt Group's indicators for retro-hunting.

Conclusion

HOOKEDGE is a reminder that nation-state tradecraft does not require zero-days or bespoke implants to be effective. A batch file, a scheduled task, and a stolen credential are enough — especially against organizations whose monitoring stack is tuned for malware binaries rather than administrative-abuse behavior. The detections above are built to survive operator mutation: they key on parent-child relationships, persistence locations, and behavior chains that any batch-script backdoor must exhibit, not on hashes that die the moment APT28 re-saves the script. Deploy them, validate them against your environment, and close the identity gaps that let campaigns like this get a foothold in the first place.

Related Resources

Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.