Puerta trasera de Android a nivel firmware vía libandroid_runtime Zygote Injection

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Descripción general

La manipulación de la cadena de suministro de /system/lib[64]/libandroid_runtime.so puede secuestrar android.util.Log.println_native de modo que todas las apps forked desde Zygote ejecuten código del atacante. La puerta trasera Keenadu añade una única llamada dentro de println_native que impulsa un dropper nativo. Dado que todos los procesos de apps ejecutan este código, los límites del sandbox de Android y los permisos por app se eluden efectivamente.

Dropper path: native patch → RC4 → DexClassLoader

  • Entrada hookeada: llamada extra dentro de println_native a __log_check_tag_count (librería estática inyectada libVndxUtils.a).
  • Almacenamiento del payload: blob embebido en el .so y desencriptado con RC4, volcado a /data/dalvik-cache/arm[64]/system@framework@vndx_10x.jar@classes.jar.
  • Carga y ejecución: DexClassLoader carga el jar e invoca com.ak.test.Main.main. Los logs en tiempo de ejecución usan la etiqueta AK_CPP (artefacto de triage).
  • Anti-análisis: aborta en apps de sistema de Google/Sprint/T-Mobile o si existen archivos de kill-switch.
  • División de roles de Zygote:
  • En system_server → instanciar AKServer.
  • En cualquier otra app → instanciar AKClient.

Puerta trasera cliente/servidor basada en Binder

  • AKServer (ejecutándose en system_server) envía broadcasts protegidos:
  • com.action.SystemOptimizeService → interfaz binder para clientes.
  • com.action.SystemProtectService → interfaz binder para módulos descargados.
  • AKClient (dentro de cada app) recibe la interfaz vía broadcast y realiza una transacción attach, entregando un wrapper IPC para que el servidor pueda cargar DEX arbitrario dentro del proceso de la app actual.
  • Operaciones privilegiadas expuestas (via SystemProtectService): otorgar/revocar cualquier permiso para cualquier paquete, obtener geolocalización, y exfiltrar información del dispositivo. Esto centraliza el bypass de privilegios mientras se sigue ejecutando código en apps objetivo seleccionadas (Chrome, YouTube, launcher, apps de compras, etc.).

Preparación C2, crypto y gating

  • Descubrimiento de host: Base64 → gzip → AES-128-CFB desencriptado con la clave MD5("ota.host.ba60d29da7fd4794b5c5f732916f7d5c"), IV "0102030405060708".
  • Registro de la víctima: recopila IMEI/MAC/modelo/SO, encripta con la clave MD5("ota.api.bbf6e0a947a5f41d7f5226affcfd858c"), POST a /ak/api/pts/v4 con params m=MD5(IMEI) y n=w|m (tipo de red). La respuesta data está encriptada de forma idéntica.
  • Retraso de activación: el C2 sirve módulos solo después de ~2.5 meses desde un “activation time” en la petición, lo que frustra detonaciones en sandbox.
  • Contenedor de módulos (propietario):
struct KeenaduPayload {
int32_t  version;
uint8_t  padding[0x100];
uint8_t  salt[0x20];
KeenaduChunk config;   // size + data
KeenaduChunk payload;  // size + data
KeenaduChunk signature;// size + data
} __packed;
  • Integridad: verificación de archivo MD5 + firma DSA (solo el operador con la clave privada puede emitir módulos).
  • Descifrado: AES-128-CFB, clave MD5("37d9a33df833c0d6f11f1b8079aaa2dc" + salt), IV "0102030405060708".

Persistencia & consejos forenses

  • Ubicación en la cadena de suministro: biblioteca estática maliciosa libVndxUtils.a enlazada en libandroid_runtime.so durante la compilación (por ejemplo, vendor/mediatek/proprietary/external/libutils/arm[64]/libVndxUtils.a).
  • Auditoría de firmware: las imágenes de firmware se entregan como Android Sparse super.img; use lpunpack (o similar) para extraer particiones e inspeccionar libandroid_runtime.so en busca de llamadas adicionales en println_native.
  • Artefactos en el dispositivo: la presencia de /data/dalvik-cache/arm*/system@framework@vndx_10x.jar@classes.jar, el tag de logcat AK_CPP, o broadcasts protegidos llamados com.action.SystemOptimizeService/com.action.SystemProtectService indican compromiso.

Referencias

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks