A note on scope: This is my first published piece of threat analysis. I built a custom honeypot as a learning project, and this post documents what I observed. I applied structured analytic standards (the NATO Admiralty Scale for evidence grading, ODNI-derived confidence levels, and Analysis of Competing Hypotheses) so that assessments are defensible rather than informal. Definitions for these frameworks are in Appendix B. I welcome corrections and feedback from more experienced researchers.
Between April and July 2026, I spent my nights and weekends building a custom Linux honeypot framework from scratch. I wanted to learn practical threat intelligence, try my hand at malware analysis, and see what actually shows up when you expose vulnerable services to the internet.
On July 17, 2026, the honeypot caught something worth writing about.
The honeypot captured a multi-stage cryptojacking campaign targeting exposed Docker API endpoints (port 2375) and VNC services (port 5900). The attacker used Docker API access to deploy a shell script dropper, attempted to create a privileged container with host filesystem access, and dropped what appears to be an XMRig-based Monero miner. I assess with moderate confidence that the campaign overlaps with the Diicot threat cluster (also tracked historically as Mexals).
To put the evidence in perspective: professional CTI teams like Unit 42 assess state-sponsored campaigns at “moderate confidence” even with years of telemetry, multiple custom backdoors, and weeks of hands-on-keyboard timing analysis. My observation window is a single day from a single honeypot. I use the same “moderate confidence” framing because the indicator overlaps are real and worth reporting, but my dataset is narrow compared to what would normally support this kind of claim. The analytic frameworks I apply throughout (Admiralty grading, the Diamond Model, and ACH) are how I account for that gap.
Key Judgments
These are the main analytic conclusions. Each includes a confidence level (quality of evidence) and a likelihood assessment (probability of the conclusion) using standardised estimative language. Definitions are in Appendix B.
-
The observed activity is an automated cryptojacking campaign targeting exposed Docker APIs.
- Confidence: High — Directly observed in honeypot telemetry (Admiralty: A1) across 157 events; miner configuration files captured; payload confirmed malicious by ANY.RUN sandbox (Admiralty: B2).
- Likelihood: Almost certain (95–99%)
-
The payload attempts host container escape via privileged container creation.
- Confidence: High — Container creation parameters (
Privileged: true, host root bind-mount) were directly captured in the Docker API request logs (Admiralty: A1). - Likelihood: Almost certain (95–99%)
- Confidence: High — Container creation parameters (
-
The miner component is XMRig-based.
- Confidence: Moderate — The captured configuration file uses XMRig’s JSON schema and field names (Admiralty: A2), and the pool/wallet setup is consistent with XMRig. I did not reverse-engineer the binary itself, so this is inferred from the configuration rather than confirmed from the executable.
- Likelihood: Very likely (80–95%)
-
The campaign overlaps with the Diicot (Mexals) threat cluster.
- Confidence: Moderate — Multiple indicators align with documented Diicot TTPs: exact directory path matches, Romanian-language script variables, Discord webhook C2, and firewall port-blocking. But the primary payload has been publicly available on MalwareBazaar since approximately May 2026, meaning any group could have adopted this tooling. That limits the exclusivity of the infrastructure overlap needed for high confidence. See Section 7 for the full Analysis of Competing Hypotheses.
- Likelihood: Likely (55–80%)
Sources and Evidence Grading
Each claim is grounded in one of the following sources, graded using the NATO Admiralty Scale (see Appendix B for the full scale):
| Source | Admiralty Grade | Description |
|---|---|---|
| Honeypot telemetry | A1 | My own instrumented system; events logged automatically and directly confirmed through captured API requests, timestamps, and payloads. |
| ANY.RUN sandbox | B2 | Established analysis platform; results probably true, though sandbox execution may differ slightly from live deployment. |
| Captured config files | A2 | Files extracted directly from the honeypot staging directory; data is authentic, but interpretation (e.g., “XMRig config”) is inferred from schema matching. |
| OSINT / public reporting | C3 | Vendor reports from Akamai, Bitdefender, and Trend Micro; IOC matches are real, but whether they prove attribution involves interpretation. |
Where I reference specific data points, I note which source they come from.
1. Summary of Observations
On 17 July 2026, my honeypot recorded 157 events from the IP address 185.214.96.57 (Latvia, AS207137 PacketHub S.A.), targeting both an exposed Docker API endpoint on port 2375 (66 events) and a VNC service on port 5900 (91 events).
The activity followed an automated pattern: rather than a single sustained session, the attacker operated in three distinct bursts separated by hours of inactivity, consistent with cron-scheduled automation rather than manual interaction.
The campaign followed a clear progression:
- Test container command execution with
echo test - Deploy a shell script dropper (
.sugipepulesrl) to all discovered containers - Attempt to create a new privileged container with the host root filesystem mounted at
/host - Probe for additional escape vectors (overlay2 layers, containerd sockets, Kubernetes API endpoints)
- Attempt VNC brute-force in parallel
The dropper was fetched from a staging server at 45.153.34.212:8181. Based on the files it dropped and the configuration data I extracted, the payload’s primary purpose appears to be deploying an XMRig-based Monero cryptominer, with additional functionality for persistence, evasion, and locking out competing attackers.
2. Key Metrics
| Metric | Value | Source |
|---|---|---|
| Total Events | 157 | Honeypot telemetry (66 Docker / 91 VNC) |
| Attack Sessions | 3 distinct bursts | Honeypot telemetry (04:10, 12:08, 14:55 UTC) |
| Containers Targeted | 5 existing + 1 created by attacker | Honeypot telemetry |
| AbuseIPDB Score | 14 | AbuseIPDB lookup |
| VNC Passwords Tried | 12 | Honeypot telemetry |
3. Infrastructure Observed
Based on the honeypot logs and the configuration files extracted from the dropper, the campaign appears to involve the following infrastructure:
|
|
- 185.214.96.57 — The scanning host. Located in Latvia, hosted on PacketHub S.A. (AS207137). This is the IP that connected to the honeypot. The scanning tool used
Go-http-client/1.1andgo-dockerclientuser-agent strings. - 45.153.34.212:8181 — The staging server hosting the dropper script and secondary payloads. The dropper fetches binaries and configuration files from subdirectories on this host.
- 64.89.163.174:3333 and 45.153.34.212:3333 — Referenced in the captured miner configuration as Stratum proxy endpoints. Based on the configuration structure, these appear to be private proxies that relay to the public mining pool.
- pool.supportxmr.com — The final destination mining pool, referenced in the captured configuration.
Monero Wallet (from captured config)
The miner configuration targets the following Monero address:
|
|
Monero’s privacy features (stealth addresses, ring signatures) make it difficult to track transaction volumes, though the SupportXMR pool dashboard may show active worker connections for this address.
Mining Pool Port Configuration (from captured config)
The captured configuration file lists multiple fallback pool endpoints on different ports, likely to increase the chance of successful connections across different network environments:
pool.supportxmr.com:443(TLS)pool.supportxmr.com:9000(TLS)pool.supportxmr.com:5555pool.supportxmr.com:8080pool.supportxmr.com:80
Using ports like 443, 8080, and 80 may help the miner’s traffic blend with normal web traffic and avoid port-based firewall rules that block common mining ports.
4. Diamond Model Analysis
The Diamond Model of Intrusion Analysis (Caltagirone, Pendergast, Betz, 2013) structures intrusion events around four vertices: Adversary, Capability, Infrastructure, and Victim. Mapping data to each vertex separates what’s known from what’s inferred.
|
|
Vertex Mapping
| Vertex | Observed / Assessed | Admiralty Grade | Confidence |
|---|---|---|---|
| Adversary | Unknown. Indicators overlap with the Diicot (Mexals) threat cluster based on linguistic markers, directory structures, and operational TTPs. No exclusive infrastructure link or binary-level fingerprint confirms this. | C3 | Moderate |
| Capability | Multi-stage shell script dropper (.sugipepulesrl) with embedded evasion, persistence, and firewall manipulation functions. XMRig-format miner configuration. Go-based Docker API scanning tool. Discord webhook for victim notification. Container escape via privileged container creation. |
A1 (dropper observed directly), B2 (binary capabilities inferred from sandbox + config) | High |
| Infrastructure | Scanning node: 185.214.96.57 (AS207137, Latvia). Staging/C2: 45.153.34.212:8181. Mining proxies: 64.89.163.174:3333, 45.153.34.212:3333. Destination pool: pool.supportxmr.com. Discord webhook for notifications. |
A1 (IPs from honeypot logs), A2 (proxies/pool from captured config) | High |
| Victim | My honeypot — exposed Docker API (port 2375) and VNC (port 5900). The attack is opportunistic and automated, targeting any internet-facing system with an unauthenticated Docker API. No evidence of targeting specific organisations or sectors. | A1 | Very High |
Intelligence Gaps
The Diamond Model also helps surface where evidence is missing. The primary gaps are:
- Adversary vertex: This is the weakest vertex. I have indicator overlaps but no exclusive link (e.g., shared C2 infrastructure with known Diicot campaigns, or unique binary artefacts tied to a specific developer). Strengthening this vertex would require infrastructure pivoting (e.g., passive DNS, historical WHOIS, or shared TLS certificate analysis on the C2 server) or binary reverse engineering.
- Capability vertex (partial): I have not reverse-engineered
.system3dor.b4nd1d0. The binary capabilities are inferred from configuration files and sandbox behaviour, not confirmed from disassembly. Unique compiler artefacts, embedded strings, or code-signing patterns in the binaries could strengthen or weaken the adversary assessment. - Meta-feature — Social-Political context: The Diamond Model includes meta-features like the adversary’s motivation. I assess this as financially motivated cryptojacking (Monero mining) with High Confidence based on the miner configuration and pool setup. There is no evidence of espionage, destructive, or hacktivist intent.
5. Timeline of Observed Activity
The honeypot captured three distinct bursts of activity, with long gaps of silence between them.
Burst 1 — Initial Access and Payload Deployment (04:10 - 04:43 UTC)
- 04:10:36 — First Docker API interaction. The tool executed
echo testinside containera0c2c51cto verify command execution. - 04:12:46 - 04:12:57 — Within an 11-second window, the dropper command was sent to all 5 existing containers, instructing each to fetch
.sugipepulesrlfrom the staging server. - 04:15:58 — A request to create a new container was sent via the Docker API. The parameters were: image
ubuntu:22.04,Privileged: true,NetworkMode: host, with the host root filesystem bind-mounted to/hostinside the container, and a restart policy ofunless-stopped. This combination would give the container unrestricted access to the host’s filesystem, network, and kernel capabilities. - 04:43:43 — VNC brute-force activity began on port 5900, cycling through 12 common passwords (123456, password, admin, default, etc.).
~7.5 hour gap — no traffic observed.
Burst 2 — Re-Exploitation and Lateral Probing (12:08 - 12:10 UTC)
- 12:08:56 — Another
echo testto confirm continued access. - 12:09:02 — The same dropper command was re-sent to container
a0c2c51c. - 12:09:40 — Checked for
/var/lib/docker/overlay2/inside the container — this would indicate whether Docker’s storage layers are accessible from within, which is another potential escape vector. - 12:09:52 — Queried several Kubernetes API endpoints (
/api/v1/secrets,/api/v1/pods,/api/v1/nodes,/apis/apps/v1/deployments), apparently checking whether the Docker environment is part of a larger Kubernetes cluster.
~2.75 hour gap — no traffic observed.
Burst 3 — Socket Reconnaissance and Final Sweep (14:55 - 15:17 UTC)
- 14:55:29 — Connectivity check and dropper re-deployment to remaining containers.
- 14:56:15 — Searched for containerd and shim unix sockets via
/proc/net/unixandss -lxp. If reachable from inside a container, these sockets could allow direct communication with the container runtime — another potential escape path. - 15:17:24 — A final VNC attempt with password
123456closed out the session.
6. Payload Analysis
Stage 1: Initial Command Sequence
The command sequence sent to each container combined reconnaissance, credential access, and dropper staging:
|
|
A few things to note:
nprocreports the number of available CPU cores — useful for tuning a miner’s thread count.cat /host/etc/shadowattempts to read the host system’s password hash file via the/hostmount point. This would only work in the newly created privileged container where the host root was mounted. In existing containers without this mount, it would silently fail (the2>/dev/nullsuppresses the error).- The dropper uses both
curlandwgetas a fallback mechanism in case one is not installed. history -cclears the shell history to reduce forensic traces.
Stage 2: Dropper Behavior (.sugipepulesrl)
Based on the ANY.RUN sandbox analysis and my static reading of the script, the dropper performs the following:
Command aliasing for evasion — The script contains a function that rewrites shell aliases to neutralise common monitoring tools:
|
|
If an administrator ran htop to investigate a CPU spike or netstat to check network connections, these commands would silently produce no output. Crude, but it works long enough to delay detection.
The script also clears shell history and uses chattr +i to make the SSH authorized_keys file immutable, preventing easy removal of any keys the attacker may inject.
Firewall manipulation (fakewhiteblack.sh) — One of the files dropped by the dropper is a script that uses the host’s firewall tools (iptables, ufw, or firewall-cmd, depending on what’s available) to block incoming connections to port 2375. This is a common pattern in cryptojacking campaigns: after gaining access through an exposed Docker API, the attacker closes the door behind them to prevent competing groups from using the same entry point. Akamai described the same behavior in their August 2025 report on Docker API campaigns.
Notification via Discord webhook — The dropper includes a function that sends a notification to a hardcoded Discord webhook:
|
|
The notification appears to include the victim’s external IP (fetched from ifconfig.co), the current username, a timestamp, and system uptime. This gives the operator a real-time alert when a new system is compromised.
Captured Files and Directory Structure
The dropper stages its files in hidden directories. The following is compiled from the honeypot telemetry and the ANY.RUN sandbox execution:
| Path | Description | Source |
|---|---|---|
/tmp/.esd101/ |
Primary staging directory | Honeypot + ANY.RUN |
/tmp/.esd101/.sugipepulesrl |
Stage 1 dropper script (SHA256: F2F9D016...39501F) |
Honeypot + ANY.RUN |
/tmp/.esd101/.system3d |
Stage 2 binary — appears to be the miner component | ANY.RUN |
/tmp/.esd101/.b4nd1d0 |
Unknown purpose — possibly a watchdog or persistence script | ANY.RUN |
/tmp/.esd101/config.json |
Miner configuration (pool endpoints, wallet) | Honeypot |
/tmp/.esd101/.config4.json |
Secondary configuration file | ANY.RUN |
/tmp/.esd101/fakewhiteblack.sh |
Firewall manipulation script | ANY.RUN |
/var/tmp/.ladyg0g0/.pr1nc35 |
Secondary persistence indicator | ANY.RUN |
/usr/.SQL-Unix/.SQL/.db |
Hidden bash profile modification script | ANY.RUN |
A note on .system3d: The HTML report I generated from the honeypot data described this as “likely a cryptominer (XMRig or Dero miner) with botnet/worm capabilities,” based on OSINT correlation with similar campaigns. I did not execute the binary or reverse-engineer it. The “XMRig-based” label is inferred from the configuration file structure (which uses XMRig’s JSON schema) and the mining pool/wallet setup, not confirmed from the binary itself.
A note on .b4nd1d0: The ANY.RUN sandbox flagged this file but its exact function is unclear. Based on the name pattern and its placement alongside the miner binary, I suspect it serves as a watchdog or persistence mechanism, but I have not confirmed this.
7. Attribution Assessment: Possible Diicot Overlap
Assessment summary: This campaign is likely (55–80%) associated with the Diicot threat cluster. Moderate confidence — multiple independent indicator categories align with documented Diicot TTPs, but the public availability of the primary payload limits the exclusivity of the infrastructure overlap needed for high confidence.
Attribution in threat intelligence requires separating what you observed from what you conclude.
What is Diicot? Diicot (also tracked as Mexals in some reporting) is a threat cluster documented by Bitdefender and Akamai Security Research, among others. Public reporting associates the cluster with Romanian-language tooling and a history of targeting Linux systems for cryptojacking through SSH brute-forcing, Docker API exploitation, and custom shell script droppers.
Indicators supporting the assessment
I have organised the supporting indicators by category, with Admiralty grades for each piece of evidence.
1. Directory and file path matches (Evidence grade: A1 observation, C3 attribution link)
Several of the directory paths used by this payload match IOCs published in Diicot reporting:
/var/tmp/.ladyg0g0/— This specific hidden directory name appears in Diicot IOC lists published by Bitdefender/usr/.SQL-Unix/.SQL/.db— Also referenced in Diicot documentation- The use of
/tmp/.esd101/as a staging directory follows the same dot-prefixed hidden directory convention
The paths themselves are A1 — I directly observed them in captured payloads and sandbox output. The link to Diicot via published IOC lists is C3 — reputable vendor reports, but IOCs can be reused across groups, and the original reports are from 2023–2025.
2. Romanian-language references in scripts (Evidence grade: A2)
Several variable names and file references in the dropper script appear to use Romanian language:
- A function named
pisamsystemu— appears to be a Romanian-language phrase - A binary named
muiecoaie— appears to be Romanian slang - The C2 subdirectory
/.rupemnasa/— matches submissions catalogued in public malware indices tracking Romanian-origin tooling
The strings are directly observed in the captured script (A-rated source) and are probably true indicators of the author’s language background (2-rated). But language in code is a moderate-confidence attribution signal — scripts can be copied, forked, or intentionally misleading.
3. Operational TTP alignment (Evidence grade: B2 for individual TTPs, C3 for the composite link)
The combination of Discord webhooks for victim notification, XMRig deployment via Docker API exploitation, and the firewall port-blocking behaviour in fakewhiteblack.sh is consistent with the operational profile described in public Diicot reporting. Each individual TTP is commonly seen across cryptojacking campaigns. It is their specific combination that is more distinctive.
4. MalwareBazaar timeline (Evidence grade: C3)
The .sugipepulesrl filename matches submissions on MalwareBazaar dating to approximately May 2026, suggesting the payload (or a variant of it) has been active for at least five months as of this writing. This is contextual rather than attributive — it places the activity within an ongoing campaign but does not by itself identify who operates it.
What prevents a High Confidence assessment
The distinction between Moderate and High Confidence here comes down to one critical gap: exclusive infrastructure overlap.
- The primary payload (
.sugipepulesrl) has been publicly available on MalwareBazaar since approximately May 2026. Any group could have downloaded and deployed it. Public availability weakens the exclusivity of the link. - I did not perform binary analysis on
.system3dor other compiled components. Unique compilation artefacts, debug paths, or embedded infrastructure references in the binaries could strengthen or weaken the attribution. - I only have visibility into what hit my honeypot. I observed a single IP — I cannot correlate against other targets, track infrastructure ownership over time, or confirm whether the C2 server is shared with known Diicot infrastructure.
- Some of the published Diicot IOCs I cross-referenced date from 2023–2025 campaigns. TTPs and tooling evolve; exact path matches from older campaigns become less attributive over time if the tooling has been publicly documented (and thus available for reuse).
- The Discord webhook ID could represent shared infrastructure, a copycat, or a separate operational cell using the same tooling.
Analysis of Competing Hypotheses (ACH)
Analysis of Competing Hypotheses (ACH) is a structured analytic technique developed by Richards Heuer for the CIA. The method requires the analyst to define competing hypotheses, then evaluate each piece of evidence against every hypothesis — not just the preferred one. Evidence consistent with all hypotheses has low diagnostic value. What matters most is evidence that discriminates: pieces that support one hypothesis while contradicting another.
Hypotheses under consideration:
| ID | Hypothesis | Description |
|---|---|---|
| H1 | Active Diicot operation | This campaign is operated directly by the Diicot (Mexals) threat cluster using their own infrastructure and tooling. |
| H2 | Tooling reuse by unrelated actor | An unrelated threat actor obtained Diicot’s publicly available tooling (e.g., from MalwareBazaar) and deployed it without organisational ties to Diicot. |
| H3 | Affiliate or splinter cell | Operators with some relationship to Diicot (shared tooling lineage, former members, or loose affiliates) but operating as an independent cell. |
| H4 | Independent convergence | An unrelated actor arrived at similar patterns through common cryptojacking practices, without awareness of or connection to Diicot tooling. |
ACH Evidence Matrix:
The notation: ++ strongly supports, + supports, N neutral, - contradicts, – strongly contradicts.
| Evidence | Admiralty | H1: Active Diicot | H2: Tooling Reuse | H3: Affiliate | H4: Convergence |
|---|---|---|---|---|---|
E1: Exact directory paths (.ladyg0g0, .SQL-Unix) match documented Diicot IOCs |
A1/C3 | ++ | + | ++ | – |
E2: Romanian-language function names (pisamsystemu) and binary names (muiecoaie) |
A2 | ++ | + | ++ | – |
| E3: Discord webhook C2 notification pattern | A1 | + | + | + | N |
E4: Firewall port-blocking via fakewhiteblack.sh |
B2 | + | + | + | N |
| E5: XMRig + SupportXMR pool (common across cryptojacking) | A2 | N | N | N | + |
| E6: Payload publicly available on MalwareBazaar since ~May 2026 | C3 | N | ++ | N | N |
| E7: No exclusive infrastructure overlap confirmed (C2 not linked to known Diicot infra) | — | - | N | N | N |
| E8: No binary reverse-engineering performed (data gap) | — | N | N | N | N |
Reading the matrix:
-
H4 (Independent convergence) is the weakest hypothesis. Evidence E1 and E2 strongly contradict it — the specific directory names
.ladyg0g0and.SQL-Unixare distinctive strings unlikely to arise independently, and Romanian-language variable names are not a common cryptojacking pattern. H4 can be substantially deprioritised. -
H1 (Active Diicot) is the most supported hypothesis, with strong support from the most diagnostic evidence (E1, E2). It carries one contradiction (E7): if this were an active Diicot operation, we would expect to confirm infrastructure ties to known Diicot campaigns. The absence of this link is not proof against H1 — infrastructure rotates — but it prevents the assessment from reaching High Confidence.
-
H2 (Tooling reuse) remains viable. The payload’s public availability on MalwareBazaar (E6) strongly supports the possibility that an unrelated actor adopted this tooling. This concern is not hypothetical — as Unit 42 noted in their analysis of Southeast Asian government targeting, threat groups “often share tooling, as well as tactics, techniques and procedures (TTPs) with each other,” to the point that even well-resourced CTI teams “cannot state with certainty whether these public reports relate to the same group.” The same dynamic applies here. But H2 is somewhat weakened by E1 and E2 — an actor reusing a public dropper would not necessarily reproduce the same directory structures and Romanian-language naming conventions unless they deployed the tooling without modification.
-
H3 (Affiliate/splinter) cannot be distinguished from H1 with the data I have. This hypothesis scores identically to H1 on most evidence. Distinguishing between “Diicot core” and “Diicot affiliate” would require internal campaign visibility that I do not possess.
Most diagnostic evidence: E1 (directory paths) and E2 (Romanian language) are the most diagnostic — they strongly discriminate H1/H3 from H4. E6 (public payload availability) is the most diagnostic for keeping H2 alive. E3, E4, and E5 are consistent with nearly all hypotheses and therefore have low diagnostic value for attribution (though they confirm the campaign’s operational nature).
Formal Assessment
| Dimension | Assessment |
|---|---|
| Confidence | Moderate — Multiple credible indicator categories align across independent dimensions (linguistic, structural, operational), but the payload’s public availability and the absence of exclusive infrastructure overlap prevent high confidence. The ACH analysis shows that H4 (convergence) can be substantially deprioritised, but H1 and H2 cannot be cleanly separated without additional data. |
| Likelihood | Likely (55–80%) — The indicator convergence across the most diagnostic evidence (directory paths, linguistic markers) makes Diicot involvement (H1 or H3) the most probable explanation, but tooling reuse (H2) remains a credible alternative. |
| Primary hypothesis | H1/H3 — Active Diicot operation or closely affiliated cell. |
| Leading alternative | H2 — Tooling reuse by an unrelated actor who obtained the payload from public repositories. |
| Deprioritised | H4 — Independent convergence. Contradicted by the specificity of directory paths and linguistic markers. |
What would change the assessment
| Evidence that would be needed | Effect on assessment |
|---|---|
Binary RE of .system3d revealing Diicot-specific compiler artefacts, debug paths, or embedded C2 addresses matching known Diicot infrastructure |
Would elevate to High Confidence (H1) |
Passive DNS or WHOIS pivot linking 45.153.34.212 to previously documented Diicot infrastructure |
Would elevate to High Confidence (H1) |
| Binary RE showing generic/commodity miner with no Diicot-specific artefacts | Would strengthen H2 (tooling reuse) |
| Discovery of the same payload deployed by a non-Romanian-speaking group with different C2 infrastructure | Would strengthen H2 (tooling reuse) |
| Identification of the Discord webhook owner via OSINT or law enforcement disclosure | Could confirm or eliminate H1/H3 |
8. MITRE ATT&CK Mapping
The following techniques were observed directly in the honeypot telemetry or confirmed via the ANY.RUN sandbox analysis:
| Tactic | Technique | Observed Behavior |
|---|---|---|
| Initial Access | T1078 — Valid Accounts | Access via unauthenticated Docker API |
| Initial Access | T1110 — Brute Force | VNC password brute-force (12 passwords) |
| Execution | T1059.004 — Unix Shell | Commands executed via /bin/sh inside containers |
| Persistence | T1053.003 — Cron | Crontab modification for periodic re-execution |
| Persistence | T1098.004 — SSH Authorized Keys | chattr +i on authorized_keys file |
| Privilege Escalation | T1611 — Escape to Host | Privileged container creation with host root mount |
| Defense Evasion | T1070.003 — Clear Command History | history -c and ash_history deletion |
| Defense Evasion | T1564.001 — Hidden Files/Directories | Dot-prefixed directories and filenames |
| Credential Access | T1003.008 — /etc/passwd and /etc/shadow | Read /etc/passwd; attempted /host/etc/shadow |
| Command and Control | T1105 — Ingress Tool Transfer | Dual curl/wget download from staging server |
9. Detection and Hardening Recommendations
If you run containerised Linux infrastructure, these may help detect or prevent this type of activity.
Detection
- Process monitoring: Alert on shell processes (
bash,dash,sh) executing from world-writable directories (/tmp/,/var/tmp/) — especially if the command line references directory names like.esd101,.ladyg0g0, or.SQL-Unix. - Network monitoring: Watch for outbound connections on ports commonly used for cryptomining (3333, 5555) or unexpected outbound connections on ports 443, 8080, 9000 from non-browser processes.
- Docker API logging: If you run a Docker daemon with remote API access, monitor for
go-dockerclientorGo-http-client/1.1user-agent strings, and alert ondocker execcommands originating from external IPs.
Hardening
- Do not expose the Docker API (port 2375) to untrusted networks. If remote access is required, use mutual TLS authentication.
- Restrict privileged container creation. Use Docker’s
--no-new-privilegesflag, drop unnecessary capabilities, and consider rootless Docker to limit the blast radius of container escapes. - Monitor for containers created with
Privileged: trueor host filesystem mounts — these are almost never needed in production and are the primary escape mechanism used in this campaign.
Appendix A: Indicators of Compromise
Network Indicators
| Indicator | Context |
|---|---|
185.214.96.57 |
Scanning / initial access (AS207137, PacketHub S.A., Latvia) |
45.153.34.212:8181 |
Payload staging server |
45.153.34.212:3333 |
Possible mining proxy (from captured config) |
64.89.163.174:3333 |
Possible mining proxy (from captured config) |
pool.supportxmr.com |
Mining pool (from captured config) |
File Indicators
| Path | SHA256 |
|---|---|
/tmp/.esd101/.sugipepulesrl |
F2F9D016751C7F8520F74E41E6BE0E6C1216AED41D06E802AA52BAFD7A39501F |
/tmp/.esd101/.system3d |
Not captured — binary fetched at runtime |
/tmp/.esd101/.b4nd1d0 |
Not captured |
/var/tmp/.ladyg0g0/.pr1nc35 |
Not captured |
Filesystem Paths to Hunt For
/tmp/.esd101//var/tmp/.ladyg0g0//usr/.SQL-Unix/.SQL/.db
References
- ANY.RUN Interactive Sandbox Analysis — Task ID:
f8360f46-2771-4bc0-900f-fa99a1981154. Analysed payload:hxxp://45.153.34[.]212:8181/.sugipepulesrl(Ubuntu 22.04.2 environment, 17 July 2026). - Custom Honeypot Telemetry — 157 events from IP 185.214.96.57 across Docker TCP port 2375 and VNC port 5900 (17 July 2026).
- Captured Configuration Files — XMRig-format JSON configuration files extracted from
/tmp/.esd101/staging directory (static analysis only, 17 July 2026). - Akamai Security Research — Reporting on Docker API exploitation campaigns with firewall-blocking behaviour (2025).
- Bitdefender Labs — Reporting on Diicot/Mexals threat cluster TTPs and IOCs.
- Trend Micro — “Exposed Docker Server Abused to Drop Cryptominer” (June 2025).
- MalwareBazaar —
.sugipepulesrlsubmissions (earliest observed: ~May 2026). - Unit 42, Palo Alto Networks — “Suspected China-Based Espionage Operation Against Military Targets in Southeast Asia” (March 2026). Referenced for analytic methodology comparison.
- Unit 42, Palo Alto Networks — “Multiple Espionage Campaigns Target Southeast Asian Government Organization” (2025). Notable for the caveat that threat groups “often share tooling, as well as tactics, techniques and procedures (TTPs) with each other” — directly applicable to the Diicot tooling-reuse hypothesis in this report.
- Heuer, Richards J. — Psychology of Intelligence Analysis (CIA Center for the Study of Intelligence, 1999). Source methodology for Analysis of Competing Hypotheses (ACH).
- ODNI ICD 203 — Analytic Standards (Office of the Director of National Intelligence). Framework for confidence levels and estimative language.
- Caltagirone, Pendergast, Betz — The Diamond Model of Intrusion Analysis (2013). Framework for structuring intrusion analysis across adversary, capability, infrastructure, and victim vertices.
Appendix B: Analytic Methodology
This appendix defines the structured analytic frameworks used throughout the report, so readers can verify what I mean by terms like “moderate confidence” or “A1.”
NATO Admiralty Scale
The Admiralty Code is a two-axis grading system used in intelligence analysis to separately evaluate the reliability of the source and the credibility of the information it provides. Each piece of evidence receives a letter-number grade (e.g., “B2”). A high-reliability source can still provide low-credibility information, and vice versa — separating the two prevents conflation.
Source Reliability:
| Grade | Meaning |
|---|---|
| A | Completely reliable — no doubt about the source’s authenticity, trustworthiness, or competency. History of complete reliability. |
| B | Usually reliable — minor doubt. Source has been reliable in most instances. |
| C | Fairly reliable — doubt of authenticity, trustworthiness, or competency, but has provided valid information in the past. |
| D | Not usually reliable — significant doubt. Has provided valid information in the past but more often has been unreliable. |
| E | Unreliable — lacking in authenticity, trustworthiness, or competency. History of invalid information. |
| F | Reliability cannot be judged — no basis for evaluating the source’s reliability. |
Information Credibility:
| Grade | Meaning |
|---|---|
| 1 | Confirmed — confirmed by other independent sources. Logical in itself. Consistent with other information on the subject. |
| 2 | Probably true — not confirmed. Logical in itself. Consistent with other information on the subject. |
| 3 | Possibly true — not confirmed. Reasonably logical in itself. Agrees with some other information on the subject. |
| 4 | Doubtful — not confirmed. Possible but not logical. No other information on the subject. |
| 5 | Improbable — not confirmed. Not logical in itself. Contradicted by other information on the subject. |
| 6 | Truth cannot be judged — no basis exists for evaluating the validity of the information. |
ODNI-Derived Confidence Levels
Where the Admiralty Scale grades individual evidence, confidence levels grade overall analytic judgments — the synthesised conclusions drawn from multiple sources. Derived from the U.S. Office of the Director of National Intelligence (ODNI) Intelligence Community Directive 203 (Analytic Standards).
| Level | Definition |
|---|---|
| Very High | Based on extensive, high-quality information from multiple independent sources with strong corroboration. Alternative explanations have been substantially ruled out. |
| High | Based on high-quality information from multiple independent, corroborating sources. Well-founded, though not certain. Minor alternative explanations remain. |
| Moderate | Based on credibly sourced information that is plausible and consistent with known patterns, but not sufficiently corroborated or complete to warrant high confidence. Alternative interpretations remain possible. |
| Low | Based on fragmentary, uncorroborated information, or from sources whose reliability cannot be established. Significant uncertainty exists. |
| Very Low | Based on minimal evidence that is largely inferential. The assessment is speculative and should be treated as a working hypothesis only. |
Estimative Language
Standardised probability language used alongside confidence levels to express how likely a conclusion is, given the available evidence.
| Term | Approximate Probability |
|---|---|
| Almost certain | 95–99% |
| Very likely | 80–95% |
| Likely | 55–80% |
| Roughly even chance | 45–55% |
| Unlikely | 20–45% |
| Very unlikely | 5–20% |
| Remote | 1–5% |
Diamond Model of Intrusion Analysis
The Diamond Model (Caltagirone, Pendergast, Betz, 2013) structures intrusion events around four core vertices: Adversary (who), Capability (what tools and techniques), Infrastructure (what systems and networks), and Victim (who was targeted). By mapping observed data to each vertex, analysts can identify what is known, what is inferred, and where intelligence gaps remain. The model also includes meta-features such as social-political context and technology context.
Analysis of Competing Hypotheses (ACH)
ACH is a structured analytic technique developed by Richards Heuer for the CIA (Psychology of Intelligence Analysis, 1999). Rather than seeking evidence that confirms a preferred explanation, ACH requires the analyst to:
- Identify all reasonable hypotheses
- List significant evidence and arguments for and against each
- Evaluate each piece of evidence against every hypothesis — not just the preferred one
- Focus on diagnostic evidence — pieces that discriminate between hypotheses by supporting one while contradicting another
- Reject hypotheses that are contradicted by the most diagnostic evidence
- Report conclusions with sensitivity to the evidence that remains uncertain
Evidence consistent with all hypotheses has low diagnostic value. What matters most is evidence that discriminates between competing explanations.