Desarrollo de páginas web y software a medida en Ecuador

jivsoft@hotmail.com +593 97 876 6762
Publicado: /

Criptojacking: tu CPU podría estar trabajando para un criminal sin que lo sepas

Criptojacking: cuando tus CPUs están trabajando para minar criptomonedas para un tercero sin que lo sepas. No siempre hay pantallas rojas ni ransomware: a veces el atacante roba ciclos de CPU, eleva tu factura eléctrica y degrada tus servicios mientras se esconde silenciosamente.

Criptojacking: tu CPU podría estar trabajando para un criminal sin que lo sepas

El criptojacking: trata de un fontanero fantasma que roba agua gota a gota; incluso puede pasar como un inquilino invisible que enciende tus luces por la noche. En ambos casos, el daño es lento, silencioso y difícil de detectar al principio. El criptojacking son malware o scripts que aprovechan CPU/GPU/recursos de red de servidores, desktops o contenedores para minar criptomonedas o realizar cálculos para terceros.

No causa pérdida inmediata de datos ni pantalla de rescate, por eso muchas veces pasa meses sin ser detectado —pero sus efectos se notan en facturas, capacidad reducida y mayor riesgo operativo.

¿Cómo se manifiesta (alto nivel, defensivo)?

  • En hosts comprometidos: procesos desconocidos usando mucho CPU/GPU, cargas de trabajo lentas, colas de trabajos demoradas.

  • En entornos web: scripts JavaScript que minan en el navegador de los usuarios (browser miners) incrustados en páginas comprometidas o inyectados por CDN/JS libs comprometidas.

  • En contenedores / K8s: pods que escalan solos o containers con procesos mineros, o imágenes maliciosas subidas a registries.

  • En servidores con acceso público: uso de vulnerabilidades, keys robadas o paneles no parchados para desplegar miners.

¿Por qué es un problema real? (impacto)

  • Costo operativo: mayor uso de CPU/GPU aumenta facturas eléctricas, reduce vida útil de hardware.

  • Rendimiento: aplicaciones lentas, timeouts, peor experiencia de usuario.

  • Superposición con otras intrusiones: criptojackers frecuentemente coexisten con accesos comprados o usados por otros atacantes —puede ser un “canario” de problemas mayores.

  • Dificultad de detectar: usan binarios legítimos, procesos ofuscados o cron jobs, y a menudo limpian traces superficiales.

Señales de compromiso (IoC) — ¿Qué vigilar ahora mismo?

  • Picos inexplicables y sostenidos de CPU/GPU en servidores que no coinciden con la carga normal.

  • Aumento en el consumo eléctrico o de facturación de la nube sin correlación con crecimiento de carga legítima.

  • Procesos con nombres inusuales o procesos legítimos (ej. php-fpm, node, python) con hijos que consumen CPU intensamente.

  • Conexiones salientes frecuentes hacia hosts/dominios no habituales (posible pool de minería o C2).

  • Archivos binarios nuevos en /tmp, /var/tmp, /dev/shm o C:\Windows\Temp.

  • Crontabs nuevos o tareas programadas con comandos curl|wget|bash|sh en fechas/hora extrañas.

  • Descargas de ejecutables desde servicios cloud o repositorios externos en hosts productivos.

  • Logs de contenedores / images desconocidas en registry; pods con re-escalado automático sin despliegue controlado.

  • Browser alerts/usuarios que reportan CPU alta en sus máquinas al visitar páginas específicas (browser-mining JS).

Mapeo a MITRE ATT&CK

  • T1496 — Resource Hijacking (técnica principal).

  • T1105 — Ingress Tool Transfer (descarga de payloads/miners).

  • T1059 — Command and Scripting Interpreter (scripts de arranque o cron).

  • T1078 — Valid Accounts (uso de cuentas válidas para desplegar miners).
    Usar este mapeo ayuda a priorizar detecciones y construir playbooks vinculados a técnicas concretas.

Detecciones prácticas (comandos y queries defensivas — solo para observación)

Nota: comandos de inspección readonly y queries para SIEM. No incluyen técnicas de ataque.

Inspección rápida en Linux (comando readonly para triage):

# procesos ordenados por CPU (único propósito: detectar)
ps aux --sort=-%cpu | head -n 20

# conexiones salientes de procesos sospechosos
ss -tnp | grep -E '(:3333|:3334|:4444|:25[0-9]{2}|:80|:443)' || ss -tnp

# buscar binarios nuevos/modificados en /tmp en las últimas 7 días
find /tmp /var/tmp /dev/shm -type f -mtime -7 -exec ls -l {} \;

Detección SIEM (pseudokql) — p.ej. buscar hosts con CPU anómala

SystemMetrics
| where TimeGenerated > ago(7d)
| summarize avgCPU = avg(CPUPercent) by Host
| where avgCPU > 60

Query Sumo/Elastic para crontabs modificados (ejemplo):

file_change_events
| where path in ("/etc/crontab","/var/spool/cron") and event.action == "modified" and timestamp > ago(14d)

Nota: adapta umbrales (60% es ejemplo) a la tasa normal de tus sistemas.

¿Cómo buscan entrar los criptojackers? (vectores comunes)

  • Exploits en servicios expuestos (RCE en aplicaciones web o paneles) y posterior descarga de miner.

  • Uso de credenciales robadas o claves privadas en servidores mal protegidos.

  • Compromiso de pipelines CI/CD o registries (subida de imágenes con miners).

  • Inyección de JavaScript en sitios web (XSS, CDN comprometido, librerías JS comprometidas) para minado en navegador.

  • Plugins CMS infectados o paquetes npm/python con código malicioso.

Controles preventivos y endurecimiento (servidores, contenedores y Laravel)

Controles para servidores Linux/Windows

  • Monitoreo continuo de métricas (CPU, GPU, I/O); alertas por anomalía con baselines históricos.

  • EDR/antivirus con firmas y detección de comportamiento (process injection, persistencia).

  • Restricción y hardening de servicios expuestos: parchear, eliminar paneles sin uso, cerrar puertos innecesarios.

  • Revisión de crontabs y tasks programados periódica (detecta persistencia).

  • FIM (File Integrity Monitoring): alertas si binarios nuevos aparecen en paths temporales.

  • Egress control: whitelisting de destinos salientes para servidores críticos, detectar conexiones a pools desconocidos.

  • Rotación y vetting de claves: no usar claves privadas en hosts sin protección; usar vault.

Controles para contenedores / Kubernetes

  • Limits en recursos: definir cpu y memory requests/limits en pods para evitar abuso.

  • SecurityContext: runAsNonRoot, readOnlyRootFilesystem, allowPrivilegeEscalation=false.

  • Admission controllers / imagePolicyWebhook: bloquear imágenes no firmadas o de registries no permitidos.

  • Scan de imágenes: vulnerabilidades + búsqueda de backdoors en imágenes con herramientas de SCA/Container Scanning.

  • NetworkPolicy para limitar egress y comunicación intra-cluster.

  • Evitar ejecución de contenedores privilegiados y desactivar mounts innecesarios como docker.sock.

Controles para aplicaciones web / Laravel

  • Deshabilitar funciones peligrosas en php.ini si no se necesitan: disable_functions = exec,passthru,shell_exec,system,proc_open,popen (si aplicable).

  • Validación y saneamiento de uploads: rechaza archivos ejecutables, valida MIME y guarda fuera de docroot; usa virus scanning en uploads.

  • Evitar exec desde PHP: si se necesita, usar procesos controlados y roles mínimos. Registrar y auditar cualquier llamada a procesos.

  • Dependencias seguras: composer audit, composer.lock controlado y revisión de paquetes; no usar paquetes de origen dudoso.

  • Protección contra XSS / inyección: evita que inputs controlados por usuarios inyecten scripts que puedan servir miners a otros visitantes.

  • WAF / ModSecurity: reglas para filtrar payloads de minado y scripts inyectados.

  • Rate limits y timeouts para endpoints que podrían ser utilizados para ejecutar jobs (evitar que un job desencadene la descarga/ejecución de binarios).

  • Segregar infra: evita que el servidor web tenga acceso SSH o a claves de despliegue; usa bastion host.

Ejemplo de políticas de contenedores (Kubernetes) — configuraciones recomendadas 

apiVersion: v1
kind: Pod
spec:
  containers:
  - name: app
    image: your-registry/your-app:tag
    resources:
      requests:
        cpu: "100m"
        memory: "128Mi"
      limits:
        cpu: "500m"
        memory: "512Mi"
    securityContext:
      allowPrivilegeEscalation: false
      readOnlyRootFilesystem: true
  securityContext:
    runAsNonRoot: true
Estas políticas evitan que un miner arrase los recursos del host y dificultan persistencia.

Playbook rápido de respuesta ante detección de criptojacking

  1. Detectar y confirmar

    • Correlaciona métricas (CPU/GPU), netflow y logs de procesos. Identifica PID, línea de comando y parent process.

    • Captura un snapshot de procesos (ps auxww), lsof -p <pid>, ss -tnp y volcado de conexiones.

  2. Contención

    • Aislar host: bloquear egress para el host (firewall) y, si es crítico, mover a VLAN de cuarentena.

    • Para contenedores: scale down / pause pod; aplicar kubectl cordon/drain si afecta nodo.

  3. Recolección de evidencia

    • Guardar binario sospechoso, hashes, crontab, logs del sistema, salida de dmesg y EDR artifacts. Tomar snapshot de memoria si es posible (para forense).

  4. Erradicación

    • Kill process (temporal), pero antes de matar captura memoria si necesitás forense.

    • Eliminar persistencias: crontabs, systemd services, scripts en /etc/init.d, usuarios nuevos o keys añadidos.

    • Reimage host si hay dudas sobre integridad.

  5. Remediación

    • Parchar vector inicial (vulnerabilidad explotada), rotar credenciales, revisar pipelines y registries.

    • Hacer scan de otros hosts para detectar lateralidad.

  6. Recuperación

    • Volver a poner en producción desde imágenes limpias y monitorear con alta sensibilidad por 7–30 días.

  7. Post-mortem

    • Documentar root cause, actualizar detecciones (SIEM), endurecer configuración y compartir IOC con equipos.

Checklist operativo inmediato (priorizado — haz esto hoy)

  • Configurar alertas por CPU promedio alto en hosts donde normalmente no ocurre (threshold según baseline).

  • Revisar crontabs y tasks programadas en hosts críticos en las últimas 14–30 días.

  • Habilitar FIM en /tmp, /var/tmp, /dev/shm y paths sensibles; alertar por nuevos binarios.

  • Aplicar limits en contenedores (CPU/memory) y desactivar contenedores privileged.

  • Escanear registries y pipelines por imágenes nuevas/no autorizadas.

  • Revisar logs de web para scripts inyectados (XSS) o librerías JS externas que hayan cambiado.

  • Deshabilitar funciones PHP peligrosas y auditar cualquier uso legítimo documentado.

  • Implementar egress allowlist para hosts de producción críticos.

  • Aumentar muestreo de telemetría (proc, netflow) por 7–14 días tras endurecimiento.

Reflexión final — silencio y persistencia: el sello del criptojacking

El criptojacking ejemplifica una clase de intrusiones que buscan ganar con mínimo riesgo y mínimo ruido. No buscan destruir ni filtrarte información; quieren consumir tus recursos mientras pasa desapercibido. Por eso la defensa exige atención a lo cotidiano: métricas, baselines y control de lo que se descarga y ejecuta. Un servidor lento no siempre es culpa de un bug: podría estar abonando la energía de otra persona.

Y aqui la siguiente ´pregunta:  Si hoy tu factura de cloud sube un 30% sin una razón de negocio,

¿tienes visibilidad y playbook para descubrir si alguien está minando en tu infraestructura?