JadeProx — TriBack Loader, AdaptixC2 and the Beagle Backdoor
Executive Summary
JadeProx is a China-nexus espionage cluster that Group-IB exposed on 2026-07-23 after the operators left a Python HTTP server with directory listing enabled on an Alibaba Cloud Singapore instance. The open directory held bash history, a full post-exploitation toolkit, webshell paths against live victims and staged phishing packages. The objective is access and collection: government ministries, a public hospital medical-imaging estate, education infrastructure across Asia, and a legislature and municipal tax portal in Latin America.
The artefact that ties every intrusion together is TriBack Loader, a previously undocumented Windows loader. Every build is the same three-file triad: a legitimate, signed vendor executable, a malicious DLL that shares the name of a real dependency, and an encrypted companion payload with a .dat or .log extension. The DLL is sideloaded when the signed binary runs; it reverses the payload bytes, XOR-decrypts them with a rolling key, and executes the resulting shellcode through Win32 callback primitives that EDR watches less closely than CreateThread — InitOnceExecuteOnce, a TimerQueue callback, and EtwpCreateEtwThread, an undocumented thread-creation routine resolved from ntdll at runtime. Two of the four variants deliver AdaptixC2; a Claude-themed variant uses DonutLoader to run the Beagle backdoor, first documented by Sophos X-Ops.
The highest-value defensive angle is the file layout, not the filenames. The signed host binary changes between variants (a Microsoft Service Hub CLR host, a G DATA updater, a Microsoft Malware Protection utility) and so do the DLL names. What does not change is the shape: a signed vendor executable running from a user-writable, temporary or Startup directory with an encrypted companion file sitting beside it. Detection built on that shape survives the next build; detection built on avk.dll does not.
The second-highest-value angle is the network. The cluster registered update-crowdstrike[.]com, update-trellix[.]com and update-sentinelone[.]com on one shared IP. Nothing in a normal estate resolves those names. They are effectively zero-false-positive and they are the one indicator class that catches a host you have no endpoint visibility into. Section 8 gives them their own card.
Defender priority: block the confirmed C2 set at DNS and proxy today, then run Q1 and Q4 across a 90-day window. A hit on Q1 is a confirmed compromise until proven otherwise — there is no benign path to a security-vendor-lookalike domain. Treat any signed vendor binary executing out of the per-user Startup folder as an active TriBack triad and pull the directory listing before you isolate.
Source Review & Web Hunter Notes
| Tier | Source | Key finding | Carry forward |
|---|---|---|---|
| Tier 1 | Group-IB — JadeProx: Tracing a China-nexus Operation Through an OPSEC Mistake (2026-07-23) | Primary research. Open-directory contents, bash-history intrusion timeline, all four TriBack variants, XOR keys, AdaptixC2 beacon configs, full domain/IP/MD5 IOC set, ATT&CK mapping. | Yes — primary |
| Tier 1 | Sophos X-Ops — Donuts and Beagles: Fake Claude site spreads backdoor | Independent analysis of the Claude-themed chain. Beagle backdoor capability set, AES C2 key, TCP/443 and UDP/8080 transport, the shared XOR key that links builds back to February 2026. | Yes — primary |
| Tier 1 | SophosLabs IoCs repository — Beagle_IOCs.csv | Vendor-published SHA-256 set for the archives, MSI droppers, sideloaded DLLs, first-stage shellcode, AdaptixC2 shellcode and the Beagle backdoor. Also names the encrypted companion file Windows.log. | Yes — hashes |
| Tier 2 | The Hacker News — China-Nexus JadeProx Uses New TriBack Loader… (2026-07-23) | Corroborates the Group-IB findings and independently confirmed the four exploited CVEs against NVD. Restates the domain/IP block list. | Partial — corroboration only |
| Tier 2 | Infosecurity Magazine — Fake Claude AI Site Drops Beagle Backdoor on Windows Users | Independent write-up of the Sophos research. Confirms the G DATA-signed updater, avk.dll sideload and the Cloudflare-delivery / Alibaba-C2 split. | Partial — corroboration only |
Research decisions
- Prevent/critical requires two independent vendors. Only indicators appearing in both the Group-IB report and the Sophos material are shipped at
action=prevent. Group-IB-only infrastructure (sylverixstrategy[.]com,vertextrust-advisors[.]com) ships ataction=detect. - Shared-hosting IPs are deliberately excluded from the block list. The Cloudflare address fronting one C2 and the two DigitalOcean addresses are multi-tenant. Blocking them causes collateral outage and catches nothing the domain block does not already catch. They appear in section 4 at
enrichonly. - The legitimate signed host binaries are not blocked. The G DATA updater hash published by Sophos is a genuine, correctly signed vendor file that the actor reuses. It is listed as a hunt anchor with an explicit do-not-block marker; blocking it breaks a real product.
- No aggregator-only indicators. Everything atomic in this pack traces to a saved snapshot of a Tier-1 vendor source. Aggregators were used to confirm the story, never to source an indicator.
- Prompt-injection review: every fetched page was scanned for text addressed to an automated agent. None of the five sources contained agent-directed instructions, embedded commands, or requests to fetch further URLs. No source was disqualified.
- Perishability: the staging server was already offline when Group-IB published. Domain indicators outlive the IPs; the behavioral queries outlive both.
Hunt Brief & Attack Chain
Attack chain
| # | Step | Observed behavior | Telemetry | Hunt angle |
|---|---|---|---|---|
| 1 | Initial access — spear-phish | ZIP containing a LNK, a decoy PDF and a nested _CL_###### folder holding the triad. Lures: a beverage-company account statement aimed at a Latin American legislature; a "Claude-Pro Relay" technical overview. | Mail gateway, ZipFileWritten | Q7 — nested _CL_ path |
| 1b | Initial access — malvertising | Cloned Claude site serves an approximately 505 MB ZIP and an MSI installer; Chinese-language installer strings. | DnsRequest, ZipFileWritten | Q3 — distribution domain |
| 1c | Initial access — exploitation | Nuclei run with critical-severity templates only against a scan list of 14,653 education URLs; follow-up exploitation of four CVSS 9.8 flaws; webshells planted on an exposed Java management interface. | WAF, web server logs | Section 7 — native hunts |
| 2 | Execution | LNK triggers a VBS orchestrator. One variant substitutes ftp.exe -s: to run a script staged as script.dat. | ProcessRollup2 | Q6, Q9 |
| 3 | Persistence | VBS drops the whole triad into the per-user Startup folder. The MSI variant does the same behind a UAC prompt, then self-deletes via a double-extension ~del.vbs.bat. | ProcessRollup2, PeFileWritten | Q5, Q8, Q10 |
| 4 | Defense evasion — sideloading | Signed vendor EXE loads the attacker DLL from its own directory. Host binaries seen: a Microsoft Service Hub CLR host, a G DATA updater renamed NOVUpdate.exe, and a Microsoft Malware Protection copy-accelerator utility. | ProcessRollup2, PeFileWritten | Q4, Q11 |
| 5 | Defense evasion — decrypt | DLL export reverses the .dat/.log bytes then applies a rolling XOR with offset. Two 32-character keys are reused across variants 2, 3 and 4 — the strongest correlation anchor in the campaign. | Memory / manual analysis | Gap — see section 15 |
| 6 | Execution — callback primitive | Shellcode is fired via InitOnceExecuteOnce (variant 1), a TimerQueue callback (variant 2), or EtwpCreateEtwThread resolved from ntdll by GetModuleHandleA + GetProcAddress (variant 3). | Not exposed in Falcon event stream | Gap — IOA candidate |
| 7 | Command & control | AdaptixC2 HTTP beacon (POST /api/v1/status, /updates/check.php, /content.html, stale Firefox 20 user-agent) or Beagle over TCP/443 and UDP/8080 with a hardcoded AES key. | NetworkConnectIP4, DnsRequest, proxy | Q1, Q2, Q3, Q12 |
| 8 | Lateral movement / tunnelling | iox, suo5 (SOCKS5-over-HTTP through webshells), Neo-reGeorg, a garbled NPS build, plus fscan renamed to sys.log. | NetworkListenIP4, web logs | Section 7 |
| 9 | Credential access | Attempted download of a Chromium App-Bound-Encryption credential tool (failed in the captured history). | ProcessRollup2 | Partial coverage |
Hunt hypotheses (fidelity-ordered)
| H | Hypothesis | MITRE | Telemetry | Expected FP source | Conf |
|---|---|---|---|---|---|
| H1 | A host in the estate resolved a security-vendor-impersonation update domain. | T1071.001, T1583.001 | DnsRequest | None. No benign resolver path exists. | High |
| H2 | A host resolved or connected to named JadeProx C2 or distribution infrastructure. | T1071.001 | DnsRequest, NetworkConnectIP4 | Security-tool sandbox detonation from a scanning host. | High |
| H3 | A signed vendor binary known to be abused by TriBack executed from a user-writable, temp or Startup directory. | T1574.001, T1218 | ProcessRollup2 | Vendor installers staging to %TEMP% during a genuine upgrade. | High |
| H4 | Any executable persists from the per-user Startup folder — the campaign-agnostic form of H3. | T1547.001 | ProcessRollup2 | Legitimate consumer software, updaters, conferencing clients. | Medium |
| H5 | A DLL matching a TriBack masquerade name was written outside its legitimate vendor directory. | T1036.005, T1574.001 | PeFileWritten | Developer machines building .NET apps that emit their own hostfxr.dll. | High |
| H6 | ftp.exe was used as a script interpreter via -s:. | T1218 | ProcessRollup2 | Legacy batch FTP jobs on file-transfer servers. | High |
| H7 | A nested _CL_###### staging directory appears in a command line or written path. | T1027.013 | ProcessRollup2, file-write events | None observed. | High |
| H8 | A double-extension self-delete artefact (~del.vbs.bat style) executed. | T1070.004 | ProcessRollup2 | Rare. Some installers use ~-prefixed temp scripts. | High |
| H9 | A script host ran from an archive-extraction, Downloads or Startup path. | T1059.005, T1204.002 | ProcessRollup2 | Enterprise logon scripts, legacy line-of-business VBS. | Medium |
| H10 | msiexec spawned a script host or LOLBIN — the MSI-to-Startup persistence path. | T1218.007, T1547.001 | ProcessRollup2 | Packaged enterprise software with custom actions. | Medium |
| H11 | A process launched from a Startup or temp path beacons outbound on 443 or 8080. | T1071.001, T1573.001 | NetworkConnectIP4 | Updaters and telemetry agents on 443. | Medium |
| H12 | A published JadeProx file hash executed or was written in the estate. | T1204.002 | ProcessRollup2, PeFileWritten | Malware-analysis workstations. | High |
Consolidated IOC Table
Confidence high = named in two independent primary vendor reports. medium = one primary vendor. Action follows the confidence, not the drama: shared-hosting addresses never get a block action regardless of how good the intel is.
| Type | Value | Conf | Action | Context | Expiry |
|---|---|---|---|---|---|
| domain | claude-pro[.]com | high | detect | Cloned Claude site; serves the ZIP and MSI that carry the triad. | 2027-01-24 |
| domain | license[.]claude-pro[.]com | high | detect | Beagle backdoor C2. TCP/443 and UDP/8080, AES-encrypted. | 2027-01-24 |
| domain | update-crowdstrike[.]com | high | detect | Security-vendor impersonation. Shares one IP with the other two lookalikes. | 2027-01-24 |
| domain | update-trellix[.]com | high | detect | C2 for a standalone MSI variant; observed on port 8080. | 2027-01-24 |
| domain | update-sentinelone[.]com | high | detect | Security-vendor impersonation, same registrar and IP. | 2027-01-24 |
| domain | gouvvbo[.]top | high | detect | AdaptixC2 C2 for the Latin America variant; also hosted a fake municipal tax portal. | 2027-01-24 |
| domain | sylverixstrategy[.]com | medium | detect | AdaptixC2 C2 recovered from the open-directory beacon config. Single primary source. | 2027-01-24 |
| domain | vertextrust-advisors[.]com | medium | detect | Fake advisory-firm site providing reputation cover on shared C2 infrastructure. | 2027-01-24 |
| domain | dlrz-web[.]oss-cn-beijing[.]aliyuncs[.]com | medium | hunt | Operator-controlled Alibaba OSS bucket staging Go proxy and mining binaries. Parent service is legitimate and heavily shared — hunt the full hostname only. | 2026-10-24 |
| ipv4 | 8.217.190[.]58 | high | detect | Resolves the Beagle C2. Alibaba US (AS45102) — shared provider, dedicated-enough to alert on. | 2027-01-24 |
| ipv4 | 192.252.186[.]62 | medium | detect | Hosts all three security-vendor lookalike domains. | 2026-10-24 |
| ipv4 | 43.106.71[.]28 | high | hunt | Alibaba Singapore staging server, open directory on port 8000. Offline at publication — hunt historically, do not block. | 2026-10-24 |
| ipv4 | 104.21.60[.]96 | medium | enrich | Cloudflare edge — never block. Fronted one AdaptixC2 domain. Context only. | 2026-08-24 |
| ipv4 | 161.35.236[.]255 | medium | enrich | DigitalOcean, multi-tenant. Context only. | 2026-08-24 |
| ipv4 | 178.128.108[.]89 | medium | enrich | DigitalOcean, multi-tenant. Hosted the fake advisory site. Context only. | 2026-08-24 |
| filename | hostfxr.dll, avk.dll, MpClient.dll | high | hunt | Masquerading TriBack loader DLLs. All three are also real dependency names — hunt on location, not name alone. | 2027-01-24 |
| filename | NOVUpdate.exe.dat, Windows.log, script.dat | high | hunt | Encrypted companion payloads. Byte-reversed then XOR-decrypted. | 2027-01-24 |
| path | _CL_177387, _CL_177530 | high | hunt | Nested staging folder inside the phishing archive. Generalise to _CL_ + 5-8 digits. | 2027-01-24 |
| artefact | ~del.vbs.bat | high | hunt | Double-extension self-delete script created by the MSI variant. | 2027-01-24 |
| key | XOR keys pmm3jPpdu8NYvVQ5JxRnQdP2vhxAU3nn and Qby2RSGkGIHumNrDlbt1OEHV3y2dVh5b | high | pivot | Reused across variants 2, 3 and 4. The single best correlation anchor for finding new builds on VirusTotal. | 2027-01-24 |
| key | Beagle AES key beagle_default_secret_key_12345! | medium | pivot | Hardcoded in the backdoor. Looks like an unchanged default — useful for YARA, weak as a blocklist entry. | 2027-01-24 |
| network | AdaptixC2 URIs /api/v1/status, /updates/check.php, /content.html | high | hunt | Beacon HTTP profile from the decrypted config, paired with a Firefox 20 user-agent. | 2026-10-24 |
| cve | CVE-2018-11511, CVE-2021-24139, CVE-2021-31755, CVE-2021-32305 | high | detect | All CVSS 9.8, all attempted against internet-facing hosts. The Tenda flaw has been on the CISA KEV catalog since 2021-11-03. | 2027-01-24 |
Do not block the host binaries. The Microsoft Service Hub CLR host, the G DATA updater and the Microsoft Malware Protection copy-accelerator utility are genuine signed vendor files. They are the sideloading vehicle, not the malware. Blocking their hashes breaks working products and does nothing to the loader, which will simply pick a fourth signed binary.
Affected Surface & Telemetry Matrix
| Surface | Exposure | Required telemetry | Priority | Gap risk |
|---|---|---|---|---|
| Windows workstations | Phishing ZIP/LNK and malvertised MSI both land here. Full triad plus Startup persistence. | ProcessRollup2, PeFileWritten, ZipFileWritten, NetworkConnectIP4, DnsRequest | Critical | Low — standard Falcon coverage |
| Windows servers | Pivot target once SOCKS tunnels are established from a compromised workstation or webshell. | ProcessRollup2, NetworkListenIP4, UserLogon | High | Low |
| Internet-facing Java applications | Primary non-phishing entry. Exposed management interfaces exploited to plant webshells. | App server access logs, WAF, file-integrity monitoring on webroots | Critical | High — often outside EDR scope |
| Linux / appliance web servers | Host the webshells that suo5 and Neo-reGeorg tunnel through. | Falcon Linux sensor, auditd, webroot FIM | High | High — sensor coverage on appliances is usually partial |
| Perimeter DNS / proxy | Only place a host with no endpoint agent shows up. | DNS resolver logs, proxy logs with URI and user-agent | Critical | Medium — URI-level logging often not retained |
| Email gateway | ZIP+LNK+PDF-decoy delivery. | Attachment-type logs, archive-inspection verdicts | High | Medium |
| Medical imaging / OT-adjacent estates | Explicitly targeted. Typically unpatched, flat-networked and agent-light. | Network flow, segmentation logs | High | High — frequently no endpoint telemetry at all |
| Loader in-memory behavior | Callback-primitive execution and the XOR decrypt stage. | Not surfaced as a discrete Falcon event | Medium | Gap — memory-scan / IOA territory only |
ATT&CK Mapping
| Tactic | Technique | Observed behavior | Query / control |
|---|---|---|---|
| Reconnaissance | T1595.002 — Active Scanning: Vulnerability Scanning | Nuclei run with critical-severity templates only against a large education-sector URL list. | Section 7 · H-Immediate-8 |
| Resource Development | T1583.001 — Acquire Infrastructure: Domains | NameSilo registrations; Cloudflare fronting; security-vendor lookalikes on one IP. | Q1, Q2 · H-Strategic-14 |
| Initial Access | T1190 — Exploit Public-Facing Application | Four CVSS 9.8 CVEs attempted; webshells on an exposed Java management interface. | Section 7 · H-Near-8 |
| Initial Access | T1566.001 — Spearphishing Attachment | ZIP carrying LNK + decoy PDF + nested _CL_###### triad folder. | Q7 · H-Immediate-3 |
| Execution | T1204.002 — User Execution: Malicious File | LNK and MSI both require a user double-click; MSI additionally passes a UAC prompt. | Q10, Q13 |
| Execution | T1059.005 — Command and Scripting Interpreter: Visual Basic | VBS orchestrator pops the decoy, stages the triad and chains the next stage. | Q9 · H-Immediate-4 |
| Execution / Defense Evasion | T1218 — System Binary Proxy Execution | ftp.exe -s: used as a script runner; signed vendor EXEs used as loader hosts. | Q4, Q6 |
| Execution / Defense Evasion | T1218.007 — Msiexec | MSI installer plants the triad in Startup behind a UAC prompt. | Q10 · H-Near-7 |
| Persistence | T1547.001 — Registry Run Keys / Startup Folder | Whole triad dropped into the per-user Startup folder to survive reboot. | Q5 · H-Immediate-2 |
| Defense Evasion | T1574.001 — Hijack Execution Flow: DLL | Signed binary loads the attacker DLL from its own directory. Three different vendor binaries across four builds. | Q4, Q11 · H-Near-6 |
| Defense Evasion | T1036.005 — Masquerading: Match Legitimate Name or Location | Loader DLLs named after real dependencies; fscan renamed sys.log; NOVUpdate.exe is a renamed G DATA updater. | Q11 |
| Defense Evasion | T1140 — Deobfuscate/Decode Files or Information | Byte reversal then rolling XOR with offset on the .dat/.log payload. | Gap — IOA-1 |
| Defense Evasion | T1027.013 — Obfuscated Files or Information: Encrypted/Encoded File | Encrypted companion payload plus the nested _CL_###### path. | Q7 |
| Defense Evasion | T1070.004 — Indicator Removal: File Deletion | Double-extension ~del.vbs.bat deletes the VBS two seconds after execution. | Q8 |
| Defense Evasion | T1562.001 — Impair Defenses: Disable or Modify Tools | fuckaliyun.sh disables the cloud host-monitoring agent on the operator's own staging server. | Section 7 (Linux) |
| Credential Access | T1555.003 — Credentials from Web Browsers | Attempted download of a Chromium App-Bound-Encryption credential tool. | Partial |
| Command & Control | T1071.001 — Application Layer Protocol: Web Protocols | AdaptixC2 HTTP beacon with a fixed URI set and a stale Firefox user-agent. | Q1, Q2, Q3, Q12 |
| Command & Control | T1573.001 — Encrypted Channel: Symmetric Cryptography | Beagle encrypts with a hardcoded AES key over TCP/443 and UDP/8080. | Q12 · Section 7 |
| Command & Control | T1090.001 — Proxy: Internal Proxy | iox, suo5, Neo-reGeorg and a garbled NPS build relay traffic through compromised hosts. | Section 7 · H-Strategic-13 |
| Command & Control | T1105 — Ingress Tool Transfer | Toolkit pulled directly from public repositories onto the staging server, then served to victims over HTTP on a high port. | Q12 |
Native Audit-Log Hunts (non-CQL)
Proxy / web gateway
- Search request logs for the AdaptixC2 beacon URI set —
POST /api/v1/status,/updates/check.php,/content.html— to any external host. Individually these are unremarkable; the same client hitting all three on a fixed interval is not. - Filter on the beacon user-agent
Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20121202 Firefox/20.0. A 2012 Firefox build string in 2026 is a configuration artefact, not a browser. - Look for an
X-Beacon-Idrequest header. It is not a standard header and appears in the recovered AdaptixC2 HTTP profile. - Alert on any newly registered domain matching
update-*,download-*,patch-*orlicense-*concatenated with a security-vendor brand. Feed the pattern to your brand-monitoring and certificate-transparency watch.
DNS resolver
- Query resolver logs for the full campaign domain set in section 4 over the longest retention you hold. The staging infrastructure was live from roughly February to April 2026, so a 30-day window will miss it.
- Flag NXDOMAIN storms against
.topand freshly registered.comnames from a single client — the fallback pattern once C2 is sinkholed.
Email gateway
- Search archived mail for ZIP attachments whose listing contains a folder named
_CL_followed by five to eight digits, or a LNK plus PDF plus DLL in the same archive. - Pull messages carrying an account-statement or software-technical-overview decoy PDF alongside an executable-bearing archive.
- Check whether your gateway inspects inside ZIP archives at all. If archive inspection is off, every query in this pack is a compensating control for a delivery gap you can close in an afternoon.
Windows endpoint (Sysmon / native)
- Sysmon Event ID 7 (Image Loaded): a signed vendor EXE loading an unsigned or differently-signed DLL from its own directory. This is the single cleanest sideloading signal and Falcon does not expose a direct equivalent.
- Sysmon Event ID 11 (File Create): files matching
*.exe.dat,*.exe.logorWindows.logcreated in the same directory as an executable. - Enumerate every per-user and all-users Startup folder for an executable with a same-stem companion file. The playbook in section 13 does this estate-wide.
- Event ID 4688 with a parent of
msiexec.exeand a child ofwscript.exe,cscript.exeorftp.exe.
Linux / Java application servers
- File-integrity monitoring across all webroots and servlet deployment directories.
suo5and Neo-reGeorg both require a planted webshell to function. - Confirm no Java management or monitoring interface is reachable from the internet. That was the confirmed entry route for the healthcare intrusion.
- Grep application access logs for long-lived POST sessions with large symmetric byte counts to a single URI — the SOCKS-over-HTTP tunnel signature.
- Audit for unexpected listeners and for binaries renamed to log-file names (a scanner renamed
sys.log, a tunnel binary renamedmail.log). Check the file type, not the extension. - Verify your cloud host-monitoring agents are actually reporting. The operators shipped a script specifically to silence one.
CrowdStrike LogScale CQL Hunt Queries
None of these queries carry an in-query time filter. Set the window with the console time picker — the intended lookback is recorded in each card as a // LOOKBACK: comment. For this campaign use 90 days minimum; the staging infrastructure was live from February 2026.
Looks for: any DNS resolution of the three fake security-vendor update domains registered by this cluster. There is no benign path to these names — no vendor ships updates from update-<vendor>.com. Run this first. A single hit is a confirmed compromise until you prove otherwise.
// HUNT: JadeProx security-vendor impersonation C2 resolution // MITRE: T1071.001, T1583.001 | CONF: high FP: low COST: low // REQUIRES: DnsRequest telemetry // FALSE POSITIVES: none expected; no legitimate resolver path exists for these hostnames // LOOKBACK: 90d (set in the console time picker) #event_simpleName=/^(DnsRequest|SuspiciousDnsRequest)$/ | DomainName=/^([a-z0-9_-]+\.)*update-(crowdstrike|trellix|sentinelone)\.com$/i | table([@timestamp, aid, ComputerName, UserName, ContextBaseFileName, DomainName]) | sort(@timestamp, order=desc, limit=500)
Looks for: the pattern rather than the three known names — an update/download/patch/licence prefix bolted onto a security-vendor brand. This is what catches the fourth lookalike the actor registers next month. FP: medium — the vendors' own genuine hostnames match the shape, so the tuning line below is mandatory before this goes anywhere near an alert.
// HUNT: Security-vendor brand lookalike domain resolution (generalised) // MITRE: T1583.001 | CONF: medium FP: medium COST: medium // REQUIRES: DnsRequest telemetry // FALSE POSITIVES: the vendors' own update and CDN hostnames match this shape // TUNING: append the exclusion stage below to drop every genuine vendor apex, then baseline // TUNING: the survivors for a week before promoting to an alert // LOOKBACK: 90d #event_simpleName=/^(DnsRequest|SuspiciousDnsRequest)$/ | DomainName=/(update|download|patch|licen[cs]e|portal|support)[-.](crowdstrike|sentinelone|trellix|mcafee|sophos|fortinet|paloalto|trendmicro|kaspersky|bitdefender|eset|carbonblack|cylance|defender)[a-z0-9-]*\.[a-z]{2,12}$/i | DomainName!=/\.(crowdstrike|sentinelone|trellix|mcafee|sophos|fortinet|paloaltonetworks|trendmicro|kaspersky|bitdefender|eset)\.com$/i | groupBy([DomainName, ComputerName, aid], function=[count(as=Hits), max(@timestamp, as=LastSeen)], limit=1000) | sort(Hits, order=desc, limit=200)
Looks for: resolution of the remaining named campaign infrastructure — the cloned Claude distribution site, the Beagle C2 subdomain, both AdaptixC2 domains and the reputation-cover site. Projecting ContextBaseFileName tells you immediately whether a browser or a loader made the request.
// HUNT: JadeProx named C2 and distribution domain resolution // MITRE: T1071.001 | CONF: high FP: low COST: low // REQUIRES: DnsRequest telemetry // FALSE POSITIVES: a security research or sandbox host detonating the sample // LOOKBACK: 90d #event_simpleName=/^(DnsRequest|SuspiciousDnsRequest)$/ | DomainName=/^([a-z0-9_-]+\.)*(claude-pro\.com|sylverixstrategy\.com|gouvvbo\.top|vertextrust-advisors\.com)$/i | table([@timestamp, aid, ComputerName, UserName, ContextBaseFileName, DomainName]) | sort(@timestamp, order=desc, limit=500)
Looks for: the three signed vendor executables the campaign uses as loader hosts, executing from anywhere other than their real install directory. These binaries belong in Program Files. Seeing one run out of Startup, AppData, ProgramData, Temp, Downloads or a public folder is the TriBack triad. Project SHA256HashData so you can immediately confirm the host binary is the genuine signed file and pivot to the DLL beside it.
// HUNT: Abused signed vendor binary executing outside its install path (TriBack host) // MITRE: T1574.001, T1218, T1036.005 | CONF: high FP: low COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: a genuine vendor installer staging its own updater into %TEMP% mid-upgrade // LOOKBACK: 90d #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^(NOVUpdate|NOVupdate|avk|ServiceHub\.DataWarehouseHost|MpCopyAccelerator|MpCmdRun)(\.exe)?$/i | ImageFileName=/(Programs.{0,4}Startup|AppData|ProgramData|Temp|Downloads|Users.{0,40}Public)/i | table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, SHA256HashData, CommandLine]) | sort(@timestamp, order=desc, limit=500)
Looks for: the campaign-agnostic version of Q4. Every TriBack variant that achieves persistence does it by dropping the triad into a Startup folder, and the filenames change per build. Sorted ascending so the rarest executables — the ones on one or two hosts — surface first. FP: medium — plenty of legitimate consumer software persists this way, so read this as a rarity ranking rather than an alert. Anything appearing on fewer than three hosts deserves a look.
// HUNT: Rare executable persisting from a Startup folder (TriBack-agnostic) // MITRE: T1547.001 | CONF: medium FP: medium COST: medium // REQUIRES: ProcessRollup2 // FALSE POSITIVES: conferencing clients, vendor updaters and consumer utilities legitimately autostart // TUNING: exclude your approved autostart estate by name, e.g. append // TUNING: | FileName!=/^(teams|onedrive|slack|zoom|steam|discord|dropbox|greenshot)\.exe$/i // TUNING: then investigate any FileName seen on fewer than 3 distinct hosts // LOOKBACK: 90d #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | ImageFileName=/Programs.{0,4}Startup/i | FileName=/\.(exe|scr|com|pif)$/i | groupBy([FileName], function=[count(aid, distinct=true, as=HostCount), count(as=Execs), selectFromMax(field=@timestamp, include=[ComputerName, UserName, ImageFileName, SHA256HashData])], limit=2000) | sort(HostCount, order=asc, limit=200)
Looks for: the variant-3 execution trick — ftp.exe -s: pointed at a file staged with a .dat extension, so a script runs under a signed Microsoft networking binary instead of a script host. The command line also carries the nested _CL_ path, which cross-confirms Q7.
// HUNT: ftp.exe -s: script-file execution (LOLBIN proxy execution) // MITRE: T1218 | CONF: high FP: low COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: legacy scripted FTP jobs on file-transfer servers; scope these out by host role // LOOKBACK: 90d #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^ftp(\.exe)?$/i | CommandLine=/\s-s\s*:/i | table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine]) | sort(@timestamp, order=desc, limit=500)
Looks for: the distinctive nested folder name the phishing archives use to hide the triad one level down from the decoy. Coalescing the command line, the written path and the image path means one query covers execution and file-drop events together.
// HUNT: JadeProx _CL_###### nested staging directory // MITRE: T1027.013, T1566.001 | CONF: high FP: low COST: medium // REQUIRES: ProcessRollup2 plus file-write telemetry // FALSE POSITIVES: none observed; the token is campaign-specific // LOOKBACK: 90d #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten|ZipFileWritten)$/ | TargetFileName := coalesce([TargetFileName, CommandLine, ImageFileName]) | TargetFileName=/_CL_\d{5,8}/i | table([@timestamp, aid, ComputerName, UserName, #event_simpleName, TargetFileName]) | sort(@timestamp, order=desc, limit=500)
Looks for: the tilde-prefixed double-extension batch file the MSI variant writes to erase its own VBS two seconds after execution. The pattern is generalised beyond the exact observed name so a rename does not evade it.
// HUNT: Tilde-prefixed double-extension self-delete script // MITRE: T1070.004 | CONF: high FP: low COST: low // REQUIRES: ProcessRollup2 plus file-write telemetry // FALSE POSITIVES: rare; a few installers use tilde-prefixed temp scripts during cleanup // LOOKBACK: 90d #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/ | TargetFileName := coalesce([TargetFileName, CommandLine, ImageFileName]) | TargetFileName=/(~del[\w.-]*\.(bat|cmd)|\.(vbs|js|pdf|doc|docx|xls)\.(bat|cmd|exe|scr))/i | table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, #event_simpleName, TargetFileName]) | sort(@timestamp, order=desc, limit=500)
Looks for: the VBS orchestrator stage. Every variant except the DeviceSync build routes through wscript or cscript executing a script that was extracted from an archive, downloaded, or planted in Startup. FP: medium — enterprise logon scripts and legacy line-of-business VBS will surface. Scope by user population first: a script host running out of a Downloads folder for a non-developer is the signal.
// HUNT: Script host executing from a user-writable staging path (VBS orchestrator) // MITRE: T1059.005, T1204.002 | CONF: medium FP: medium COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: logon scripts, packaging tooling, legacy VBS line-of-business apps // TUNING: exclude your logon-script share and packaging hosts, e.g. append // TUNING: | CommandLine!=/(netlogon|sysvol|sccmcache|ccmcache)/i and scope to non-IT user groups // LOOKBACK: 90d #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^(wscript|cscript|mshta)(\.exe)?$/i | CommandLine=/(Programs.{0,4}Startup|AppData.{0,4}Local.{0,4}Temp|Downloads|Desktop|_CL_\d{5,8})/i | table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine]) | sort(@timestamp, order=desc, limit=500)
Looks for: the malvertised-MSI persistence path. The installer runs a VBScript custom action that plants the triad in Startup and creates the desktop shortcut. FP: medium — packaged enterprise software legitimately uses script custom actions, so pair this with the parent MSI's signing status and whether the child touches a Startup path.
// HUNT: MSI custom action launching a script host or LOLBIN child // MITRE: T1218.007, T1547.001 | CONF: medium FP: medium COST: low // REQUIRES: ProcessRollup2 // FALSE POSITIVES: legitimate packaged software with VBScript or PowerShell custom actions // TUNING: keep only children whose command line touches an autostart path, e.g. append // TUNING: | CommandLine=/(Programs.{0,4}Startup|CurrentVersion.{0,4}Run)/i // LOOKBACK: 90d #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | ParentBaseFileName=/^msiexec\.exe$/i | FileName=/^(wscript|cscript|mshta|ftp|regsvr32|rundll32|powershell|pwsh)(\.exe)?$/i | table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine]) | sort(@timestamp, order=desc, limit=500)
Looks for: the TriBack DLL hitting disk. All three names are real dependency names, so the location does the work: a hostfxr.dll in Program Files is the .NET host, and a hostfxr.dll in a Startup folder is the loader. FP: medium — .NET developer machines emit their own hostfxr.dll into build output directories, which is the dominant benign hit.
// HUNT: TriBack masquerading DLL written outside a legitimate vendor path // MITRE: T1036.005, T1574.001 | CONF: high FP: medium COST: low // REQUIRES: PeFileWritten or NewExecutableWritten // FALSE POSITIVES: .NET build output on developer workstations emits hostfxr.dll legitimately // TUNING: exclude vendor and build directories, e.g. append // TUNING: | TargetFileName!=/(Program Files|Windows.{0,4}(System32|SysWOW64|WinSxS|assembly)|dotnet|\\bin\\(Debug|Release))/i // LOOKBACK: 90d #event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/ | TargetFileName=/(hostfxr|avk|MpClient|MpCopyAccelerator)\.dll$/i | TargetFileName=/(Programs.{0,4}Startup|AppData|ProgramData|Temp|Downloads|Users.{0,40}Public)/i | table([@timestamp, aid, ComputerName, UserName, ContextBaseFileName, TargetFileName, SHA256HashData]) | sort(@timestamp, order=desc, limit=500)
Looks for: external egress on the two ports this campaign uses — Beagle speaks TCP/443 and UDP/8080, and one MSI variant reported to its C2 on 8080 — attributed to the process names that carry the loader. Aggregating by first-seen and last-seen turns a connection list into a beacon-lifetime view. FP: medium — script hosts and updaters legitimately reach 443. The distinguishing feature is a long, steady connection count to a single external address from a process that has no business talking to the internet at all.
// HUNT: External beacon egress from a TriBack loader host process // MITRE: T1071.001, T1573.001, T1105 | CONF: medium FP: medium COST: high // REQUIRES: NetworkConnectIP4 // FALSE POSITIVES: legitimate updaters and script-driven integrations reaching 443 // TUNING: drop your known-good egress destinations first, e.g. append // TUNING: add a second !cidr() stage covering your CDN and vendor egress ranges, // TUNING: then keep groups where Conns is large and FirstSeen to LastSeen spans multiple days // LOOKBACK: 30d (this one is expensive; widen only after tuning) #event_simpleName=/^NetworkConnectIP4$/ | !cidr(RemoteAddressIP4, subnet=["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","127.0.0.0/8","169.254.0.0/16"]) | in(RemotePort, values=[443, 8080]) | ContextBaseFileName=/^(NOVUpdate|NOVupdate|avk|ServiceHub\.DataWarehouseHost|MpCopyAccelerator|ftp|wscript|cscript|mshta)\.exe$/i | groupBy([aid, ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort], function=[count(as=Conns), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)], limit=2000) | sort(Conns, order=desc, limit=200)
Looks for: the vendor-published SHA-256 set — archives, MSI droppers, the three sideloaded DLLs, the first-stage and AdaptixC2 shellcode, and the Beagle backdoor. Retrospective hash hunting is the cheapest confirmation you have; run it before anything else if you only have time for one query besides Q1.
// HUNT: JadeProx / TriBack / Beagle known-bad SHA-256 set // MITRE: T1204.002, T1574.001 | CONF: high FP: low COST: low // REQUIRES: ProcessRollup2, PeFileWritten or ImageHash // FALSE POSITIVES: malware-analysis workstations and detonation sandboxes // NOTE: the legitimate signed host binaries are deliberately NOT in this list; see section 10 // LOOKBACK: 180d #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten|ImageHash)$/ | in(SHA256HashData, values=[ "d5590802bf0926ac30d8e31c0911439c35aead82bf17771cfd1f9a785a7bf143", "0a19870ba24aeb9d4b5dde091ef8071d76f8a5e43ac8c6f5b9f283020580a60a", "a3c5c7253c0b3ed92e86dc5661d8530a0e8acdf8768e80362e5fe897ccb6cd84", "99cb90a3cd46650b8b766c658b7af1b8bbe54a2ac7dcf61429686fd1c548395b", "7f50afef2d6e52a160cceb5f2c9945ce89b8e923836e0e550245a46509a98851", "2c30c20854e1f6a493aef344cea2d114c566ebae096c3c75508f4e03d5492288", "86a6ffa23e924d1afbfb31b55fe780916cf3c9a4f8c3165542fdd726783fc796", "586f27257d3eaee7d4bec9e9207c317a9caeded95eca3969739d7e8181d24620", "35feef0e6806c14f4ccdb4fceff8a5757956c50fb5ec9644dedae665304f9f96", "4457ed2e5ef770f70596735a6bac03f78e426a548335742ac761fba60f987a26", "46dea8c1af85134a7b15fc7168386eadd15474b1a6159567b24e83d8a30fc6ef", "e6d66d192a779f195426db94d2568c03a9bd0d2e8f1972aa32a0317940ae19c2", "8ac88aeecd19d842729f000c6ab732261cb11dd15cdcbb2dd137dc768b2f12bc", "33f0caec6f03727fc77ca656ab92cbf20fed53f0fe85a06ec9620aab5e8c9e27"]) | table([@timestamp, aid, ComputerName, UserName, #event_simpleName, FileName, ImageFileName, TargetFileName, SHA256HashData]) | sort(@timestamp, order=desc, limit=500)
CrowdStrike Custom IOA Recommendations
Three of the thirteen queries are clean enough to promote to Custom IOAs. The rest stay investigate-only. Build these under Endpoint security > Custom IOA rule groups, start every rule at Detect, and only move to Prevent after a two-week clean baseline.
IOA-1 · Sideload host binary outside its install path
| Field | Value |
|---|---|
| Rule type | Process Creation |
| Source from Q | Q4 |
| Image filename pattern | .*\\(NOVUpdate|NOVupdate|avk|ServiceHub\.DataWarehouseHost|MpCopyAccelerator)\.exe |
| Grandparent / path guard | Command line pattern .*(Startup|AppData|ProgramData|Temp|Downloads).* |
| Exclusion | Image filename under .*\\Program Files( \(x86\))?\\.* |
| Severity | High |
| Action | Detect first. Promote to Prevent once the vendor-installer staging FP is confirmed absent. |
IOA-2 · ftp.exe used as a script interpreter
| Field | Value |
|---|---|
| Rule type | Process Creation |
| Source from Q | Q6 |
| Image filename pattern | .*\\ftp\.exe |
| Command line pattern | .*\s-s\s*:.* |
| Exclusion | Scope the rule group to exclude designated file-transfer server host groups. |
| Severity | High |
| Action | Detect, then Prevent on workstation host groups only. |
IOA-3 · Tilde double-extension self-delete script
| Field | Value |
|---|---|
| Rule type | File Creation |
| Source from Q | Q8 |
| File path pattern | .*\\~del[\w.-]*\.(bat|cmd) |
| Severity | Medium |
| Action | Detect. This is an evidence-destruction signal — its value is that it fires during, not after, the incident. |
Not promoted, and why
- Q1 / Q3 (domain resolution) — better served by Falcon IOC Management domain entries and a DNS/proxy block than by a Custom IOA. Import the CSV in section 10 instead.
- Q5, Q9, Q10, Q11, Q12 — FP medium. These need per-environment tuning before an IOA is safe; run them as scheduled searches for two weeks first.
- Q2 — deliberately broad, intended for periodic hunting rather than continuous alerting.
- The XOR decrypt and callback-primitive stages — no Custom IOA rule type reaches them. They are memory-behavioral and belong to the sensor's own on-sensor ML and memory scanning, not to a rule you can write. Treat this as a known ceiling, not a gap you can close with more queries.
Machine-Readable IOC Appendix
Read before importing. Every value below traces to a saved snapshot of a primary vendor report. Nothing here is inferred, and nothing here is a shared-hosting address. Two-vendor-corroborated infrastructure carries severity=critical; single-vendor infrastructure is downgraded to high. Set the action column to prevent only after you have confirmed your own resolvers do not legitimately touch these names.
type,value,action,severity,expiration,description,tags domain,claude-pro.com,prevent,critical,2027-01-24,JadeProx cloned Claude distribution site,campaign:JadeProx domain,license.claude-pro.com,prevent,critical,2027-01-24,Beagle backdoor C2,campaign:JadeProx domain,update-crowdstrike.com,prevent,critical,2027-01-24,Security vendor impersonation C2,campaign:JadeProx domain,update-trellix.com,prevent,critical,2027-01-24,Security vendor impersonation C2,campaign:JadeProx domain,update-sentinelone.com,prevent,critical,2027-01-24,Security vendor impersonation C2,campaign:JadeProx domain,gouvvbo.top,prevent,critical,2027-01-24,AdaptixC2 C2 and fake municipal tax portal,campaign:JadeProx domain,sylverixstrategy.com,detect,high,2027-01-24,AdaptixC2 C2 single primary source,campaign:JadeProx domain,vertextrust-advisors.com,detect,high,2027-01-24,Reputation cover site on campaign infrastructure,campaign:JadeProx ipv4,8.217.190.58,detect,high,2027-01-24,Resolves the Beagle C2 hostname,campaign:JadeProx ipv4,192.252.186.62,detect,high,2026-10-24,Hosts all three security vendor lookalike domains,campaign:JadeProx ipv4,43.106.71.28,detect,high,2026-10-24,Staging server open directory on port 8000 now offline,campaign:JadeProx sha256,d5590802bf0926ac30d8e31c0911439c35aead82bf17771cfd1f9a785a7bf143,prevent,critical,2027-01-24,TriBack Loader sideloaded DLL avk.dll,campaign:JadeProx sha256,0a19870ba24aeb9d4b5dde091ef8071d76f8a5e43ac8c6f5b9f283020580a60a,prevent,critical,2027-01-24,TriBack Loader sideloaded DLL hostfxr.dll,campaign:JadeProx sha256,a3c5c7253c0b3ed92e86dc5661d8530a0e8acdf8768e80362e5fe897ccb6cd84,prevent,critical,2027-01-24,TriBack Loader sideloaded DLL MpClient.dll,campaign:JadeProx sha256,99cb90a3cd46650b8b766c658b7af1b8bbe54a2ac7dcf61429686fd1c548395b,prevent,critical,2027-01-24,Beagle backdoor payload,campaign:JadeProx sha256,7f50afef2d6e52a160cceb5f2c9945ce89b8e923836e0e550245a46509a98851,prevent,critical,2027-01-24,TriBack first stage shellcode,campaign:JadeProx sha256,2c30c20854e1f6a493aef344cea2d114c566ebae096c3c75508f4e03d5492288,prevent,critical,2027-01-24,AdaptixC2 shellcode,campaign:JadeProx sha256,86a6ffa23e924d1afbfb31b55fe780916cf3c9a4f8c3165542fdd726783fc796,detect,high,2027-01-24,Claude.msi dropper,campaign:JadeProx sha256,586f27257d3eaee7d4bec9e9207c317a9caeded95eca3969739d7e8181d24620,detect,high,2027-01-24,GolddTV.msi dropper,campaign:JadeProx sha256,35feef0e6806c14f4ccdb4fceff8a5757956c50fb5ec9644dedae665304f9f96,detect,high,2027-01-24,Claude-Pro-windows-x64.zip delivery archive,campaign:JadeProx sha256,4457ed2e5ef770f70596735a6bac03f78e426a548335742ac761fba60f987a26,detect,high,2027-01-24,Claude-Pro-Relay-Technical-Overview.zip archive,campaign:JadeProx sha256,46dea8c1af85134a7b15fc7168386eadd15474b1a6159567b24e83d8a30fc6ef,detect,high,2027-01-24,Spearphishing archive with account statement decoy,campaign:JadeProx sha256,e6d66d192a779f195426db94d2568c03a9bd0d2e8f1972aa32a0317940ae19c2,detect,high,2027-01-24,DeviceSync.zip archive,campaign:JadeProx sha256,8ac88aeecd19d842729f000c6ab732261cb11dd15cdcbb2dd137dc768b2f12bc,detect,high,2027-01-24,Encrypted TriBack companion payload,campaign:JadeProx sha256,33f0caec6f03727fc77ca656ab92cbf20fed53f0fe85a06ec9620aab5e8c9e27,detect,high,2027-01-24,Encrypted TriBack companion payload variant,campaign:JadeProx # DO NOT BLOCK be153ac4db95db7520049a4c1e5182be07d27d2c11088a2d768e931b9a981c7f # That SHA-256 is the LEGITIMATE signed vendor updater the loader sideloads into. # It is a hunt anchor only. Blocking it breaks a real product and stops nothing. # Shared hosting deliberately omitted: 104.21.60.96 Cloudflare, 161.35.236.255 and # 178.128.108.89 DigitalOcean. Alert on them if you must; never block them.
# Published as MD5 by the primary report. Use for VirusTotal pivots and # retro-hunting where only MD5 is retained. Falcon IOC Management prefers SHA-256. d99392248bdd7e351e63ead6733638ba hostfxr.dll df1f03a2534480a4838f62339bcb90d8 hostfxr.dll (second build) 88ac1c5fc9ee89491c70ea16131e264a avk.dll 3b3dd8f3a5e1ff85c63f2453ad270415 MpClient.dll 5222a31cf24f9f57ae3d1831f264a983 encrypted .dat companion payload 9e01bf0e28c86435cfb1afaef44238e9 encrypted .log companion payload 3fe9c84025f4401f8cd661675642c526 NOVUpdate.exe.dat 0e6d22c2a81d29b1f9d8395d44e19e53 script.vbs orchestrator bef0b8599d18acf1c74192ae9f198f85 pdf.vbs orchestrator c512adfa8743c3b3c776d4452f00c6c0 Claude.vbs orchestrator a4cdecc57a215243d279cdb065863308 script.dat (ftp.exe script stage) 35cdbf8a16da1245d574a0365cb87287 spearphishing LNK c1f45a0609c5c1bd2c21cad20703f126 Claude-Pro-Relay LNK bb5c88de9e04e6306260b9f3a4498933 spearphishing archive 7840f30b395fac347f85b38633c2d08d operator-staged sideload package c64eda499e2a21ad158841b9dbc7adc9 Claude-Pro-windows-x64.zip efac43473d7e87ede5176fe01a114abb Claude.msi 796f82a4833be330b1e35af63e55b597 GolddTV.msi 4faf4fd91d28e014b4f2362d6a7bb8ac DeviceSync.zip # Operator Linux toolkit staged on the exposed server 7c84e75817349adcdea9925b86f67670 iox port-forwarding tool 38e317af0fc0efcc88265f243a264542 suo5 SOCKS5-over-HTTP tunnel f360afe51b499a036c7be8c0ecc4dc89 Neo-reGeorg neoreg.py b8053bcd04ce9d7d19c7f36830a9f26b fscan renamed to a log filename ee5a2cdd4ce6ccb2e9279c9e13e8bd15 nuclei scanner aedd185b76ccda8d65dbd26204cc0e9a cloud agent disable script 0482d6053f96e6bde0a92af25497f3c0 socks5 proxy server 5b75b00a4b4c32b6e213514e80500a65 garbled NPS proxy build 8002ab4d0cf7e1888ee72de0b9f4282c garbled NPS proxy build (second) 39d4012e49f58092ec5cefed13dbbcfd XXE payload dtd
# These survive a rebuild. The atomic indicators above will not.
TRIAD_LAYOUT signed vendor EXE + same-named-as-real DLL + encrypted .dat/.log
companion, all three in one user-writable directory
PERSISTENCE whole triad copied into a per-user Startup folder by a VBS
or an MSI custom action
STAGING_PATH nested folder matching _CL_ followed by 5-8 digits
SELF_DELETE tilde-prefixed double-extension script, e.g. ~del.vbs.bat
LOLBIN_SCRIPT ftp.exe -s: pointed at a file with a non-script extension
DECRYPT_ROUTINE payload bytes reversed, then rolling XOR with offset
EXEC_PRIMITIVE InitOnceExecuteOnce / TimerQueue callback / EtwpCreateEtwThread
resolved from ntdll via GetModuleHandleA + GetProcAddress
BEACON_HTTP POST /api/v1/status, /updates/check.php, /content.html
BEACON_UA Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20121202 Firefox/20.0
BEACON_HEADER non-standard X-Beacon-Id request header
BEAGLE_TRANSPORT TCP/443 or UDP/8080, AES with a hardcoded key
TUNNELLING SOCKS5-over-HTTP through a planted webshell; long-lived POST
sessions with symmetric byte counts
RENAMED_TOOLS ELF binaries renamed to log filenames; check type not extension
cluster JadeProx (China-nexus, tracked separately to avoid misattribution)
loader TriBack Loader (4 variants, one custom builder)
post-exploitation AdaptixC2 (open-source framework, HTTP beacon)
shellcode loader DonutLoader
backdoor Beagle (8 commands: shell, file transfer, dir list, self-remove)
tunnelling iox, suo5, Neo-reGeorg, garbled NPS
scanning nuclei (critical templates only), fscan
credential access Chromium App-Bound-Encryption stealer (download attempt only)
misc XMRig proxy, Go socks5-server, cloud-agent disable script
overlaps tradecraft shared with several documented China-nexus clusters;
no single group accounts for the whole picture
# Exploited by this cluster against internet-facing hosts. All CVSS 9.8. CVE-2018-11511 SQL injection in a NAS photo-gallery application CVE-2021-24139 SQL injection in a WordPress photo-gallery plugin CVE-2021-31755 stack buffer overflow in a consumer router (on CISA KEV since 2021-11-03) CVE-2021-32305 arbitrary command execution in a web SVN interface # Defender ASR rules to enable in Block mode BE9BA2D9-53EA-4CDC-84E5-9B1EEEE46550 Block executable content from email and webmail D3E037E1-3EB8-44C8-A917-57927947596D Block JS/VBS launching downloaded executable content 5BEB7EFE-FD9A-4556-801D-275E5FFC04CC Block execution of potentially obfuscated scripts 3B576869-A4EC-4529-8536-B80A7769E899 Block Office apps creating executable content D4F940AB-401B-4EFC-AADC-AD5F3C50688A Block Office apps creating child processes # Policy values to verify HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings\Enabled = 0 HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated = 0 HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated = 0 HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\DisableMSI = 2 Mail gateway: archive inspection ON, LNK inside archives BLOCKED DNS: newly-registered-domain category BLOCKED for all user subnets
Detection Validation Gates
Gate 1 — Telemetry ready
- Confirm
DnsRequestevents are present estate-wide:#event_simpleName=/^DnsRequest$/ | groupBy([ComputerName], function=count(as=n), limit=5000). Any host group returning zero is invisible to Q1, Q2 and Q3. - Confirm
PeFileWrittenis flowing before trusting Q11's silence. - Confirm your DNS resolver and proxy retention actually covers 90 days. If it covers 30, say so in the ticket rather than reporting a clean hunt.
Gate 2 — Benign baseline
- Run Q5, Q9, Q10, Q11 and Q12 in report-only mode for one full business week. Record the top twenty benign hits per query and turn them into the exclusion stage in each card's
// TUNING:line. - Q2 will hit your own security vendors' genuine domains before tuning. That is expected and is the point of the exclusion stage.
Gate 3 — Positive test (safe, non-offensive)
- Q1/Q3: add one campaign domain to an internal test resolver zone and resolve it from a lab host. No malware needed; you are testing the query and the pipeline, not the payload.
- Q4: copy any benign signed vendor executable into a lab user's Startup folder and run it. The query should fire on path alone.
- Q6: run
ftp.exe -s:C:\lab\commands.txton a lab host with a harmless command file. - Q7: create a folder named
_CL_123456on a lab host and execute a benign binary from inside it. - Q13: cannot be positively tested without the samples. Validate the query shape by substituting the SHA-256 of a known-good local file and confirming it returns.
Gate 4 — Promotion
- Promote to a scheduled search only after Gate 2 produces a stable, explainable hit rate.
- Promote to a Custom IOA only for IOA-1, IOA-2 and IOA-3, and only at Detect severity first.
- Move an IOC row from
detecttopreventonly after two clean weeks and a documented owner for the false-positive rollback.
Hardening — Tiered
Each control names the MITRE mitigation it satisfies (the why) and the platform authority that defines it (the what). Controls are ordered by leverage against this specific chain, not by comprehensiveness.
- Block the confirmed C2 set at DNS and proxy. Import the section 10 CSV into Falcon IOC Management and add the same domains to your resolver's denylist. MITRE M1037 Filter Network Traffic. Verify: resolve each name from a user subnet and confirm NXDOMAIN or sinkhole.
- Deny execution from the per-user Startup folder. An AppLocker or WDAC deny rule on
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\*removes the persistence mechanism every TriBack variant depends on and breaks essentially nothing in a managed estate. MITRE M1038 Execution Prevention; CIS Microsoft Windows Benchmark application-control section; Microsoft Security Baseline. Verify: drop a benign EXE in the folder and confirm it is blocked. - Block LNK files inside archives at the mail gateway, and turn archive inspection on. The spear-phishing half of this campaign is a ZIP containing a LNK. If your gateway does not open archives, none of your attachment policy applies. MITRE M1049 Antivirus/Antimalware, M1031 Network Intrusion Prevention. Verify: send a test ZIP containing a benign LNK to a monitored mailbox.
- Disable Windows Script Host for standard users. Every variant except one routes through
wscriptorcscript. MITRE M1042 Disable or Remove Feature or Program. Verify:cscript //nologoon a test host should refuse. Pilot first if you still run legacy VBS logon scripts. - Enable the five Defender ASR rules listed in section 10 in Block mode. The email-content and JS/VBS rules alone cut the delivery-to-execution step. MITRE M1038, M1040 Behavior Prevention on Endpoint; Microsoft Defender ASR documentation. Verify:
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids. - Block the newly-registered-domain category at DNS for all user subnets. Every domain in this campaign was registered weeks before use. MITRE M1037. best practice — no formal benchmark covers NRD categories.
- Publisher-and-path allowlisting for the abused vendor binaries. WDAC or AppLocker publisher rules that permit the Microsoft and third-party security binaries only from their real install paths. This directly kills sideloading regardless of which signed binary the actor picks next. MITRE M1038; CIS Windows Benchmark; Microsoft WDAC design guide. Verify:
Get-AppLockerPolicy -Effective -Xmland a copy-to-Temp execution test. - Remove non-admin MSI install rights. Set
AlwaysInstallElevated=0in both hives andDisableMSI=2for standard users. The malvertising chain depends on a user clicking through a UAC prompt on an unmanaged MSI. MITRE M1026 Privileged Account Management, M1038; CIS Windows Benchmark installer section. - Patch and expose-check every internet-facing application, prioritising Java. Close the four CVEs in section 10, then sweep for any public-facing host with an unpatched CVSS 9.8. Specifically confirm no Java management or monitoring interface is internet-reachable — that was the confirmed healthcare entry point. MITRE M1051 Update Software, M1035 Limit Access to Resource Over Network; NIST SP 800-40; CISA KEV.
- Webroot file-integrity monitoring on every application server. Both tunnelling tools in this toolkit require a planted webshell. FIM on servlet and webroot directories turns a silent pivot into an alert. MITRE M1040; CIS Benchmarks for Apache Tomcat and NGINX.
- Default-deny egress from server VLANs; force workstations through an inspecting proxy. AdaptixC2 and Beagle both need outbound HTTP/S. A server that cannot originate arbitrary egress cannot beacon. MITRE M1030 Network Segmentation, M1037.
- Certificate-transparency and brand monitoring for
update-<yourvendor>patterns. The lookalike domains were registered before use and were visible in CT logs. MITRE M1056 Pre-compromise. best practice — vendor-dependent, no formal benchmark.
- WDAC in enforcement mode across the managed estate. Application control is the only control in this list that defeats an unknown fifth TriBack variant on the day it ships. Audit mode first, then enforce ring by ring. MITRE M1038; Microsoft WDAC deployment guidance.
- Segment the medical-imaging and OT-adjacent estate. These systems were explicitly targeted, are typically unpatchable on a normal cycle, and often carry no endpoint agent. Compensate with segmentation and flow monitoring rather than pretending an agent will arrive. MITRE M1030; NIST SP 800-82 for OT environments; IEC 62443 zone-and-conduit model.
- TLS inspection on user egress, with a documented exception list. Without it the AdaptixC2 URI and user-agent signals in section 7 are unavailable to you. MITRE M1020 SSL/TLS Inspection.
- Retention uplift for DNS and proxy logs to 12 months. This campaign was live for five months before disclosure. A 30-day window would have reported it clean. MITRE M1047 Audit. best practice — retention targets are regulatory, not benchmark-defined.
Deployable Playbooks
Playbook 1 — Sweep every Startup folder for a TriBack triad (PowerShell)
Finds executables in per-user and all-users Startup folders that have a same-stem companion file, which is the TriBack layout. Read-only; run it estate-wide before you change anything.
# Run as SYSTEM or an admin. Read-only enumeration.
$roots = @()
$roots += Join-Path $env:ProgramData 'Microsoft\Windows\Start Menu\Programs\StartUp'
Get-ChildItem 'C:\Users' -Directory -ErrorAction SilentlyContinue | ForEach-Object {
$roots += Join-Path $_.FullName 'AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup'
}
foreach ($root in $roots) {
if (-not (Test-Path $root)) { continue }
$items = Get-ChildItem -Path $root -File -ErrorAction SilentlyContinue
foreach ($exe in ($items | Where-Object { $_.Extension -match '^\.(exe|scr|com|pif)$' })) {
$stem = $exe.BaseName
$companion = $items | Where-Object {
$_.Name -ne $exe.Name -and
($_.Name -like "$stem*" -or $_.Extension -match '^\.(dat|log|bin|tmp)$')
}
$dll = $items | Where-Object { $_.Extension -eq '.dll' }
$sig = Get-AuthenticodeSignature -FilePath $exe.FullName -ErrorAction SilentlyContinue
if ($companion -or $dll) {
[pscustomobject]@{
Host = $env:COMPUTERNAME
Startup = $root
Executable = $exe.Name
Signer = $(if ($sig) { $sig.SignerCertificate.Subject } else { 'unsigned' })
SigStatus = $(if ($sig) { $sig.Status } else { 'none' })
SideloadDll= ($dll.Name -join ';')
Companion = ($companion.Name -join ';')
Sha256 = (Get-FileHash $exe.FullName -Algorithm SHA256).Hash
}
}
}
}
# A SIGNED executable with an unsigned DLL and a .dat/.log companion beside it
# in a Startup folder is the TriBack triad. Collect the folder before isolating.
Playbook 2 — Block execution from the Startup folder (AppLocker, GPO)
Deny rule applied to Everyone. Deploy in Audit mode for 48 hours first; the report tells you which legitimate applications you are about to break.
# 1. Create or edit a GPO linked to your workstation OU. # 2. Computer Configuration # -> Policies # -> Windows Settings # -> Security Settings # -> Application Control Policies # -> AppLocker # -> Executable Rules # 3. New Rule: Action = Deny, User = Everyone, Condition = Path # %OSDRIVE%\Users\*\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\* # %OSDRIVE%\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\* # 4. Repeat under "DLL Rules" with the same two paths. DLL rules are what # actually stop the sideload; the executable rule alone leaves the DLL loadable. # 5. Set enforcement to "Audit only", collect for 48h, then switch to "Enforce rules". # 6. Application Identity service must be running and set to Automatic: Set-Service -Name AppIDSvc -StartupType Automatic Start-Service -Name AppIDSvc # Verification Get-AppLockerPolicy -Effective -Xml | Out-String -Width 4096 # Functional test: copy a benign signed EXE into the Startup folder and run it. # Expected result: execution blocked, Event ID 8004 in # Microsoft-Windows-AppLocker/EXE and DLL.
Playbook 3 — Disable Windows Script Host and lock down MSI (registry / GPO)
# Disable Windows Script Host machine-wide (both hives on 64-bit).
$wsh = 'HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings'
$wsh32 = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows Script Host\Settings'
foreach ($k in @($wsh, $wsh32)) {
if (-not (Test-Path $k)) { New-Item -Path $k -Force | Out-Null }
New-ItemProperty -Path $k -Name 'Enabled' -Value 0 -PropertyType DWord -Force | Out-Null
}
# Remove non-admin MSI elevation and disable user-initiated installs.
$inst = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\Installer'
if (-not (Test-Path $inst)) { New-Item -Path $inst -Force | Out-Null }
New-ItemProperty -Path $inst -Name 'AlwaysInstallElevated' -Value 0 -PropertyType DWord -Force | Out-Null
New-ItemProperty -Path $inst -Name 'DisableMSI' -Value 2 -PropertyType DWord -Force | Out-Null
# Verification
Get-ItemProperty -Path $wsh -Name Enabled
Get-ItemProperty -Path $inst -Name AlwaysInstallElevated, DisableMSI
# Expected: Enabled = 0, AlwaysInstallElevated = 0, DisableMSI = 2.
# NOTE: pilot the WSH change. If you still run VBS logon scripts, exempt those
# hosts by scoping the GPO rather than skipping the control estate-wide.
Playbook 4 — Enable the Defender ASR rules (PowerShell)
$rules = @(
'BE9BA2D9-53EA-4CDC-84E5-9B1EEEE46550', # executable content from email/webmail
'D3E037E1-3EB8-44C8-A917-57927947596D', # JS/VBS launching downloaded executables
'5BEB7EFE-FD9A-4556-801D-275E5FFC04CC', # obfuscated script execution
'3B576869-A4EC-4529-8536-B80A7769E899', # Office creating executable content
'D4F940AB-401B-4EFC-AADC-AD5F3C50688A' # Office creating child processes
)
# Start in Audit (2). Switch the value to 1 for Block once the audit is clean.
foreach ($id in $rules) {
Add-MpPreference -AttackSurfaceReductionRules_Ids $id -AttackSurfaceReductionRules_Actions 2
}
# Verification
$p = Get-MpPreference
for ($i = 0; $i -lt $p.AttackSurfaceReductionRules_Ids.Count; $i++) {
[pscustomobject]@{
Rule = $p.AttackSurfaceReductionRules_Ids[$i]
Action = $p.AttackSurfaceReductionRules_Actions[$i] # 0 off, 1 block, 2 audit
}
}
Playbook 5 — Linux / Java application server exposure check (shell)
#!/usr/bin/env bash
# Read-only triage for the exploitation half of this campaign.
set -u
echo '== Listening services reachable off-box =='
ss -lntup 2>/dev/null | grep -v '127.0.0.1' | grep -v '::1'
echo
echo '== Java management / monitoring interfaces =='
ps -ef | grep -i java | grep -Ei 'jmxremote|com.sun.management|jolokia|hawtio' | grep -v grep
echo
echo '== Recently modified files under common webroots =='
for d in /var/www /opt/tomcat/webapps /usr/share/tomcat/webapps /srv/http; do
[ -d "$d" ] || continue
find "$d" -type f -mtime -90 \
\( -name '*.jsp' -o -name '*.jspx' -o -name '*.php' -o -name '*.war' \) \
-printf '%TY-%Tm-%Td %p\n' 2>/dev/null
done | sort
echo
echo '== Binaries masquerading as log files =='
find /tmp /var/tmp /dev/shm /root /home -maxdepth 3 -type f -name '*.log' 2>/dev/null \
| while read -r f; do
t=$(file -b "$f" 2>/dev/null)
case "$t" in *ELF*) echo "ELF BINARY NAMED AS LOG: $f [$t]";; esac
done
echo
echo '== Cloud host-security agent status =='
systemctl list-units --type=service --state=running 2>/dev/null \
| grep -Ei 'aegis|assist|cloudmonitor|guard|hids|falcon-sensor' || echo 'none running - investigate'
# A silenced host-security agent is itself an indicator; the operators shipped a
# script whose only job was disabling one.
Containment Runbook
| Phase | Actions | Owner | Evidence to capture |
|---|---|---|---|
| 0 · Triage 0-1h |
Confirm the hit is real: which query fired, on which host, which user. For a Q1 hit, treat as compromise immediately. For Q4/Q11, confirm the triad layout before escalating. | SOC L1 | Query output, host and user identity, first-seen timestamp |
| 1 · Preserve 0-2h |
Collect before you isolate. Pull the full contents of the implicated directory over RTR — the EXE, the DLL and the encrypted companion. The companion file is the only copy of the payload and the self-delete script may remove the orchestrator at any moment. | IR lead | Triad files, directory listing, prefetch, Startup folder inventory |
| 2 · Isolate 1-3h |
Network-contain the host via Falcon. Do not power off — the loader is memory-resident and a reboot re-executes it from Startup while destroying volatile evidence. | IR lead | Containment timestamp, memory image if capability exists |
| 3 · Block 1-4h |
Import the section 10 CSV. Add the domains to the DNS denylist and proxy block. Confirm the shared-hosting addresses were not included. | Network / SecOps | IOC import receipt, resolver test output |
| 4 · Scope 2-8h |
Run Q13 (hashes) and Q1/Q3 (domains) across the maximum retention you hold. Run playbook 1 estate-wide. Then run Q4, Q7 and Q11 for hosts the hash set missed. Assume the sample you have is one of several builds. | Threat hunting | Affected host list, per-host first-seen, variant fingerprint |
| 5 · Identity 4-12h |
Treat every credential used on an affected host as exposed. Reset the interactive user, any cached service accounts, and browser-stored credentials. Revoke active sessions and tokens. Beagle supports arbitrary shell and file transfer — assume collection succeeded. | IAM | Reset log, session-revocation confirmation |
| 6 · Hunt the entry 8-24h |
Determine which of the three entry routes was used: mail (search the gateway for the archive), malvertising (browser history to the distribution domain), or exploitation (run playbook 5 against internet-facing servers and check webroots for planted shells). | IR / AppSec | Delivery artefact, webshell if present, exploited CVE |
| 7 · Lateral review 12-48h |
Look for the tunnelling toolkit: unexpected listeners, long-lived symmetric POST sessions, ELF binaries renamed to log filenames. A compromised workstation in this campaign is a pivot, not the objective. | Threat hunting | Tunnel evidence, internal connection graph |
| 8 · Eradicate 24-72h |
Rebuild affected hosts. Do not clean in place — you cannot prove the loader is gone when the payload never touched disk unencrypted and the persistence is a three-file copy that a partial cleanup will miss. | Endpoint ops | Rebuild record, re-enrolment confirmation |
| 9 · Recover & harden 72h+ |
Release containment only after a clean re-run of Q4, Q5, Q7 and Q12 against the rebuilt host. Deploy the Immediate tier from section 12 before release, not after. | IR lead | Clean-hunt evidence, hardening deployment record |
| 10 · Report 1 week |
Close the ticket in section 16 with the variant identified, the entry route, the credential exposure scope, and the coverage gaps you hit. Note the retention limit if it constrained the scoping. | IR lead | Final report, updated coverage map |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Hardening | Coverage |
|---|---|---|---|---|---|
| T1583.001 | Vendor-impersonation domain infrastructure | Q1, Q2 | — | H-Imm-1, H-Near-12 | Good |
| T1071.001 | AdaptixC2 / Beagle C2 channel | Q1, Q2, Q3, Q12 | — | H-Imm-1, H-Near-11 | Good |
| T1566.001 | ZIP + LNK spear-phish with nested staging folder | Q7 | — | H-Imm-3 | Good |
| T1204.002 | User executes LNK or MSI | Q10, Q13 | — | H-Imm-5, H-Near-8 | Good |
| T1059.005 | VBS orchestrator | Q9 | — | H-Imm-4, H-Imm-5 | Partial — FP-limited until tuned |
| T1218 | ftp.exe as script interpreter | Q6 | IOA-2 | H-Near-7 | Good |
| T1218.007 | MSI custom action to Startup | Q10 | — | H-Near-8 | Partial — needs baseline |
| T1547.001 | Startup folder persistence | Q4, Q5 | IOA-1 | H-Imm-2, H-Strat-13 | Good |
| T1574.001 | DLL sideloading via signed host binary | Q4, Q11 | IOA-1 | H-Near-7, H-Strat-13 | Good |
| T1036.005 | DLL masquerading as a real dependency | Q11 | IOA-1 | H-Strat-13 | Partial — name list is variant-specific |
| T1027.013 | Encrypted .dat/.log companion payload | Q7 (path only) | — | H-Imm-2 | Gap — Falcon does not emit a discrete write event for the non-PE companion; playbook 1 covers it on demand |
| T1140 | Byte-reversal plus rolling XOR decrypt | — | — | H-Strat-13 | Gap — in-memory only; no rule type reaches it |
| — | Callback-primitive execution (InitOnceExecuteOnce, TimerQueue, EtwpCreateEtwThread) | — | — | H-Strat-13 | Gap — deliberately chosen because EDR watches these less; sensor memory scanning is the only counter |
| T1070.004 | Double-extension self-delete | Q8 | IOA-3 | H-Imm-4 | Good |
| T1190 | Public-facing application exploitation | — | — | H-Near-9, H-Near-10 | Gap — no endpoint query reaches this; playbook 5 and WAF logs are the coverage |
| T1090.001 | SOCKS / HTTP tunnelling through webshells | — | — | H-Near-10, H-Near-11 | Gap — section 7 native hunts only |
| T1555.003 | Browser credential theft | — | — | H-Strat-13 | Partial — tool download failed in the observed intrusion; no build recovered |
| T1562.001 | Cloud host-agent disable | — | — | H-Near-10 | Partial — playbook 5 checks agent state |
Thirteen queries cover fifteen of eighteen mapped techniques at Good or Partial. The three hard gaps are all in the same place and for the same reason: the loader's in-memory stages were engineered specifically to avoid the primitives EDR instruments, so no additional query closes them. The counters are application control (H-Strat-13), which stops the chain before the loader runs at all, and the sensor's own memory scanning. The exploitation and tunnelling gaps are not detection failures either — they sit on infrastructure that usually has no endpoint agent, which is why sections 7 and 13 carry log-based and shell-based coverage instead. Before reporting a clean hunt, complete Gate 1 in section 11: a query that returns nothing because the telemetry never arrived is not a negative result.
Hunt Summary Ticket
TITLE: JadeProx / TriBack Loader - DLL sideloading, AdaptixC2 and Beagle backdoor hunt
SEVERITY: High - active China-nexus espionage, confirmed intrusions, live infrastructure class
SCOPE: All Windows endpoints and servers; internet-facing Java applications;
DNS resolver and proxy logs; email gateway archives. Minimum 90-day lookback.
HYPOTHESIS: A signed vendor binary is executing from a user-writable or Startup
directory with an encrypted .dat/.log companion beside it, sideloading
an attacker DLL that decrypts and runs AdaptixC2 or the Beagle backdoor.
Corollary: any host resolving a security-vendor-lookalike update domain
is compromised.
QUERIES: Q1 vendor-impersonation domains CONF high / FP low RUN FIRST
Q2 generalised vendor lookalikes CONF med / FP med
Q3 named C2 and distribution domains CONF high / FP low
Q4 sideload host binary, wrong path CONF high / FP low RUN SECOND
Q5 rare Startup-folder executables CONF med / FP med
Q6 ftp.exe -s: script execution CONF high / FP low
Q7 nested _CL_###### staging folder CONF high / FP low
Q8 tilde double-extension self-delete CONF high / FP low
Q9 script host from staging path CONF med / FP med
Q10 msiexec spawning script host CONF med / FP med
Q11 masquerading DLL written to disk CONF high / FP med
Q12 loader-host beacon egress 443/8080 CONF med / FP med
Q13 known-bad SHA-256 set CONF high / FP low RUN SECOND
DO FIRST: 1. Import the section 10 CSV into Falcon IOC Management.
2. Block the domain set at DNS and proxy.
3. Run Q1 and Q13 across maximum retention.
4. Run playbook 1 estate-wide to inventory Startup folders.
5. Complete Gate 1 in section 11 before reporting any query clean.
FINDINGS: [ ] Q1 hits ............ hosts: ______ users: ______
[ ] Q4 hits ............ hosts: ______ triad confirmed: Y / N
[ ] Q13 hits ........... hosts: ______ variant: 1 / 2 / 3 / 4
[ ] Entry route ........ mail / malvertising / exploitation / unknown
[ ] Webshell found ..... Y / N server: ______
[ ] Credential exposure scope: ______
GAPS: - XOR decrypt and callback-primitive stages are in-memory only; no
query or Custom IOA reaches them. Application control is the counter.
- Encrypted .dat/.log companion write is not a discrete Falcon event;
playbook 1 covers it on demand.
- Public-facing exploitation and webshell tunnelling need WAF, webroot
FIM and playbook 5; endpoint telemetry does not cover them.
- Record your actual DNS and proxy retention here. If it is under
90 days, this hunt is inconclusive, not clean: ______
ACTIONS: [ ] Immediate hardening tier deployed (section 12, items 1-6)
[ ] IOA-1, IOA-2, IOA-3 created at Detect severity
[ ] Q5, Q9, Q10, Q11, Q12 baselined for one week and tuned
[ ] Four CVEs in section 10 patched or confirmed not present
[ ] Java management interfaces confirmed not internet-reachable
OWNER: ______________________
VERSION: v0.1 (2026-07-24)
Changelog
References
| Tier | Source | Used for | Accessed |
|---|---|---|---|
| 1 | Group-IB — JadeProx: Tracing a China-nexus Operation Through an OPSEC Mistake | Primary research: attack chain, all four loader variants, XOR keys, beacon configs, domain/IP/MD5 IOC set, ATT&CK mapping, victimology | 2026-07-24 |
| 1 | Sophos X-Ops — Donuts and Beagles: Fake Claude site spreads backdoor | Beagle backdoor analysis, AES key, transport ports, XOR-key linkage back to February 2026, vendor-lookalike domains | 2026-07-24 |
| 1 | SophosLabs IoCs — Beagle_IOCs.csv | Vendor-published SHA-256 set for archives, droppers, sideloaded DLLs, shellcode and the backdoor | 2026-07-24 |
| 2 | The Hacker News — China-Nexus JadeProx Uses New TriBack Loader in Government and Healthcare Attacks | Corroboration; independent NVD confirmation of the four exploited CVEs; detection guidance summary | 2026-07-24 |
| 2 | Infosecurity Magazine — Fake Claude AI Site Drops Beagle Backdoor on Windows Users | Corroboration of the Sophos chain: signed updater, DLL sideload, Cloudflare-delivery and Alibaba-C2 split | 2026-07-24 |
| Ref | MITRE ATT&CK | Technique and mitigation identifiers throughout sections 6 and 12 | 2026-07-24 |
| Ref | CISA Known Exploited Vulnerabilities Catalog | KEV status of the router vulnerability used in the scanning campaign | 2026-07-24 |
| Ref | Microsoft Defender — Attack Surface Reduction rules reference | ASR rule GUIDs in sections 10 and 13 | 2026-07-24 |
| Ref | CIS Benchmarks | Windows application-control and installer baselines; Tomcat and NGINX server hardening | 2026-07-24 |
Source snapshots for every cited primary source are stored alongside this file in JadeProx-TriBack-Loader-Hunt-sources/. Every atomic indicator shipped in section 10 traces to one of them.