Seguridad

RatHat: nueva amenaza Android con IA que abusa de ADB y sobrevive al desinstalar

TL;DR — Lo que vas a tener al final

  • Tiempo de setup: 30 minutos a 2 horas dependiendo de la complejidad del entorno.
  • Requisitos: Acceso root, Linux moderno, conexión a internet para descargar dependencias.
  • Resultado: Servicio funcional y estable, documentado paso a paso.
  • Troubleshooting: Logs estándar en /var/log/, comandos de verificación al final de cada sección.

Por qué RatHat importa en un blog de Linux

Android es Linux debajo, y RatHat es la primera familia masiva de malware móvil que explota esa base para escalar privilegios con ADB local sin necesidad de PC ni USB. La noticia del 17 de septiembre de 2026 en Zimperium zLabs muestra un salto cualitativo: ya no son troyanos que piden Accessibility y se quedan ahí, sino un dropper que activa Developer Options, habilita Wireless Debugging, autentica contra el propio daemon ADB del teléfono y luego planta binarios Go (liblocal-service.so, libmedia_codec.so) que viven fuera del ciclo de vida del paquete. Si lo desinstalás, el agente sigue activo y reinstala el APK con permisos automáticamente.

Para sysadmins Linux esto importa porque (a) cualquiera que use un Pixel, Xiaomi o Samsung con apps bancarias o cripto es ahora superficie de ataque creíble, y (b) la cadena es un caso de estudio sobre cómo abusar de herramientas de desarrollador legítimas en producción. ADB es lo mismo que usamos para flashear ROMs, depurar builds AOSP, instalar Termux, o conectar un Pi. Entender el abuso es entender cómo protegerte.

Qué hace diferente a RatHat de malware Android previo

Las familias anteriores (Pegasus, SharkBot, FluBot, ToxicPanda) dependían de Accessibility para hacer clicks sintéticos y de Servicios de Accesibilidad para mantener persistencia. RatHat reutiliza Accessibility sólo para una tarea concreta: hacer tap en “Build Number” siete veces y robar el código de pairing de Wireless Debugging de la pantalla. Después de eso, ADB hace todo el trabajo real.

Familia Vector de escalada Persistencia tras uninstall IA para navegación
ToxicPanda (2024) Accessibility + VPN No No
RedHook (2025) Accessibility + Wireless ADB Limitada No
RatHat (2026) Accessibility + ADB self-pairing + Go agent Sí, auto-reinstalación Sí, LLM externo

El patrón técnico nuevo es el auto-pairing local: la app abre Wireless Debugging, lee el código de seis dígitos y el puerto dinámico desde el propio UI, y se autentica contra 127.0.0.1:NNNN usando libadb-android embebido. Para el daemon ADB es indistinguible de una conexión legítima desde una laptop del desarrollador. A partir de ahí ejecuta pm install, pm grant, settings put y am set-standby-bucket con privilegios shell (uid 2000), escapando del sandbox de aplicación que Android impuso desde la versión 12.

Anatomía técnica: las tres capas del malware

Zimperium describe la arquitectura como tres binarios con responsabilidades separadas. Vale la pena entenderlos porque el sysadmin Linux los reconoce: son exactamente los patrones que usamos al montar un servicio con tres roles.

1. La app Android (el dropper y la UI)

Es la única pieza que el usuario ve. Pide Accessibility mostrando un HTML local (svc_config.html) que varía por país: en LATAM usa cebos de “restricciones de red” o regalos financieros para que el usuario conceda el servicio. Una vez que tiene Accessibility:

  1. Habilita Developer Options con taps sintéticos sobre Build Number.
  2. Abre Wireless Debugging y captura el código de pairing y puerto de la pantalla.
  3. Lanza liblocal-service.so y libmedia_codec.so en /data/local/tmp/.
  4. Muestra overlays HTML sobre apps bancarias y captura PIN/OTP.

La parte interesante para nosotros: el dropper usa la API nativa SessionInstaller para bypasear el bloqueo de “Fuentes desconocidas” de Android 8+. Eso significa que el usuario no ve la pantalla de instalación de APK normal: el dropper instala silenciosamente usando APIs que originalmente fueron pensadas para headsets VR.

2. liblocal-service.so: el agente Go con privilegios shell

Una vez que ADB está autenticado, el dropper despliega un binario Go estático como liblocal-service.so y lo ejecuta. Este agente corre con uid 2000 (shell) y mantiene un endpoint HTTP en 127.0.0.1:7910 para que la app le envíe comandos. Desde ahí ejecuta:

# Comandos que el agente Go emite (vistos en strings del binario)
dumpsys deviceidle whitelist +<package>        # eximir de Doze (battery saver)
am set-standby-bucket <package> active          # mantener app activa en background
pm disable-user --user 0 <package>               # desinstalar paquetes del sistema
pm uninstall -k --user 0 <package>               # borrar competidores (otros AV, MDM)
settings put secure enabled_accessibility_services '<pkg>/...'
settings put secure accessibility_enabled 1       # re-habilitar Accessibility tras reset

El truco de persistencia aquí es brillante: el agente no vive dentro del paquete APK, vive en /data/local/tmp/. Cuando intentas desinstalar la app, pm uninstall borra el APK pero deja intacto local-service. El agente detecta la ausencia y ejecuta:

# Auto-reinstalación tras uninstall detectado
pm install -r -g -i com.android.packageinstaller /data/local/tmp/app.apk
settings put secure enabled_accessibility_services '<pkg>'
settings put secure accessibility_enabled 1

Para un sysadmin Linux, esto es el equivalente a un atacante que gana root vía cron, coloca su shell en /etc/cron.d/ y desinstala cualquier fail2ban, aide o rkhunter que detecte la intrusión. El modelo de amenaza es el mismo: persistencia fuera del paquete “visible” + re-habilitación silenciosa de privilegios.

3. libmedia_codec.so: el reverse tunnel con frpc

El tercer binario es un cliente del proyecto open source frp (fatedier/frp) compilado como libmedia_codec.so. Su única función es abrir un túnel reverso persistente desde el teléfono al servidor C2 del atacante, bypaseando NAT y firewalls corporativos. El agente Go fetchea la configuración desde /api/tun/config:

# Respuesta típica del C2 (campos principales)
{
  "FrpsAddr": "203.0.113.42",
  "FrpsPort": 7000,
  "FrpsToken": "rotating_token_xxx"
}

Una vez levantado el túnel, el atacante tiene acceso directo al daemon ADB del teléfono desde Internet. Puede emitir cualquier comando shell sin que la app lo sepa, sin pasar por la WebSocket principal. Es el equivalente a un atacante que ya tiene root en tu server Linux y abre un reverse SSH tunnel con autossh hacia su VPS: la app es el payload, el túnel es el canal de mando.

El componente IA: por qué cambia el juego

Aquí está la novedad más seria. RatHat serializa el árbol de Accessibility en XML y lo manda a “uno de los asistentes Generative AI más populares del mundo” (Zimperium no nombra cuál, pero los prompts están en chino). El LLM responde con JSON indicando coordenadas de centro del elemento, texto real en pantalla, o comandos como SCROLL_DOWN. La app ejecuta esos taps sintéticos.

Esto rompe el modelo clásico de detección: los antivirus móviles buscan patrones fijos de clicks (por ejemplo, “tap en coordenadas (450,1200) → tap en (450,1300) → tap en (800,1100)”). Con IA, cada infección es ligeramente distinta porque la geometría del árbol de Accessibility varía entre versiones de la app objetivo, idioma del dispositivo, e incluso resolución de pantalla. La “firma” se vuelve estadísticamente irrepetible.

Para un sysadmin Linux el paralelo es claro: es la diferencia entre un script bash estático de ataque (for user in $(cat users.txt); do ssh $user ...) y un agente LLM que adapta el ataque según la respuesta del servidor. El primero lo cachás con reglas triviales en auditd; el segundo necesita detección de anomalías.

Anti-analysis: cuatro capas más una

El binario incluye defensas pensadas para que los analistas no puedan ni siquiera desensamblarlo correctamente. Cuatro capas más una de anti-debugging:

  1. Container tampering: declara archivos como directorios dentro del ZIP o activa el bit de encryption general del ZIP sobre archivos específicos. libziparchive de Android los ignora; apktool y unzip fallan.
  2. Manifest bomb: AndroidManifest.xml inflado a 61MB con chunks no documentados tipo 0x9999 que el runtime de Android skipea pero que revientan parsers estáticos.
  3. DEX bytecode poisoning: pseudo-instrucciones con element_width inválido. ART las ignora; los disassemblers intentan calcular el payload y crashean.
  4. String-encryption doble: StringFog (base64 XOR) más StringCrypto (swap de pares + XOR 16-byte key).
  5. Anti-debug: seis checks en runtime contra JDWP, ptrace, FLAG_DEBUGGABLE, ro.debuggable, Frida (puerto 27042), Xposed, root y emulador.

Si eres analista: para analizar este malware necesitas un Android con Frida bypass (mínimo frida-gadget con hooks modificados) o un emulador con ro.debuggable deshabilitado y adb root deshabilitado. Análisis estático con jadx o apktool directo va a fallar.

IOCs y dónde mirarlos

Zimperium mantiene un repositorio público con los indicadores de compromiso (hashes, dominios, IPs, user-agents):

  • Repositorio: github.com/Zimperium/IOC/tree/master/2026-09-RatHat/
  • Apps empaquetadas observadas: 162 muestras únicas reportadas a la fecha del reporte.
  • Puertos típicos: 127.0.0.1:7910 (loopback HTTP del agente Go), puertos dinámicos de Wireless ADB (5555+random).
  • Endpoints C2 destacados: /api/node/register, /api/data/credentials, /api/sync/cipher, /api/adbk/upload, /api/tun/config.

Para sysadmins Linux que gestionan flota de Android (MDM): comparar el SHA-256 de cada APK instalado contra esta lista en cada conexión es viable. Para usuarios individuales, instalar una solución tipo Zimperium zDefend o cualquier MTD que use detección on-device basada en comportamiento (no firmas) es la única defensa razonable.

Cómo protegerte: la checklist sysadmin

Si tienes un Android personal o gestionas flota corporativa, estas son las medidas que cortan la cadena de infección de RatHat:

# 1. Verificar si Developer Options está habilitado (debería estar apagado)
adb shell settings get global development_settings_enabled
# Respuesta esperada: 0
# 2. Verificar si Wireless Debugging está activo (debería estar apagado)
adb shell settings get global adb_wifi_enabled
# Respuesta esperada: 0
# 3. Listar servicios de accesibilidad activos
adb shell settings get secure enabled_accessibility_services
# Si devuelve algo que no reconocés, es candidato a desinstalar
# 4. Buscar binarios sospechosos en /data/local/tmp/
adb shell ls -la /data/local/tmp/
# Cualquier .so o binario fuera de alli es anomalo
# 5. Verificar procesos Go ejecutandose (el agente tiene strings Go tipicas)
adb shell ps -A | grep -E "local-service|media_codec"
# Si aparecen procesos sin nombre de paquete, es el agente
# 6. Listar paquetes con Device Admin (los troyanos suelen pedirlo)
adb shell dumpsys device_policy | grep -A 1 "Admin"
# Cualquier paquete que no sea tuyo corporativo debe eliminarse

Más allá del chequeo manual, hay tres decisiones estructurales que un sysadmin puede tomar:

  1. No descargar APKs fuera de Google Play ni de repos oficiales del fabricante. El vector inicial es smishing con links a APKs maliciosos. Ni F-Droid si el publisher no es verificable.
  2. No conceder Accessibility a ninguna app que no sea un launcher o teclado de confianza. Es la única puerta de entrada real de RatHat.
  3. MDM con detección on-device (z9 engine, ML behavior-based): las soluciones basadas en firmas tipo Play Protect no van a detectar este malware. Zimperium MTD y soluciones equivalentes (Lookout, Wandera) sí.

Implicancias para Android y Linux upstream

Google ya está moviéndose para restringir Wireless ADB on-device. El issue público de AOSP propone que Wireless Debugging requiera confirmación física por USB antes de habilitarse vía Accessibility, lo que cierra la ventana de auto-pairing. Mientras eso aterriza (estimado Android 17 Q1 2027), los OEMs como Samsung y Xiaomi están parcheando con sus propios flags: Samsung Knox 3.10 ya agrega un check extra de “is this ADB connection coming from a paired host known to the user?”.

Para Linux en sí, no hay riesgo directo: el ataque no escala contra servidores. Pero la pregunta interesante es si algún día veremos un dropper Linux que haga lo mismo con sshd local + sudo -n sin passphrase via un daemon GraphicalSession abusado. La técnica es portable: encontrar un daemon de confianza que pueda auto-autenticarse, plantar binarios fuera del paquete visible, y reabrir el túnel cada vez que el usuario intenta limpiar. Eso ya existe en dbus-daemon + polkit exploits recientes. No es ciencia ficción.

Vale la pena preocuparse: para quién sí, para quién no

Si eres sysadmin Linux con servidores pero no usas Android con apps bancarias o cripto: el riesgo es bajo, pero el análisis técnico vale la pena como caso de estudio de abuso de superficies de confianza. Si gestionas flota Android corporativa con personal financiero, móvil de campo, o ejecutivos: alta prioridad, auditar todos los dispositivos hoy. Si eres usuario individual con apps de banco en el celular: alta prioridad, no descargar nada fuera de Google Play y revisar Accessibility Services esta semana.

El malware es serio pero su vector de infección inicial sigue siendo ingeniería social (smishing, malvertising). La defensa primaria sigue siendo la misma de hace una década: cero APKs de fuentes no verificadas, cero Accessibility grants a apps no auditadas.

Preguntas frecuentes

¿Por qué RatHat: nueva amenaza Android con IA que abusa de ADB y sobrevive al desinstalar es relevante para sysadmins Linux?

Forma parte del flujo diario de administración. Los conceptos explicados se aplican directamente a servidores en producción y resuelven problemas reales que enfrentan sysadmins hispanohablantes.

¿Qué necesito para empezar con RatHat: nueva amenaza Android con?

Distribución Linux actualizada (Debian, Ubuntu, RHEL, Fedora o Arch), acceso root, y conexión a internet. Para producción: entorno de staging separado antes de aplicar cambios.

¿Cuáles son los errores más comunes con RatHat: nueva amenaza Android con?

Los tres más frecuentes: (1) saltar la lectura de logs, (2) aplicar cambios directos en producción sin probar, (3) olvidar permisos y ownership. La documentación y un plan de rollback siempre.

¿Cuándo usar RatHat: nueva amenaza Android con y cuándo una alternativa?

Esta solución es ideal para el caso descrito. Alternativas como Docker, Ansible o configuración manual pueden ser mejores según contexto: portabilidad, escala y reproducibilidad son los factores clave.

¿Cómo migro desde una configuración previa a RatHat: nueva amenaza Android con?

Documentar el estado actual, probar la nueva configuración en staging, validar funcionalmente, y aplicar en producción con rollback plan listo. Los posts de SoyLinux incluyen troubleshooting para los problemas más comunes.

Lee también

Alfonso Moreno | Sysadmin Senior

Soy Alfonso, sysadmin senior con RHCE y más de 10 años administrando sistemas Linux para empresas y proyectos personales. Me especializo en infraestructura, redes, virtualización, monitoring, automation y self-hosting. Sobre SoyLinux.com SoyLinux.com es un blog técnico en español sobre Linux, software libre y self-hosting. Lo mantengo en mi tiempo libre. Áreas de expertise - Linux server administration: RHEL, CentOS, Rocky, Alma, Fedora, Debian, Ubuntu - Network services: Postfix, BIND, Samba, NFS, Squid - Virtualización y containers: KVM, Proxmox, Docker, Podman - Monitoring: Prometheus, Grafana, Zabbix - Automation: Ansible, Bash scripting - Self-hosting: Vaultwarden, Nextcloud, Jellyfin, Immich, Homelab Contacto - Email: [email protected]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *