Fresh From the Honeypot: RedTail
Overview
RedTail - a dynamically configured miner-capable payload.
Campaign Graph
Methodology
This investigation was done entirely statically (i.e. I didn't execute the binary && Hybrid Analysis couldn't run it anyway since some of the crucial components are dynamically generated at runtime!)
- Inspect ELF metadata without execution
- Check entropy and obvious packer indicators (UPX packer was used)
- Note high-entropy regions for offline inspection
- Attempt safe unpacking only when packer evidence supports it
- Use strings and command logs to separate static configuration from runtime (dynamic) configuration
- Correlate honeypot sessions, uploaded filenames, source IPs, staging domains, and payload-hosting infrastructure
Tools used
You don't need anything fancy, just a few libraries:
readelf,file,stat, andxxdfor ELF structure and byte-level triagebinwalkandbinwalk -Efor signature and entropy checksstrings,grep, and shell one-liners for static indicator extractionupxfor packer validation- honeypot logs for attacker workflow and source correlation
Investigation
Establish the RedTail upload pattern
Use a broad search over your honeypot logs:
sudo grep -RIEi 'redtail|wget|curl|stratum|pool|wallet|rig-id|worker-id|access-token' \
/home/honeypotPath
Representative result:
{..."timestamp":"2026-04-21T08:32:54.874315Z","src_ip":"130.12.180.51","session":"af0e2f1629e0","protocol":"ssh"}
Identify architectures and basic ELF traits
Run file across the copied samples:
sudo file /home/analysis/redtail/redtail.*
Representative result:
/home/analysis/redtail/redtail.arm7: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), statically linked, no section header
/home/analysis/redtail/redtail.arm8: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, no section header
/home/analysis/redtail/redtail.i686: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, no section header
/home/analysis/redtail/redtail.x86_64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, no section header
Key takeaways:
- The operator has builds for multiple CPU families
- The binaries are statically linked
- The files lack section headers
Inspect ELF headers without running the sample
Use readelf to inspect program headers and confirm the lack of sections:
sudo readelf -a /home/analysis/redtail/redtail.arm7
Representative result:
ELF Header:
Class: ELF32
Data: 2's complement, little endian
Type: EXEC (Executable file)
Machine: ARM
Entry point address: 0x501c0c
Number of section headers: 0
There are no sections in this file.
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000000 0x00010000 0x00010000 0x01000 0x3b5040 RW 0x1000
LOAD 0x000000 0x003c6000 0x003c6000 0x13d254 0x13d254 R E 0x1000
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x10
This is a good early warning that string extraction and program-header-based offsets may be more useful than section-based workflows.
Check entropy and obvious packing indicators
Use binwalk for signatures and entropy:
sudo binwalk /home/analysis/redtail/redtail.arm7
sudo binwalk -E /home/analysis/redtail/redtail.arm7
Representative result:
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 ELF, 32-bit LSB executable, ARM, version 1 (GNU/Linux)
DECIMAL HEXADECIMAL ENTROPY
--------------------------------------------------------------------------------
1024 0x400 Rising entropy edge (0.975263)
A high-entropy edge is not proof of packing by itself, but it is a useful triage clue. In this case, a byte-level check also revealed UPX-like material in at least one sample region.
sudo xxd -s 0x80 -l 128 /home/analysis/redtail/redtail.arm7
Representative result:
00000090: 1000 0000 1ed7 d4fb 5550 5821 5816 0e17 ........UPX!X...
Important caveat: seeing UPX!-like bytes does not always mean the current tool can unpack the exact sample. Validate before attempting unpacking!
Test UPX safely
For the RedTail ARM sample, UPX did not identify a standard packed file:
sudo upx -t /home/analysis/redtail/redtail.arm7
Representative result:
upx: /home/analysis/redtail/redtail.arm7: NotPackedException: not packed by UPX
For the x86_64 RedTail sample, unpacking succeeded:
sudo upx -d /home/analysis/redtail/redtail.x86_64 \
-o /home/analysis/redtail/unpacked.x86_64
Representative result:
File size Ratio Format Name
5042463 <- 1880264 37.29% linux/amd64 unpacked.x86_64
Unpacked 1 file.
That unpacked x86_64 build became the most useful static target.
Extract RedTail mining and protocol indicators
Search for mining-related strings:
sudo strings -a -n 6 /home/analysis/redtail/unpacked.x86_64 \
| grep -Ei 'pool|stratum|:3333|:4444'
Representative result:
pool address
pools
stratum+ssl://%s
stratum+ssl://
stratum+tcp://
[1;37mPOOL #%-7zu
[0;31mno active pools, stop mining
These are meaningful, as they show the binary supports mining and Stratum-style communication, but the actual pool and wallet are not present in plaintext.
Search for likely runtime configuration terms:
sudo strings -a -n 6 /home/analysis/redtail/unpacked.x86_64 \
| grep -Ei 'worker-id|access-token|restricted|rig-id|application/json|keepalived|jsonrpc'
Representative result:
worker-id
access-token
restricted
rig-id
{"id":%ld,"jsonrpc":"2.0","method":"keepalived","params":{"id":"%s"}}
application/json
The keepalived JSON-RPC-style template is one of the strongest static signals:
{"id":%ld,"jsonrpc":"2.0","method":"keepalived","params":{"id":"%s"}}
That points to a runtime model:
RedTail binary
-> contacts remote controller/config service
-> sends keepalive / identity data
-> receives mining pool + wallet + worker settings dynamically
Infrastructure Roles
130.12.180.51
Role: source IP of RedTail uploads
Evidence: RedTail architecture-specific uploads in the honeypot dataset
Confidence: high for source correlation
RedTail
Role: miner-capable Linux payload
Static finding: XMRig/Stratum capability present
Missing statically: wallet, pool, complete mining config
Likely model: runtime configuration via C2
Detection Logic
IF
binary strings contain stratum+tcp or stratum+ssl
THEN
Miner-capable payload with likely runtime-delivered configuration
Observations & Conclusions
RedTail’s value is in runtime configuration.
The RedTail sample exposes miner capability, Stratum support, JSON-RPC-style behavior, and worker/config terms, but not a static wallet or pool. That points toward dynamic C2 delivery of mining configuration.
