BRONZE SANDCASTLE: Sandboxie DLL Sideloading and Modified Meterpreter Backdoor

China-based threat group deploying an encrypted config.ini payload through signed host executables, with Active Directory database theft after compromise
Threat
BRONZE SANDCASTLE
Severity
HIGH
Type
Nation-state espionage / DLL sideloading backdoor
Access
Not established in sources
Version
v0.1 (Draft) · 2026-10-25
Author
HuntPack
Confidence
Medium (one primary vendor, no independent second source)
01

Executive Summary

Sophos Counter Threat Unit and SophosLabs published research on 2026-10-20 on BRONZE SANDCASTLE, a threat group Sophos treats as China-based and distinct from BRONZE PRESIDENT and BRONZE ATLAS [#1]. Sophos observed victims in the Philippines, Taiwan, Afghanistan, Namibia and likely the Republic of Korea between August 2025 and August 2026, with activity concentrated in UTC+8 working hours [#1]. The group's most distinctive technical marker is Sandboxie DLL sideloading: a legitimate Sandboxie executable is placed beside a malicious sbiedll.dll, and the trusted process loads attacker code [#1].

The sideloaded DLL reads an encrypted config.ini, decodes it in memory and runs a Meterpreter-style backdoor (payload versions 1.1.5 and 1.1.7) that profiles the host, enumerates local network and accounts, and can collect keystrokes and screenshots [#1] [#2]. Operators were then seen running Windows net commands, creating Volume Shadow Copies with vssadmin.exe and copying ntds.dit, the Active Directory credential database [#1].

The highest-value defensive angle is behavioral, not file-based. Sophos states that the encrypted payloads are decoded at runtime, so static file detections may be ineffective [#1]. This pack therefore leads with host-executable-in-wrong-folder, sideload DLL staging, child processes of the hosts, the credential-theft sequence, and keeps the vendor hashes and C2 domains as a retro-hunt layer.

Defender priority: hunt Q2, Q3 and Q8 first, then Q9 and Q10 on domain controllers. If ntds.dit was copied anywhere in your estate, treat every domain credential as exposed. All shipped indicators are detect only: every hash and domain traces to Sophos alone, so none meets the two-independent-source bar for prevent.

02

Source Review & Web Hunter Notes

#TierSourceKey findingCarry forward
1T1Sophos CTU, "BRONZE SANDCASTLE deploys modified Meterpreter shells" (2026-10-20)Origin of every fact: Table 1 sideload pairs, payload 1.1.5 and 1.1.7, C2 and abused services, GitHub config download, vssadmin and ntds.dit, victimology, UTC+8Yes
2T2The Hacker News (2026-10-21)Restates [#1]; adds the July 2024 APT41 MoonWalk sbiedll.dll sideload as context and that the GitHub account is no longer accessiblePartial
3T2SecurityOnline (2026-10-23)Restates [#1]; adds that renamed legitimate executables are frequently usedPartial
4T2GBHackers (2026-10-21)Restates [#1]; adds the aez.zip sample layout and that COFFLoader overlap does not by itself establish Cobalt StrikePartial
5T1SophosLabs IoC repository, BRONZESANDCASTLE_Meterpreter_IOCs.csv21 samples with MD5, SHA1 and SHA256, plus the two C2 domainsYes

Decisions and caveats

  • Independence: [#2] [#3] [#4] re-report [#1], and [#5] is Sophos's own appendix. There is no second independent vendor, so confidence is Medium and no indicator ships at prevent.
  • Different campaign, excluded: [#2] notes APT41 sideloaded a Sandboxie-signed taskhost.exe with its own sbiedll.dll in July 2024 to deploy MoonWalk. That is a separate campaign. None of its indicators are in this pack and the shared DLL name is treated only as a behavioral overlap.
  • GitHub account: Sophos names LatonyCharnleyaW as the v1.1.7 config source and says the repository had little history [#1]; it is no longer accessible [#2]. It is recorded as context, not imported as an IOC.
  • Hosts without a named pair: the IoC file lists loader hashes named CoreFoundation.dll and MSIMG32.dll [#5]. The reports do not say which host executable pairs with them, and this pack does not guess.
  • Sophos detection names for cross-reference: ATK/Swrort-Y, ATK/ScLoad-W, -X, -Y, -Z, Troj/Loader-JL, Troj/Loader-JP [#1].
  • Library overlap note: the TTP check against published packs found only a shared tooling filename (NvdaHelperRemote.dll) with an earlier unrelated pack. No shared hash, domain or IP, so this is not a duplicate.
03

Hunt Brief & Attack Chain

Hypotheses (highest fidelity first)

  1. H1, signature sideload: SandboxieWUAU.exe runs from, or sbiedll.dll is written to, a folder that is not a Sandboxie install directory. Q2, Q3. Confidence high.
  2. H2, known samples: a process or PE write carries one of the 21 vendor-listed SHA256 values. Q1. Confidence high, coverage narrow.
  3. H3, sideload family: the other eight host executables run from user-writable folders, or their paired DLL names appear there on few hosts. Q4, Q5. Confidence medium.
  4. H4, post-exploitation children: a host executable spawns shells or discovery tools. Q8. Confidence high.
  5. H5, C2 and tasking: lookups of the v1.1.5 C2 domains, or host processes resolving file.io, gofile.io, ably.net, ably.io or api.github.com. Q6, Q7. Confidence high for C2, medium for services.
  6. H6, AD database theft: shadow copy creation followed by ntds.dit copy. Q9, Q10. Confidence medium to high.

Attack chain

StepBehavior [source]Telemetry (plain terms, then platforms)Hunt angle
1 StagingLegitimate signed host executable, malicious DLL and encrypted config.ini placed together, sample ZIP aez.zip with javaw.exe, jli.dll, config.ini [#1] [#4]Executable or DLL written (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents FileCreated)Q3, Q4. Initial delivery vector is not stated in the sources.
2 SideloadHost loads the rogue DLL from its own folder [#1]Process creation with image path (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)Q2, Q5. Module-load telemetry for the DLL itself is not used here; see gaps.
3 Decode and in-memory runDLL reads config.ini, decodes it, runs a reflective loader and backdoor in memory [#1]Memory and behavioral sensor verdicts (outside the CQL telemetry used here)Gap: no query. Sophos recommends memory-based detection [#1].
4 C2 and taskingJSON host profile to C2; contact with file.io, gofile.io, ably.net, ably.io; v1.1.7 pulls encrypted configs via the GitHub API [#1]DNS lookup with requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse, no endpoint DNS table)Q6, Q7
5 DiscoveryWindows net commands for local network and account enumeration [#1]Process creation with command line and parent (same sources as step 2)Q8
6 Credential theftvssadmin.exe shadow copy, then copy of ntds.dit [#1]Process creation with command line (same as step 2)Q9, Q10
7 CollectionKeylogging and screenshot capture capability [#2]Not observable as a distinct endpoint event in the sourcesGap
04

Consolidated IOC Table

All atomic values below were copied by script from the saved SophosLabs IoC snapshot. Confidence is Medium because the only source of record is Sophos. Every row ships at detect.

TypeValueConfidenceActionContext
SHA2567afd292994ff214ca4dd880c834532274c957963e9838c7fa2e4d1318af75756MEDIUMdetectLoader DLL (sbiedll.dll). Sophos IoC file [#5]
SHA256b39e41be217fe2c690f75e9861cf64df52b302c66619fad608ca60a959288842MEDIUMdetectLoader DLL (jli.dll). Sophos IoC file [#5]
SHA2567515417e523a776e371877e868536fa1d1961826d4bc478734be993985d9df03MEDIUMdetectPayload (config.ini). Sophos IoC file [#5]
SHA256ab200eda30dd1868f597ac42e7876894c5838df84605bbd4fca8dbc91c90ea28MEDIUMdetectLoader DLL (libcef.dll). Sophos IoC file [#5]
SHA256dd9223c381893f493ca581e5bd35f16f778689e58fc459c1b0c39b0d33b41290MEDIUMdetectLoader DLL (CoreFoundation.dll). Sophos IoC file [#5]
SHA25695c6e9447585670b1a50551c36abe22154f6e010bfb23275fc467d2b20a423d9MEDIUMdetectLoader DLL (sbiedll.dll). Sophos IoC file [#5]
SHA256548d5add2b27ab8c2d506b81623a37f3d27a0f4e22e6fa938c6a008b70775989MEDIUMdetectLoader DLL (jli.dll). Sophos IoC file [#5]
SHA256592a6e74366bcd0c8a47657a88a6e81f99d2876baa6f923bb928bba4477054fcMEDIUMdetectLoader DLL (NvdaHelperRemote.dll). Sophos IoC file [#5]
SHA2562332d924b1404961bc65280e782c787a4b048da7519fe73ccf4dc687b843d060MEDIUMdetectLoader DLL (jli.dll). Sophos IoC file [#5]
SHA256425177b18cb386f359796576e51666b7350489579550e564f51f8973b2f0979bMEDIUMdetectLoader DLL (jli.dll). Sophos IoC file [#5]
SHA25672259376f63116d1aca64bf2ef42a5d211c1ebdb01516ef3b53778ed1347c238MEDIUMdetectLoader DLL (jli.dll). Sophos IoC file [#5]
SHA2562411a678e4de91451e69c27369bab4329c3cd969d4ebd851ba91dcfdba7e7db2MEDIUMdetectLoader DLL (MSIMG32.dll). Sophos IoC file [#5]
SHA256fdef7b1f4c013d686bf5dbfc92f37191c04beb0dc8b53c608bb8019a8c678052MEDIUMdetectLoader DLL (jli.dll). Sophos IoC file [#5]
SHA256e50dc9db568c272d7b019ec8e5fb1f111dd071baa4b3a00bc3c8c885ade46fbcMEDIUMdetectLoader DLL (snmpapi.dll). Sophos IoC file [#5]
SHA2566c5c332428d914fd8eac0164947a70ec3d71bcd3f6cdcccb5e875dcb68ea076dMEDIUMdetectLoader DLL (sbiedll.dll). Sophos IoC file [#5]
SHA25691ef27b1e83f324348ca51466ab17e2464f927b9c84758898fd7ce7ae6a6008bMEDIUMdetectLoader DLL (sbiedll.dll). Sophos IoC file [#5]
SHA256437ba4b0db084c261f7843f85329b5204a2dedecdacf29b25a53a90bcf8d7d2eMEDIUMdetectLoader DLL (jli.dll). Sophos IoC file [#5]
SHA256c7f1c6cfd87e4c4f492a6da634ae6a264467aaee5a3eed14e89c2297a58e5d30MEDIUMdetectLoader DLL (jli.dll). Sophos IoC file [#5]
SHA256c39ac4e1fe11639a9d46e026850cc3146eb809b542daf38e1a00eab11eaa1834MEDIUMdetectLoader DLL (sbiedll.dll). Sophos IoC file [#5]
SHA256e404b2b9f9f203dad81bdc1ef8bfcbe4f42eb616f113a89ed504202212af1c1eMEDIUMdetectLoader DLL (jli.dll). Sophos IoC file [#5]
SHA2565e2b035ae40f8eaab40792a92573171df0011c2fbed55582268a824effa7cb91MEDIUMdetectLoader DLL (msvcp140.dll). Sophos IoC file [#5]
Domaindc.cathaypacifice.comMEDIUMdetectv1.1.5 C2 server. Sophos blog [#1], IoC file [#5], echoed by [#2] [#4]
Domainnet.dpworldto.comMEDIUMdetectv1.1.5 C2 server. Sophos blog [#1], IoC file [#5], echoed by [#2] [#4]

Hunt-only context (not imported)

TypeValueActionWhy not an import row
Domainfile[.]io, gofile[.]io, ably[.]net, ably[.]iohuntLegitimate services reported as likely tasking channels [#1]. Importing them would alert on legitimate use; Q7 keys on the process instead.
Hostapi.github.com/repos/LatonyCharnleyaWhuntv1.1.7 config source, account no longer accessible [#1] [#2]. GitHub itself is legitimate; Q7 covers the API host from sideload processes.
Fileconfig.ini, aez.zipenrichGeneric names. config.ini is the encrypted payload carrier; aez.zip is a single sample's archive name [#1].
Versionpayload 1.1.5, 1.1.7enrichVersion labels from the implant, not network or file indicators [#1].
05

Affected Surface & Telemetry Matrix

SurfaceTelemetry (plain terms, then platforms)PriorityGap
Windows endpoints and servers running a sideload hostProcess creation with path, command line, parent (CrowdStrike: ProcessRollup2, SyntheticProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)HIGHRenamed host executables evade name-based matching
Folders where host and DLL are stagedExecutable or DLL written (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents)HIGHConfig.ini is not a PE, so its write is not covered
DNS egress from those hostsDNS lookup with requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents, no endpoint DNS table)MEDIUMDefender endpoint DNS coverage is indirect; traffic that bypasses the host resolver is outside endpoint telemetry
Domain controllersProcess creation with command line (as above)HIGHDirect file access to ntds.dit without a command line is outside endpoint telemetry
In-memory loader and backdoorMemory scanning and behavioral verdicts (sensor feature, not a hunt event)HIGHNo CQL query; rely on sensor prevention policy and Sophos guidance [#1]
06

ATT&CK Mapping

Only T1574.001 is named in the cited coverage [#4]. The other IDs are analyst inference from the behaviors in [#1] and are marked (inferred).

TacticTechniqueBehaviorQuery / control
Defense Evasion, Persistence, Privilege EscalationT1574.001 DLL Search Order Hijacking (sideloading)Rogue sbiedll.dll and eight other DLLs beside signed hosts [#1] [#4]Q2, Q3, Q4, Q5; Hardening 2
Defense EvasionT1036.005 Match Legitimate Name or Location (inferred)Renamed legitimate executables, for example Start.exe [#1]Q2, Q5
Defense EvasionT1027 Obfuscated Files or Information (inferred)Encrypted config.ini and flattened control-flow in the DLL [#1]Memory sensor (gap)
Defense Evasion, ExecutionT1620 Reflective Code Loading (inferred)Position-independent reflective loader runs the backdoor in memory [#1]Memory sensor (gap)
Command and ControlT1102 Web Service (inferred)Contact with file.io, gofile.io, ably.net, ably.io, GitHub API [#1]Q7
Command and ControlT1071.001 Web Protocols (inferred)Host profile sent to C2 domains [#1]Q6
DiscoveryT1087 Account Discovery, T1018 Remote System Discovery (inferred)Windows net commands [#1]Q8
CollectionT1056.001 Keylogging, T1113 Screen Capture (inferred)Payload capability [#2]Gap
Credential AccessT1003.003 NTDS (inferred)vssadmin shadow copy then copy ntds.dit [#1]Q9, Q10; Hardening 3
07

Native Audit-Log Hunts

  • Sysmon Event ID 7 (image loaded): sbiedll.dll, jli.dll, Krita.dll, NvdaHelperRemote.dll, Libcef.dll, version.dll, msvcp140.dll, snmpapi.dll loaded from the same folder as the host and not from the product install path or System32. Look for unsigned or invalidly signed images.
  • Sysmon Event ID 11 (file create): DLL and config.ini created together in a user-writable folder, or an archive such as aez.zip extracted there [#1] [#4].
  • Sysmon Event ID 22 or DNS server analytic log: queries for the two C2 domains, and for file.io, gofile.io, ably.net, ably.io from the nine host process names.
  • Security 4688 with command line (needs the audit and command-line policy, Playbook step 1): vssadmin create shadow, net user, net group, net view, and any command naming ntds.dit.
  • Security 8222 on domain controllers: "A shadow copy was created" where audit policy provides it. Compare against backup windows.
  • Proxy or firewall logs: sessions to file.io, gofile.io, ably.net, ably.io and the GitHub API from servers, or from workstation processes that are not browsers.
  • Memory triage on a suspect host: dump the host process and look for a PE header in a non-image memory region, which matches Sophos's guidance on reflective loading and anomalous PE headers in memory [#1].
08

Hunt Queries: CrowdStrike CQL, SentinelOne PowerQuery and Defender XDR KQL

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

Ten queries. Regexes match basenames through FileName, ContextBaseFileName or ParentBaseFileName; path tests use a doubled backslash inside the regex. Every event name is a real Falcon event. Set the time window with the console picker (LOOKBACK comments state the intent).

Q1 · Known BRONZE SANDCASTLE loader and payload hashes
CONF HIGHFP LOWCOST LOW

Looks for: Any process start or PE/DLL write whose SHA256 matches the 21 sample hashes in the SophosLabs IoC file (sideloaded loaders and the config.ini payload). Hash matching is brittle by design: Sophos notes the payloads are decoded at runtime, so use this as a retro-hunt, not as the main detection.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptions, telemetry-gapProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A sample that was only renamed or moved into place, or executed from a path the sensor did not hash, is not matched.
  • PowerQuery assumes: tgt.process.image.sha256 and tgt.file.sha256 are populated on this tenant; both are mapped by the independent sentinel_one_pq backend but population varies, so run the readiness test first.
  • PowerQuery assumes: File Creation is the closest event to a PE write; a file renamed into place appears as a different event type and is not matched.
  • KQL – Defender XDR: The created-process half of the CQL hash match is not covered: a sample that only ran, without a file event the sensor recorded, is missed.
  • KQL – Defender XDR: Advanced Hunting keeps 30 days; the 90d retro-hunt window of the CQL tab is not reachable here.
  • KQL – Defender XDR assumes: SHA256 is populated on the file rows of this tenant; Microsoft documents it as often unpopulated, so a clean result is weak evidence until the readiness test shows rows with a value.
// HUNT: BRONZE SANDCASTLE known loader / payload SHA256 (retro-hunt)
// MITRE: T1574.001, T1055
// CONF: high  FP: low  COST: low
// REQUIRES: file hashing on process start and PE write (Falcon sensor, default)
// FALSE POSITIVES: none expected; hashes are vendor-listed malicious samples
// LOOKBACK: 90d (set with the console time picker)
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/
| in(SHA256HashData, values=[
    "7afd292994ff214ca4dd880c834532274c957963e9838c7fa2e4d1318af75756",
    "b39e41be217fe2c690f75e9861cf64df52b302c66619fad608ca60a959288842",
    "7515417e523a776e371877e868536fa1d1961826d4bc478734be993985d9df03",
    "ab200eda30dd1868f597ac42e7876894c5838df84605bbd4fca8dbc91c90ea28",
    "dd9223c381893f493ca581e5bd35f16f778689e58fc459c1b0c39b0d33b41290",
    "95c6e9447585670b1a50551c36abe22154f6e010bfb23275fc467d2b20a423d9",
    "548d5add2b27ab8c2d506b81623a37f3d27a0f4e22e6fa938c6a008b70775989",
    "592a6e74366bcd0c8a47657a88a6e81f99d2876baa6f923bb928bba4477054fc",
    "2332d924b1404961bc65280e782c787a4b048da7519fe73ccf4dc687b843d060",
    "425177b18cb386f359796576e51666b7350489579550e564f51f8973b2f0979b",
    "72259376f63116d1aca64bf2ef42a5d211c1ebdb01516ef3b53778ed1347c238",
    "2411a678e4de91451e69c27369bab4329c3cd969d4ebd851ba91dcfdba7e7db2",
    "fdef7b1f4c013d686bf5dbfc92f37191c04beb0dc8b53c608bb8019a8c678052",
    "e50dc9db568c272d7b019ec8e5fb1f111dd071baa4b3a00bc3c8c885ade46fbc",
    "6c5c332428d914fd8eac0164947a70ec3d71bcd3f6cdcccb5e875dcb68ea076d",
    "91ef27b1e83f324348ca51466ab17e2464f927b9c84758898fd7ce7ae6a6008b",
    "437ba4b0db084c261f7843f85329b5204a2dedecdacf29b25a53a90bcf8d7d2e",
    "c7f1c6cfd87e4c4f492a6da634ae6a264467aaee5a3eed14e89c2297a58e5d30",
    "c39ac4e1fe11639a9d46e026850cc3146eb809b542daf38e1a00eab11eaa1834",
    "e404b2b9f9f203dad81bdc1ef8bfcbe4f42eb616f113a89ed504202212af1c1e",
    "5e2b035ae40f8eaab40792a92573171df0011c2fbed55582268a824effa7cb91"
  ])
| table([@timestamp, aid, ComputerName, UserName, FileName, ImageFileName, TargetFileName, SHA256HashData])
Q2 · Sandboxie service executable outside a Sandboxie install path
CONF HIGHFP LOWCOST LOW

Looks for: SandboxieWUAU.exe, the host Sophos names for the signature sbiedll.dll sideload, running from a path that is not a Sandboxie or Sandboxie-Plus directory.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the sensor did not observe starting is not captured.
  • PowerQuery assumes: tgt.process.image.path holds the full path of the created process.
  • PowerQuery assumes: tgt.process.image.sha256 is shown for triage and may be unpopulated.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: FolderPath holds the full image path of the created process, including the file name.
// HUNT: SandboxieWUAU.exe executing outside a Sandboxie install directory
// MITRE: T1574.001, T1036.005
// CONF: high  FP: low  COST: low
// REQUIRES: process creation with image path (Falcon sensor, default)
// FALSE POSITIVES: portable or per-user Sandboxie copies in an unusual folder
// LOOKBACK: 30d
// NOTE: path exclusion is evadable by naming a folder Sandboxie; pair with Q3
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^SandboxieWUAU\.exe$/i
| ImageFileName!=/\\Sandboxie(-Plus)?\\/i
| table([@timestamp, aid, ComputerName, UserName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData])
Q3 · sbiedll.dll written outside a Sandboxie directory
CONF HIGHFP LOWCOST LOW

Looks for: A PE named sbiedll.dll created anywhere other than a Sandboxie or Sandboxie-Plus directory: the staging step of the group's signature sideload.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A DLL that arrives by rename or move rather than creation is not captured.
  • PowerQuery assumes: File Creation is the closest event to a PE write; a DLL renamed or moved into place appears as a different event type and is not matched.
  • PowerQuery assumes: tgt.file.sha256 is shown for triage and may be unpopulated.
  • KQL – Defender XDR: A DLL that arrives by rename is recorded with a different action type and is not captured.
  • KQL – Defender XDR assumes: FolderPath holds the full path of the written file, including the file name.
  • KQL – Defender XDR assumes: FileCreated is the action type recorded for a newly written file.
// HUNT: sbiedll.dll dropped outside a Sandboxie directory
// MITRE: T1574.001
// CONF: high  FP: low  COST: low
// REQUIRES: PE write telemetry (Falcon sensor, default)
// FALSE POSITIVES: Sandboxie installer or updater staging into a temp folder
// LOOKBACK: 30d
#event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/
| FileName=/^sbiedll\.dll$/i
| TargetFileName!=/\\Sandboxie(-Plus)?\\/i
| table([@timestamp, aid, ComputerName, UserName, TargetFileName, SHA256HashData, ContextBaseFileName])
Q4 · Rare sideload-pair DLL names written to user-writable folders
CONF MEDIUMFP MEDIUMCOST MEDIUM

Looks for: DLL names from Sophos Table 1 (jli, Krita, NvdaHelperRemote, Libcef, Version, msvcp140, snmpapi) plus CoreFoundation and MSIMG32 from the IoC file, written under user-writable folders and seen on three or fewer hosts. Rarity stacking cuts the noise from legitimate apps that ship the same DLL names. FP: Electron and Chromium apps legitimately carry libcef.dll and msvcp140.dll under AppData; per-user Java, Krita and LINE installs carry jli.dll, Krita.dll and msvcp140.dll. Exclude known application directories listed in the TUNING line.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: approximate-analytic, equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Only one sample host name is shown per row instead of up to five.
  • PowerQuery: A DLL that arrives by rename or move rather than creation is not captured.
  • PowerQuery assumes: agent.uuid is populated and stands in for the distinct host count; estimate_distinct is approximate on large result sets.
  • PowerQuery assumes: File Creation is the closest event to a PE write; a DLL renamed into place is not matched.
  • KQL – Defender XDR: A DLL that arrives by rename is recorded with a different action type and is not captured.
  • KQL – Defender XDR assumes: FolderPath holds the full path of the written file, including the file name.
  • KQL – Defender XDR assumes: dcount is an estimate; the CQL counts distinct agents exactly.
// HUNT: rare sideload-pair DLL names in user-writable folders (rarity stack)
// MITRE: T1574.001
// CONF: medium  FP: medium  COST: medium
// REQUIRES: PE write telemetry (Falcon sensor, default)
// FALSE POSITIVES: per-user installs of Java, Krita, NVDA, LINE and Chromium-embedded apps
// TUNING: exclude your sanctioned app folders, e.g. add | TargetFileName!=/\\AppData\\Local\\Programs\\Krita\\/i
// TUNING: raise the host threshold only after reviewing the stacked output once
// LOOKBACK: 30d
#event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/
| FileName=/^(jli|krita|nvdahelperremote|libcef|version|msvcp140|snmpapi|corefoundation|msimg32)\.dll$/i
| TargetFileName=/\\(ProgramData|Users\\Public|Windows\\Temp|AppData|Perflogs)\\/i
| groupBy([FileName, TargetFileName], function=[count(aid, distinct=true, as=Hosts), min(@timestamp, as=FirstSeen), collect(ComputerName, limit=5)], limit=500)
| Hosts < 4
| sort(Hosts, order=asc, limit=200)
Q5 · Sideload host executable running from a user-writable path
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: Any of the nine legitimate host executables in Sophos Table 1 (Sandboxie WUAU and renamed Start.exe, javaw, Krita, NvdaHelper, Jcef_helper, Vmmap, LineAppMgr, bginfo64) started from ProgramData, Public, Temp, AppData, Downloads or the Recycle Bin. Sophos says renamed copies are common, so this catches the unrenamed ones and is a known partial. FP: admins run Vmmap and bginfo64 from Downloads; Start.exe is a generic name; per-user Java and Krita installs live under AppData. Exclude by path and by signer hash baseline.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A renamed host executable is not matched by name.
  • PowerQuery assumes: tgt.process.image.path holds the full path of the created process.
  • PowerQuery assumes: tgt.process.image.sha256 is shown for triage and may be unpopulated.
  • KQL – Defender XDR: A renamed host executable is not matched by name.
  • KQL – Defender XDR assumes: FolderPath holds the full image path of the created process, including the file name.
// HUNT: sideload host executable launched from a user-writable folder
// MITRE: T1574.001, T1036.005
// CONF: medium  FP: medium  COST: low
// REQUIRES: process creation with image path (Falcon sensor, default)
// FALSE POSITIVES: admin tools run from Downloads, per-user app installs, generic Start.exe
// TUNING: exclude sanctioned per-user installs, e.g. | ImageFileName!=/\\AppData\\Local\\Programs\\/i
// TUNING: baseline the SHA256 of your own Vmmap.exe and bginfo64.exe and exclude them with !in(SHA256HashData, values=[...])
// LOOKBACK: 30d
// GAP: renamed host executables are not matched by name; see Coverage Map
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^(javaw|Krita|NvdaHelper|Jcef_helper|Vmmap|LineAppMgr|bginfo64|SandboxieWUAU|Start)\.exe$/i
| ImageFileName=/\\(ProgramData|Users\\Public|Windows\\Temp|AppData\\Local\\Temp|Downloads|Perflogs|\$Recycle\.Bin)\\/i
| table([@timestamp, aid, ComputerName, UserName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData])
Q6 · DNS lookups for the two v1.1.5 C2 domains
CONF HIGHFP LOWCOST LOW

Looks for: DNS requests for the two C2 domains Sophos attributes to payload version 1.1.5, with the requesting process name for pivoting.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A lookup made through a resolver the sensor does not see, such as DNS over HTTPS from a browser, is not captured.
  • PowerQuery assumes: The looked-up name is in event.dns.request. Some tenants populate dns.request instead; the readiness test shows which one carries values.
  • KQL – Defender XDR: Advanced Hunting keeps 30 days; the 90d window of the CQL tab is not reachable here.
  • KQL – Defender XDR: A lookup made through a resolver the sensor does not see is not captured.
  • KQL – Defender XDR assumes: DnsQueryResponse is recorded on this tenant, and AdditionalFields carries the name under DnsQueryString or QueryName; the readiness test prints both so a reader can see which key is populated.
// HUNT: BRONZE SANDCASTLE v1.1.5 C2 domain lookups
// MITRE: T1071.001, T1102
// CONF: high  FP: low  COST: low
// REQUIRES: DNS request telemetry with process context (Falcon sensor, default)
// FALSE POSITIVES: none expected; lookalike domains registered by the actor
// LOOKBACK: 90d
#event_simpleName=DnsRequest
| DomainName=/(^|\.)(cathaypacifice\.com|dpworldto\.com)$/i
| table([@timestamp, aid, ComputerName, UserName, DomainName, ContextBaseFileName, ContextProcessId_decimal])
Q7 · Sideload host processes resolving the abused file-sharing, messaging and GitHub services
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: A sideload host process resolving file.io, gofile.io, ably.net, ably.io (reported as likely tasking channels) or api.github.com (v1.1.7 config download). The services are legitimate, so the signal is the process: none of these hosts normally talks to them. FP: javaw.exe can legitimately reach api.github.com for Java applications; Krita or LINE auto-update checks are not expected to hit these domains.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A lookup made through a resolver the sensor does not see is not captured, and a renamed host executable is not matched by name.
  • PowerQuery assumes: The looked-up name is in event.dns.request. Some tenants populate dns.request instead; the readiness test shows which one carries values.
  • KQL – Defender XDR: A lookup made through a resolver the sensor does not see is not captured, and a renamed host executable is not matched by name.
  • KQL – Defender XDR assumes: DnsQueryResponse is recorded on this tenant, and AdditionalFields carries the name under DnsQueryString or QueryName; the readiness test prints both so a reader can see which key is populated.
// HUNT: sideload host processes contacting abused file-sharing, messaging and GitHub API services
// MITRE: T1102, T1567, T1105
// CONF: medium  FP: medium  COST: low
// REQUIRES: DNS request telemetry with process context (Falcon sensor, default)
// FALSE POSITIVES: Java applications that call the GitHub API from javaw.exe
// TUNING: exclude sanctioned Java apps, e.g. | !(ContextBaseFileName=/^javaw\.exe$/i DomainName=/^api\.github\.com$/i)
// LOOKBACK: 30d
#event_simpleName=DnsRequest
| DomainName=/(^|\.)(file\.io|gofile\.io|ably\.net|ably\.io|api\.github\.com)$/i
| ContextBaseFileName=/^(javaw|Krita|NvdaHelper|Jcef_helper|Vmmap|LineAppMgr|bginfo64|SandboxieWUAU|Start)\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, DomainName, ContextBaseFileName, ContextProcessId_decimal])
Q8 · Discovery and credential-theft children of a sideload host
CONF HIGHFP MEDIUMCOST LOW

Looks for: A shell or discovery tool spawned by one of the nine host executables. Sophos documents Windows net commands for enumeration and vssadmin before ntds.dit theft; a signed Krita, NVDA or Sandboxie binary has no reason to spawn them. FP: javaw.exe launching cmd.exe is normal for some Java applications, and Start.exe is a generic name. Restrict javaw to the discovery tools, or exclude by the application's working directory.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A renamed host executable is not matched by name, and a child launched through a grandchild is not matched.
  • PowerQuery assumes: src.process.name is the creator of the new process on a Process Creation event, as the field model attests.
  • KQL – Defender XDR: A renamed host executable is not matched by name, and a child launched through a grandchild is not matched.
  • KQL – Defender XDR assumes: InitiatingProcessFileName is the direct creator of the process on the row.
// HUNT: shell and discovery tools spawned by sideload host executables
// MITRE: T1087, T1018, T1003.003, T1574.001
// CONF: high  FP: medium  COST: low
// REQUIRES: process creation with parent name (Falcon sensor, default)
// FALSE POSITIVES: Java applications that shell out, generic Start.exe
// TUNING: exclude a known-good Java app with | !(ParentBaseFileName=/^javaw\.exe$/i FileName=/^cmd\.exe$/i)
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^(javaw|Krita|NvdaHelper|Jcef_helper|Vmmap|LineAppMgr|bginfo64|SandboxieWUAU|Start)\.exe$/i
| FileName=/^(cmd|powershell|net|net1|vssadmin|whoami|ipconfig|nltest|tasklist|systeminfo|esentutl|ntdsutil)\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, ImageFileName])
Q9 · vssadmin shadow copy creation
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: vssadmin.exe creating a Volume Shadow Copy, the step Sophos reports before ntds.dit is copied. Most useful on domain controllers, where it should be rare outside backup windows. FP: backup agents and snapshot jobs call vssadmin create shadow on a schedule. Exclude the backup service account and the scheduled parent process.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Shadow copies created through WMI or the VSS API without vssadmin.exe are not captured.
  • PowerQuery assumes: src.process.user is the account of the creating process and stands in for the user that ran vssadmin.exe.
  • KQL – Defender XDR: Shadow copies created through WMI or the VSS API without vssadmin.exe are not captured.
  • KQL – Defender XDR assumes: ProcessCommandLine holds the full command line of the created process.
// HUNT: vssadmin create shadow (precursor to ntds.dit copy)
// MITRE: T1003.003, T1490
// CONF: medium  FP: medium  COST: low
// REQUIRES: process creation with command line (Falcon sensor, default)
// FALSE POSITIVES: backup and snapshot software, admin maintenance
// TUNING: exclude the backup service account, e.g. | UserName!=/^svc-backup$/i
// TUNING: scope to domain controllers by hostname pattern once your DC naming is known
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^vssadmin\.exe$/i
| CommandLine=/create\s+shadow/i
| table([@timestamp, aid, ComputerName, UserName, CommandLine, ParentBaseFileName])
Q10 · Command lines that copy or reference ntds.dit
CONF HIGHFP MEDIUMCOST LOW

Looks for: Process command lines that name ntds.dit with a copy-capable tool, which is how Sophos describes the Active Directory database theft after the shadow copy. FP: ntdsutil and esentutl are legitimate for IFM media creation and AD maintenance; exclude change-window admin accounts.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A copy tool outside the listed names, or an ntds.dit path built at run time, is not matched.
  • PowerQuery assumes: src.process.user is the account of the creating process and stands in for the user that ran the tool.
  • KQL – Defender XDR: A copy tool outside the listed names, or an ntds.dit path built at run time, is not matched.
  • KQL – Defender XDR assumes: ProcessCommandLine holds the full command line of the created process.
// HUNT: ntds.dit referenced in a command line by a copy-capable tool
// MITRE: T1003.003
// CONF: high  FP: medium  COST: low
// REQUIRES: process creation with command line (Falcon sensor, default)
// FALSE POSITIVES: ntdsutil IFM creation, AD health tooling, backup software
// TUNING: exclude the AD admin accounts that run IFM during change windows, e.g. | UserName!=/^adm-ifm$/i
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| CommandLine=/ntds\.dit/i
| FileName=/^(cmd|powershell|pwsh|copy|xcopy|robocopy|esentutl|ntdsutil|vssadmin|7z|rar)\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, FileName, CommandLine, ParentBaseFileName])
09

Detection Rules by Platform

All four rules start at Detect. Promote to a higher action only after 14 days with a measured false-positive rate under 5 percent, and never for rules that match legitimate signed software by name alone.

CrowdStrike: Custom IOA

IOA nameType and patternsExclusionsPromotesDeployment
Sandboxie WUAU outside install pathProcess Creation. Image Filename .*\\SandboxieWUAU\.exe$Image path matching .*\\Sandboxie(-Plus)?\\.*Promote Q2Detect, severity High
sbiedll.dll dropped outside SandboxieFile Creation. File name .*\\sbiedll\.dll$Target path matching .*\\Sandboxie(-Plus)?\\.*Promote Q3Detect, severity High
Sideload host spawns shell or discovery toolProcess Creation. Parent image .*\\(javaw|Krita|NvdaHelper|Jcef_helper|Vmmap|LineAppMgr|bginfo64|SandboxieWUAU)\.exe$; Image .*\\(net1?|vssadmin|whoami|nltest|esentutl|ntdsutil)\.exe$Known Java application directories for javaw.exePromote Q8Detect, severity High, review for 14 days
ntds.dit named in a copy commandProcess Creation. Command line .*ntds\.dit.*AD admin accounts running IFM media creationPromote Q10Detect, severity High; scope to domain controller host group

SentinelOne: custom detection rules

RuleSource queryRun asNotes
Sandboxie WUAU outside install pathQ2, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"
sbiedll.dll dropped outside SandboxieQ3, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"
Sideload host spawns shell or discovery toolQ8, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"
ntds.dit named in a copy commandQ10, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"

Create the rule with POST /web/api/v2.1/cloud-detection/rules, queryType: "scheduled" and queryLang: "2.0", with the query in data.scheduledParams.query. Use 2.0 operator spellings: a rule written with the 1.0 token ContainsCIS was accepted and never fired on a tenant. The API does not warn, so lint the body before deploying.

Microsoft Defender: custom detection rules

RuleSource queryRun asNotes
Sandboxie WUAU outside install pathQ2, KQL – Defender XDR tabCustom detection rule, alert only, every hourThe query returns Timestamp, ReportId and DeviceId, which Microsoft recommends for Defender for Endpoint tables so alerts carry the device group scope and the process tree. Remove the Timestamp filter and the final sort and take before saving the rule: the service applies the rule's lookback itself
sbiedll.dll dropped outside SandboxieQ3, KQL – Defender XDR tabCustom detection rule, alert only, every hourThe query returns Timestamp, ReportId and DeviceId, which Microsoft recommends for Defender for Endpoint tables so alerts carry the device group scope and the process tree. Remove the Timestamp filter and the final sort and take before saving the rule: the service applies the rule's lookback itself
Sideload host spawns shell or discovery toolQ8, KQL – Defender XDR tabCustom detection rule, alert only, every hourThe query returns Timestamp, ReportId and DeviceId, which Microsoft recommends for Defender for Endpoint tables so alerts carry the device group scope and the process tree. Remove the Timestamp filter and the final sort and take before saving the rule: the service applies the rule's lookback itself
ntds.dit named in a copy commandQ10, KQL – Defender XDR tabCustom detection rule, alert only, every hourThe query returns Timestamp, ReportId and DeviceId, which Microsoft recommends for Defender for Endpoint tables so alerts carry the device group scope and the process tree. Remove the Timestamp filter and the final sort and take before saving the rule: the service applies the rule's lookback itself

Q1, Q4, Q5, Q6, Q7 and Q9 stay a hunt in this pack, not a rule. A rule can generate only 150 alerts per run. Continuous (NRT) frequency needs a single table and no comment lines, so delete the generated comment header from the query first.

10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import, all detect
type,value,action,severity,expiration,description,tags
sha256,7afd292994ff214ca4dd880c834532274c957963e9838c7fa2e4d1318af75756,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (sbiedll.dll),campaign:BRONZE-SANDCASTLE
sha256,b39e41be217fe2c690f75e9861cf64df52b302c66619fad608ca60a959288842,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (jli.dll),campaign:BRONZE-SANDCASTLE
sha256,7515417e523a776e371877e868536fa1d1961826d4bc478734be993985d9df03,detect,high,2027-04-25,BRONZE SANDCASTLE Meterpreter-based payload (config.ini),campaign:BRONZE-SANDCASTLE
sha256,ab200eda30dd1868f597ac42e7876894c5838df84605bbd4fca8dbc91c90ea28,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (libcef.dll),campaign:BRONZE-SANDCASTLE
sha256,dd9223c381893f493ca581e5bd35f16f778689e58fc459c1b0c39b0d33b41290,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (CoreFoundation.dll),campaign:BRONZE-SANDCASTLE
sha256,95c6e9447585670b1a50551c36abe22154f6e010bfb23275fc467d2b20a423d9,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (sbiedll.dll),campaign:BRONZE-SANDCASTLE
sha256,548d5add2b27ab8c2d506b81623a37f3d27a0f4e22e6fa938c6a008b70775989,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (jli.dll),campaign:BRONZE-SANDCASTLE
sha256,592a6e74366bcd0c8a47657a88a6e81f99d2876baa6f923bb928bba4477054fc,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (NvdaHelperRemote.dll),campaign:BRONZE-SANDCASTLE
sha256,2332d924b1404961bc65280e782c787a4b048da7519fe73ccf4dc687b843d060,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (jli.dll),campaign:BRONZE-SANDCASTLE
sha256,425177b18cb386f359796576e51666b7350489579550e564f51f8973b2f0979b,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (jli.dll),campaign:BRONZE-SANDCASTLE
sha256,72259376f63116d1aca64bf2ef42a5d211c1ebdb01516ef3b53778ed1347c238,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (jli.dll),campaign:BRONZE-SANDCASTLE
sha256,2411a678e4de91451e69c27369bab4329c3cd969d4ebd851ba91dcfdba7e7db2,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (MSIMG32.dll),campaign:BRONZE-SANDCASTLE
sha256,fdef7b1f4c013d686bf5dbfc92f37191c04beb0dc8b53c608bb8019a8c678052,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (jli.dll),campaign:BRONZE-SANDCASTLE
sha256,e50dc9db568c272d7b019ec8e5fb1f111dd071baa4b3a00bc3c8c885ade46fbc,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (snmpapi.dll),campaign:BRONZE-SANDCASTLE
sha256,6c5c332428d914fd8eac0164947a70ec3d71bcd3f6cdcccb5e875dcb68ea076d,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (sbiedll.dll),campaign:BRONZE-SANDCASTLE
sha256,91ef27b1e83f324348ca51466ab17e2464f927b9c84758898fd7ce7ae6a6008b,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (sbiedll.dll),campaign:BRONZE-SANDCASTLE
sha256,437ba4b0db084c261f7843f85329b5204a2dedecdacf29b25a53a90bcf8d7d2e,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (jli.dll),campaign:BRONZE-SANDCASTLE
sha256,c7f1c6cfd87e4c4f492a6da634ae6a264467aaee5a3eed14e89c2297a58e5d30,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (jli.dll),campaign:BRONZE-SANDCASTLE
sha256,c39ac4e1fe11639a9d46e026850cc3146eb809b542daf38e1a00eab11eaa1834,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (sbiedll.dll),campaign:BRONZE-SANDCASTLE
sha256,e404b2b9f9f203dad81bdc1ef8bfcbe4f42eb616f113a89ed504202212af1c1e,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (jli.dll),campaign:BRONZE-SANDCASTLE
sha256,5e2b035ae40f8eaab40792a92573171df0011c2fbed55582268a824effa7cb91,detect,high,2027-04-25,BRONZE SANDCASTLE sideloaded loader (msvcp140.dll),campaign:BRONZE-SANDCASTLE
domain,dc.cathaypacifice.com,detect,high,2027-04-25,BRONZE SANDCASTLE v1.1.5 C2 server,campaign:BRONZE-SANDCASTLE
domain,net.dpworldto.com,detect,high,2027-04-25,BRONZE SANDCASTLE v1.1.5 C2 server,campaign:BRONZE-SANDCASTLE
Microsoft Defender indicators CSVSettings, Endpoints, Indicators, Import: audit only
indicatorType,indicatorValue,action,title,description,expirationTime,severity,recommendedActions,rbacGroups,category,mitretechniques,GenerateAlert
FileSha256,7afd292994ff214ca4dd880c834532274c957963e9838c7fa2e4d1318af75756,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (sbiedll.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,b39e41be217fe2c690f75e9861cf64df52b302c66619fad608ca60a959288842,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (jli.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,7515417e523a776e371877e868536fa1d1961826d4bc478734be993985d9df03,Audit,BRONZE SANDCASTLE Meterpreter-based payload,BRONZE SANDCASTLE Meterpreter-based payload (config.ini),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,ab200eda30dd1868f597ac42e7876894c5838df84605bbd4fca8dbc91c90ea28,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (libcef.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,dd9223c381893f493ca581e5bd35f16f778689e58fc459c1b0c39b0d33b41290,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (CoreFoundation.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,95c6e9447585670b1a50551c36abe22154f6e010bfb23275fc467d2b20a423d9,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (sbiedll.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,548d5add2b27ab8c2d506b81623a37f3d27a0f4e22e6fa938c6a008b70775989,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (jli.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,592a6e74366bcd0c8a47657a88a6e81f99d2876baa6f923bb928bba4477054fc,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (NvdaHelperRemote.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,2332d924b1404961bc65280e782c787a4b048da7519fe73ccf4dc687b843d060,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (jli.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,425177b18cb386f359796576e51666b7350489579550e564f51f8973b2f0979b,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (jli.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,72259376f63116d1aca64bf2ef42a5d211c1ebdb01516ef3b53778ed1347c238,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (jli.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,2411a678e4de91451e69c27369bab4329c3cd969d4ebd851ba91dcfdba7e7db2,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (MSIMG32.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,fdef7b1f4c013d686bf5dbfc92f37191c04beb0dc8b53c608bb8019a8c678052,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (jli.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,e50dc9db568c272d7b019ec8e5fb1f111dd071baa4b3a00bc3c8c885ade46fbc,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (snmpapi.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,6c5c332428d914fd8eac0164947a70ec3d71bcd3f6cdcccb5e875dcb68ea076d,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (sbiedll.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,91ef27b1e83f324348ca51466ab17e2464f927b9c84758898fd7ce7ae6a6008b,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (sbiedll.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,437ba4b0db084c261f7843f85329b5204a2dedecdacf29b25a53a90bcf8d7d2e,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (jli.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,c7f1c6cfd87e4c4f492a6da634ae6a264467aaee5a3eed14e89c2297a58e5d30,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (jli.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,c39ac4e1fe11639a9d46e026850cc3146eb809b542daf38e1a00eab11eaa1834,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (sbiedll.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,e404b2b9f9f203dad81bdc1ef8bfcbe4f42eb616f113a89ed504202212af1c1e,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (jli.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,5e2b035ae40f8eaab40792a92573171df0011c2fbed55582268a824effa7cb91,Audit,BRONZE SANDCASTLE sideloaded loader,BRONZE SANDCASTLE sideloaded loader (msvcp140.dll),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,dc.cathaypacifice.com,Audit,BRONZE SANDCASTLE v1.1.5 C2 server,BRONZE SANDCASTLE v1.1.5 C2 server,2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,net.dpworldto.com,Audit,BRONZE SANDCASTLE v1.1.5 C2 server,BRONZE SANDCASTLE v1.1.5 C2 server,2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True

Column names and allowed values are from Microsoft's documented parameter table. Check each expirationTime before importing: an indicator whose date has passed is already expired. Download the sample CSV from the Import page to confirm the column order before a bulk import. Each file takes at most 500 indicators. Learn describes the import per entity type, so if a mixed file is rejected, split it by indicatorType. An imported indicator does nothing unless the matching Advanced features are on (for example Custom network indicators and Allow or block file).

SentinelOne IOC importnot included

This pack does not ship a SentinelOne import block: the import format could not be verified against SentinelOne's own documentation. Export a sample from your console and the block can be added with confidence.

Alternate hashes (MD5, SHA1)non-Falcon tooling
# MD5 and SHA1 of the same samples, for tooling that does not take SHA256 (Sophos IoC file)
sbiedll.dll  md5=07ed4b9470b2395ad5f969a501761ab8  sha1=1f74838581e8bef12cb7df2d70099cd6865ef238
jli.dll  md5=25ee87bb42d88bf00f60c4064c376846  sha1=e98c54ce736a607803e89144daa679fccd4f7521
config.ini  md5=dd89cfd1f0b13addfc43cae758130b6a  sha1=f7db825aeee21d6326fa9c31512d090720546341
libcef.dll  md5=615a6089ab073115ed0b8bcfcfbdc966  sha1=dae5a4489671e2d9d2189a830b17ff144f8ab904
CoreFoundation.dll  md5=4e916e024ea0c0eb16bd91f054d22444  sha1=ffe58ea274af642a3fc1d50e823cb01f61dc8dae
sbiedll.dll  md5=e63ec733393e4e7e3424cbff918003a3  sha1=cd1a262f8c2624700440b0aa464b7a2b42e23511
jli.dll  md5=2a39552543f84aa3a7a562d9bb54fc00  sha1=536d6a8fa98a566079a459b16df1e29622dd8af5
NvdaHelperRemote.dll  md5=8c32bf3711b237e3c781a00b5c526695  sha1=4e6d600ce7a9cf6414e738d8f39260ae961602f0
jli.dll  md5=f771159881bc82217d30a64a7716e613  sha1=624da53bd827ca27b66d8a42a9524b0b48e882b4
jli.dll  md5=3addd7c803b9570fc0b1ee6899444c66  sha1=56b1258c4553fb549fca9215727be1e5cd1efe4e
jli.dll  md5=a0fa0893e1adde6b93063ab2c7369536  sha1=1abe25d3255679bdc1c35c070da40e3c4572bb4a
MSIMG32.dll  md5=0a7464945e1994a7fc5ee2b86ce48c94  sha1=2f399541445cc1aade0e7a2148853fe41be57827
jli.dll  md5=e43a7c1169cf1d4ce8b22c1301ca100c  sha1=120d204d253293d594d6fcbe681797942fb74f7a
snmpapi.dll  md5=5ac863a8bffbcca5647284e088d401dc  sha1=0ed62f00b9e7c5780c9bd05b096eee13a160480f
sbiedll.dll  md5=b695542718a7cc373112852d97d1811e  sha1=c2811a0fa539e4cd6633f32349fb34b0455bcba6
sbiedll.dll  md5=4cf187200a4e639e314b7f96a33f161e  sha1=1fc7350e215759b4d66ab6458244271b5e2cfa90
jli.dll  md5=32151547d912488ac5242731057170a3  sha1=24ede364f5eabe991c866e92ffa396bcb894eb14
jli.dll  md5=c15c10589e671094185311e358b8903b  sha1=6204c6342c5dfb67bdc29d45a524c3ac3a99aa01
sbiedll.dll  md5=5910e874fccc9b37239b00b993393994  sha1=ffd5cfbd5274a351315ba1e922d795f872f7ff9b
jli.dll  md5=0ff9ecbaf18e45cd7b4943b21d5c6cf1  sha1=8964de054bfb70c5560ebabe224bb45723f60b37
msvcp140.dll  md5=ebf221383c234ea2361ed54e6df6ddfc  sha1=ab86a6b71582e16a7da14533fe9407d7a2bc525c
Behavioral signaturesuse these first
SandboxieWUAU.exe or Start.exe next to sbiedll.dll outside a Sandboxie folder
Signed host (javaw, Krita, NvdaHelper, Jcef_helper, Vmmap, LineAppMgr, bginfo64) beside a rogue DLL and config.ini
Host executable spawning cmd, net, vssadmin, nltest or ntdsutil
vssadmin create shadow followed by a copy naming ntds.dit
Host process resolving file.io, gofile.io, ably.net, ably.io or api.github.com
DLL that reads a local file and immediately runs code in memory (Sophos guidance)
Reflective loading and anomalous PE headers in memory (Sophos guidance)
Named malware and toolingnames from the sources
BRONZE SANDCASTLE (Sophos CTU designation)
Modified Meterpreter-based backdoor, payload versions 1.1.5 and 1.1.7
Sophos detections: ATK/Swrort-Y, ATK/ScLoad-W, ATK/ScLoad-X, ATK/ScLoad-Y, ATK/ScLoad-Z, Troj/Loader-JL, Troj/Loader-JP
Sideload pairs: SandboxieWUAU.exe and Start.exe with sbiedll.dll; javaw.exe with jli.dll; Krita.exe with Krita.dll;
  NvdaHelper.exe with NvdaHelperRemote.dll; Jcef_helper.exe with Libcef.dll; Vmmap.exe with Version.dll;
  LineAppMgr.exe with msvcp140.dll; bginfo64.exe with snmpapi.dll
Payload carrier: config.ini (encrypted); sample archive aez.zip
Hardening auditverify state
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager" /v CWDIllegalInDllSearch
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit" /v ProcessCreationIncludeCmdLine_Enabled
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids
Get-ADGroupMember -Identity "Backup Operators" | Select-Object Name, SamAccountName
11

Detection Validation Gates

GateCheckPass when
Telemetry readyProcess creation with path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents); executable write (CrowdStrike: PeFileWritten. SentinelOne: File Creation. Defender: DeviceFileEvents); DNS with process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents)Each source returns rows for a known test host in the last hour
Benign baselineRun Q4, Q5, Q7, Q8, Q9, Q10 over 30 days and list hits by application directory and accountEvery recurring hit has an exclusion in the TUNING lines
Positive testsOn an isolated test host, copy a benign signed executable renamed SandboxieWUAU.exe into a temp folder (Q2); drop a harmless file named sbiedll.dll in the same folder (Q3); run vssadmin create shadow /for=C: only on a lab server (Q9). Use no real malware.Each query returns the test host within minutes
PromotionKeep every IOA and IOC at detect. Promote only after 14 days and a measured false-positive rate under 5 percent.Decision and rate recorded in the hunt ticket

Static gates run on this file: structure (verify_huntpack), Falcon field names (lint_cql_fields), CQL syntax (lint_cql_syntax), IOC provenance against the saved snapshots (check_ioc_provenance), and a duplicate check against the published library.

12

Hardening: Tiered

Platform in scope: Windows endpoints, servers and Active Directory domain controllers. The sources describe no Linux, macOS, cloud or appliance activity.

Immediate (this week)
  • 1. Command-line process auditing. Record command lines in Security 4688 so net, vssadmin and ntds.dit activity is visible without EDR. MITRE M1047 (Audit). Authority: Microsoft Learn, "Command line process auditing" (best-practice; no formal CIS item cited here).
  • 2. Refuse DLL loads from the current working directory. Set CWDIllegalInDllSearch to 0xFFFFFFFF per Microsoft KB 2264107. MITRE M1044 (Restrict Library Loading). Does not stop a DLL beside the executable, which is this group's technique, so treat it as a partial control (flagged: best-practice, no formal benchmark).
  • 3. Review who can create shadow copies on domain controllers. Audit Backup Operators and local Administrators membership on DCs. MITRE M1026 (Privileged Account Management), M1018 (User Account Management).
Near term (1 to 4 weeks, pilot first)
  • 4. Attack Surface Reduction in audit mode. Enable the rule "Block executable files from running unless they meet a prevalence, age, or trusted list criterion" in AuditMode on a pilot ring. MITRE M1038 (Execution Prevention). Authority: Microsoft Defender ASR rules reference. Requires Microsoft Defender Antivirus active.
  • 5. Application control for user-writable paths. Author a WDAC or AppLocker policy in audit mode that flags executables and DLLs loading from ProgramData, Public, Temp and Downloads. MITRE M1038, M1045 (Code Signing). Authority: Microsoft WDAC deployment guide, CIS Windows Benchmark application-control guidance.
  • 6. Retire unsanctioned Sandboxie, Krita, NVDA, Sysinternals copies. If the product is not approved in your estate, add it to the unsanctioned-software inventory and remove stray copies found by Q2 and Q5. MITRE M1047.
Strategic (1 to 3 months)
  • 7. Tiered administration for domain controllers. Limit interactive and remote admin logon to DCs to dedicated Tier 0 accounts and hosts, which limits who can run vssadmin and read ntds.dit. MITRE M1026, M1030 (Network Segmentation). Authority: Microsoft enterprise access model, Microsoft Security Baseline for Windows Server.
  • 8. Enforced application control with signed policy. Move step 5 from audit to enforce for servers first. MITRE M1038.
  • 9. Server egress filtering. Deny anonymous file-sharing and messaging APIs from servers by proxy category, keeping the audit log. MITRE M1031 (Network Intrusion Prevention). Best-practice, no formal benchmark.

Verify after deployment

Use the Hardening audit block in section 10. For control 1, Security 4688 events must now carry a Process Command Line field. For controls 4 and 5, review audit events for 14 days before any enforcement.

13

Deployable Playbooks

Step 1: Enable command-line capture in process-creation events

Prerequisites: local admin or GPO write; the "Audit Process Creation" subcategory must also be enabled for 4688 to be generated. Reboot required: No. Rollback: run the rollback lines at the end of the block; the setting returns to its default.

$k = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit'
New-Item -Path $k -Force | Out-Null
Set-ItemProperty -Path $k -Name ProcessCreationIncludeCmdLine_Enabled -Type DWord -Value 1
auditpol /set /subcategory:"Process Creation" /success:enable
# Verify
Get-ItemProperty $k -Name ProcessCreationIncludeCmdLine_Enabled
# Rollback
Remove-ItemProperty -Path $k -Name ProcessCreationIncludeCmdLine_Enabled
auditpol /set /subcategory:"Process Creation" /success:disable

Step 2: Refuse DLL loads from the current working directory

Prerequisites: test legacy line-of-business apps that rely on loading DLLs from the working directory. Reboot required: No for new processes; restart long-running services. Rollback: remove the value.

$k = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager'
Set-ItemProperty -Path $k -Name CWDIllegalInDllSearch -Type DWord -Value 0xFFFFFFFF
# Verify
Get-ItemProperty $k -Name CWDIllegalInDllSearch
# Rollback
Remove-ItemProperty -Path $k -Name CWDIllegalInDllSearch

Step 3: ASR prevalence rule in audit mode (pilot ring)

Prerequisites: Microsoft Defender Antivirus is the active antimalware engine on the pilot hosts; a pilot ring of 20 or fewer hosts. Reboot required: No. Rollback: set the rule to Disabled or remove it.

$id = '01443614-cd74-433a-b99e-2ecdc07bfc25'
Add-MpPreference -AttackSurfaceReductionRules_Ids $id -AttackSurfaceReductionRules_Actions AuditMode
# Verify
Get-MpPreference | Select-Object AttackSurfaceReductionRules_Ids, AttackSurfaceReductionRules_Actions
# Rollback
Remove-MpPreference -AttackSurfaceReductionRules_Ids $id

Step 4: Review shadow-copy-capable groups on a domain controller

Prerequisites: ActiveDirectory PowerShell module, read access to the domain. Reboot required: No. Rollback: none required, this step only reads group membership.

Import-Module ActiveDirectory
'Backup Operators','Administrators','Domain Admins' | ForEach-Object {
  Get-ADGroupMember -Identity $_ -Recursive | Select-Object @{n='Group';e={$_}}, Name, SamAccountName
}
# Expected: only named Tier 0 accounts and the backup service account
14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the host with the sideload hit (EDR network containment). Do not power off: the backdoor runs in memory. If a domain controller shows Q9 or Q10 hits, treat the domain as compromised.IR leadContainment timestamp, host and account list
Isolate: by platformCrowdStrike: network-contain the host. SentinelOne: network quarantine (Disconnect from Network; confirm the label in your console version). Microsoft Defender: Isolate device (full network isolation). Keep the host powered on for memory capture on all of them.IR leadContainment timestamp, host and account list
PreserveCapture memory first. Then copy the whole folder holding the host executable, rogue DLL and config.ini (and any ZIP). Hash all files and compare with section 4.ForensicsMemory image, folder copy, hashes
ScopeRun Q1 to Q10 over 90 days. Find other hosts with the same folder layout, other host/DLL pairs from Sophos Table 1, and any command line naming ntds.dit or vssadmin shadow creation.Threat hunterHost list with first and last seen
EradicateRemove the staged folder contents after evidence is secured; remove any autorun or task found pointing at it (the sources do not document a persistence mechanism, so check for one rather than assume).IR leadBefore and after file listing
Credential resetIf ntds.dit was copied: reset the krbtgt account twice with a gap that respects replication, reset all privileged and service accounts, then user accounts, in that order.AD ownerReset log per account class
RecoverRebuild confirmed-compromised servers from known-good media; restore the hardening in section 12; keep the IOA rules at detect and watch for 30 days.InfrastructureRebuild record, 30-day clean hunt result
ReportRecord victimology and any new hash, domain or host/DLL pair for a pack update. Sophos IoC file may be updated, so re-check it.Threat intelUpdated indicators with source snapshots
15

Detection Coverage Map

TechniqueBehaviorCQLIOACrowdStrike coverageSentinelOneDefender XDR
T1574.001Sandboxie host and sbiedll.dll stagingQ1, Q2, Q3IOA 1, IOA 2GoodGood, with assumptionsPartial: Q1 telemetry gap
T1574.001Eight other host/DLL pairsQ4, Q5IOA 3 (children)PartialPartial: Q4 approximatePartial: same limit as CrowdStrike
T1036.005Renamed legitimate executablesQ2, Q5NonePartialPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1620 / T1027Encrypted config.ini decode and in-memory runNoneNoneGAPGAPGAP
T1071.001 / T1102C2 domains and abused servicesQ6, Q7NonePartialPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1087 / T1018net discovery commandsQ8IOA 3PartialPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1003.003vssadmin shadow copy and ntds.dit copyQ9, Q10IOA 4GoodGood, with assumptionsGood, with assumptions
T1056.001 / T1113Keylogging and screenshotsNoneNoneGAPGAPGAP

Gaps, stated plainly: (1) the in-memory decode and reflective load has no hunt query, the sources recommend memory and behavioral sensor detection [#1]; (2) renamed host executables evade name matching in Q2, Q5, Q7, Q8 (Sophos says renaming is frequent [#1]); (3) the pairing of CoreFoundation.dll and MSIMG32.dll with a host is not published; (4) module-load telemetry for the DLL is not used because the sensor event name was not verified against the data dictionary, and an invented event name would return nothing; (5) no persistence mechanism is documented, so none is hunted. Validation gates are in section 11.

16

Hunt Summary Ticket

TITLE:      BRONZE SANDCASTLE: Sandboxie DLL sideload and modified Meterpreter backdoor hunt
SEVERITY:   High (China-based espionage cluster, AD database theft reported)
SCOPE:      Windows endpoints and servers; domain controllers for the credential-theft steps
HYPOTHESIS: Signed host executables run beside rogue DLLs and an encrypted config.ini in user-writable
            folders, then enumerate the network and copy ntds.dit
QUERIES:    Q1 to Q10 (CrowdStrike LogScale). 4 Custom IOA rules, all detect. 23 atomic IOCs, all detect.
DO FIRST:   Q2, Q3, Q8 across the estate; Q9 and Q10 on domain controllers; Q1 and Q6 as 90-day retro-hunts
FINDINGS:   Expected positive: a host executable from a non-install folder with a DLL written minutes
            earlier, followed by net, vssadmin or ntds.dit command lines. Escalate immediately on any
            Q9 or Q10 hit on a DC. Queries must be run manually; no findings recorded in this pack.
GAPS:       In-memory decode and reflective load (needs memory or behavioral sensor detection, outside
            endpoint telemetry queries); renamed host executables; keylogging and screenshot capture
ACTIONS:    Low risk now: run queries, enable command-line auditing. Pending approval: ASR audit pilot,
            application-control audit policy, DC admin review
OWNER:      HuntPack
VERSION:    v0.1 (Draft) 2026-10-25
17

Changelog

v0.12026-10-25Initial draft from the Sophos CTU report and SophosLabs IoC file: 10 CQL queries, 4 IOA recommendations, 23 detect-only indicators, tiered hardening, playbooks and containment runbook. SentinelOne PowerQuery and Microsoft Defender KQL tabs added to Q1-Q10: SIEM Query Rosetta release 0.1.0 (public-beta; static-reviewed translations).
18

References

#TierSourceUsed forAccess date
1T1Sophos CTU: BRONZE SANDCASTLE deploys modified Meterpreter shellsAll technique and victimology claims2026-10-25
2T2The Hacker NewsCapabilities, GitHub account status, APT41 context2026-10-25
3T2SecurityOnlineRenamed executables, corroboration2026-10-25
4T2GBHackersaez.zip layout, T1574.001 reference, COFFLoader caveat2026-10-25
5T1SophosLabs IoC repository, BRONZESANDCASTLE_Meterpreter_IOCs.csvAll hashes and C2 domains2026-10-25
6T1MITRE ATT&CK T1574.001Technique reference2026-10-25

Source snapshots for #1 to #5 are saved beside this file in BronzeSandcastle-Sandboxie-Meterpreter-Hunt-sources/. Reference 6 was not fetched; it is cited only as the public technique ID.

Generated 2026-10-25 by HuntPack · v0.1 (Draft) · Defensive content only. Validate field names and tuning in your tenant before deploying.