GoldenEyeDog / CylindricalCanine — DigiCert EV Code-Signing Certificate Theft

Stolen DigiCert EV code-signing certificates used to sign Golden Gh0st Loader / Golden Gh0st RAT (Gh0st RAT / Farfli lineage) · disclosed 2026-07-17
Threat
CylindricalCanine (Expel-TA-0002)
Severity
TRUST-CHAIN COMPROMISE
Type
Supply-chain / code-signing abuse
Access
Support-channel phishing → RAT
Version
v0.2 · 2026-07-20
Author
HuntPack pipeline (huntpack-agent-v2)
Confidence
High (vendor-published IOC set)
01

Executive Summary

The attacker's objective was trust, not data. CylindricalCanine — a subgroup of the Chinese cybercrime group GoldenEyeDog (APT-Q-27 / Dragon Breath / Miuuti Group, active since at least 2015) — did not breach DigiCert to steal customer records. They breached it to obtain the ability to sign malware as somebody else.

On 2026-04-02 the actor opened a customer-support chat with DigiCert and delivered a ZIP disguised as a customer screenshot; inside was a .scr executable. Two support-analyst workstations were compromised. The actor then abused a legitimate support-portal function that lets an authenticated analyst view an account "as the customer," and used it to read EV Code Signing initialization codes for orders that were approved but not yet delivered. An initialization code plus an approved order was functionally sufficient to obtain the certificate. DigiCert revoked 60 fraudulently obtained certificates across four issuing CAs; 27 were explicitly tied to the actor.

The malware is a modular, heavily modified Gh0st RAT (the family also tracked as Farfli, and reported by ANY.RUN as "Zhong Stealer") which Expel names Golden Gh0st RAT, delivered by Golden Gh0st Loader. It carries plugins for browser credential theft, keylogging, screenshot capture, SOCKS/TCP proxying, shell execution, event-log wiping, and a plugin32.dll module that installs a hidden local admin account and an RDP backdoor. A sibling cluster inside GoldenEyeDog uses RONINGLOADER, which disables Defender via PPL abuse and a signed kernel driver before dropping the same Gh0st variant.

Why this pack leads with the downstream angle. Most organisations were not DigiCert support analysts. But every organisation runs software-allowlisting and reputation logic that says "signed by a valid DigiCert EV cert = trusted." That assumption is what was stolen. Since 2024, Expel's Cert Graveyard has catalogued 75 unique code-signing certificates used by this loader, and the published IOC set contains 1,925 signed files. The highest-value hunt in your environment is therefore not "did we get phished" — it is "is a validly signed binary doing something a validly signed binary should not do?"

Defender priority: a valid Authenticode signature is now an attribute, not a verdict. Rank signed-binary executions from user-writable paths, first-seen-rare signed images, and signed PEs with screenshot-style filenames (image2026041168.com) above unsigned equivalents in triage — the signature is exactly what the actor paid to acquire.

02

Source Review & Web Hunter Notes

SourceTierWhat it supplied
Expel — Introducing CylindricalCaninePRIMARYFull malware analysis, C2 domains + ports, second-stage hashes, plugin/dispatch tables, hardcoded keys, RDP-backdoor mechanics, Suricata rules
The Hacker News, 2026-07-17CORROBORATINGDigiCert incident timeline and quotes, revoked-CA list, 60/27 certificate counts, Web3 support-chat campaign, RONINGLOADER attribution nuance
GBHackers, 2026-07-20CORROBORATINGIndependent restatement of the intrusion path; SmartScreen-bypass motive
Expel expel-intel GitHub IOC CSV (1,925 rows)PRIMARYPer-sample SHA256/SHA1/MD5, signer organisation + certificate serial, first-seen dates — the basis of the stolen-cert hunt
Elastic Security Labs — RONINGLOADERPRIMARYRONINGLOADER stage names, service names, registry keys, Defender/PPL abuse chain, final-stage C2
The Hacker News, 2025-11CORROBORATINGRONINGLOADER summary, EDR-killer tooling context

Web-hunter decisions

  • Certificate serials were treated as first-class atomic IOCs. They come from the Expel expel-intel IOC CSV, not from prose, and are the only indicator class that survives recompilation of the payload.
  • Signer organisations named in this pack are victims, not perpetrators. Their certificates were obtained fraudulently through DigiCert's support portal. Treat a match as "this cert is burned," never as "this vendor is malicious."
  • Two legitimate Microsoft runtimes (vcruntime140.dll, msvcp140.dll) appear in the delivery bundle and were deliberately excluded from the IOC set — blocking them would be self-inflicted damage.
  • secnews.gr was dropped. The fetch returned a bot-check interstitial with no article body; a source that cannot be snapshotted cannot back an indicator, so it is not cited.
  • No certificate thumbprints were published, only serials. The pack does not invent them; thumbprint-based blocking is left as a labelled placeholder.
03

Hunt Brief & Attack Chain

Hypotheses

  1. H1 (highest value). A binary in our estate carries a valid Authenticode signature from a certificate in the burned set, or behaves like one: signed, rare, and running from a user-writable directory.
  2. H2. A support / customer-facing / ticketing-adjacent user executed an archive attachment containing a .scr, .com or double-extension "screenshot," delivered via chat or a ticketing system rather than ordinary email.
  3. H3. A legitimate signed EXE side-loaded a malicious DLL from the same directory, alongside an encrypted blob masquerading as .log.
  4. H4. A host is beaconing plaintext WebSocket to a low-numbered port (5188 / 5198) or resolving the published C2 domains.
  5. H5. RDP was silently enabled and a hidden local administrator created with automatic logon configured.
  6. H6. Defender was neutered via service/driver abuse or PPL abuse (RONINGLOADER branch) shortly before an unexplained signed binary appeared.

Attack chain

StageBehaviorArtifact / telemetry
1 · Initial accessMalicious link or ZIP delivered through a customer-support chat or ticketing system, disguised as a customer screenshot; contains a .scr or .com executableArchive-extraction parent, browser/ticketing-client parent process, screenshot-style filename
2 · Stage-1 loaderGolden Gh0st Loader fetches a plaintext index (uu.txt / as.txt) from a CDN, then pulls a legitimate EXE + malicious DLL + encrypted .logOutbound to CDN object storage; multiple files written to one directory
3 · Side-loadLegitimate EXE loads the attacker DLL (crashreport.dll, TASLoginBase.dll, DataPlugin.dll); DLL decrypts the .log into an RWX buffer (ADD 0x77 / XOR 0x62)Module load from user-writable path; no disk artifact for the implant
4 · ImplantGolden Gh0st RAT: plaintext WebSocket to C2 on 5188 / 5198, 12-byte custom header, payload encrypted with hardcoded keysNon-TLS WebSocket to a low port; regular zero-length heartbeats
5 · PluginsBrowser credential sweep (Chrome / Firefox / Skype / QQ / 360), keylogger, screenshot, SOCKS proxy, shell, process kill, IE-history wipe, event-log wipeBrowser process killed then profile files read; ClearMyTracksByProcess 255
6 · PersistenceRandomly named .BAT watchdog that restarts the implant; Windows service; scheduled task named "Windos Defende"Service/task creation; cmd.exe launching a random-named batch file
7 · RDP backdoorplugin32.dll pushed over C2, UPX-packed, decrypted in memory: creates a hardcoded local account, adds it to Administrators, edits Winlogon for automatic logonAccount creation + Winlogon registry writes with no corresponding installer
R · RONINGLOADER branchNSIS installers posing as Chrome / Teams / VPN software; signed driver ollama.sys kills AV; ClipUp.exe -ppl overwrites MsMpEng.exe; WDAC policy dropped; goldendays.dll injects into TrustedInstallerService names xererre1 / ollama / MicrosoftSoftware2ShadowCop4yProvider; C:\ProgramData\Roning
04

Consolidated IOC Table

Read the signer column as "victim." Every organisation named below is a legitimate company whose EV code-signing certificate was obtained fraudulently through the DigiCert support portal. A hit means the certificate is burned.

TypeValueConfActionContext
Domainuu[.]goldeyeuu[.]io:5188HIGHBlockGolden Gh0st RAT C2, Dec 2025 – Jun 2026
Domainwk[.]goldeyeuu[.]io:5188HIGHBlockGolden Gh0st RAT C2, Jan – Jun 2026
Domainapi[.]keensie[.]com:5198HIGHBlockGolden Gh0st RAT C2, Jun 2026 – current
Domainqaqkongtiao[.]comHIGHBlockRONINGLOADER final-payload C2
URL hostkkuu[.]oss-cn-hongkong[.]aliyuncs[.]comMEDIUMDetectStage-2 CDN staging (2024/2025 campaign) — shared-hosting, do not blanket-block
URL hoststorage[.]googleapis[.]com/kiki001/MEDIUMDetectStage-2 CDN staging (Jun 2026) — path-scoped detect only
Cert serial0D2AD57B10B7472BAE03D3DEFF05F54FHIGHDistrustSigner: LENOVO (UNITED STATES) INC. — signed crashreport.dll, DataPlugin.dll
Cert serial0654CDA3DEFAF29DC152EF189C11E337HIGHDistrustSigner: Shuttle Inc.
Cert serial0AF316CB4E5D9BAF35B35E85677B17EEHIGHDistrustSigner: PALIT MICROSYSTEMS LTD. TAIWAN BRANCH (BELIZE)
Cert serial0AE04FFA7B23CC3F7395B25F41255157HIGHDistrustSigner: Luxvisions Innovation Technology Corp. Limited
Cert serial049209454DB22190C7697285C3D5AD9BHIGHDistrustSigner: DigiFors GmbH
Cert serial0CAE428F1BDCBEBAF284EEE9A643B1D8HIGHDistrustSigner: Brunner Informatik AG
Cert serial09186DCA3667374ADBD63A2F4FD96365HIGHDistrustSigner: BlockCerts Blockchain Canada, Inc.
Cert serial02ED93FDB6CFB33A477E218531F32922HIGHDistrustSigner: MobSoft Co., Ltd
Cert serial03A4E330B16DED8C61AD0FB23ECB2E1AHIGHDistrustSigner: Beijing 263 Enterprise Correspondence Co., Ltd.
Cert serial06500EE65FFBFB6EA4F4B16AB6F910C6HIGHDistrustSigner: INNOVATIVE CONNECTING PTE. LIMITED — signed fake TurboVPN.exe
Cert serial0E53B99068FF7BF9C1BBBB025ECEDB58HIGHDistrustSigner: SoftStory G.Zielinski, K.Jez s.c.
SHA25681e276aaa3eb9b3f595663c316b3c6414cc3dde5e6cc3a82856b7276acabb7deHIGHBlockGolden Gh0st RAT implant analysed 2026-04-12
SHA256d1b1938963037aa332591a4c999523a05886d1f62d80e03f0adc22630b8671c4HIGHBlockplugin32.dll RDP-backdoor plugin (decrypted, unpacked)
SHA25627b722c66f69e360c4da106daacf3b9eeaabd20634d7e5eff45a28bd70ebfd65HIGHBlockcrashreport.dll side-load DLL — signed with the Lenovo-issued serial
SHA2561abffe97aafe9916b366da57458a78338598cab9742c2d9e03e4ad0ba11f29bfHIGHBlockTASLoginBase.dll side-load DLL
SHA2562515b546125d20013237aeadec5873e6438ada611347035358059a77a32c54f5HIGHBlockollama.sys — signed driver used for AV process termination (RONINGLOADER)
BehaviorPlaintext WebSocket to TCP 5188 / 5198, 12-byte header, zero-length heartbeatsHIGHDetectSurvives every hash and domain rotation — the most durable signal in this pack
BehaviorSigned PE named image<date>.com / photo<date>.comHIGHDetectThe "screenshot" lure, consistently reused since 2024
RegistryHKCU\offlinekey (values open, clipboard, charac, newcharac)HIGHDetectRONINGLOADER keylogger + clipboard-hijacker config
File path%ProgramData%\microsoft.dotnet.common.logHIGHDetectKeystroke / clipboard / window-title log, self-deletes above 50 MB
Servicexererre1, ollama, MicrosoftSoftware2ShadowCop4yProviderHIGHDetectRONINGLOADER driver-load and stage-3 services
TaskScheduled task named Windos Defende (sic)HIGHDetectRemoved by the implant's self-destruct routine — a deletion is as interesting as a creation
05

Affected Surface & Telemetry Matrix

SurfaceTelemetry neededPriorityCommon gap
Windows endpoints (all)ProcessRollup2 with AuthenticodeHashData / SignInfoFlags populatedP1Signature fields dropped by ingest field-filtering — verify before trusting Q2
Support / helpdesk / CX workstationsProcess + file-write events, archive extraction, browser child processesP1These users are the target set and are often the least restricted by app control
Web3 / crypto customer-support teamsSame, plus chat-client download pathsP1Links arrive via support chat, bypassing mail-gateway detonation entirely
Egress / proxyDNS, NetworkConnectIP4 with RemotePort, TLS-vs-plaintext classificationP1Non-TLS WebSocket on 5188/5198 often unclassified and unlogged
RegistryRegObjectName / RegValueName for Winlogon, TermService, offlinekeyP2Registry telemetry frequently sampled or scoped to a small key allowlist
Local accounts & RDPAccount creation, group membership, fDenyTSConnectionsP2Local (non-domain) account creation rarely alerted on servers
Code-signing trust storesWDAC / AppLocker publisher rules, Windows CTL, internal allowlists keyed on publisherP1Publisher-based allowlists have no revocation feedback loop — this is the core exposure
Defender / EDR integrityService state, driver loads, PPL launches, WDAC policy writesP2Tamper events not forwarded to the SIEM
06

MITRE ATT&CK Mapping

TacticTechniqueBehavior in this campaignQuery / control
Initial AccessT1566.002 Spearphishing LinkMalicious link delivered via customer-support chat / ticketing systemQ3, native hunt N1
ExecutionT1204.002 Malicious File.scr / .com "screenshot" run by a support analystQ3
Defense EvasionT1553.002 Code SigningFraudulently obtained EV certificates sign the loader to defeat SmartScreenQ1, Q2
Defense EvasionT1574.001 DLL Search Order HijackingLegit EXE side-loads crashreport.dll / TASLoginBase.dllQ4
Defense EvasionT1562.001 Disable or Modify Toolsollama.sys driver kills AV; ClipUp.exe -ppl overwrites MsMpEng.exe; WDAC policy droppedQ9
Defense EvasionT1070.001 Clear Windows Event LogsCommand 0x158c clears Application / Security / System logsQ8
Defense EvasionT1070.004 File DeletionSelf-destruct routine deletes payloads, task and serviceQ8
Privilege EscalationT1548.002 Bypass UACCommand 0x0c8f relaunches self via ShellExecuteExA("runas")Q7
PersistenceT1543.003 Windows ServiceService persistence plus a random-named .BAT watchdogQ10
PersistenceT1136.001 Local Accountplugin32.dll creates a hardcoded local adminQ6
PersistenceT1547 Winlogon AutologonWinlogon edited for automatic logon of the backdoor accountQ6
Credential AccessT1555.003 Credentials from Web BrowsersChrome / Firefox / Skype / QQ / 360 profile sweep after killing the browserQ7
CollectionT1056.001 KeyloggingDllKeyboard plugin; log at %ProgramData%\microsoft.dotnet.common.logQ7
CollectionT1113 Screen CaptureCommand 0x1565 screenshot captureQ7 (behavioral)
Command and ControlT1071.001 Web ProtocolsPlaintext WebSocket, custom 12-byte header, hardcoded keysQ5
Command and ControlT1090 ProxyfnProxy plugin opens a SOCKS/TCP tunnel; C2 can re-target the SOCKS port liveQ5, Q10
Lateral MovementT1021.001 Remote Desktop ProtocolRDP backdoor enabled by plugin32.dllQ6
Impact / Supply ChainT1195.003 Compromise Hardware/Software Supply ChainTheft of certificates intended for third-party customersS12 hardening
07

Native Audit-Log Hunts (non-CQL)

N1 · Support-channel delivery (ticketing / chat platforms)

  • Export inbound attachments and links from the last 120 days on every customer-facing queue. Filter for archives whose contents include .scr, .com, .pif, or a double extension ending in an executable type.
  • Zendesk / Salesforce / Intercom / Freshdesk: look for a first-contact ticket from an unknown requester whose only content is an attached "screenshot" and a request to view it.
  • Check whether your ticketing platform detonates attachments at all. In the DigiCert case delivery was via chat, which typically bypasses the mail gateway entirely.

N2 · Sysmon — the certificate half Falcon does not expose

Falcon's process events do not publish the signer common name or certificate serial. Sysmon EventID 1 does. Run this on any host that returns a hit from Q1–Q4:

Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; Id=1} |
  ForEach-Object { [xml]$_.ToXml() } |
  ForEach-Object {
    $d = @{}; $_.Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
    [pscustomobject]$d
  } |
  Where-Object { $_.Signature -match 'Lenovo|Shuttle|PALIT|Luxvisions|DigiFors|Brunner|BlockCerts|MobSoft|INNOVATIVE CONNECTING|SoftStory' } |
  Select-Object UtcTime, Image, Signature, SignatureStatus, Hashes

N3 · Verify serials on a suspect file

$sig = Get-AuthenticodeSignature 'C:\path\to\suspect.exe'
$sig.Status
$sig.SignerCertificate.Subject
$sig.SignerCertificate.SerialNumber      # compare against the burned-serial list in S10
$sig.SignerCertificate.Issuer            # DigiCert Trusted G4 Code Signing RSA4096 SHA256/SHA384 2021 CA1, GoGetSSL G4 CS RSA4096 SHA256 2022 CA-1, Verokey High Assurance Secure Code EV

N4 · Certificate-inventory audit (do this even with zero endpoint hits)

  • If you hold DigiCert EV code-signing certificates, confirm with DigiCert whether any order of yours was in the affected window (approved but pending delivery, spring 2026), and whether your certificate was among the 60 revoked.
  • Inventory every WDAC / AppLocker publisher rule. Any rule that trusts a subject name rather than a specific signing cert is now a standing risk.
  • Confirm CRL / OCSP checking is actually reachable from endpoints. Revocation is the only control that makes a stolen certificate stop working, and it fails open on air-gapped or proxy-blocked hosts.

N5 · Network — plaintext WebSocket on low ports

On the proxy/firewall, hunt outbound TCP to ports 5188 and 5198 where the session is not TLS. Expel published Suricata coverage with Proofpoint (ETPro/ETOpen) keyed on the 12-byte header bytes; if you run Suricata, confirm the ET MALWARE GoldenGh0stLoader rules are enabled rather than writing your own.

08

CrowdStrike LogScale CQL Hunt Queries

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

Field note. Falcon publishes AuthenticodeHashData and SignInfoFlags on process and PE-write events, but it does not publish the signer common name or the certificate serial. Q1 and Q2 therefore hunt the signed-binary behaviour and known hashes; the subject/serial half is covered by the Sysmon and PowerShell hunts in Section 7. Baseline the values SignInfoFlags takes in your own tenant before filtering on a specific one.

Q1 · Known samples signed with certificates from the DigiCert theft window
CONF HIGHFP LOWCOST LOW

Looks for: exact SHA256 matches on Golden Gh0st Loader / RAT samples signed with certificates obtained through the DigiCert support-portal abuse (April 2026 window) plus the analysed implant and RDP plugin. FP: effectively zero — any hit is an incident.

// HUNT: Golden Gh0st samples signed with fraudulently obtained DigiCert EV certs
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2, PeFileWritten
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/
| in(SHA256HashData, values=[
    "81e276aaa3eb9b3f595663c316b3c6414cc3dde5e6cc3a82856b7276acabb7de",
    "d1b1938963037aa332591a4c999523a05886d1f62d80e03f0adc22630b8671c4",
    "27b722c66f69e360c4da106daacf3b9eeaabd20634d7e5eff45a28bd70ebfd65",
    "b48349b0454e0c1ee61990c85ee07c8c68397acc9e5fe980fbb930fc97d3f765",
    "411ea623229d591865748ad00c5f0d98eadeb711b9737584fc10d093be52de5a",
    "1abffe97aafe9916b366da57458a78338598cab9742c2d9e03e4ad0ba11f29bf",
    "4eaebd93e23be3427d4c1349d64bef4b5fc455c93aebb9b5b752981e9266488e",
    "2b0071007c3f5fa8e949a8de53be03e97901dd505694ca939b575a49e4fdbdbb",
    "c85911c6b8fa64bb84fe9a46c6f61e45c5aa8e47c73dfa839445a5037b1b43f9",
    "5e841260983954da60716b99306a410898bca4d30c14626553205753f60a6d2f",
    "55ce327ac004ed006bd7f11a3da301e9e5a853f79b2d5bad9ea9c83845d406af",
    "ba4de3c93d319523ab95cf3b724e6cef636e3890746c60067fd70b6f7792e428",
    "61b82798d812b2d4702dc1468fbada46e2f72e4d5b2598533ddbc33ac2fc843d",
    "36d22778dda953d192e7fd910faab2f4012421efbb35360ec7fe3e1c5109f1aa",
    "da2c58308e860e57df4c46465fd1cfc68d41e8699b4871e9a9be3c434283d50b",
    "82794015e2b40cc6e02d3c1d50241465c0cf2c2e4f0a7a2a8f880edaee203724",
    "c65170be2bf4f0bd71b9044592c063eaa82f3d43fcbd8a81e30a959bcaad8ae5",
    "2515b546125d20013237aeadec5873e6438ada611347035358059a77a32c54f5",
    "33b494eaaa6d7ed75eec74f8c8c866b6c42f59ca72b8517b3d4752c3313e617c"
  ])
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, TargetFileName, SHA256HashData, AuthenticodeHashData, CommandLine], limit=max)
| sort(@timestamp, order=desc)
Q2 · Rare validly-signed binaries executing from user-writable paths
CONF HIGHFP MEDCOST MED

Looks for: the whole point of stealing a certificate — a signed PE running from Users, ProgramData, Public, PerfLogs or a temp directory, seen on only a handful of hosts. This is the query that catches the next stolen certificate, not just the ones already published. FP: medium — legitimate signed installers, updaters, Teams/Slack/Chrome auto-update stubs and IT tooling live in these paths. Tune with the exclusion list, then baseline the survivors once and re-run weekly.

// HUNT: signed-but-rare PE from a user-writable path (stolen code-signing cert abuse)
// CONF: high  FP: med  COST: med | REQUIRES: ProcessRollup2 with AuthenticodeHashData populated
// NOTE: AuthenticodeHashData is only populated for signed images - its presence IS the signed test
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| AuthenticodeHashData = *
| ImageFileName = /\\(Users|ProgramData|PerfLogs|Windows\\Temp|Windows\\Tasks)\\/i
| ImageFileName != /\\(Program Files|Program Files \(x86\)|Windows\\System32|Windows\\SysWOW64|Windows\\WinSxS)\\/i
// TUNING: drop your own signed updaters / management agents here, then baseline the
// TUNING: survivors once and re-run weekly - only new AuthenticodeHashData values matter
| FileName != /^(Teams|Update|SlackSetup|OneDriveSetup|GoogleUpdate|MicrosoftEdgeUpdate|setup|msedgewebview2|ninjarmm-cli)(\.exe)?$/i
| groupBy([AuthenticodeHashData, FileName, SHA256HashData],
          function=[count(as=Execs), count(ComputerName, distinct=true, as=Hosts), collect(ImageFileName, limit=4), collect(ComputerName, limit=8)],
          limit=5000)
// rarity gate: a stolen cert signs a payload that shows up on very few hosts
| Hosts < 4
| sort(Hosts, order=asc)
Q3 · "Screenshot" lure — signed PE with an image-style name or .scr/.com extension
CONF HIGHFP LOWCOST LOW

Looks for: the delivery artifact that compromised DigiCert. The actor has reused image<yyyymmdd>nn.com / photo<yyyymmdd>nn.com naming continuously since 2024, and the DigiCert ZIP contained a .scr. Also catches any .scr/.com/.pif executed with a browser, archive tool or chat client as parent. FP: low — .scr and .com executions are rare in modern estates; legacy .com tools are the main noise source.

// HUNT: screenshot-lure executable delivered via support chat / ticketing
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName = /^((image|photo|screenshot|img|pic)[-_]?\d{4,14}\.(com|exe|scr|pif))|(.+\.(scr|pif))$/i
| ParentBaseFileName = /^(7zFM|7zG|WinRAR|Explorer|chrome|msedge|firefox|Teams|Slack|Discord|Telegram|outlook|zendesk|salesforce)(\.exe)?$/i
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, ParentBaseFileName, ParentCommandLine, SHA256HashData, AuthenticodeHashData, CommandLine], limit=200)
| sort(@timestamp, order=desc)
Q4 · Golden Gh0st Loader side-load pair (legit EXE + attacker DLL + .log blob)
CONF HIGHFP LOWCOST LOW

Looks for: the named side-load DLLs written outside their legitimate install directory, and the encrypted second-stage blob dropped beside them under a .log extension. crashreport.dll in %PUBLIC%\videos\ is a published observation from the June 2026 campaign. FP: low, provided the path exclusion for real install directories is kept.

// HUNT: DLL side-load pair + encrypted .log payload (Golden Gh0st Loader)
// CONF: high  FP: low  COST: low | REQUIRES: PeFileWritten / NewExecutableWritten / file-write telemetry
#event_simpleName=/^(PeFileWritten|NewExecutableWritten|ClassifiedModuleLoad|ImageHash)$/
| TargetFileName = /\\(crashreport|TASLoginBase|DataPlugin|Snieoatwtregoable|goldendays|plugin32|plug32)\.dll$/i
    or TargetFileName = /\\(updat|TASLogin|as|uu)\.log$/i
| TargetFileName != /\\(Program Files|Program Files \(x86\))\\/i
| table([@timestamp, ComputerName, UserName, TargetFileName, TargetDirectoryName, SHA256HashData, ContextBaseFileName, ImageFileName], limit=200)
| sort(@timestamp, order=desc)
Q5 · Golden Gh0st RAT C2 — named domains and plaintext WebSocket on low ports
CONF HIGHFP MEDCOST LOW

Looks for: DNS resolution of the published C2 domains, plus the durable behavioural half — repeated outbound TCP to 5188 or 5198 from a process that is not a known messaging/game client. The implant supports live C2 and SOCKS-port re-targeting, so the port pattern outlives the domains. FP: medium on the port half; some Chinese-market applications and game clients legitimately use these ports. Baseline first, then alert on new (process, port) pairs only.

// HUNT: Golden Gh0st RAT C2 - named domains OR plaintext WebSocket to 5188/5198
// CONF: high  FP: med  COST: low | REQUIRES: DnsRequest, NetworkConnectIP4
#event_simpleName=/^(DnsRequest|NetworkConnectIP4|NetworkConnectIP6)$/
| DomainName = /(^|\.)(goldeyeuu\.io|keensie\.com|qaqkongtiao\.com)$/i
    or RemotePort = 5188
    or RemotePort = 5198
// TUNING: exclude known-good clients that use these ports in your estate; after the
// TUNING: first baseline, alert only on new (ContextBaseFileName, RemotePort) pairs
| ContextBaseFileName != /^(steam|WeChat|QQ|DingTalk)(\.exe)?$/i
| groupBy([ComputerName, ContextBaseFileName, DomainName, RemoteAddressIP4, RemotePort],
          function=[count(as=Hits), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)],
          limit=5000)
| sort(Hits, order=desc)
Q6 · RDP backdoor — hidden admin account + Winlogon autologon + TermService enablement
CONF HIGHFP LOWCOST LOW

Looks for: the three moves plugin32.dll makes to open its RDP backdoor — create a local account, add it to Administrators, and edit Winlogon for automatic logon with suppressed credential prompts — plus the classic fDenyTSConnections flip and TermService start-type tampering. FP: low; legitimate hits come from imaging/provisioning tooling and kiosk builds, which should be a short, known list.

// HUNT: RDP backdoor enablement (Golden Gh0st plugin32.dll)
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2 + registry telemetry
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|RegSystemConfigValueUpdate|AsepValueUpdate|RegGenericValueUpdate)$/
| CommandLine = /net(1)?\s+(user\s+\S+\s+\S+\s+\/add|localgroup\s+(administrators|administradores)\s+\S+\s+\/add)/i
    or CommandLine = /reg(\.exe)?\s+add.+(fDenyTSConnections|AutoAdminLogon|DefaultUserName|DefaultPassword)/i
    or CommandLine = /(sc|net)(\.exe)?\s+(config|start)\s+TermService/i
    or RegObjectName = /\\Control\\Terminal Server$/i
    or RegObjectName = /\\Windows NT\\CurrentVersion\\Winlogon$/i
| RegValueName != /^(Shell|Userinit|LastUsedUsername)$/i
| table([@timestamp, ComputerName, UserName, FileName, CommandLine, RegObjectName, RegValueName, RegStringValue, ParentBaseFileName], limit=200)
| sort(@timestamp, order=desc)
Q7 · Credential / keylog / clipboard plugin activity
CONF MEDFP MEDCOST LOW

Looks for: the RAT's credential dispatch handlers in action — the implant kills a browser or Skype first, then reads the profile store, which produces a distinctive "taskkill browser then touch Login Data" sequence. Also covers the RONINGLOADER keylog/clipboard configuration keys and log file. FP: medium — legitimate password-manager imports and browser-migration tools also read these stores; the taskkill-then-read ordering and the offlinekey registry path are the discriminators.

// HUNT: Gh0st plugin credential sweep + keylogger/clipboard config
// CONF: med  FP: med  COST: low | REQUIRES: ProcessRollup2 + registry + file telemetry
// FALSE POSITIVES: password-manager imports and browser-migration tools also read these stores
// TUNING: exclude your approved password manager and profile-migration tooling below;
// TUNING: the taskkill-then-read ordering and the \offlinekey path are the real discriminators,
// TUNING: so triage those two branches first before working the file-artifact branch
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|RegGenericValueUpdate|AsepValueUpdate|PeFileWritten|NewExecutableWritten)$/
| ContextBaseFileName != /^(1Password|KeePass|KeePassXC|Bitwarden|LastPass|dashlane|BrowserMigration)(\.exe)?$/i
| CommandLine = /taskkill.+\/im\s+(chrome|firefox|skype|360se|360chrome|QQBrowser|msedge)\.exe/i
    or RegObjectName = /\\offlinekey/i
    or RegValueName = /^(newcharac|characLen|charac|clipboard)$/i
    or TargetFileName = /\\microsoft\.dotnet\.common\.log$/i
    or TargetFileName = /\\(avBackup\.dat|FormData3\.dat|historyUrl3\.db|history3\.db)$/i
| table([@timestamp, ComputerName, UserName, FileName, CommandLine, RegObjectName, RegValueName, TargetFileName, ParentBaseFileName], limit=200)
| sort(@timestamp, order=desc)
Q8 · Anti-forensics — log wiping, IE history purge, self-destruct
CONF HIGHFP LOWCOST LOW

Looks for: the implant's clean-up commands — RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255 (command 0x0c9b), Application/Security/System log clearing (0x158c), and the self-destruct routine that deletes the misspelled Windos Defende scheduled task and its own service. FP: low; wevtutil cl on a workstation is almost never legitimate.

// HUNT: Golden Gh0st RAT anti-forensic commands
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| CommandLine = /InetCpl\.cpl,\s*ClearMyTracksByProcess/i
    or CommandLine = /wevtutil(\.exe)?\s+cl\s+(Application|Security|System)/i
    or CommandLine = /Clear-EventLog/i
    or CommandLine = /schtasks(\.exe)?\s+\/delete.+Windos\s*Defende/i
    or CommandLine = /(sc|net)(\.exe)?\s+(delete|stop)\s+.*(Windos|Defende)/i
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, ParentCommandLine], limit=200)
| sort(@timestamp, order=desc)
Q9 · RONINGLOADER branch — Defender neutering, driver services, TrustedInstaller injection
CONF HIGHFP LOWCOST MED

Looks for: the RONINGLOADER chain that delivers the same Gh0st variant — the transient driver services (xererre1, ollama), the stage-3 service MicrosoftSoftware2ShadowCop4yProvider loading goldendays.dll via regsvr32, the mklink-plus-ClipUp.exe -ppl trick that overwrites MsMpEng.exe, and the phantom Wow64Log.dll plant. FP: low — none of these strings have a benign analogue. ClipUp.exe outside of a Windows setup context is the strongest single signal.

// HUNT: RONINGLOADER - PPL abuse, driver-based AV kill, TrustedInstaller injection
// CONF: high  FP: low  COST: med | REQUIRES: ProcessRollup2, service + file telemetry
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|ServiceStarted|PeFileWritten|NewExecutableWritten)$/
| CommandLine = /ClipUp(\.exe)?\s+-ppl/i
    or CommandLine = /mklink\s+\/D\s+.*ProgramData\\roming/i
    or CommandLine = /regsvr32(\.exe)?\s+\/S\s+.*ProgramData\\Roning\\goldendays\.dll/i
    or ServiceName = /^(xererre1|ollama|MicrosoftSoftware2ShadowCop4yProvider)$/i
    or ServiceImagePath = /\\(ollama|inject)\.sys$/i
    or TargetFileName = /\\Wow64\\Wow64Log\.dll$/i
    or TargetFileName = /\\drivers\\\d{6,8}\.temp$/i
    or TargetFileName = /\\ProgramData\\(Roning|lnk)\\/i
    or TargetFileName = /\\CiPolicies\\Active\\\{31351756-3F24-4963-8380-4E7602335AAE\}\.cip$/i
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, ServiceName, ServiceImagePath, TargetFileName, ParentBaseFileName], limit=200)
| sort(@timestamp, order=desc)
Q10 · Watchdog .BAT persistence and SOCKS tunnel setup
CONF MEDFP MEDCOST LOW

Looks for: command 0x0c97's randomly-named batch watchdog (RONINGLOADER writes it directly into C:\Windows\, e.g. KPeYvogsPm.bat) and the loop that restarts the malicious service, plus process-level indicators of the fnProxy SOCKS tunnel — a non-browser process listening locally and relaying outbound. FP: medium — legitimate batch scripts exist, so the discriminators are the write location (C:\Windows\ root), the random 8–12 character mixed-case stem, and the timeout/tasklist loop body.

// HUNT: random-named .BAT watchdog in C:\Windows + SOCKS relay behaviour
// CONF: med  FP: med  COST: low | REQUIRES: ProcessRollup2 + file-write telemetry
// FALSE POSITIVES: legitimate admin batch scripts; portproxy used by real remote-access setups
// TUNING: exclude your deployment/RMM writer processes below; the discriminators are the
// TUNING: write location (C:\Windows\ root, not System32), the random mixed-case 8-12 char
// TUNING: stem, and the timeout/tasklist loop body - a named .bat in C:\Windows is usually IT
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|NewExecutableWritten|PeFileWritten)$/
| ContextBaseFileName != /^(ninjarmm-cli|TaniumClient|ccmexec|msiexec|SCNotification)(\.exe)?$/i
| TargetFileName = /\\Windows\\[A-Za-z]{8,12}\.bat$/
    or CommandLine = /cmd(\.exe)?\s+\/c\s+.*\\Windows\\[A-Za-z]{8,12}\.bat/
    or CommandLine = /tasklist.+(findstr|find)\s+.*\s+timeout\s+\/t\s+10/i
    or CommandLine = /netsh\s+interface\s+portproxy\s+add/i
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, TargetFileName, ParentBaseFileName, ParentCommandLine], limit=200)
| sort(@timestamp, order=desc)
09

Custom IOA Recommendations

IOA nameTypePatternExclusionsAction
GoldenEyeDog · Screenshot-lure executableProcess CreationImage filename regex ^(image|photo|screenshot)[-_]?\d{4,14}\.(com|exe|scr)$None expectedBlock / Detect (Critical)
GoldenEyeDog · SCR from archive or chat clientProcess CreationImage name ends .scr; parent in {7zFM, 7zG, WinRAR, explorer, chrome, msedge, Teams, Slack, Telegram}Legacy screensaver deployment toolingBlock (High)
GoldenEyeDog · Side-load DLL basenameFile WriteWritten filename matches (crashreport|TASLoginBase|DataPlugin|goldendays|plugin32)\.dll outside Program FilesVendor install paths for genuine crash-reporting SDKsDetect (High) → Block after 14 days clean
GoldenEyeDog · RDP backdoor accountProcess Creationnet user … /add followed within 60s by net localgroup administrators … /add on the same hostProvisioning / imaging service accounts (allowlist by parent)Block (Critical)
GoldenEyeDog · Winlogon autologon writeRegistryWrite to Winlogon\AutoAdminLogon or DefaultPassword by a process not on the management-tool allowlistKiosk/lab build automationDetect (Critical)
RONINGLOADER · ClipUp PPL abuseProcess CreationClipUp.exe with -ppl argumentNone — no benign use outside OOBEBlock (Critical)
RONINGLOADER · Transient driver serviceServiceService created and deleted within 5 minutes whose image path ends .sys in a temp or user pathLegitimate driver installers (allowlist by publisher)Detect (Critical)
Golden Gh0st · Plaintext WebSocket beaconNetworkRepeated outbound TCP to 5188/5198 with regular short-interval keepalives from a non-allowlisted processBaseline first — some CN-market apps use these portsDetect (High)

Deployment path: Endpoint security → Custom IOA rule groups → assign to a pilot host group first, run 7 days in Detect, then promote the Block-rated rules. The screenshot-lure and ClipUp rules are safe to deploy directly to Block; everything else should serve a detect-only tour first.

10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
sha256,81e276aaa3eb9b3f595663c316b3c6414cc3dde5e6cc3a82856b7276acabb7de,prevent,critical,2027-07-20,Golden Gh0st RAT implant,campaign:CylindricalCanine
sha256,d1b1938963037aa332591a4c999523a05886d1f62d80e03f0adc22630b8671c4,prevent,critical,2027-07-20,plugin32.dll RDP backdoor plugin,campaign:CylindricalCanine
sha256,27b722c66f69e360c4da106daacf3b9eeaabd20634d7e5eff45a28bd70ebfd65,prevent,critical,2027-07-20,crashreport.dll side-load DLL,campaign:CylindricalCanine
sha256,b48349b0454e0c1ee61990c85ee07c8c68397acc9e5fe980fbb930fc97d3f765,prevent,critical,2027-07-20,crashreport.dll signed with stolen cert,campaign:CylindricalCanine
sha256,411ea623229d591865748ad00c5f0d98eadeb711b9737584fc10d093be52de5a,prevent,critical,2027-07-20,DataPlugin.dll signed with stolen cert,campaign:CylindricalCanine
sha256,1abffe97aafe9916b366da57458a78338598cab9742c2d9e03e4ad0ba11f29bf,prevent,critical,2027-07-20,TASLoginBase.dll side-load DLL,campaign:CylindricalCanine
sha256,4eaebd93e23be3427d4c1349d64bef4b5fc455c93aebb9b5b752981e9266488e,prevent,critical,2027-07-20,down.exe stage-1 loader,campaign:CylindricalCanine
sha256,2b0071007c3f5fa8e949a8de53be03e97901dd505694ca939b575a49e4fdbdbb,detect,high,2027-07-20,updat.exe sideload host binary,campaign:CylindricalCanine
sha256,3313f347e83aaf48ea31fb1d49fc37452f48f81d20a1b93009e2e78385ff4bba,prevent,critical,2027-07-20,updat.log encrypted stage-2 blob,campaign:CylindricalCanine
sha256,dd44dabff536a1aa9b845dd891ad483162d4f28913344c93e5d59f648a186098,prevent,critical,2027-07-20,TASLogin.log encrypted stage-2 blob,campaign:CylindricalCanine
sha256,c85911c6b8fa64bb84fe9a46c6f61e45c5aa8e47c73dfa839445a5037b1b43f9,prevent,critical,2027-07-20,image2026040568.com screenshot lure,campaign:CylindricalCanine
sha256,5e841260983954da60716b99306a410898bca4d30c14626553205753f60a6d2f,prevent,critical,2027-07-20,fake TurboVPN.exe signed with stolen cert,campaign:CylindricalCanine
sha256,55ce327ac004ed006bd7f11a3da301e9e5a853f79b2d5bad9ea9c83845d406af,prevent,critical,2027-07-20,wss.exe signed with stolen cert,campaign:CylindricalCanine
sha256,ba4de3c93d319523ab95cf3b724e6cef636e3890746c60067fd70b6f7792e428,prevent,critical,2027-07-20,image20260412689.com screenshot lure,campaign:CylindricalCanine
sha256,61b82798d812b2d4702dc1468fbada46e2f72e4d5b2598533ddbc33ac2fc843d,prevent,critical,2027-07-20,fake TurboVPN.exe signed with stolen cert,campaign:CylindricalCanine
sha256,36d22778dda953d192e7fd910faab2f4012421efbb35360ec7fe3e1c5109f1aa,prevent,critical,2027-07-20,masquerading java.exe signed with stolen cert,campaign:CylindricalCanine
sha256,da2c58308e860e57df4c46465fd1cfc68d41e8699b4871e9a9be3c434283d50b,prevent,critical,2027-07-20,RONINGLOADER initial installer,campaign:GoldenEyeDog
sha256,82794015e2b40cc6e02d3c1d50241465c0cf2c2e4f0a7a2a8f880edaee203724,prevent,critical,2027-07-20,RONINGLOADER malicious NSIS installer,campaign:GoldenEyeDog
sha256,c65170be2bf4f0bd71b9044592c063eaa82f3d43fcbd8a81e30a959bcaad8ae5,prevent,critical,2027-07-20,RONINGLOADER stage-1 loader DLL,campaign:GoldenEyeDog
sha256,2515b546125d20013237aeadec5873e6438ada611347035358059a77a32c54f5,prevent,critical,2027-07-20,ollama.sys AV-killer driver,campaign:GoldenEyeDog
sha256,33b494eaaa6d7ed75eec74f8c8c866b6c42f59ca72b8517b3d4752c3313e617c,prevent,critical,2027-07-20,goldendays.dll stage-3 entry point,campaign:GoldenEyeDog
md5,54def291b6bd573186734895b7ed03b6,detect,high,2027-07-20,Golden Gh0st related sample,campaign:CylindricalCanine
domain,uu.goldeyeuu.io,prevent,critical,2027-07-20,Golden Gh0st RAT C2 port 5188,campaign:CylindricalCanine
domain,wk.goldeyeuu.io,prevent,critical,2027-07-20,Golden Gh0st RAT C2 port 5188,campaign:CylindricalCanine
domain,api.keensie.com,prevent,critical,2027-07-20,Golden Gh0st RAT C2 port 5198,campaign:CylindricalCanine
domain,qaqkongtiao.com,prevent,critical,2027-07-20,RONINGLOADER final payload C2,campaign:GoldenEyeDog
# CDN staging hosts are shared infrastructure - DETECT on the full path, never block the domain:
#   kkuu[.]oss-cn-hongkong[.]aliyuncs[.]com/ss/   and   storage[.]googleapis[.]com/kiki001/
# Certificate thumbprints were not published by any source. Use serials (block below) or:
sha256,REPLACE_WITH_THUMBPRINT_IF_YOUR_CA_PUBLISHES_ONE,detect,high,2027-07-20,placeholder - do not import as-is,campaign:CylindricalCanine
Burned certificate serialsdistrust / WDAC deny
# Serials of code-signing certificates abused by GoldenEyeDog in the April 2026
# DigiCert theft window. The named organisations are VICTIMS - their certificates
# were fraudulently obtained. Distrust the serial, not the company.
0D2AD57B10B7472BAE03D3DEFF05F54F   LENOVO (UNITED STATES) INC.
0654CDA3DEFAF29DC152EF189C11E337   Shuttle Inc.
0AF316CB4E5D9BAF35B35E85677B17EE   PALIT MICROSYSTEMS LTD. TAIWAN BRANCH (BELIZE)
0AE04FFA7B23CC3F7395B25F41255157   Luxvisions Innovation Technology Corp. Limited
049209454DB22190C7697285C3D5AD9B   DigiFors GmbH
0CAE428F1BDCBEBAF284EEE9A643B1D8   Brunner Informatik AG
09186DCA3667374ADBD63A2F4FD96365   BlockCerts Blockchain Canada, Inc.
02ED93FDB6CFB33A477E218531F32922   MobSoft Co., Ltd
03A4E330B16DED8C61AD0FB23ECB2E1A   Beijing 263 Enterprise Correspondence Co., Ltd.
06500EE65FFBFB6EA4F4B16AB6F910C6   INNOVATIVE CONNECTING PTE. LIMITED
0E53B99068FF7BF9C1BBBB025ECEDB58   SoftStory G.Zielinski, K.Jez s.c.

# Issuing CAs from which DigiCert revoked 60 fraudulently obtained certificates
# (27 explicitly linked to this actor):
DigiCert Trusted G4 Code Signing RSA4096 SHA256 2021 CA1
DigiCert Trusted G4 Code Signing RSA4096 SHA384 2021 CA1
GoGetSSL G4 CS RSA4096 SHA256 2022 CA-1
Verokey High Assurance Secure Code EV
Behavioral signaturessurvives rotation
# These outlive every hash, domain and certificate in this pack.
NET   plaintext (non-TLS) WebSocket to TCP 5188 or 5198, 12-byte custom header,
      zero-length heartbeat frames at a regular interval
PROC  signed PE executing from \Users\, \ProgramData\, \Public\, \PerfLogs\ or a
      temp directory, seen on fewer than 4 hosts in the estate
PROC  image<date>.com / photo<date>.com / *.scr launched by an archive tool,
      browser, or chat/ticketing client
LOAD  legitimate signed EXE loading a DLL from the same user-writable directory,
      with an adjacent oversized ".log" file (encrypted stage 2)
REG   HKLM\...\Windows NT\CurrentVersion\Winlogon AutoAdminLogon / DefaultPassword
      written with no matching provisioning job
ACCT  local account created and added to Administrators within the same minute
REG   HKCU\offlinekey  values: open, clipboard, charac, characLen, newcharac
FILE  %ProgramData%\microsoft.dotnet.common.log  (keystroke/clipboard log)
PROC  RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255
PROC  ClipUp.exe -ppl  (any argument form) outside of Windows OOBE
SVC   service created and deleted within minutes, image path a .sys in a temp path
FILE  C:\Windows\<8-12 random mixed-case chars>.bat watchdog script
TASK  scheduled task literally named "Windos Defende" (misspelled)
Named tooling & aliasesthreat-intel pivots
Actor      GoldenEyeDog = APT-Q-27 = Dragon Breath = Miuuti Group  (Chinese cybercrime, active since ~2015)
Subgroup   CylindricalCanine = Expel-TA-0002  (the DigiCert intrusion cluster)
Malware    Golden Gh0st Loader   (first stage, side-loading)
Malware    Golden Gh0st RAT      (modified Gh0st RAT / Farfli lineage)
Alias      Zhong Stealer         (ANY.RUN naming - Expel assesses it is a full RAT, not just a stealer)
Malware    RONINGLOADER          (sibling cluster loader, NSIS + PPL abuse)
Module     plugin32.dll          (RDP-backdoor persistence plugin, UPX packed)
Keys       REGISTER_KEY 8A913610E905C3DD1F657811EA3B1933471B230F88E1C155616099A03AB0ABC0
           MODULE_KEY   2031A71C399563ADAF1572E10ABB395387EB132208A001C5E140496D7A3E0B26
Crypto     stage-2 .log decryption: CIPHER_ADD 0x77, CIPHER_XOR 0x62
Network    Suricata: "ET MALWARE GoldenGh0stLoader Websocket Checkin - C2 Response"
           Suricata: "ET MALWARE GoldenGh0stLoader Directory Listing Command From C2"
           (both shipped in Proofpoint ETPro and ETOpen - enable rather than rewrite)
Certificate-trust audit checklistthe actual fix
[ ] Do we hold DigiCert EV code-signing certificates? Was any order of ours
    approved-but-undelivered in spring 2026? Ask DigiCert directly.
[ ] Was any certificate of ours among the 60 revoked? If yes: re-key, re-sign,
    and audit every artifact signed in the exposure window.
[ ] Are CRL/OCSP endpoints reachable from every endpoint and build agent?
    Revocation is the only control that turns a stolen cert off.
[ ] Enumerate every WDAC / AppLocker PUBLISHER rule. Replace subject-name trust
    with specific-certificate trust, or add a file-hash constraint.
[ ] Do our signing keys live in an HSM or hardware token, with a signing service
    in front, so an initialization code alone cannot yield a usable certificate?
[ ] Does our own support portal have an "act as customer" / impersonation view?
    What secrets are visible through it, and are they masked for proxied users?
[ ] Is impersonation-mode use logged, alerted on, and reviewed?
[ ] Do our support and CX staff run with application control enforced? They are
    the target set in this campaign, and are usually the least restricted.
11

Detection Validation Gates

GateCheckPass criterion
G1 · Telemetry readyRun #event_simpleName=ProcessRollup2 | AuthenticodeHashData = * | head(20)Returns rows. If empty, AuthenticodeHashData is not populated in your tenant and Q2 is blind — fix ingest before trusting the result.
G2 · Signature-flag baseline#event_simpleName=ProcessRollup2 | groupBy([SignInfoFlags], function=count(as=n), limit=50)You can enumerate the distinct values and know which mean "trusted chain" in your sensor version, before filtering on any of them.
G3 · Benign baselineRun Q2 across 30 days on a known-clean host groupResult set is small enough to review by hand (target: under 50 rows). If not, extend the exclusion regex before promoting.
G4 · Positive test — screenshot lureIn a lab, copy a signed benign EXE to %TEMP%\image20260720.com and launch it from 7-ZipQ3 fires within the search window.
G5 · Positive test — RDP backdoorIn a lab, run net user hunttest … /add then net localgroup administrators hunttest /add, then write an AutoAdminLogon valueQ6 fires on both the process and registry legs. Remove the account afterwards.
G6 · Positive test — networkFrom a lab host, open a plaintext TCP connection to a sinkhole on 5188Q5 returns the connection with the initiating process attributed.
G7 · Negative controlConfirm Q1 returns zero on a known-clean estateAny hit is an incident, not a tuning problem — escalate immediately.
G8 · PromotionQ1, Q3, Q4, Q6, Q8, Q9 clean for 7 consecutive days at detect-onlyPromote to scheduled search with alerting. Q2, Q5, Q7, Q10 stay analyst-run until their baselines settle.
12

Hardening — Tiered

Immediate — this week
  • Block executable content in support channels. Strip or quarantine .scr, .com, .pif, .exe, .js, .lnk and password-protected archives arriving through ticketing and live-chat platforms, not just email. This is the exact control whose absence caused the DigiCert compromise. (MITRE M1049, M1040)
  • Turn off screensaver-executable association for standard users, and add an ASR-equivalent rule blocking .scr execution from user-writable paths.
  • Block the published C2 domains at DNS and egress: uu[.]goldeyeuu[.]io, wk[.]goldeyeuu[.]io, api[.]keensie[.]com, qaqkongtiao[.]com. Detect-only on the CDN staging paths — those hosts are shared and must not be blanket-blocked.
  • Import the burned certificate serials into a WDAC deny policy (see S13 playbook 1). Do not wait for CRL propagation to reach every endpoint.
  • Verify CRL/OCSP reachability from endpoints and build agents. A revoked certificate that cannot be checked is an accepted certificate.
  • Deploy the ClipUp -ppl and screenshot-lure IOAs in Block mode — neither has a benign analogue.
Near term — 30 days
  • Replace publisher-name trust with certificate-specific trust in WDAC and AppLocker. A rule that says "trust anything signed by Vendor X" now grants an attacker with any Vendor X certificate full execution. Pin to the specific signing certificate, or pair publisher rules with file-hash or version constraints. (MITRE M1045, M1038)
  • Application control for support / CX / helpdesk staff. They are this actor's target set across both the DigiCert and Web3 campaigns, and are typically the least restricted population in the estate. Move them to enforced WDAC or AppLocker.
  • Harden RDP. Enforce NLA, disable local-account RDP logon via DenyRDPLogon for local accounts, and alert on any fDenyTSConnections change. (MITRE M1042, M1035)
  • Alert on local administrator creation on every workstation and server. The plugin32.dll backdoor account is otherwise invisible.
  • Enable Defender tamper protection and forward tamper/PPL events to the SIEM. RONINGLOADER's whole first act is turning the EDR off.
  • Enable Microsoft vulnerable-driver blocklist / HVCI to blunt the signed-driver AV-kill technique.
  • Audit your own impersonation features. If any internal tool has a "view as customer" mode, mask secrets for proxied users, log every use, and alert on volume anomalies. DigiCert's own remediation was exactly this: masking initialization codes from proxied users on both UI and API.
Strategic — 90 days and beyond
  • Treat code-signing material as tier-0 secrets. Keys in an HSM, signing behind a service that enforces approval and produces an immutable log, no path where possession of a single code alone yields a usable certificate.
  • Build a signing-artifact inventory. You should be able to answer "what did we sign, when, with which certificate" within an hour. Without it, a revocation event becomes an open-ended incident.
  • Adopt reproducible builds and transparency logging for released binaries so a fraudulently signed artifact is detectable as "not from our build system" regardless of signature validity.
  • Add a supply-chain clause to vendor reviews covering the vendor's own support-portal impersonation controls and their revocation SLA.
  • Shift detection weight from reputation to behaviour. This campaign is the proof that publisher reputation is purchasable. Any control whose logic terminates at "signature valid → allow" needs a behavioural second stage.
13

Deployable Playbooks

1 · WDAC deny rules for the burned certificate serials

Generate a deny-by-serial supplemental policy. Run on a management host with the WDAC cmdlets available, then merge into your base policy and deploy in Audit mode first.

# Requires: Windows 11 / Server 2022+ management host, ConfigCI module
$serials = @(
  '0D2AD57B10B7472BAE03D3DEFF05F54F','0654CDA3DEFAF29DC152EF189C11E337',
  '0AF316CB4E5D9BAF35B35E85677B17EE','0AE04FFA7B23CC3F7395B25F41255157',
  '049209454DB22190C7697285C3D5AD9B','0CAE428F1BDCBEBAF284EEE9A643B1D8',
  '09186DCA3667374ADBD63A2F4FD96365','02ED93FDB6CFB33A477E218531F32922',
  '03A4E330B16DED8C61AD0FB23ECB2E1A','06500EE65FFBFB6EA4F4B16AB6F910C6',
  '0E53B99068FF7BF9C1BBBB025ECEDB58'
)
# Emit the serial list for your policy authoring tool / MDM console.
# WDAC deny-by-signer requires the signing cert; where you have a sample signed
# by one of these serials, extract the cert and build a Deny rule from it:
#   $c = (Get-AuthenticodeSignature .\sample.exe).SignerCertificate
#   $c | Export-Certificate -FilePath .\burned.cer
#   New-CIPolicyRule -DriverFilePath .\sample.exe -Level Publisher -Deny
# Then: Merge-CIPolicy, Set-RuleOption -Option 3 -Delete (leave Audit ON first),
#       ConvertFrom-CIPolicy, and deploy via MDM/GPO.
$serials | ForEach-Object { "DENY_SERIAL,$_" }

2 · Sweep the estate for the burned serials (agentless, via WinRM)

$burned = @(
 '0D2AD57B10B7472BAE03D3DEFF05F54F','0654CDA3DEFAF29DC152EF189C11E337',
 '0AF316CB4E5D9BAF35B35E85677B17EE','0AE04FFA7B23CC3F7395B25F41255157',
 '049209454DB22190C7697285C3D5AD9B','0CAE428F1BDCBEBAF284EEE9A643B1D8',
 '09186DCA3667374ADBD63A2F4FD96365','02ED93FDB6CFB33A477E218531F32922',
 '03A4E330B16DED8C61AD0FB23ECB2E1A','06500EE65FFBFB6EA4F4B16AB6F910C6',
 '0E53B99068FF7BF9C1BBBB025ECEDB58'
)
$paths = @("$env:PUBLIC","$env:ProgramData","$env:LOCALAPPDATA","$env:TEMP","C:\PerfLogs")
foreach ($p in $paths) {
  Get-ChildItem -Path $p -Recurse -Include *.exe,*.dll,*.sys,*.com,*.scr -ErrorAction SilentlyContinue |
    ForEach-Object {
      $s = Get-AuthenticodeSignature $_.FullName -ErrorAction SilentlyContinue
      if ($s.SignerCertificate -and $burned -contains $s.SignerCertificate.SerialNumber) {
        [pscustomobject]@{
          Host   = $env:COMPUTERNAME
          File   = $_.FullName
          Serial = $s.SignerCertificate.SerialNumber
          Subject= $s.SignerCertificate.Subject
          Status = $s.Status
          SHA256 = (Get-FileHash $_.FullName -Algorithm SHA256).Hash
        }
      }
    }
}

3 · Block executable content from support channels (mail/gateway policy shape)

# Transport / chat DLP rule intent (translate to your platform):
BLOCK  attachment extension in { scr, pif, com, exe, msi, js, jse, vbs, lnk, hta, cpl }
BLOCK  archive containing any of the above, at any nesting depth
QUARANTINE  password-protected archive from an external, first-contact sender
APPLY TO  every customer-facing queue AND the live-chat/file-upload path,
          not just SMTP. The DigiCert delivery was a chat upload.
NOTIFY  the agent with a plain-language reason so they do not seek a workaround

4 · RDP backdoor hardening (GPO / registry)

# Deny RDP to local accounts (blocks the plugin32.dll backdoor account path)
# Computer Config > Policies > Windows Settings > Security Settings >
#   Local Policies > User Rights Assignment >
#   "Deny log on through Remote Desktop Services" -> add: Local account

# PowerShell (run elevated). Each reg add is one line on purpose -- a CMD caret (^)
# continuation does not work in PowerShell, and this block previously mixed the two.

# Require Network Level Authentication
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 1 /f

# Ensure RDP stays disabled where it is not required
# WARNING: this disables inbound RDP on the host. Confirm out-of-band access
# (console/iLO/DRAC) before running it on a remote server.
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f

# Verify:
#   reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication
# Rollback:
#   reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

# Block autologon abuse - these values should never be set on a managed endpoint
# Audit: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
#        AutoAdminLogon, DefaultUserName, DefaultPassword, DefaultDomainName

5 · Defender / EDR tamper resistance (RONINGLOADER branch)

# PowerShell (run elevated). Each reg add is one line on purpose -- a CMD caret (^)
# continuation does not work in PowerShell, and this block previously mixed the two.

# Tamper Protection is NOT settable from here. When it is on, Set-MpPreference calls
# that alter protection settings are blocked by design; the old line in this block
# (Set-MpPreference -DisableTamperProtection $false) was decorative at best and threw
# access-denied at worst. Set it in Intune / the Defender portal, then confirm locally:
Get-MpComputerStatus | Select-Object IsTamperProtected, AMRunningMode

# Microsoft Vulnerable Driver Blocklist. Independent of HVCI -- this works on its own
# and is what actually blunts an ollama.sys-style AV-kill driver.
reg add "HKLM\SYSTEM\CurrentControlSet\Control\CI\Config" /v VulnerableDriverBlocklistEnable /t REG_DWORD /d 1 /f

# HVCI. The scenario key ALONE does not enable it -- VBS must be enabled as well, or
# the control silently never activates. All three values are required.
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v EnableVirtualizationBasedSecurity /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v RequirePlatformSecurityFeatures /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v Enabled /t REG_DWORD /d 1 /f

# Prerequisites: UEFI + Secure Boot + virtualization extensions. Reboot required.
# PILOT FIRST -- incompatible legacy drivers can block boot under HVCI.
# Verify AFTER reboot (must contain 2 for HVCI):
#   (Get-CimInstance Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard).SecurityServicesRunning
# Rollback:
#   reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v Enabled /t REG_DWORD /d 0 /f
#   reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v EnableVirtualizationBasedSecurity /t REG_DWORD /d 0 /f
#   (then reboot; if the host will not boot, use Safe Mode or WinRE to revert)

# Alert on any write to the active WDAC policy directory - RONINGLOADER drops its own
#   C:\Windows\System32\CodeIntegrity\CiPolicies\Active\*.cip
14

Containment Runbook

PhaseActionsOwnerEvidence to capture
0 · TriggerAny hit on Q1, or a Q2/Q3 hit that survives triageSOC L1Query output, host, user, full process tree
1 · IsolateNetwork-contain the host in Falcon. Do not power off — the implant runs in memory after decrypting the .log blob, and a reboot destroys the best evidence.SOC L2Containment timestamp, memory image if capability exists
2 · Scope the certificateExtract the signature from the sample: subject, serial, issuer, timestamp. Compare against the burned-serial list. If the serial is new, you have found an unpublished stolen certificate — notify the issuing CA and the named organisation.Threat intelGet-AuthenticodeSignature output, sample hash
3 · Scope the estateRun playbook 2 fleet-wide. Run Q1 and Q4 across the full retention window, not just 7 days — the loader has been active since 2023.Hunt teamHost list, first-seen timestamps per host
4 · Persistence sweepCheck for: unexpected local admins, Winlogon autologon values, services with temp-path images, C:\Windows\*.bat watchdogs, a "Windos Defende" task, HKCU\offlinekey, %ProgramData%\microsoft.dotnet.common.logIRRegistry exports, service list, task list, account audit
5 · Credential responseAssume every browser-stored credential and session token on the host is compromised. Force password reset and session revocation for the user across SSO, mail, VPN, and any customer-support platform they can access.IAMReset log, token-revocation confirmation
6 · Egress reviewPull full connection history for the host: 5188/5198, the C2 domains, and any SOCKS-style relay pattern. The proxy plugin means this host may have been a pivot for others.NetworkFlow logs, proxy logs, DNS logs
7 · Support-channel reviewIf the user is support/CX, pull every ticket and chat they handled in the 30 days before and after. Identify the delivery ticket and check whether the same requester touched other agents.IR + Support leadTicket IDs, requester identity, attachment hashes
8 · RebuildReimage. Do not clean in place — the implant has an event-log wiper, a self-destruct routine, and can re-target its C2 live, so "no further beaconing" proves nothing.IT opsRebuild ticket, restored-from-known-good confirmation
9 · NotifyIf any of your own code-signing certificates are implicated, notify your CA immediately and initiate revocation and re-key. If a customer-facing artifact was signed in the window, prepare customer comms.Security leadershipCA case number, revocation confirmation, comms record
15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1553.002 Code SigningKnown stolen-cert-signed samplesQ1GOOD
T1553.002 Code SigningUnpublished stolen cert (signed + rare + user-writable path)Q2PARTIAL
T1553.002 Code SigningSigner subject / certificate serial matchGAP — Falcon does not publish signer CN or serial; covered only by Sysmon N2 / PowerShell N3
T1566.002 / T1204.002Screenshot-lure executable from chat or archiveQ3Screenshot-lure, SCR-from-archiveGOOD
T1574.001 DLL Side-LoadingNamed side-load DLL + .log blobQ4Side-load DLL basenameGOOD
T1071.001 / T1090Plaintext WebSocket C2 on 5188/5198Q5WebSocket beaconPARTIAL — port heuristic needs a tenant baseline
T1021.001 / T1136.001 / T1547RDP backdoor account + autologonQ6Backdoor account, Winlogon writeGOOD
T1555.003 / T1056.001Browser credential sweep, keylogger, clipboard hijackQ7PARTIAL — kill-then-read ordering not enforced in-query
T1113 Screen CaptureScreenshot plugin (command 0x1565)GAP — in-process API activity, no distinct host artifact; rely on C2 detection
T1070.001 / T1070.004Event-log wipe, IE history purge, self-destructQ8GOOD
T1562.001 Impair DefensesPPL abuse, signed-driver AV kill, WDAC policy dropQ9ClipUp PPL, transient driver serviceGOOD
T1543.003 Service PersistenceRandom .BAT watchdog, service restart loopQ10PARTIAL — random-name regex will miss non-alpha stems
T1548.002 UAC BypassShellExecuteExA("runas") self-relaunchGAP — no distinctive command line; detect via elevation-without-consent-prompt IOAs if available
T1195.003 Supply ChainCertificate theft at the CAGAP — not detectable from your endpoints; addressed by S12 hardening and the S10 audit checklist

Validation. Coverage above is claimed only after the Section 11 gates pass: G1 proves AuthenticodeHashData is actually populated (without it Q2's "PARTIAL" is really a GAP), G3 proves Q2 is reviewable rather than a wall of installers, and G4–G6 prove Q3, Q5 and Q6 fire on real activity. Re-run G1 after any ingest or field-filtering change — the signature fields are the first thing a bandwidth-trimming exercise removes, and their loss is silent.

16

Hunt Summary Ticket

TITLE      GoldenEyeDog / CylindricalCanine - stolen DigiCert EV code-signing certificate abuse
SEVERITY   Critical (trust-chain compromise; active since April 2026, C2 live as of July 2026)
SCOPE      All Windows endpoints. Priority: customer-support, CX, helpdesk and Web3/crypto
           support staff; any host running publisher-based application allowlisting.
HYPOTHESIS A validly signed binary in our estate is malicious - signed with a certificate
           obtained through the DigiCert support-portal compromise, or with the next one
           the actor steals. Signature validity is an attribute, not a verdict.
QUERIES    Q1  known stolen-cert-signed sample hashes            (run first, zero-tolerance)
           Q2  signed + rare + user-writable path                (the generalising hunt)
           Q3  screenshot-lure .com/.scr from chat or archive    (the delivery artifact)
           Q4  side-load DLL + encrypted .log blob
           Q5  C2 domains and plaintext WebSocket 5188/5198
           Q6  RDP backdoor: local admin + Winlogon autologon
           Q7  browser credential sweep / keylog / clipboard config
           Q8  anti-forensics: log wipe, ClearMyTracksByProcess, self-destruct
           Q9  RONINGLOADER: ClipUp -ppl, driver services, TrustedInstaller injection
           Q10 random-named .BAT watchdog + SOCKS relay
DO FIRST   1. Run Q1 across full retention. Any hit is an incident, not a tuning task.
           2. Run gate G1 - if AuthenticodeHashData is empty, Q2 is blind. Fix ingest.
           3. Block uu[.]goldeyeuu[.]io, wk[.]goldeyeuu[.]io, api[.]keensie[.]com and
              qaqkongtiao[.]com at DNS and egress.
           4. Run the S10 certificate-trust audit checklist even with zero endpoint hits.
FINDINGS   (record hosts, users, sample hashes, and any NEW certificate serial observed)
GAPS       - Falcon does not expose signer CN or certificate serial; the subject/serial
             half of this hunt requires Sysmon EventID 1 or Get-AuthenticodeSignature.
           - No certificate thumbprints were published by any source; serials only.
           - Screenshot plugin and UAC-bypass command have no distinct host artifact.
           - Certificate theft at the CA is not detectable from our endpoints at all.
ACTIONS    - Replace publisher-name WDAC/AppLocker trust with certificate-specific trust.
           - Enforce application control for support / CX staff.
           - Block executable content in ticketing AND live-chat upload paths.
           - Confirm CRL/OCSP reachability from every endpoint and build agent.
           - Audit any internal "view as customer" impersonation feature for exposed secrets.
OWNER      REPLACE_WITH_HUNT_OWNER
VERSION    v0.1 - 2026-07-20
17

Changelog

v0.22026-07-24CQL correctness pass. All table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.
v0.12026-07-20Initial pack. Built from the Expel CylindricalCanine disclosure (2026-07-17) and the accompanying 1,925-row IOC CSV, corroborated by The Hacker News and GBHackers, with the RONINGLOADER branch from Elastic Security Labs. Ten CQL hunts, eight custom IOA recommendations, five deployable playbooks. Certificate serials sourced from the published IOC CSV; no thumbprints were published and none were invented. Pre-publish review added explicit // TUNING: exclusion blocks to all four FP-medium hunts (Q2, Q5, Q7, Q10); Q7 and Q10 previously carried their false-positive discriminators only in prose.
18

References

TierSourceUsed forAccessed
PRIMARYExpel — Introducing CylindricalCanine: the GoldenEyeDog subgroup responsible for the April DigiCert incidentMalware analysis, C2 infrastructure, plugin/dispatch tables, hardcoded keys, RDP-backdoor mechanics, Suricata coverage2026-07-20
PRIMARYExpel — Golden_Gh0st_IOCs.csv (expel-intel)Per-sample hashes, signer organisations and certificate serials2026-07-20
CORROBORATINGThe Hacker News — GoldenEyeDog Subgroup Linked to DigiCert Breach and Code-Signing Certificate TheftIncident timeline, revoked-CA list, certificate counts, Web3 support-chat campaign2026-07-20
CORROBORATINGGBHackers — GoldenEyeDog Threat Group Behind DigiCert Code-Signing Certificate AttackIndependent confirmation of the intrusion path and SmartScreen-bypass motive2026-07-20
PRIMARYElastic Security Labs — RONINGLOADER: DragonBreath's New Path to PPL AbuseRONINGLOADER stages, service and registry artifacts, Defender/PPL abuse chain2026-07-20
CORROBORATINGThe Hacker News — Dragon Breath Uses RONINGLOADER to Disable Security Tools and Deploy Gh0st RATRONINGLOADER context and EDR-killer tooling2026-07-20

Every atomic indicator in this pack was traced back to one of the cited sources above at build time; nothing is included that a source does not state.

Generated 2026-07-20 · HuntPack pipeline (huntpack-agent-v2 → review-v2). Defensive content only.