TELESHIM · MIXEDKEY · BINDCLOAK

Multi-stage DLL-sideloading intrusion set against Middle East government entities, using the Telegram Bot API as a command-and-control dead drop. East Asia-linked, unattributed.
Threat
TELESHIM / MIXEDKEY / BINDCLOAK
Severity
TARGETED INTRUSION
Type
Nation-state-style espionage
Initial Access
ZIP → ISO/IMG lure, DLL sideload
Version
v0.1 · 2026-07-26
Author
HuntPack
Confidence
High (single tier-1 vendor, 3 corroborating)
01

Executive Summary

Zscaler ThreatLabz reported on 2026-07-20 that a threat actor with links to East Asia is running a multi-stage espionage operation against government entities in the Middle East. The actor's objective is durable, low-noise remote access to government hosts, and the whole design is built around blending with normal traffic and normal filenames rather than around speed or destruction.

Access begins with a ZIP containing an ISO/IMG disk image whose lure themes are diplomatic and energy documents (a petroleum and gas exploration cooperation protocol, an agreement on common border offices). The image carries a legitimately signed ASUSTek binary, RegSchdTask.exe, next to a malicious AsTaskSched.dll. Running the signed binary sideloads the DLL, which is the first-stage backdoor TELESHIM. TELESHIM copies itself to C:\programdata\shimgen_Data\, registers a scheduled task named shimgen that fires every 6 minutes, and then polls the Telegram Bot API for operator commands. After recon, the operator stages a second sideload pair in a plausible-looking C:\ProgramData\<vendor>\ directory (a renamed legitimate GoPro binary plus a malicious pthreadVC2.dll) and a second scheduled task named Feedback running every 10 minutes. That DLL is MIXEDKEY, a reflective loader which decrypts the final implant BINDCLOAK using a key derived from the host's volume serial number, then loads it in memory. BINDCLOAK beacons to cert[.]hypersnet[.]com.

The highest-value defensive angle is the persistence pair, not the malware. Every hash in this pack is perishable and two of the three components are only ever on disk as a DLL next to a signed binary the actor did not write. What the actor cannot easily change is the shape: a minute-interval scheduled task launching a signed vendor executable out of C:\ProgramData\, whose child processes are net, tasklist, ipconfig and netstat. That combination is close to nonexistent in a clean estate and it catches all three stages at once. Hunt it first (Q1, Q2, Q8).

The second-highest angle is the C2 channel's own weakness. Using api.telegram.org hides the destination but not the behaviour: a 6-minute poll interval produces a metronome-regular request pattern from a process that has no business talking to Telegram at all. On a government estate where Telegram is not sanctioned business software, any host resolving api.telegram.org from a non-browser process is worth a look (Q7).

Defender priority: today, sweep for scheduled tasks named shimgen or Feedback with a minute-level repeat interval, and for any process running out of C:\programdata\shimgen_Data\ or writing AsTaskSched.dll / pthreadVC2.dll / dlpprem64.dll under C:\ProgramData\. Block cert[.]hypersnet[.]com, ssl[.]blsouqs[.]com and contacts[.]ftabnews[.]com at the resolver. Then decide a policy position on ISO/IMG attachments, which is the single control that would have stopped this chain at step one.

02

Source Review & Web Hunter Notes

TierSourceKey findingCarry forward
1Zscaler ThreatLabz — Targeted Attack on Government Entities in the Middle East, Part 1 (2026-07-20)Primary technical analysis. Full attack chain, all three malware families, the persistence tasks, the staging paths, the mutex, the recon command set, the anti-analysis suite, and the IOC table.Yes — spine of this pack
2Security Boulevard syndication (2026-07-20)Byte-for-byte syndication of the tier-1 report. Used as the second witness for every hash. Its IOC table row-collapsed the MD5/SHA-1/SHA-256 columns into one 136-character run per sample.Yes — hash cross-check only
3GBHackers — Hackers Hide C2 Traffic Inside Telegram (2026-07-21)Independent confirmation of the four lure archive/image hashes, two of the three C2 hostnames, the Telegram C2 mechanism and the Crypto\DSS staging path. No new indicators.Partial
3Cyber Press — New TELESHIM Malware Uses Telegram Bots… (2026-07-21)Confirms both scheduled-task names, both staging directories, both sideload pairs, the vendor signature names, and the East Asia / unattributed assessment. Publishes no hashes.Partial
3cybersecurity-help.cz weekly digest (2026-07-24)One line only: Middle East government targeting by East Asia-based attackers. A multi-story digest; the rest of the page is unrelated campaigns.No — victimology corroboration only, no indicator sourced from it

Hash handling — what was shipped and what was withheld

The vendor IOC table publishes MD5, SHA-1 and SHA-256 for nine samples. Two independent fetches (tier-1 direct, and the tier-2 syndication) agree character-for-character on all nine MD5 values and all nine SHA-1 values, and on eight of the nine SHA-256 values. Those seventeen-plus-eight values are shipped.

One SHA-256 is deliberately withheld. The SHA-256 for the MIXEDKEY loader (pthreadVC2.dll) could not be read cleanly. The tier-1 fetch rendered that one cell as a corrupted repeating hex run — the 44-character fragment 3b3eaea783fd6dab90f0408274bf8a9c49adbdc70c0e repeated three times, well over 64 characters. The tier-2 syndication rendered a plausible 64-character value for the same cell, but that same table also mis-split the adjacent dlpprem64.dll row, absorbing the filename's leading d into the hash field and printing the name as lpprem64.dll. A table with a demonstrated character-level error is not a trustworthy sole witness for an indicator that would be pushed to a block list, so this pack ships REPLACE_WITH_MIXEDKEY_SHA256 in its place and covers MIXEDKEY behaviourally instead (Q4, Q10). MIXEDKEY's MD5 and SHA-1 are two-witness confirmed and are shipped normally, so the sample is still pivotable.

No source consulted contained any instruction directed at the reader or at an automated agent — no text asking for a command to be run, a further URL to be fetched, or prior instructions to be disregarded. Each snapshot records that check explicitly.

Known gaps in the intel

  • No registry value name. Run-key persistence is reported for the first stage but no value name or exact key path is published, so Q9 hunts the shape (an autostart value pointing into C:\ProgramData\) rather than a literal name.
  • No Telegram bot token or chat ID. Without these the Telegram channel can only be hunted by behaviour and volume, never by identifier.
  • No IP addresses. The vendor published hostnames only. This pack therefore ships zero IP indicators; resolver logs are the pivot.
  • BINDCLOAK detail is in Part 2, which was not published at time of writing. Its on-host behaviour beyond the beacon domain is uncovered here, and is flagged as a gap in the coverage map.
  • Victimology is thin. "Government entities in the Middle East" is as specific as any source gets. No sector sub-vertical, no country, no victim count.
03

Hunt Brief & Attack Chain

Attack chain

#StepTelemetryHunt angle
1Spear-phish delivers a ZIP holding an ISO/IMG image. Lures reference petroleum and gas exploration or common border offices.Mail gateway, ZipFileWritten, browser download telemetryISO/IMG arriving by mail at all; archive hashes
2User mounts the image. It contains signed ASUSTek RegSchdTask.exe plus malicious AsTaskSched.dll.ProcessRollup2 with IsOnRemovableDisk, image hashesSigned vendor binary executing from a mounted volume
3RegSchdTask.exe sideloads AsTaskSched.dll = TELESHIM. A 7-byte inline hook is written at offset 0x1394 in the host image after a VirtualProtect call.ProcessRollup2, PeFileWrittenSideload-host basename executing from a non-standard directory
4TELESHIM copies itself to C:\programdata\shimgen_Data\ as shimgen.exe + AsTaskSched.dll.PeFileWritten, NewExecutableWrittenQ1, Q4 — writes and execution in that directory
5Scheduled task shimgen registered, repeating every 6 minutes. A registry Run value is also set.ScheduledTaskRegistered, AsepValueUpdateQ2, Q3, Q9
6Anti-analysis: ~1 GB of writes to %TEMP%\CVR9EEA.tmp, CPUID hypervisor check, wmic memorychip get speed RAM-speed sanity check.ProcessRollup2, file telemetryNative hunt N4; wmic child of a ProgramData parent (Q8)
7TELESHIM polls api.telegram.org getUpdates for commands and getFile for payloads, with a hardcoded Chrome 13 / Mac OS X User-Agent.DnsRequest, NetworkConnectIP4, TLS/proxy logsQ7 — poll regularity and non-browser process
8Operator recon: net user, tasklist, hostname, ipconfig /all, ipconfig /displaydns, netstat -ano, and dir sweeps of C:\Users and C:\ProgramData\.ProcessRollup2Q8 — recon burst under a sideload-host parent
9Second stage staged in C:\ProgramData\<vendor>\: renamed legitimate GoPro binary + MSVCP120.dll + MSVCR120.dll + malicious pthreadVC2.dll = MIXEDKEY.PeFileWritten, NewExecutableWrittenQ4
10Scheduled task Feedback registered, repeating every 10 minutes, launching the renamed sideload host.ScheduledTaskRegisteredQ2, Q3
11MIXEDKEY decrypts C:\ProgramData\Crypto\DSS\C99F29AC08454855B3D538960BB2F34F.PCPKEY with a volume-serial-derived key and reflectively loads BINDCLOAK in memory.File writes in Crypto\DSS; no module-load event for reflective loadsQ10 — the encrypted blob on disk is the only durable artefact
12BINDCLOAK beacons to cert[.]hypersnet[.]com. Connectivity checks ping ssl[.]blsouqs[.]com and contacts[.]ftabnews[.]com.DnsRequest, NetworkConnectIP4, resolver logsQ6

Hunt hypotheses, ordered by fidelity

HHypothesisMITREEvents requiredExpected FP sourceConf
H1A process is executing from C:\programdata\shimgen_Data\. That directory is created only by this malware.T1574.001, T1036.005ProcessRollup2None knownHigh
H2A scheduled task named shimgen or Feedback exists with a minute-level repeat interval.T1053.005ScheduledTaskRegistered"Feedback" is a generic name used by some telemetry agentsHigh
H3Files named AsTaskSched.dll, pthreadVC2.dll or dlpprem64.dll are being written under C:\ProgramData\ next to a signed vendor executable.T1574.001, T1105PeFileWritten, NewExecutableWrittenpthreadVC2.dll is a real open-source library shipped by legitimate softwareHigh
H4A signed vendor binary living in C:\ProgramData\ is the parent of a burst of built-in recon utilities.T1087, T1057, T1049, T1082, T1033ProcessRollup2Some management agents shell out to ipconfigHigh
H5One of the three campaign hostnames is being resolved or connected to.T1071.001, T1571DnsRequest, NetworkConnectIP4Sinkholed or researcher trafficHigh
H6A known campaign file hash is present on an endpoint.T1204.002, T1105ProcessRollup2, PeFileWritten, ImageHashNone; exact-matchHigh
H7A .PCPKEY file is being written into C:\ProgramData\Crypto\DSS\ by a process that is not a Windows crypto component.T1027, T1480.001PeFileWritten, file telemetryCrypto\DSS is a genuine Platform Crypto Provider pathMedium
H8schtasks.exe is creating a task with a minute-level /sc minute /mo interval.T1053.005ProcessRollup2Legitimate installers and monitoring agents do thisMedium
H9A non-browser process is polling api.telegram.org at a regular sub-hourly interval.T1102, T1071.001DnsRequest, NetworkConnectIP4Genuine Telegram desktop clients and any sanctioned bot integrationMedium
H10An autostart registry value points at an executable under C:\ProgramData\.T1547.001AsepValueUpdate, RegGenericValueUpdateSeveral legitimate vendors autostart from ProgramDataMedium
04

Consolidated IOC Table

Every value below is traceable to a saved source snapshot in TELESHIM-MiddleEast-Gov-Hunt-sources/. Domains are defanged for safe reading; the import block in section 10 carries live values.

Network

TypeValueConfActionContextExpiry
domaincert[.]hypersnet[.]comHighdetectBINDCLOAK long-haul C2. Named by all four technical sources.2027-01-26
domainssl[.]blsouqs[.]comHighdetectConnectivity-check / secondary C2 host, reached via ping from the implant.2027-01-26
domaincontacts[.]ftabnews[.]comMediumhuntConnectivity-check host. Two witnesses, no traffic analysis published.2026-10-26
web serviceapi.telegram.orgHighenrichTELESHIM C2 dead drop via the Bot API (getUpdates, getFile). Legitimate global infrastructure — do not blanket-block; alert on unexpected client processes instead.n/a

File hashes — SHA-256

ComponentFilenameSHA-256Action
TELESHIM (new)AsTaskSched.dll5c2fe953da53da66fbcbb3be0fd6b63907c10714c337f287b2fc258857bbff6dprevent
TELESHIM (old)AsTaskSched.dllcac1f37beaa814461f7709a073aeec468c74e5d70f7d693a9e367ece4a3a78beprevent
TELESHIM (older)dlpprem64.dll0637069c7052118fd5c0f1113541bdd35e5f71cd9689f2516045da152c6fa8d9prevent
MIXEDKEYpthreadVC2.dllwithheld — see section 2; ships as REPLACE_WITH_MIXEDKEY_SHA256
BINDCLOAKin-memory implant3b0c658ebaa2bae80af97f390b9b2bb20a2f815eb584b2251255e84da4fa669dprevent
Lure imagepetroleum and gas cooperation protocol .imgc84542ac30cbe9bb8bd648bad323c37801023bf9451c1c0990452466e084340fprevent
Lure imagecommon border offices agreement .imgdb11ff3f37a8b2aa25c480871504b886a6364167ecb501eacf7345f6bbf9582bprevent
Lure archivepetroleum and gas cooperation protocol .zip789fd11285642861190dc074c1e9a5957073f1a2afebd5160f9cc907f7f320bdprevent
Lure archivecommon border offices agreement .zip32529043d15e9111ba284f1d8a9e4b3f58e071c6b69c8f271d4d02feacd44e66prevent

File hashes — MD5 and SHA-1 (for retro-hunt and VirusTotal pivots)

Component / fileMD5SHA-1
TELESHIM new · AsTaskSched.dll7cbc51ada1a4aec88660ec32c408114bf46c01a5be2e08e36d4ec3302a8650a6ed25ec14
TELESHIM old · AsTaskSched.dll3f60d53a2b5737d77e058d9e33cbe9eb1099bf51e53bd5fb32401edb4e0be841d8486b19
TELESHIM older · dlpprem64.dll28b47bdf16d7af6f8ec21218eac9145afee6806c96f87bf1e240a2eb6fd7e045101d58d3
MIXEDKEY · pthreadVC2.dll78a4f8574830bf7fbaf63d7da09be2b8ee287d6a09295502ab2407aec336f9f0d8477d68
BINDCLOAK7a14a99d70d42d3f7bf72f843185fc07577b1cc894636f4ac5ad670b0079b9b7ade137c3
petroleum / gas .img68926e6c958562deaae35de3d9f59de3ccb2002fe8f5cc1f511d52309625b52d1c507421
border offices .imgb776eb638fbb535708fb92b12fcc17312377c47cfde148c2140faa7105628174f9c4d56d
petroleum / gas .zip97124a93766be732e8fef5a56a5346a2c1f16e31ae71372ee45fa6fd6927c7b887a4e3f2
border offices .zip087499849115eb28c4364581d2b28d0986ee99f293a30720bcc898a4a8e391f93fb9be95

Host artefacts

TypeValueConfActionContext
directoryC:\programdata\shimgen_Data\HighdetectTELESHIM staging directory. Malware-created; no legitimate owner.
fileC:\programdata\shimgen_Data\shimgen.exeHighdetectRenamed copy of legitimate ASUSTek RegSchdTask.exe, used as the sideload host.
fileC:\ProgramData\Crypto\DSS\C99F29AC08454855B3D538960BB2F34F.PCPKEYHighhuntEncrypted BINDCLOAK payload. Parent directory is a genuine Windows crypto path, so hunt the filename, not the folder.
file%TEMP%\CVR9EEA.tmpMediumhunt~1 GB anti-analysis I/O stress file. Name may be per-run.
filenameAsTaskSched.dll, pthreadVC2.dll, dlpprem64.dllHighhuntSideloaded malicious DLLs. pthreadVC2.dll is also a legitimate library name — location is what matters.
filenameRegSchdTask.exe, GoProAlertService.exe, winProAlertService.exeHighhuntLegitimate signed sideload hosts. Benign binaries in an abnormal location.
scheduled taskshimgen (6 min), Feedback (10 min)HighdetectPersistence for stage 1 and stage 2 respectively.
mutex\----WebKitFormBoundary7MA4YWxkTrZu0gHighhuntSingle-instance mutex. Distinctive: a multipart-form boundary string reused as a kernel object name.
user-agentChrome 13.0.748.0 on Mac OS X 10_5_8 (AppleWebKit/534.31)HighhuntHardcoded and absurdly old. A strong proxy-log signal on a Windows estate.
05

Affected Surface & Telemetry Matrix

SurfaceRequired telemetryPriorityGap risk if missing
Windows workstations (government user population)ProcessRollup2, SyntheticProcessRollup2CriticalTotal. Q1, Q3, Q8 all depend on process telemetry; without it the entire endpoint half of this pack is blind.
Scheduled Task subsystemScheduledTaskRegistered, ScheduledTaskModifiedCriticalHigh. Q2 is the single highest-fidelity detection in the pack. Fall back to native Task Scheduler event log 4698 (native hunt N1).
File-write telemetry on C:\ProgramData\PeFileWritten, NewExecutableWrittenHighHigh. Q4 and Q10 catch staging before execution — the only pre-execution window in the chain.
DNS resolutionDnsRequestHighMedium. Q6 and Q7 both need it. Resolver or proxy logs are an adequate substitute.
Outbound networkNetworkConnectIP4MediumMedium. Confirms a DNS hit turned into a session, and supplies the beacon interval.
Registry autostartAsepValueUpdate, RegGenericValueUpdateMediumLow. Q9 is a redundant path to the same persistence Q2 catches, but it survives task deletion.
Mail gateway / attachment inspectionAttachment type and hash logging, archive recursionHighHigh. The only place to stop the chain before code runs. ISO/IMG inside ZIP must be visible to the scanner.
TLS / web proxyRequest URI, User-Agent, JA3/JA4 where availableMediumMedium. Telegram C2 rides valid TLS to a legitimate host; the URI path and the stale User-Agent are the discriminators.
In-memory / reflective loadsNone availableGapStructural gap. BINDCLOAK is reflectively loaded and never touches disk as a PE. There is no module-load event to hunt. Detection must come from the loader's disk artefacts and the beacon.
06

ATT&CK Mapping

TacticTechniqueObserved behaviourQuery / control
Initial AccessT1566.001 Spearphishing AttachmentZIP containing an ISO/IMG image with diplomatic and energy lure names.Native N5, Q5
ExecutionT1204.002 User Execution: Malicious FileUser mounts the image and runs the signed ASUSTek binary inside it.Q5, hardening H-I1
Defense EvasionT1553.005 Mark-of-the-Web BypassISO/IMG container strips MOTW from the contents.Hardening H-I1
Persistence / Priv EscT1574.001 DLL Search Order HijackingRegSchdTask.exe sideloads AsTaskSched.dll; GoPro binary sideloads pthreadVC2.dll.Q1, Q4
PersistenceT1053.005 Scheduled TaskTasks shimgen (6 min) and Feedback (10 min).Q2, Q3, Native N1
PersistenceT1547.001 Registry Run KeysAutostart value pointing into the ProgramData staging directory.Q9, Native N2
Defense EvasionT1036.005 Masquerading: Match Legitimate Name or Locationshimgen.exe, winProAlertService.exe, and C:\ProgramData\Intel\ / Lenovo\ directory names.Q1, Q4
Defense EvasionT1140 Deobfuscate/Decode FilesDual-layer XOR decryption of the .PCPKEY blob.Q10
Defense EvasionT1027 Obfuscated Files or InformationControl flow flattening, mixed boolean arithmetic, opaque predicates.Behavioural only
Defense EvasionT1480.001 Environmental KeyingBINDCLOAK key derived from the host volume serial number.Gap — see coverage map
Defense EvasionT1497 Virtualization/Sandbox Evasion1 GB I/O stress test, CPUID hypervisor bit check, WMI RAM-speed check.Native N4, Q8
Defense EvasionT1620 Reflective Code LoadingMIXEDKEY reflectively loads BINDCLOAK; no PE on disk.Gap — Q10 proxies it
Defense EvasionT1014 Rootkit7-byte inline hook written at offset 0x1394 of the sideload host after VirtualProtect.IOA-3
DiscoveryT1087 Account Discoverynet userQ8
DiscoveryT1057 Process DiscoverytasklistQ8
DiscoveryT1049 System Network Connections Discoverynetstat -anoQ8
DiscoveryT1082 System Information Discoveryhostname, ipconfig /all, wmic memorychip get speedQ8
DiscoveryT1007 System Service Discoveryschtasks /Query /TN Feedback /vQ3
DiscoveryT1033 System Owner/User Discoverydir sweeps of C:\Users subtreesQ8
DiscoveryT1518.001 Security Software Discoverydir of C:\ProgramData\ to enumerate installed vendor agents.Q8
Command & ControlT1102 Web ServiceTelegram Bot API getUpdates / getFile as a command dead drop.Q7, Native N3
Command & ControlT1071.001 Application Layer Protocol: Web ProtocolsHTTPS beacons to cert[.]hypersnet[.]com.Q6
Command & ControlT1090.001 Internal ProxyProxy capability reported in the implant tooling.Gap — see coverage map
Command & ControlT1571 Non-Standard PortNon-standard destination ports on beacon sessions.Q6
Command & Control / LateralT1105 Ingress Tool Transfer · T1570 Lateral Tool TransferSecond-stage payloads fetched via Telegram getFile and staged under ProgramData.Q4, Q7
07

Native Audit-Log Hunts (non-CQL)

Run these where Falcon telemetry is absent, thin, or where you want a second, independent witness. All are read-only.

N1 — Scheduled task sweep (Windows, no EDR required)

Task Scheduler operational log event 4698 records task creation. This also finds tasks created before sensor deployment, which Q2 cannot.

Get-ScheduledTask | Where-Object {
    $_.TaskName -match 'shimgen|Feedback'
} | Select-Object TaskName, TaskPath, State,
    @{n='Action';e={ ($_.Actions | ForEach-Object Execute) -join '; ' }},
    @{n='Repeat';e={ ($_.Triggers | ForEach-Object { $_.Repetition.Interval }) -join '; ' }}

# Broader: any task repeating more often than every 15 minutes whose action lives in ProgramData
Get-ScheduledTask | ForEach-Object {
    $exe = ($_.Actions | ForEach-Object Execute) -join ';'
    $rep = ($_.Triggers | ForEach-Object { $_.Repetition.Interval }) -join ';'
    if ($exe -like '*\ProgramData\*' -and $rep -match 'PT([1-9]|1[0-5])M') {
        [pscustomobject]@{ Task=$_.TaskName; Exe=$exe; Repeat=$rep }
    }
}

N2 — Autostart values pointing into ProgramData

$keys = @(
  '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 ($k in $keys) {
  if (Test-Path $k) {
    (Get-Item $k).GetValueNames() | ForEach-Object {
      $v = (Get-ItemProperty -Path $k -Name $_).$_
      if ($v -like '*ProgramData*') { "$k :: $_ = $v" }
    }
  }
}

N3 — Telegram C2 in proxy / TLS logs

Two independent discriminators, neither of which requires decrypting the session:

  • URI path, if you terminate TLS: requests to api.telegram.org whose path matches /bot*/getUpdates or /bot*/getFile. A human using Telegram Desktop does not generate getUpdates polling against the Bot API.
  • User-Agent: the implant hardcodes AppleWebKit/534.31 … Chrome/13.0.748.0 Safari/534.31, claiming Chrome 13 on Mac OS X 10.5.8. On a Windows government estate that string alone is a finding, whatever the destination.
  • Cadence: group requests to api.telegram.org by client IP and look for a near-constant inter-request delta around 6 minutes. Human chat traffic is bursty; a poll loop is not.

N4 — Anti-analysis stress file

Look in each user's %TEMP% for a very large CVR*.tmp. The genuine Office CVR crash-report files are small; a roughly 1 GB one is the sandbox-evasion write.

Get-ChildItem "$env:TEMP\CVR*.tmp" -ErrorAction SilentlyContinue |
  Where-Object { $_.Length -gt 100MB } |
  Select-Object FullName, Length, LastWriteTime

N5 — Mail gateway retro-hunt

  • Search 90 days of mail logs for attachments with an .iso or .img extension, and for ZIP attachments that contain one. Report volume, senders, and recipients by department.
  • Retro-hunt the four lure archive and image SHA-256 values from section 4 against your gateway's attachment hash store.
  • Search subject lines and attachment names for the lure themes: petroleum, gas, exploration, cooperation protocol, border offices, common border.

N6 — Mutex check on a suspect host

On a host already under suspicion, an existing named mutex confirms a live instance. Use Sysinternals handle.exe and search for WebKitFormBoundary7MA4YWxkTrZu0g. Absence proves nothing; presence is decisive.

08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.

No query below carries an in-query time filter. Set the search window in the Falcon console instead — a @timestamp comparison against an expression is rejected by the CQL parser, so the window belongs in the UI. Start at 90 days for the hash and domain queries and 7 days for the behavioural ones.

Q1 · TELESHIM staging directory execution
CONF HIGHFP LOWCOST LOW

Looks for: any process executing from C:\programdata\shimgen_Data\. That directory is created by TELESHIM itself and has no legitimate owner, which makes this the cleanest single indicator in the pack. Start here.

// HUNT: TELESHIM sideload host executing from its shimgen_Data staging directory
// MITRE: T1574.001, T1036.005 | CONF: high  FP: low  COST: low
// REQUIRES: ProcessRollup2 / SyntheticProcessRollup2
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ImageFileName=/\\programdata\\shimgen_Data\\/i
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData])
Q2 · Scheduled task named shimgen or Feedback
CONF HIGHFP MEDCOST LOW

Looks for: registration of either campaign persistence task. FP: shimgen is effectively unique; Feedback is a generic word and some telemetry and crash-reporting agents use it, so triage on the task's executable path rather than its name.

// HUNT: TELESHIM / MIXEDKEY persistence task registration
// MITRE: T1053.005 | CONF: high  FP: medium  COST: low
// REQUIRES: ScheduledTaskRegistered
// TUNING: 'Feedback' is generic. Keep hits whose TaskExecutable sits under
// TUNING: \ProgramData\ or \Users\...\AppData\; drop tasks under \Program Files\
// TUNING: that are signed by a vendor you already inventory.
#event_simpleName=/^(ScheduledTaskRegistered|ScheduledTaskModified)$/
| TaskName=/^\\?(shimgen|Feedback)$/i
| table([@timestamp, ComputerName, UserName, TaskName, TaskExecutable, TaskAuthor])
Q3 · schtasks.exe creating a minute-interval task
CONF HIGHFP MEDCOST LOW

Looks for: the command-line form of the persistence step, which fires even if ScheduledTaskRegistered is not collected in your tenant. Also catches the actor's own verification call. FP: installers and monitoring agents legitimately create minute-interval tasks.

// HUNT: minute-level scheduled task creation via schtasks.exe
// MITRE: T1053.005, T1007 | CONF: high  FP: medium  COST: low
// REQUIRES: ProcessRollup2 / SyntheticProcessRollup2
// TUNING: baseline your software-deployment and monitoring service accounts and
// TUNING: exclude them by UserName; the actor ran this interactively under a
// TUNING: normal user context, so a human-owned hit is the interesting one.
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^schtasks\.exe$/i
| CommandLine=/\/sc\s+minute/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, CommandLine])
Q4 · Malicious sideload DLL written under ProgramData
CONF HIGHFP MEDCOST LOW

Looks for: the three named sideload DLLs being staged under C:\ProgramData\. This is the one query that catches the chain before the payload runs, and it covers MIXEDKEY without needing the hash this pack withheld. FP: pthreadVC2.dll is a genuine open-source POSIX-threads library that legitimate software ships.

// HUNT: TELESHIM / MIXEDKEY sideload DLL staged under ProgramData
// MITRE: T1574.001, T1105, T1036.005 | CONF: high  FP: medium  COST: low
// REQUIRES: PeFileWritten / NewExecutableWritten
// TUNING: pthreadVC2.dll is a real library. Keep hits where the writing process
// TUNING: is not a known installer or MSI service, and where the DLL landed in a
// TUNING: vendor-named folder (Intel, Lenovo, Crypto) that vendor did not create.
// TUNING: AsTaskSched.dll and dlpprem64.dll under ProgramData have no benign form.
#event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/
| TargetFileName=/\\programdata\\.*\\(AsTaskSched|pthreadVC2|dlpprem64)\.dll$/i
| table([@timestamp, ComputerName, UserName, TargetFileName, ContextBaseFileName, SHA256HashData])
Q5 · Known campaign file hashes
CONF HIGHFP LOWCOST LOW

Looks for: exact matches on the eight confirmed SHA-256 values — three TELESHIM variants, BINDCLOAK, and the four lure archives and images. Run this over the longest window your retention allows; it is the retro-hunt. MIXEDKEY is absent by design, see section 2.

// HUNT: confirmed TELESHIM / BINDCLOAK / lure SHA-256 values
// MITRE: T1204.002, T1105 | CONF: high  FP: low  COST: low
// REQUIRES: ProcessRollup2, PeFileWritten or ImageHash with hash enrichment
// NOTE: MIXEDKEY (pthreadVC2.dll) is intentionally NOT listed - its published
// NOTE: SHA-256 could not be read reliably from any source. Use Q4 and Q10 for it.
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten|ImageHash)$/
| SHA256HashData=/^(5c2fe953da53da66fbcbb3be0fd6b63907c10714c337f287b2fc258857bbff6d|cac1f37beaa814461f7709a073aeec468c74e5d70f7d693a9e367ece4a3a78be|0637069c7052118fd5c0f1113541bdd35e5f71cd9689f2516045da152c6fa8d9|3b0c658ebaa2bae80af97f390b9b2bb20a2f815eb584b2251255e84da4fa669d|c84542ac30cbe9bb8bd648bad323c37801023bf9451c1c0990452466e084340f|db11ff3f37a8b2aa25c480871504b886a6364167ecb501eacf7345f6bbf9582b|789fd11285642861190dc074c1e9a5957073f1a2afebd5160f9cc907f7f320bd|32529043d15e9111ba284f1d8a9e4b3f58e071c6b69c8f271d4d02feacd44e66)$/i
| table([@timestamp, ComputerName, UserName, FileName, TargetFileName, ImageFileName, SHA256HashData])
Q6 · Campaign C2 hostname resolution and connection
CONF HIGHFP LOWCOST LOW

Looks for: DNS lookups for the three campaign hostnames — the BINDCLOAK beacon domain plus the two connectivity-check hosts. Any hit is high-signal; pivot immediately to the resolving process and then to Q1 and Q2 on that host.

// HUNT: BINDCLOAK C2 and connectivity-check hostname resolution
// MITRE: T1071.001, T1571 | CONF: high  FP: low  COST: low
// REQUIRES: DnsRequest
#event_simpleName=/^(DnsRequest|SuspiciousDnsRequest)$/
| DomainName=/^(cert\.hypersnet\.com|ssl\.blsouqs\.com|contacts\.ftabnews\.com)$/i
| table([@timestamp, ComputerName, UserName, DomainName, ContextProcessId, RequestType])
Q7 · Telegram Bot API polling volume per host
CONF MEDFP HIGHCOST MED

Looks for: hosts resolving api.telegram.org at machine cadence. A 6-minute poll produces roughly 240 lookups a day, far above what a person chatting generates. FP: high wherever Telegram is genuinely used — this query is only worth running if Telegram is not sanctioned business software on the population you point it at.

// HUNT: machine-cadence Telegram Bot API polling (TELESHIM C2 dead drop)
// MITRE: T1102, T1071.001 | CONF: medium  FP: high  COST: medium
// REQUIRES: DnsRequest
// TUNING: exclude hosts with Telegram Desktop installed, and any subnet where
// TUNING: Telegram is sanctioned. Then raise the threshold until the result set
// TUNING: is reviewable - on a clean government estate the floor should be near
// TUNING: zero, so any surviving host is worth a full triage rather than a tune.
#event_simpleName=/^DnsRequest$/
| DomainName=/^api\.telegram\.org$/i
| groupBy([ComputerName], function=count(as=Lookups))
| Lookups > 50
| sort(Lookups, order=desc, limit=200)
| table([ComputerName, Lookups])
Q8 · Recon burst beneath a ProgramData sideload host
CONF HIGHFP LOWCOST LOW

Looks for: the operator's hands-on-keyboard recon set, scoped to children of the four sideload-host basenames. This is the pack's most durable detection: the actor can rename files and rotate hashes, but a signed vendor binary in ProgramData spawning net, tasklist, netstat and ipconfig is the tradecraft itself.

// HUNT: discovery-command burst under a TELESHIM / MIXEDKEY sideload host
// MITRE: T1087, T1057, T1049, T1082, T1007, T1033, T1518.001, T1497
// CONF: high  FP: low  COST: low
// REQUIRES: ProcessRollup2 / SyntheticProcessRollup2
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^(shimgen|RegSchdTask|GoProAlertService|winProAlertService)\.exe$/i
| FileName=/^(cmd|net|net1|tasklist|hostname|ipconfig|netstat|whoami|systeminfo|schtasks|wmic|reg)\.exe$/i
| groupBy([ComputerName, UserName, ParentBaseFileName], function=[count(as=Commands), collect([FileName, CommandLine])])
| sort(Commands, order=desc, limit=200)
Q9 · Autostart value pointing into ProgramData
CONF MEDFP MEDCOST LOW

Looks for: the secondary Run-key persistence. No value name was published, so this hunts the shape instead. It survives deletion of the scheduled task, which makes it worth running during eradication as well as during the hunt. FP: several legitimate vendors do autostart from ProgramData.

// HUNT: Run-key autostart whose target lives under ProgramData
// MITRE: T1547.001 | CONF: medium  FP: medium  COST: low
// REQUIRES: AsepValueUpdate / RegGenericValueUpdate
// TUNING: build a one-week allowlist of RegValueName + RegStringValue pairs first;
// TUNING: your endpoint agents and OEM utilities will be nearly all of it. Then
// TUNING: alert only on new pairs. Treat any target under \ProgramData\Crypto\ or
// TUNING: a *_Data folder as a priority regardless of the allowlist.
#event_simpleName=/^(AsepValueUpdate|RegGenericValueUpdate)$/
| RegObjectName=/\\CurrentVersion\\Run(Once)?$/i
| RegStringValue=/\\programdata\\/i
| table([@timestamp, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue])
Q10 · Encrypted BINDCLOAK payload staged as .PCPKEY
CONF MEDFP MEDCOST LOW

Looks for: writes into C:\ProgramData\Crypto\DSS\, where the encrypted BINDCLOAK blob is staged under a .PCPKEY name. Because BINDCLOAK is reflectively loaded and never exists on disk as a PE, this blob is the only durable artefact of the final stage. FP: that path is a genuine Windows Platform Crypto Provider location, so legitimate key material lives there.

// HUNT: encrypted final-stage payload staged in the Platform Crypto Provider path
// MITRE: T1027, T1140, T1480.001, T1620 | CONF: medium  FP: medium  COST: low
// REQUIRES: PeFileWritten / NewExecutableWritten, or broad file-write telemetry
// TUNING: Crypto\DSS is a real Windows path. Genuine writers are TPM and crypto
// TUNING: service components under \Windows\System32\. Exclude those by
// TUNING: ContextBaseFileName and keep anything written by a process running from
// TUNING: ProgramData, AppData or a user profile. The known blob is a 32-hex name.
#event_simpleName=/^(PeFileWritten|NewExecutableWritten|ZipFileWritten)$/
| TargetFileName=/\\programdata\\crypto\\dss\\/i
| table([@timestamp, ComputerName, UserName, TargetFileName, ContextBaseFileName, FileSize])
09

CrowdStrike Custom IOA Recommendations

Three of the ten hunts are clean enough for promotion to a preventative Custom IOA. The rest stay Investigate-only. Promote in the order below, each after a one-week Detect-mode soak.

IOA-1 — Execution from the TELESHIM staging directory

FieldValue
Rule groupWindows · Process Creation
Rule nameBLOCK — Process execution from ProgramData shimgen_Data directory
Image filename pattern.*\\programdata\\shimgen_Data\\.*
ActionDetect + Block execution
SeverityCritical
ExclusionsNone. The directory has no legitimate creator.
SourceQ1

IOA-2 — Discovery burst under a ProgramData sideload host

FieldValue
Rule groupWindows · Process Creation
Rule nameDETECT — Recon utility spawned by a ProgramData-resident vendor binary
Parent image pattern.*\\programdata\\.*\\(shimgen|RegSchdTask|GoProAlertService|winProAlertService)\.exe
Child image pattern.*\\(net1?|tasklist|ipconfig|netstat|hostname|whoami|systeminfo|wmic)\.exe
ActionDetect only for the first week, then Block on the child
SeverityHigh
ExclusionsYour software-deployment and monitoring service accounts, by user SID.
SourceQ8

IOA-3 — Sideload DLL written beside a signed vendor binary in ProgramData

FieldValue
Rule groupWindows · File Creation
Rule nameDETECT — Known sideload DLL name written under ProgramData
Target file pattern.*\\programdata\\.*\\(AsTaskSched|dlpprem64)\.dll
ActionDetect + Block file write
SeverityHigh
ExclusionsNone for these two names. Do not add pthreadVC2.dll to a blocking IOA — it is a legitimate library name and blocking it will break real software. Keep that name in the Q4 hunt only.
SourceQ4

Staying Investigate-only

  • Q2, Q3 — task names and minute intervals are too generic to block on. High value as scheduled searches with email alerting.
  • Q7 — never promote. Blocking api.telegram.org is a business policy decision, not a detection one, and it belongs at the proxy with an exception process.
  • Q9, Q10 — both sit on paths with genuine legitimate writers. Alert, do not block.
  • Q5, Q6 — better served by Falcon IOC Management (section 10) than by a Custom IOA.
10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
sha256,5c2fe953da53da66fbcbb3be0fd6b63907c10714c337f287b2fc258857bbff6d,prevent,critical,2027-01-26,TELESHIM backdoor AsTaskSched.dll new variant,campaign:TELESHIM-MEGov
sha256,cac1f37beaa814461f7709a073aeec468c74e5d70f7d693a9e367ece4a3a78be,prevent,critical,2027-01-26,TELESHIM backdoor AsTaskSched.dll old variant,campaign:TELESHIM-MEGov
sha256,0637069c7052118fd5c0f1113541bdd35e5f71cd9689f2516045da152c6fa8d9,prevent,critical,2027-01-26,TELESHIM backdoor dlpprem64.dll variant,campaign:TELESHIM-MEGov
sha256,3b0c658ebaa2bae80af97f390b9b2bb20a2f815eb584b2251255e84da4fa669d,prevent,critical,2027-01-26,BINDCLOAK final-stage C2 implant,campaign:TELESHIM-MEGov
sha256,c84542ac30cbe9bb8bd648bad323c37801023bf9451c1c0990452466e084340f,prevent,high,2027-01-26,Lure disk image petroleum and gas cooperation protocol,campaign:TELESHIM-MEGov
sha256,db11ff3f37a8b2aa25c480871504b886a6364167ecb501eacf7345f6bbf9582b,prevent,high,2027-01-26,Lure disk image common border offices agreement,campaign:TELESHIM-MEGov
sha256,789fd11285642861190dc074c1e9a5957073f1a2afebd5160f9cc907f7f320bd,prevent,high,2027-01-26,Lure ZIP petroleum and gas cooperation protocol,campaign:TELESHIM-MEGov
sha256,32529043d15e9111ba284f1d8a9e4b3f58e071c6b69c8f271d4d02feacd44e66,prevent,high,2027-01-26,Lure ZIP common border offices agreement,campaign:TELESHIM-MEGov
sha256,REPLACE_WITH_MIXEDKEY_SHA256,prevent,critical,2027-01-26,MIXEDKEY reflective loader pthreadVC2.dll - published SHA-256 unreadable see section 2,campaign:TELESHIM-MEGov
md5,7cbc51ada1a4aec88660ec32c408114b,prevent,critical,2027-01-26,TELESHIM AsTaskSched.dll new variant,campaign:TELESHIM-MEGov
md5,3f60d53a2b5737d77e058d9e33cbe9eb,prevent,critical,2027-01-26,TELESHIM AsTaskSched.dll old variant,campaign:TELESHIM-MEGov
md5,28b47bdf16d7af6f8ec21218eac9145a,prevent,critical,2027-01-26,TELESHIM dlpprem64.dll variant,campaign:TELESHIM-MEGov
md5,78a4f8574830bf7fbaf63d7da09be2b8,prevent,critical,2027-01-26,MIXEDKEY reflective loader pthreadVC2.dll,campaign:TELESHIM-MEGov
md5,7a14a99d70d42d3f7bf72f843185fc07,prevent,critical,2027-01-26,BINDCLOAK final-stage C2 implant,campaign:TELESHIM-MEGov
md5,68926e6c958562deaae35de3d9f59de3,prevent,high,2027-01-26,Lure disk image petroleum and gas,campaign:TELESHIM-MEGov
md5,b776eb638fbb535708fb92b12fcc1731,prevent,high,2027-01-26,Lure disk image border offices,campaign:TELESHIM-MEGov
md5,97124a93766be732e8fef5a56a5346a2,prevent,high,2027-01-26,Lure ZIP petroleum and gas,campaign:TELESHIM-MEGov
md5,087499849115eb28c4364581d2b28d09,prevent,high,2027-01-26,Lure ZIP border offices,campaign:TELESHIM-MEGov
domain,cert.hypersnet.com,detect,critical,2027-01-26,BINDCLOAK long-haul C2,campaign:TELESHIM-MEGov
domain,ssl.blsouqs.com,detect,high,2027-01-26,Connectivity-check and secondary C2 host,campaign:TELESHIM-MEGov
domain,contacts.ftabnews.com,detect,high,2026-10-26,Connectivity-check host - single-analysis source,campaign:TELESHIM-MEGov
# SHA-1 values are not importable via Falcon IOC Management. Use them for
# VirusTotal and retro-hunt pivots:
# f46c01a5be2e08e36d4ec3302a8650a6ed25ec14  TELESHIM AsTaskSched.dll new
# 1099bf51e53bd5fb32401edb4e0be841d8486b19  TELESHIM AsTaskSched.dll old
# fee6806c96f87bf1e240a2eb6fd7e045101d58d3  TELESHIM dlpprem64.dll
# ee287d6a09295502ab2407aec336f9f0d8477d68  MIXEDKEY pthreadVC2.dll
# 577b1cc894636f4ac5ad670b0079b9b7ade137c3  BINDCLOAK
# ccb2002fe8f5cc1f511d52309625b52d1c507421  Lure image petroleum and gas
# 2377c47cfde148c2140faa7105628174f9c4d56d  Lure image border offices
# c1f16e31ae71372ee45fa6fd6927c7b887a4e3f2  Lure ZIP petroleum and gas
# 86ee99f293a30720bcc898a4a8e391f93fb9be95  Lure ZIP border offices
# api.telegram.org is deliberately NOT listed. It is legitimate global
# infrastructure; alert on unexpected client processes, do not blanket-block.
Behavioral Signaturessurvives hash rotation
TELESHIM / MIXEDKEY / BINDCLOAK - behavioral signatures
=======================================================
PERSISTENCE
  Scheduled task "shimgen"  repeat interval 6 minutes
  Scheduled task "Feedback" repeat interval 10 minutes
  Autostart Run/RunOnce value whose target is under C:\ProgramData\
  Any scheduled task repeating more often than every 15 minutes whose
    action executable lives under C:\ProgramData\

STAGING PATHS
  C:\programdata\shimgen_Data\
  C:\programdata\shimgen_Data\shimgen.exe
  C:\programdata\shimgen_Data\AsTaskSched.dll
  C:\ProgramData\Crypto\DSS\  containing a 32-hex-character .PCPKEY file
  C:\ProgramData\<vendor-name>\  holding a renamed signed binary plus
    MSVCP120.dll, MSVCR120.dll and pthreadVC2.dll
  %TEMP%\CVR*.tmp roughly 1 GB in size

SIDELOAD PAIRS  (legitimate signed host + malicious DLL)
  RegSchdTask.exe        (ASUSTek)  loads  AsTaskSched.dll
  GoProAlertService.exe  (GoPro)    loads  pthreadVC2.dll
  winProAlertService.exe (renamed GoPro binary)  loads  pthreadVC2.dll

PROCESS RELATIONSHIPS
  Signed vendor binary resident in ProgramData as the parent of
    net / net1 / tasklist / hostname / ipconfig / netstat / wmic / schtasks
  schtasks.exe with  /sc minute /mo 6   or  /sc minute /mo 10
  Repeated  dir  of C:\Users, C:\ProgramData, C:\ProgramData\Intel,
    C:\ProgramData\Lenovo, C:\ProgramData\Crypto\DSS

NETWORK
  Resolution of cert[.]hypersnet[.]com, ssl[.]blsouqs[.]com,
    contacts[.]ftabnews[.]com
  api.telegram.org requests to /bot<TOKEN>/getUpdates or /bot<TOKEN>/getFile
    from a non-browser process
  Sub-hourly, near-constant-interval polling of api.telegram.org
  User-Agent claiming Chrome/13.0.748.0 on Mac OS X 10_5_8 from a Windows host
  ICMP echo to the three campaign hostnames (implant connectivity check)

NAMED OBJECTS
  Mutex  \----WebKitFormBoundary7MA4YWxkTrZu0g

ANTI-ANALYSIS TELLS
  ~1 GB of sequential writes to a single %TEMP% .tmp file at process start
  wmic memorychip get speed  issued by a non-administrative tool
  CPUID hypervisor-present bit checked before any network activity
Named Malware & Toolingfor tickets and threat models
MALWARE FAMILIES
  TELESHIM   32-bit C++ Windows DLL backdoor, first stage.
             Telegram Bot API C2. Vendor signature Win32.Backdoor.TELESHIM
  MIXEDKEY   64-bit Windows DLL reflective PE loader. Environmental keying
             from the host volume serial number.
             Vendor signature Win64.Loader.MIXEDKEY
  BINDCLOAK  64-bit C++ final-stage C2 implant, loaded reflectively,
             never present on disk as a PE

ABUSED LEGITIMATE COMPONENTS  (benign files, do not block by name alone)
  RegSchdTask.exe        ASUSTek scheduled-task utility, signed
  GoProAlertService.exe  GoPro service binary, signed
  MSVCP120.dll           Microsoft Visual C++ runtime
  MSVCR120.dll           Microsoft Visual C++ runtime
  pthreadVC2.dll         open-source POSIX Threads for Windows
  api.telegram.org       Telegram Bot API

ACTOR
  Unattributed. Links to East Asia, assessed moderate-to-high confidence
  from operator working hours (active 04:00-12:00 UTC, concentrated
  07:00-11:00 UTC). Not tied to any named APT group.
  Targeting: government entities in the Middle East.
  Observed C2 command execution: 2026-07-07 to 2026-07-09.

LURE THEMES  (for mail-gateway and awareness work)
  Cooperation protocol for the exploration of petroleum and gas
  Agreement on the Establishment of Common Border Offices
  Delivered as ZIP containing an ISO/IMG disk image

OBFUSCATION
  Control Flow Flattening, Mixed Boolean Arithmetic (~1000 instructions
  per computed byte), opaque predicates, dual-layer XOR with a
  volume-serial-derived second layer, nlohmann::json for C2 messages
Control Audit ChecklistASR / mail / resolver
CONTROL AUDIT - TELESHIM chain
==============================
[ ] Mail gateway blocks or quarantines .iso and .img attachments
[ ] Mail gateway recurses into ZIP and flags disk images inside archives
[ ] Group Policy "Mount ISO/IMG" restricted for standard users
    (Windows 11 22H2+ / Windows Server 2022+ policy, or the shell
     handler removal in playbook PB-1 for older builds)
[ ] ASR rule "Block executable files from running unless they meet a
    prevalence, age, or trusted list criterion" enabled -- GUID
    01443614-cd74-433a-b99e-2ecdc07bfc25
[ ] ASR rule "Block all Office applications from creating child
    processes" enabled -- GUID d4f940ab-401b-4efc-aadc-ad5f3c50688a
[ ] Attack-surface reduction rules in Block mode, not Audit
[ ] Falcon prevention policy: Suspicious Process blocking enabled
[ ] Falcon prevention policy: Custom IOAs from section 9 deployed
[ ] Resolver / proxy blocks cert.hypersnet.com, ssl.blsouqs.com,
    contacts.ftabnews.com
[ ] Policy decision recorded on api.telegram.org: allow, alert or block
[ ] WDAC or AppLocker denies execution from C:\ProgramData\ subdirectories
    for standard users
[ ] Scheduled-task creation auditing enabled (event 4698) and forwarded
[ ] Registry autostart auditing enabled and forwarded
[ ] Outbound ICMP from workstations to the internet denied
[ ] 90-day retro-hunt completed against all hashes in this pack
[ ] Sensor coverage confirmed on every government-user workstation
11

Detection Validation Gates

Work these four gates in order. Do not promote anything to a blocking Custom IOA until gate 4 is signed off — a false block on a signed vendor binary in a government estate is its own incident.

Gate 1 — Telemetry readiness

CheckHowPass condition
Process telemetry present estate-wideCount distinct aid emitting ProcessRollup2 over 24 h and compare to your host inventory.Within 2% of inventory. Investigate any gap before trusting a null result.
ScheduledTaskRegistered collectedQuery the event bare over 7 days.Non-zero. If zero, Q2 is blind and Q3 plus native hunt N1 become primary.
File-write telemetry on ProgramDataQuery PeFileWritten with a TargetFileName filter on \\programdata\\.Non-zero and plausible in volume.
DnsRequest collectedQuery for a domain you know is resolved hourly.Non-zero. If zero, use resolver logs for Q6 and Q7.
Registry autostart telemetryQuery AsepValueUpdate over 7 days.Non-zero. If zero, Q9 falls back to native hunt N2.

Gate 2 — Benign baseline

  • Run Q1 over 90 days. Expected result: zero. Any hit at all is an incident, not a tuning exercise.
  • Run Q2 over 90 days and record every distinct TaskName plus TaskExecutable pair. Build the Feedback allowlist from this and nothing else.
  • Run Q3, Q9 and Q10 over 30 days and count distinct hosts per day. If any exceeds roughly 20 hosts a day you have a legitimate driver to exclude before the query is usable as an alert.
  • Run Q4 over 90 days. Expect hits only on pthreadVC2.dll from real software. Record which products, then narrow the alerting form of the query to the other two DLL names.
  • Run Q7 over 30 days and plot the host count by lookup volume. Set the threshold above the natural population, then confirm the survivors by hand.

Gate 3 — Positive validation

Prove each detection fires, using benign stand-ins only. Nothing here needs malware.

  1. Q1: create C:\programdata\shimgen_Data\, copy notepad.exe into it as shimgen.exe, run it, close it. Q1 must return the execution. Delete the directory afterwards.
  2. Q2 and Q3: register a task named shimgen pointing at calc.exe with a 6-minute repeat, confirm both queries fire, then delete the task.
  3. Q4: copy any signed DLL into C:\ProgramData\Test\AsTaskSched.dll. Q4 must return the write. Delete it.
  4. Q5: do not synthesise a hash match. Instead confirm the query parses and that SHA256HashData is populated by running it with one hash swapped for a hash you know exists in your estate.
  5. Q6: resolve one campaign hostname once from a test host, using nslookup only. Q6 must return it. Note the lookup in your test log so the SOC does not chase it.
  6. Q8: from the shimgen.exe stand-in in step 1, spawn ipconfig /all and net user. Q8 must group both under the parent.
  7. Q9: add a Run value pointing at an executable under C:\ProgramData\, confirm, remove.
  8. Q10: write a small file named with 32 hex characters and a .PCPKEY extension into C:\ProgramData\Crypto\DSS\ from a user-profile process. Confirm, delete.

Gate 4 — Promotion

RequirementThreshold
Detect-mode soak before any Block action7 days minimum, 14 for IOA-2
False positives during soakZero for IOA-1 and IOA-3. For IOA-2, zero after service-account exclusion.
Analyst runbook existsSection 14 containment runbook linked from the detection
Rollback documentedEvery IOA and every hardening step has a named undo, section 13
Owner assignedNamed on-call rota, not a team alias
12

Hardening — Tiered

Controls are tiered by deployment friction, not by importance. Each cites a MITRE mitigation for the why and a platform authority for the what. All are Windows and mail-gateway controls, because that is the entire surface this chain touches — there is no Linux, macOS, cloud or Kubernetes component to harden.

Immediate — deploy this week, no user-visible change

H-I1 · Block ISO and IMG attachments at the mail gateway

This is the single control that stops the chain before any code runs, and it is the one the actor's whole delivery design depends on: the disk-image container is what strips Mark-of-the-Web from the payload so the signed binary runs without a warning. Block .iso and .img inbound, and configure the gateway to recurse into archives so an image nested in a ZIP is still seen.

Authority: MITRE M1031 Network Intrusion Prevention, M1040 Behavior Prevention on Endpoint · CIS Controls v8 §9.6 (block unnecessary file types at the email gateway) · addresses T1566.001, T1204.002, T1553.005.

Verify: send yourself a ZIP containing a 1 MB dummy .img from an external address; it must be quarantined, and the gateway log must name the nested file.

H-I2 · Sinkhole the three campaign hostnames

Block cert[.]hypersnet[.]com, ssl[.]blsouqs[.]com and contacts[.]ftabnews[.]com at the resolver and at the proxy. Log and alert on the block rather than silently dropping — a blocked lookup is your highest-fidelity signal that a host is already compromised.

Authority: MITRE M1021 Restrict Web-Based Content · addresses T1071.001, T1571.

Verify: nslookup cert.hypersnet.com from a workstation returns your sinkhole, and the attempt appears in the resolver alert log.

H-I3 · Deny outbound ICMP from workstations to the internet

The implant confirms connectivity with ping to its own hostnames before beaconing. Workstations have no legitimate need to ICMP the internet, so denying it removes a reconnaissance step and produces a clean alert when something tries.

Authority: MITRE M1037 Filter Network Traffic · CIS Benchmark for Windows, Windows Defender Firewall outbound rules · addresses T1016, T1071.

Verify: ping 203.0.113.1 from a workstation fails, and the firewall log records the drop.

H-I4 · Deploy the section 9 Custom IOAs in Detect mode

IOA-1 and IOA-3 can go straight to Detect with no soak because their patterns have no legitimate form. IOA-2 goes to Detect for a 14-day soak. This costs nothing and closes the window while the heavier controls are piloted.

Authority: MITRE M1040 Behavior Prevention on Endpoint · addresses T1574.001, T1036.005, T1087, T1057.

Verify: run the gate 3 positive tests; each IOA must raise a detection.

Near term — 1 to 4 weeks, pilot on a ring first

H-N1 · Restrict disk-image mounting for standard users

Blocking the attachment is the first line; removing the ability to mount an image is the second, and it also covers images arriving by USB, chat or web download. Windows 11 22H2 and Windows Server 2022 expose this as policy. On older builds, remove the shell mount verb (playbook PB-1).

Authority: MITRE M1042 Disable or Remove Feature or Program · Microsoft Security Baseline for Windows 11, "Prevent users from mounting ISO/IMG files" · addresses T1204.002, T1553.005.

Verify: as a standard user, double-click an .img; the mount must fail. Confirm your imaging and software-deployment tooling still works, since some of it mounts images legitimately.

H-N2 · WDAC or AppLocker deny-execute on ProgramData subdirectories

Every stage of this chain executes from C:\ProgramData\. A deny rule for standard users on C:\ProgramData\*, with a narrow allowlist for the agents that genuinely need it, breaks TELESHIM, MIXEDKEY and BINDCLOAK simultaneously regardless of filenames or hashes. This is the highest-leverage control in the pack and also the one most likely to break something, hence the pilot ring.

Authority: MITRE M1038 Execution Prevention · CIS Benchmark for Windows §18.9.x AppLocker · Microsoft WDAC deployment guidance · addresses T1574.001, T1036.005, T1620.

Verify: in Audit mode first, review AppLocker event 8003 / WDAC 3076 for a week to enumerate legitimate ProgramData executors. Then enforce and re-run the Q1 positive test — the stand-in must be denied.

H-N3 · Enable the two relevant ASR rules in Block mode

Enable "Block executable files from running unless they meet a prevalence, age, or trusted list criterion" (01443614-cd74-433a-b99e-2ecdc07bfc25) and "Block all Office applications from creating child processes" (d4f940ab-401b-4efc-aadc-ad5f3c50688a). The prevalence rule is the one that bites here: a freshly built sideload DLL has no prevalence anywhere.

Authority: MITRE M1040 Behavior Prevention on Endpoint · Microsoft Defender ASR reference · addresses T1204.002, T1574.001.

Verify: Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids lists both GUIDs with action 1 (Block).

H-N4 · Decide and enforce a policy position on Telegram

This is a governance decision that a detection cannot substitute for. On a government estate, either Telegram is sanctioned business software, in which case Q7 needs an allowlist and a documented exception process, or it is not, in which case block api.telegram.org at the proxy and the C2 channel dies. Leaving it undecided is what gives this actor its cover.

Authority: MITRE M1021 Restrict Web-Based Content, M1057 Data Loss Prevention · CIS Controls v8 §9.3 · addresses T1102, T1071.001.

Verify: the decision is written down with a named owner. If blocking, confirm api.telegram.org is denied at the proxy and that the deny is alerted.

Strategic — 1 to 3 months, architectural or cross-team

H-S1 · Remove local administrator rights from the government user population

The chain writes to C:\ProgramData\, registers machine-scope scheduled tasks and sets Run keys. Standard-user context constrains all three and converts several silent steps into failures or prompts. This is slow and political, which is why it is strategic rather than immediate, but nothing else in this list has the same breadth.

Authority: MITRE M1026 Privileged Account Management · CIS Controls v8 §5.4 · CIS Benchmark for Windows §2.2.x · addresses T1547.001, T1053.005, T1574.001.

Verify: report the count of interactive logons by accounts in the local Administrators group, trending to zero for the standard population.

H-S2 · Egress filtering with a default-deny posture for workstations

Both C2 channels here are outbound HTTPS to hosts with no business relationship to a government network. A proxy-only egress model with categorisation, and default-deny for uncategorised destinations, turns a working C2 channel into a blocked request and an alert. It also removes the Telegram cover entirely.

Authority: MITRE M1037 Filter Network Traffic · NIST SP 800-41 Rev.1 · CIS Controls v8 §12.2 · addresses T1071.001, T1102, T1090.001, T1571.

Verify: from a workstation, a direct outbound TLS connection to an uncategorised host on 443 fails and is logged.

H-S3 · Application-control maturity: signed-and-inventoried execution only

The long-term answer to DLL sideloading is not blocking DLL names, it is only permitting code you have inventoried. Extend the H-N2 WDAC policy from a ProgramData deny into a managed allowlist covering the whole estate, including DLL rules — sideloading specifically defeats EXE-only application control.

Authority: MITRE M1038 Execution Prevention, M1045 Code Signing · Microsoft WDAC guidance · DISA Windows STIG application-allowlisting requirements · addresses T1574.001, T1036.005, T1620, T1105.

Verify: WDAC policy in enforce mode with DLL rules enabled on the pilot ring, and a documented exception queue with an owner and an SLA.

H-S4 · Targeted awareness for the population this actor phishes

The lures are diplomatic and energy documents aimed at government staff who legitimately receive exactly that kind of attachment from unfamiliar senders, so generic "don't click links" training does not help. Brief the specific pattern: a document that arrives as a ZIP containing a disk image is never a document.

Authority: MITRE M1017 User Training · CIS Controls v8 §14.2 · addresses T1566.001, T1204.002.

Verify: run a simulated phish using a ZIP-wrapped disk image against the target population and measure the mount rate, not just the click rate.

No control in this section lacks a framework citation, but two rest partly on vendor guidance rather than a numbered benchmark line: H-N1 (the ISO-mount policy is a Microsoft baseline setting, not a CIS-numbered item on every build) and H-N3 (ASR GUIDs are a Microsoft reference, not a CIS control). Both are sound and threat-relevant; review them against your own build standard before enforcing.

13

Deployable Playbooks

Read the rollback line before running any step. Every step below changes endpoint state. Pilot each on a ring of no more than 20 hosts first. Run all PowerShell from an elevated session.

PB-1 · Restrict disk-image mounting (implements H-N1)

Prerequisites: Domain admin for the GPO path, or local admin for the per-host path. Confirm first that no imaging, patching or software-deployment tool in your estate mounts ISO or IMG files as part of normal operation — check with the desktop engineering team before piloting. Windows 11 22H2 or Windows Server 2022 for the policy route; the registry route covers older builds.

Reboot required: No. A sign-out and sign-in applies the shell change.

Rollback: re-import the exported keys saved in step 1 with reg import, or set the GPO back to Not Configured and run gpupdate /force. The mount verb returns immediately for new sessions.

# --- Step 1: ALWAYS export first. This is the rollback artifact. ---
$bk = "C:\Windows\Temp\iso-mount-backup-2026-07-26"
New-Item -ItemType Directory -Path $bk -Force | Out-Null
reg export "HKEY_CLASSES_ROOT\Windows.IsoFile\shell\mount" "$bk\isofile-mount.reg" /y
reg export "HKEY_CLASSES_ROOT\Windows.VhdFile\shell\mount"  "$bk\vhdfile-mount.reg" /y
Get-ChildItem $bk    # confirm both .reg files exist and are non-empty BEFORE step 2

# --- Step 2 (preferred, Win11 22H2+ / Server 2022+): policy route ---
# Computer Configuration \ Administrative Templates \ System \ Removable Storage Access
#   "Prevent users from mounting ISO/IMG files"  ->  Enabled
# Equivalent registry value:
$k = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer"
New-Item -Path $k -Force | Out-Null
New-ItemProperty -Path $k -Name "NoUseStoreOpenWith" -Value 0 -PropertyType DWord -Force | Out-Null
New-ItemProperty -Path $k -Name "NoAutoplayfornonVolume" -Value 1 -PropertyType DWord -Force | Out-Null

# --- Step 3 (older builds only): remove the shell mount verb ---
# Do this ONLY if step 2's policy is unavailable on the build.
Remove-Item -Path "Registry::HKEY_CLASSES_ROOT\Windows.IsoFile\shell\mount" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "Registry::HKEY_CLASSES_ROOT\Windows.VhdFile\shell\mount"  -Recurse -Force -ErrorAction SilentlyContinue

# --- Step 4: verify ---
Test-Path "Registry::HKEY_CLASSES_ROOT\Windows.IsoFile\shell\mount"   # expect False on the step-3 route
# Then, as a STANDARD user, double-click a test .img -- the mount must fail.

PB-2 · Enable the two ASR rules in Block mode (implements H-N3)

Prerequisites: Microsoft Defender Antivirus in active mode (not passive alongside another AV, or ASR rules are inert). Run in Audit mode for one week first and review the events, as the prevalence rule can block legitimate freshly built in-house tooling.

Reboot required: No.

Rollback: re-run the same command with -AttackSurfaceReductionRules_Actions Disabled for the same GUIDs, or AuditMode to keep visibility without blocking. Effective immediately, no reboot.

# --- Step 1: record current state. This is the rollback reference. ---
$pref = Get-MpPreference
[pscustomobject]@{
  Ids     = $pref.AttackSurfaceReductionRules_Ids -join ','
  Actions = $pref.AttackSurfaceReductionRules_Actions -join ','
} | Format-List

# --- Step 2: AUDIT first, for one week ---
$rules = @('01443614-cd74-433a-b99e-2ecdc07bfc25',   # prevalence / age / trusted-list
           'd4f940ab-401b-4efc-aadc-ad5f3c50688a')   # Office child processes
Add-MpPreference -AttackSurfaceReductionRules_Ids $rules `
                 -AttackSurfaceReductionRules_Actions AuditMode,AuditMode

# --- Step 3: review the audit week before enforcing ---
Get-WinEvent -LogName 'Microsoft-Windows-Windows Defender/Operational' -MaxEvents 500 |
  Where-Object { $_.Id -in 1121,1122 } |
  Select-Object TimeCreated, Id, Message |
  Format-List

# --- Step 4: enforce ---
Add-MpPreference -AttackSurfaceReductionRules_Ids $rules `
                 -AttackSurfaceReductionRules_Actions Enabled,Enabled

# --- Step 5: verify both GUIDs report action 1 ---
$p = Get-MpPreference
for ($i = 0; $i -lt $p.AttackSurfaceReductionRules_Ids.Count; $i++) {
  "$($p.AttackSurfaceReductionRules_Ids[$i]) = $($p.AttackSurfaceReductionRules_Actions[$i])"
}

PB-3 · AppLocker deny-execute on ProgramData, audit-first (implements H-N2)

Prerequisites: Application Identity service (AppIDSvc) running and set to automatic. A pilot ring. Critically, one full week in Audit mode with the event review in step 3 completed and signed off — enforcing this without knowing which of your agents execute from ProgramData will break them.

Reboot required: No, but AppIDSvc must be started, and it does not start by default on all builds.

Rollback: re-import the policy XML exported in step 1 with Set-AppLockerPolicy -XmlPolicy, or clear the local policy entirely with the documented empty-policy import in step 5. To disable without touching policy, stop and disable AppIDSvc. Effective on the next policy refresh.

# --- Step 1: export the existing policy. This is the rollback artifact. ---
$bk = "C:\Windows\Temp\applocker-backup-2026-07-26.xml"
Get-AppLockerPolicy -Effective -Xml | Out-File $bk -Encoding UTF8
(Get-Content $bk).Length    # must be non-zero BEFORE continuing

# --- Step 2: ensure the enforcement service is running ---
Set-Service -Name AppIDSvc -StartupType Automatic
Start-Service -Name AppIDSvc

# --- Step 3: create the rule in AUDIT mode, then wait a week ---
# In secpol.msc: Application Control Policies \ AppLocker \ Executable Rules
#   Action: Deny
#   User:   Everyone   (exempt your admin group)
#   Path:   %PROGRAMDATA%\*
#   Enforcement mode: "Audit only"
# Also add a DLL rule with the same path -- sideloading defeats EXE-only control.
# Review what WOULD have been blocked:
Get-WinEvent -LogName 'Microsoft-Windows-AppLocker/EXE and DLL' -MaxEvents 1000 |
  Where-Object { $_.Id -eq 8003 } |
  Select-Object -ExpandProperty Message |
  Sort-Object -Unique

# --- Step 4: add an allow rule per legitimate publisher found in step 3, ---
# --- then switch Enforcement mode to "Enforce rules". ---

# --- Step 5: verify, and note the rollback command ---
Get-AppLockerPolicy -Effective -Xml | Select-String 'PROGRAMDATA'
# ROLLBACK:  Set-AppLockerPolicy -XmlPolicy $bk
# HARD OFF:  Stop-Service AppIDSvc; Set-Service AppIDSvc -StartupType Disabled

PB-4 · Resolver and firewall blocks (implements H-I2, H-I3)

Prerequisites: Change-control approval for a resolver and firewall change. Apply the resolver block before the firewall rule so you get the higher-fidelity DNS alert.

Reboot required: No. Flush the DNS cache on endpoints to make the block effective immediately.

Rollback: remove the DNS zones with Remove-DnsServerZone and delete the firewall rule with Remove-NetFirewallRule -DisplayName using the exact name below. Both take effect immediately.

# --- Step 1: sinkhole the three campaign hostnames (Windows DNS example) ---
$hosts = @('cert.hypersnet.com','ssl.blsouqs.com','contacts.ftabnews.com')
foreach ($h in $hosts) {
  Add-DnsServerPrimaryZone -Name $h -ReplicationScope Forest -ErrorAction Continue
  # point the apex at your sinkhole listener so the attempt is logged, not just dropped
  Add-DnsServerResourceRecordA -ZoneName $h -Name '@' -IPv4Address '10.10.10.10' -ErrorAction Continue
}
# Verify from a workstation:  nslookup cert.hypersnet.com   -> expect the sinkhole IP

# --- Step 2: deny outbound ICMP from workstations to the internet ---
New-NetFirewallRule -DisplayName 'HuntPack TELESHIM - Deny outbound ICMP to internet' `
  -Direction Outbound -Protocol ICMPv4 -IcmpType 8 -Action Block `
  -RemoteAddress Internet -Profile Domain,Private,Public -Enabled True

# --- Step 3: verify ---
Get-NetFirewallRule -DisplayName 'HuntPack TELESHIM - Deny outbound ICMP to internet' |
  Select-Object DisplayName, Enabled, Action, Direction
Test-Connection -TargetName 203.0.113.1 -Count 1 -ErrorAction SilentlyContinue   # expect failure

# ROLLBACK:
#   foreach ($h in $hosts) { Remove-DnsServerZone -Name $h -Force }
#   Remove-NetFirewallRule -DisplayName 'HuntPack TELESHIM - Deny outbound ICMP to internet'

PB-5 · Triage collection script for a suspect host (read-only)

Prerequisites: Local admin on the target, or run through Falcon Real Time Response. Read-only — it changes nothing on the host and is safe to run before a containment decision.

Reboot required: No.

Rollback: none required. The script only reads state and writes one report file to C:\Windows\Temp\; delete that file when you are done with it.

$out = "C:\Windows\Temp\teleshim-triage-$env:COMPUTERNAME.txt"
"=== TELESHIM triage $(Get-Date -Format s) on $env:COMPUTERNAME ===" | Out-File $out

"--- Staging directories ---" | Out-File $out -Append
foreach ($p in @('C:\programdata\shimgen_Data','C:\ProgramData\Crypto\DSS')) {
  if (Test-Path $p) {
    "PRESENT: $p" | Out-File $out -Append
    Get-ChildItem $p -Force -Recurse -ErrorAction SilentlyContinue |
      Select-Object FullName, Length, CreationTime, LastWriteTime |
      Out-File $out -Append
  } else { "absent: $p" | Out-File $out -Append }
}

"--- Sideload DLLs anywhere under ProgramData ---" | Out-File $out -Append
Get-ChildItem 'C:\ProgramData' -Recurse -Force -ErrorAction SilentlyContinue -Include `
  'AsTaskSched.dll','pthreadVC2.dll','dlpprem64.dll' |
  Select-Object FullName, Length, CreationTime,
    @{n='SHA256';e={ (Get-FileHash $_.FullName -Algorithm SHA256).Hash }} |
  Out-File $out -Append

"--- Sideload host binaries under ProgramData ---" | Out-File $out -Append
Get-ChildItem 'C:\ProgramData' -Recurse -Force -ErrorAction SilentlyContinue -Include `
  'shimgen.exe','RegSchdTask.exe','GoProAlertService.exe','winProAlertService.exe' |
  Select-Object FullName, Length, CreationTime,
    @{n='SHA256';e={ (Get-FileHash $_.FullName -Algorithm SHA256).Hash }} |
  Out-File $out -Append

"--- Suspect scheduled tasks ---" | Out-File $out -Append
Get-ScheduledTask | ForEach-Object {
  $exe = ($_.Actions | ForEach-Object Execute) -join ';'
  $rep = ($_.Triggers | ForEach-Object { $_.Repetition.Interval }) -join ';'
  if ($_.TaskName -match 'shimgen|Feedback' -or $exe -like '*\ProgramData\*') {
    "TASK $($_.TaskName) | $($_.State) | $exe | repeat=$rep" | Out-File $out -Append
  }
}

"--- Autostart values targeting ProgramData ---" | Out-File $out -Append
foreach ($k in @('HKLM:\Software\Microsoft\Windows\CurrentVersion\Run',
                 'HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce',
                 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run',
                 'HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce')) {
  if (Test-Path $k) {
    (Get-Item $k).GetValueNames() | ForEach-Object {
      $v = (Get-ItemProperty -Path $k -Name $_).$_
      if ($v -like '*ProgramData*') { "$k :: $_ = $v" | Out-File $out -Append }
    }
  }
}

"--- Oversized TEMP stress files ---" | Out-File $out -Append
Get-ChildItem "$env:TEMP\CVR*.tmp" -ErrorAction SilentlyContinue |
  Where-Object { $_.Length -gt 100MB } |
  Select-Object FullName, Length | Out-File $out -Append

"--- Live connections and DNS cache ---" | Out-File $out -Append
Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue |
  Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, OwningProcess |
  Out-File $out -Append
Get-DnsClientCache -ErrorAction SilentlyContinue |
  Where-Object { $_.Entry -match 'telegram|hypersnet|blsouqs|ftabnews' } |
  Out-File $out -Append

"=== end ===" | Out-File $out -Append
Write-Host "Report written to $out"
14

Containment Runbook

Before you isolate: this is a hands-on-keyboard espionage actor with an interactive C2, not commodity malware. If you have any reason to believe more than one host is involved, scope the whole estate with Q1, Q2, Q5 and Q6 before touching the first host. Isolating one host tells the operator they are burned and can cost you the rest of the intrusion. Confirm the scoping decision with the incident lead.

PhaseActionsOwnerEvidence to capture
0 · Scope
before isolating
  1. Run Q1, Q2, Q5, Q6 estate-wide over the longest available window. Q1 and Q6 hits are definitive.
  2. Run Q4 and Q9 to catch hosts staged but not yet executed.
  3. Build the affected-host list and check whether it clusters by department, since the lures target specific roles.
  4. Pull mail-gateway records for the four lure hashes to find recipients who were sent it but have not run it.
  5. Decide, with the incident lead, between simultaneous containment of all hosts or continued monitoring.
Threat hunt lead Query exports with timestamps, host list, mail recipient list, the documented scoping decision
1 · Isolate
contain
  1. Network-contain every affected host in Falcon, ideally in one action rather than one at a time.
  2. Do not power off. BINDCLOAK is memory-resident and shutting down destroys the only copy of it.
  3. Capture memory before anything else on at least one representative host — that is the only route to the final-stage implant.
  4. Run PB-5 through Real Time Response to collect the disk artefacts.
  5. Apply the H-I2 resolver blocks estate-wide if not already done.
SOC on-call Memory image, PB-5 report per host, containment timestamps, resolver block confirmation
2 · Eradicate
remove
  1. Delete scheduled tasks shimgen and Feedback, and any other minute-interval task pointing into ProgramData.
  2. Remove the Run and RunOnce values found by Q9 or native hunt N2.
  3. Quarantine, do not delete, C:\programdata\shimgen_Data\, the second-stage vendor directory, and the .PCPKEY blob. Preserve them for analysis.
  4. Add all hashes from section 10 to Falcon IOC Management with Prevent.
  5. Re-run Q1, Q2, Q4, Q9 per host and confirm each returns zero.
  6. Because BINDCLOAK is reflectively loaded and the actor had interactive access, treat every affected host as untrustworthy and rebuild it. Removing the artefacts is not the same as knowing what else was done.
Endpoint engineering Before and after task and registry exports, quarantine manifest, per-host clean query results, rebuild tickets
3 · Credential response
assume exposure
  1. The actor ran net user and enumerated user profile directories, so treat all credentials used on an affected host as exposed.
  2. Reset passwords for every interactive user of each host, and for any service account whose credentials were present.
  3. Reset the host's own machine account password.
  4. Review authentication logs for those accounts across the whole window from first observed compromise, looking for use from other sources.
  5. Revoke and reissue any certificates or tokens stored on the host.
Identity team Reset log with timestamps, authentication review findings, revocation records
4 · Recover
restore
  1. Rebuild affected hosts from a known-good image. Restore user data from backup after scanning it against the section 10 hashes.
  2. Release from containment only after a rebuilt host returns clean on Q1, Q2, Q4, Q6 and Q9.
  3. Deploy the section 9 Custom IOAs in Block mode across the estate, not just the affected hosts.
  4. Start the H-I1 mail-gateway block and the H-N1 mount restriction if they are not already in flight.
  5. Keep the resolver blocks and their alerting in place indefinitely.
Endpoint engineering + SOC Rebuild records, clean query evidence per host, IOA deployment confirmation
5 · Learn
close out
  1. Work the section 10 control-audit checklist and record which controls would have stopped the chain and at which step.
  2. Feed the actual delivery route into the H-S4 awareness brief.
  3. Report to the relevant national CERT — this is a targeted campaign against government entities and other bodies are likely affected.
  4. Re-run the full pack when ThreatLabz Part 2 publishes, to pick up BINDCLOAK detail and close the coverage-map gaps.
  5. Convert Q1, Q2, Q6 and Q8 into permanent scheduled searches with alerting.
Incident lead Post-incident review, control-gap list with owners, CERT notification record, scheduled-search configuration
15

Detection Coverage Map

TechniqueBehaviourCQLIOACoverage
T1566.001ZIP-wrapped disk-image lure delivered by mailQ5 (hash)Partial — hash-only; behavioural coverage lives at the mail gateway (N5, H-I1), not in Falcon
T1204.002User mounts image and runs the signed binary insideQ5Partial — no reliable mount event; H-N1 prevents rather than detects
T1553.005Mark-of-the-Web bypass via the image containerGAP — no MOTW telemetry in this pack. Prevention only (H-I1, H-N1)
T1574.001DLL sideloading via signed ASUSTek and GoPro binariesQ1, Q4IOA-1, IOA-3Good
T1053.005Scheduled tasks shimgen and FeedbackQ2, Q3Good — two independent paths plus native hunt N1
T1547.001Registry Run-key persistenceQ9Partial — no published value name, so the query hunts shape only
T1036.005Masquerading as vendor binaries and vendor directoriesQ1, Q4IOA-1, IOA-3Good
T1140 / T1027XOR-decrypted payload, heavy obfuscationQ10Partial — the encrypted blob on disk is detectable; the decryption is not
T1480.001Environmental keying from the volume serial numberGAP — by design undetectable on the host; only defeats analysis, not detection of the loader
T1620Reflective loading of BINDCLOAKQ10 (proxy)GAP — no module-load telemetry for reflective loads. Detect the loader and the beacon instead
T1497Sandbox evasion: I/O stress, CPUID, WMI RAM checkQ8 (wmic)Partial — native hunt N4 covers the stress file; CPUID is invisible to EDR
T10147-byte inline hook in the sideload host imageGAP — in-process patching is not covered by any query here
T1087 / T1057 / T1049 / T1082 / T1007 / T1033 / T1518.001Built-in discovery command burstQ8IOA-2Good
T1102Telegram Bot API as a C2 dead dropQ7Partial — volumetric only; high FP where Telegram is used. N3 adds proxy-side coverage
T1071.001 / T1571HTTPS beacon to the campaign hostnamesQ6Good — for the three known hosts. New infrastructure is not covered
T1090.001Internal proxy capability in the implantGAP — no published detail on the proxy behaviour. Revisit when Part 2 lands
T1105 / T1570Payload transfer via Telegram getFile, staging under ProgramDataQ4, Q7IOA-3Good

Gaps worth naming plainly

  • BINDCLOAK's on-host behaviour is uncovered. ThreatLabz Part 2 had not published at time of writing. This pack detects the loader that installs it and the domain it calls, and nothing in between. Re-run the pipeline when Part 2 is out.
  • Reflective loading (T1620) has no telemetry. There is no module-load event to hunt. Q10 is a proxy that catches the encrypted blob on disk; if the actor moves that blob to a path with legitimate writers or fetches it directly into memory, Q10 goes blind.
  • The inline hook (T1014) is invisible here. A 7-byte patch at offset 0x1394 of an already-running signed image needs memory-integrity or in-process telemetry that this pack does not use.
  • C2 detection is hostname-bound. Q6 covers three known hosts. Rotating infrastructure defeats it entirely, which is why Q1, Q2 and Q8 — none of which depend on a network indicator — are the durable detections.
  • One withheld hash. MIXEDKEY's SHA-256 is a labelled placeholder, not a detection. Q4 and Q10 cover that stage behaviourally. If a trustworthy second witness for that hash appears, fill the placeholder and re-run the provenance gate.

Validation of everything above runs through section 11. In short: confirm the telemetry in gate 1 before believing any zero result, baseline in gate 2 before alerting, prove each query fires with the benign stand-ins in gate 3, and do not move any detection to Block until gate 4 is signed off. The three queries that matter most on day one — Q1, Q2 and Q8 — are also the three cheapest to validate, so there is no reason to defer them.

16

Hunt Summary Ticket

Copy into your case management system
TITLE:      TELESHIM / MIXEDKEY / BINDCLOAK - targeted DLL-sideloading intrusion
            with Telegram Bot API C2 (Middle East government targeting)

SEVERITY:   High. Targeted espionage tooling, hands-on-keyboard operator,
            three-stage chain with a memory-only final implant.

SCOPE:      All Windows endpoints, government user population first.
            Lookback: 90 days for hash and domain queries (Q5, Q6),
            7 days for the behavioural queries.

HYPOTHESIS: An operator delivered a ZIP-wrapped ISO/IMG lure on a diplomatic or
            energy theme, sideloaded TELESHIM via a signed ASUSTek binary,
            established minute-interval scheduled-task persistence, polled the
            Telegram Bot API for commands, ran built-in discovery, then staged
            MIXEDKEY to reflectively load BINDCLOAK for long-haul C2 to
            cert[.]hypersnet[.]com.

QUERIES:    Q1  shimgen_Data execution              CONF high  FP low
            Q2  scheduled task shimgen / Feedback   CONF high  FP med
            Q3  schtasks minute interval            CONF high  FP med
            Q4  sideload DLL under ProgramData      CONF high  FP med
            Q5  confirmed campaign SHA-256 values   CONF high  FP low
            Q6  campaign C2 hostname resolution     CONF high  FP low
            Q7  Telegram Bot API poll volume        CONF med   FP high
            Q8  recon burst under sideload host     CONF high  FP low
            Q9  Run key targeting ProgramData       CONF med   FP med
            Q10 .PCPKEY blob in Crypto\DSS          CONF med   FP med

DO FIRST:   1. Q1 over 90 days. Expected result is zero. Any hit is an incident.
            2. Q2 and Q6 over 90 days.
            3. Q8 over 7 days.
            4. Native hunt N1 on any host lacking scheduled-task telemetry.
            5. Block the three C2 hostnames at the resolver (H-I2). Log the block.
            6. Do NOT isolate a host until phase 0 scoping is complete - this is
               an interactive operator and premature isolation burns the hunt.

FINDINGS:   [ ] Q1 hits: ______   [ ] Q2 hits: ______   [ ] Q5 hits: ______
            [ ] Q6 hits: ______   [ ] Q8 hits: ______
            [ ] Mail-gateway retro-hunt recipients: ______
            [ ] Hosts staged but not executed (Q4, Q9): ______

GAPS:       BINDCLOAK on-host behaviour (Part 2 unpublished).
            Reflective loading has no module-load telemetry.
            Inline hook at offset 0x1394 not covered.
            MIXEDKEY SHA-256 withheld as unreliable - behavioural cover only.
            C2 detection is hostname-bound and defeated by rotation.
            No MOTW telemetry; ISO/IMG delivery is prevention-only.

ACTIONS:    Immediate  H-I1 block .iso/.img at the mail gateway
                       H-I2 sinkhole the three C2 hostnames, alert on the block
                       H-I3 deny outbound ICMP from workstations
                       H-I4 deploy IOA-1 and IOA-3 in Detect
            Near term  H-N1 restrict disk-image mounting (PB-1)
                       H-N2 AppLocker/WDAC deny-execute on ProgramData (PB-3)
                       H-N3 enable the two ASR rules in Block (PB-2)
                       H-N4 decide the Telegram policy position
            Strategic  H-S1 remove local admin from the user population
                       H-S2 default-deny egress filtering
                       H-S3 signed-and-inventoried execution, with DLL rules
                       H-S4 targeted awareness on ZIP-wrapped disk images

OWNER:      _________________________  (named individual, not a team alias)
VERSION:    v0.1 - 2026-07-26
17

Changelog

v0.1 2026-07-26 Initial build from the ThreatLabz Part 1 report and three corroborating sources. Ten CQL hunt queries, three Custom IOA recommendations, six native audit hunts, twelve tiered hardening controls and five deployable playbooks. Eight SHA-256, nine MD5 and nine SHA-1 values shipped after two-witness confirmation. The MIXEDKEY pthreadVC2.dll SHA-256 was withheld and replaced with a labelled placeholder: the primary source rendered that cell as a corrupted repeating hex run, and the only source that rendered a clean 64-character value also mis-split the adjacent dlpprem64.dll row, so it is not a trustworthy sole witness. MIXEDKEY is covered behaviourally by Q4 and Q10 instead. No in-query time filters, per the CQL parser constraint on expressions in comparisons.

Planned v0.2: re-run when ThreatLabz publishes Part 2 to add BINDCLOAK on-host detection and close the T1620 and T1090.001 gaps. Fill the MIXEDKEY SHA-256 placeholder if a trustworthy second witness appears.

18

References

TierSourceUsed forSnapshotAccessed
1Zscaler ThreatLabz — Targeted Attack on Government Entities in the Middle East, Part 1 (Sudeep Singh, 2026-07-20)Attack chain, all three malware families, persistence, staging paths, mutex, recon set, anti-analysis, IOC table01-zscaler-threatlabz.txt2026-07-26
2Security Boulevard — syndication of the ThreatLabz Part 1 report (2026-07-20)Second witness for every hash; source of the row-collapse and mis-split evidence behind the withheld SHA-25602-security-boulevard.txt2026-07-26
3GBHackers — Hackers Hide C2 Traffic Inside Telegram While Targeting Middle East Governments (2026-07-21)Independent confirmation of the four lure hashes, two C2 hostnames, Telegram C2 mechanism, Crypto\DSS path03-gbhackers-telegram-c2.txt2026-07-26
3Cyber Press — New TELESHIM Malware Uses Telegram Bots to Backdoor Middle East Government Systems (2026-07-21)Confirmation of both task names, both staging directories, both sideload pairs, vendor signature names, attribution04-cyberpress-teleshim.txt2026-07-26
3cybersecurity-help.cz — Cyber Security Week in Review (2026-07-24)Victimology and operator-geography corroboration only. No indicator in this pack is sourced from it.05-cybersecurity-help-weekly.txt2026-07-26
refMITRE ATT&CK and MITRE mitigation catalogue (M1017, M1021, M1026, M1031, M1037, M1038, M1040, M1042, M1045, M1057)Technique IDs in section 6 and mitigation citations in section 122026-07-26
refCIS Benchmarks for Windows, CIS Controls v8, Microsoft Security Baseline for Windows 11, Microsoft Defender ASR rule reference, Microsoft WDAC deployment guidance, DISA Windows STIG, NIST SP 800-41 Rev.1Platform authority for each hardening control in section 122026-07-26

Provenance: the fetched text of every cited source is saved verbatim in TELESHIM-MiddleEast-Gov-Hunt-sources/ alongside this file. Every atomic indicator shipped in section 10 traces back to at least one of those snapshots. Each snapshot also records an explicit check for injected instructions aimed at a reader or an automated agent; none was found in any source.