· Droidwatch Security Research team · 12 min de lectura · Static Analysis Deep-Dives triaje-apk troyano-bancario malware-android
🌐 Read in English →

Triaje de un APK sospechoso: el flujo del SOC

Flujo de triaje estático en seis pasos para clasificar una aplicación Android desconocida, extraer indicadores accionables y decidir qué escalar.

Triaje de un APK sospechoso: el flujo del SOC

Un cliente reenvía un APK que le facilitó quien decía llamar desde el departamento de fraudes de su banco. Un canal de inteligencia publica un nombre de paquete que suplanta la aplicación de banca móvil de una entidad. Un empleado instala un fichero entregado por una campaña de smishing bajo el pretexto de una actualización obligatoria.

En los tres casos el SOC se enfrenta a la misma pregunta, y no es si la muestra es malware. Es si la organización debe actuar, y sobre qué evidencia.

Este documento establece un flujo de triaje estático: una clasificación defendible más un conjunto de indicadores aptos para detección, producidos sin dispositivo, sin emulador y sin entorno de laboratorio.

Alcance del triaje

El triaje responde a cuatro preguntas en secuencia:

  1. ¿Es la aplicación lo que dice ser?
  2. ¿Qué capacidades solicita el manifiesto?
  3. ¿El código oculta su función?
  4. ¿Con qué infraestructura contacta?

El triaje no establece la cadena de ataque completa ni la actividad del operador tras el compromiso. Ésos son objetivos de ingeniería inversa, y confundir ambos planos es la causa principal de atasco en las colas de triaje móvil.

Un límite práctico: cuando no se ha alcanzado una clasificación en unos diez minutos de trabajo de analista, la muestra corresponde a una cola de reversing y no a una de triaje. El triaje es el proceso que determina cuál de las dos.

Manejo de la muestra

Todo APK desconocido se trata como malware vivo durante el proceso.

Paso 1 — Verificación de identidad

El análisis empieza por los componentes que un atacante está obligado a exponer para que el paquete llegue a instalarse.

Nombre de paquete. Se compara con el paquete de la aplicación legítima en Google Play. Las aplicaciones bancarias reempaquetadas rara vez reutilizan el nombre exacto: emplean una variante próxima, un dominio invertido en otro orden o una cadena aleatoria. Un nombre de paquete ausente de Play cuya etiqueta corresponde a una entidad financiera conocida es motivo suficiente de escalado por sí solo.

Certificado de firma. Es la señal de identidad más sólida disponible en un APK. Se examinan cuatro propiedades:

Verificación contra Play. Cuando el paquete existe en Play pero el certificado no coincide con el que Play distribuye, la muestra es una aplicación reempaquetada. Se trata de un incidente de fraude y no de un hallazgo de malware, y corresponde de inmediato a la función de protección de marca.

En Droidwatch estas salidas se resuelven antes de que finalice el resto del análisis.

Paso 2 — Análisis del manifiesto

Los permisos constituyen una declaración de capacidad pretendida. A efectos de triaje, lo que una aplicación puede hacer suele ser suficiente.

Permisos que exigen lectura detenida:

Permiso Significado
BIND_ACCESSIBILITY_SERVICE El permiso con mayor señal del malware Android. Los servicios de accesibilidad leen el contenido de pantalla e inyectan entrada, base de los ataques de superposición y del fraude en dispositivo.
SYSTEM_ALERT_WINDOW Dibuja sobre otras aplicaciones. Combinado con accesibilidad, constituye el emparejamiento estándar del phishing por superposición.
RECEIVE_SMS / READ_SMS Intercepción de OTP. En contexto bancario debe tratarse como el propósito de la aplicación mientras no se establezca lo contrario.
BIND_NOTIFICATION_LISTENER_SERVICE Lee el contenido de las notificaciones, incluidos códigos de un solo uso que nunca llegan a la base de datos de SMS.
REQUEST_INSTALL_PACKAGES Instala otras aplicaciones. Es la característica que define a un dropper.
BIND_DEVICE_ADMIN Resiste la desinstalación; puede bloquear o borrar el dispositivo.
QUERY_ALL_PACKAGES Enumera las aplicaciones instaladas, normalmente para seleccionar la superposición bancaria correspondiente.

Un solo permiso peligroso es una pregunta. BIND_ACCESSIBILITY_SERVICE junto a SYSTEM_ALERT_WINDOW y QUERY_ALL_PACKAGES es el conjunto de capacidades establecido de un troyano bancario Android.

Los componentes se leen junto a los permisos:

Paso 3 — Ocultación del código

El objetivo en esta fase no es leer el código, sino establecer si el código está construido para resistir su lectura.

Una muestra que presenta ofuscación intensa, carga de código en ejecución y REQUEST_INSTALL_PACKAGES puede clasificarse sin leer un solo método.

Paso 4 — Extracción de infraestructura

Se extraen todos los endpoints embebidos: URL, direcciones IP sueltas, dominios presentes en las tablas de cadenas y, cuando la configuración va cifrada, la configuración descifrada.

Las salidas relevantes son:

Estos indicadores son el componente del triaje que llega a la pila de detección. Una clasificación protege a un cliente; un dominio C2 incorporado a una blocklist de DNS protege a todos los usuarios que están detrás. Droidwatch los emite como bundle STIX 2.1, de modo que el paso de muestra a regla de detección no exige transcripción manual.

Paso 5 — Mapeo a marcos de referencia

El mapeo es lo que hace legible un hallazgo móvil para responsables que nunca examinan la muestra.

Técnicas recurrentes en esta clase de muestra:

Comportamiento MITRE ATT&CK Mobile
Pantallas superpuestas que capturan credenciales T1417.002 — GUI Input Capture
Registro de pulsaciones mediante accesibilidad T1417.001 — Keylogging
Entrada automatizada para fraude en dispositivo T1516 — Input Injection
Lectura o intercepción de SMS T1582 — SMS Control
Acceso a notificaciones T1517 — Access Notifications
Recolección de contactos, registro de llamadas y mensajes T1636 — Protected User Data
Escalada a administrador de dispositivo T1626.001 — Device Administrator Permissions
Evasión de herramientas de seguridad T1629 — Impair Defenses
Empaquetado o cifrado de cadenas T1406.002 — Software Packing
Persistencia tras reinicio T1624.001 — Broadcast Received
Recuperación de carga útil de segunda etapa T1544 — Ingress Tool Transfer
Canal de mando y control cifrado T1521 — Encrypted Channel

Para las funciones de seguridad de aplicaciones, los mismos hallazgos mapean a categorías de OWASP MASVS: MASVS-NETWORK para transmisión en claro y fallos de pinning, MASVS-STORAGE para datos locales expuestos, MASVS-CODE para carga dinámica, MASVS-RESILIENCE para deficiencias de antimanipulación. El MASTG aporta el procedimiento de prueba correspondiente cuando un resultado debe demostrarse.

Droidwatch produce ambos mapeos en cada ejecución, junto a una señal de clasificador medida en F1 macro 0,9873 sobre un holdout de 1.661 muestras, entrenado con 6.642 muestras de CICMalDroid 2020. El clasificador contribuye al veredicto; los hallazgos anteriores son lo que defiende un informe.

Paso 6 — Clasificación y escalado

Droidwatch puntúa el riesgo de 0 a 100, donde una puntuación más alta indica mayor riesgo. Cuatro salidas, cada una con un responsable definido:

Veredicto Score Definición Destino
Malicious 65 o más Familia identificada, o conjunto de capacidades sin interpretación legítima posible Respuesta a incidentes de inmediato; indicadores al SIEM
High Risk 40-64 Capacidades peligrosas con anomalías de identidad; familia sin confirmar Ticket de incidente más cola de reversing
Suspicious 20-39 Anomalías sin patrón malicioso coherente; con frecuencia adware o aplicación legítima mal construida Watchlist; reanalizar si reaparece
Benign Menos de 20 Nada fuera de la norma para su categoría de aplicación Cerrar con el informe adjunto

El artefacto importa más que la etiqueta. Un informe que afirma «malicioso» es una aseveración. Un informe que contiene el hash, el análisis del certificado, el conjunto de permisos, los dominios C2, el mapeo ATT&CK y el razonamiento detrás de la puntuación es evidencia, y la evidencia es lo que resiste una revisión semanas después. Droidwatch lo exporta en PDF, DOCX, JSON, CSV o STIX 2.1.

Limitaciones del triaje estático

Ejecución del flujo en la plataforma

Los seis pasos anteriores describen el proceso analítico. La mecánica es un único envío:

  1. Envía el .apk (o .xapk, .aab, .dex, .ipa) al analizador. Un APK de 50 MB se completa en dos a cinco minutos; los paquetes por encima de 100 MB promedian entre ocho y diez.
  2. Revisa el informe: veredicto y puntuación, hallazgos ordenados por severidad, certificado y comparación con Play, mapeo ATT&CK Mobile, cobertura MASVS, indicadores extraídos.
  3. Exporta en el formato que requiera el destinatario: STIX 2.1 para el SIEM, PDF o DOCX para el expediente del incidente.

En volumen, el flujo se ejecuta por API: POST /api/upload devuelve un upload_id; POST /api/analyze devuelve un job_id y un run_id; se sondea GET /api/jobs/{job_id} hasta que el estado sea done o failed; el informe se recupera de GET /api/runs/{run_id}/artifact/report.json. La autenticación admite una cabecera X-API-Key o un bearer token. Cuando el fichero ya se analizó previamente, la respuesta trae cached: true con el job_id a nulo y no hace falta sondear. La guía rápida documenta la secuencia completa.

Preguntas frecuentes

¿Cuánto debe durar el triaje de un APK? Unos diez minutos de trabajo de analista hasta alcanzar una clasificación. Las muestras que superan ese umbral de forma sistemática corresponden a una cola de reversing.

¿Basta con VirusTotal para este flujo? VirusTotal responde a si un hash ha sido observado y cómo lo clasificaron los motores participantes, y es la primera consulta adecuada. No proporciona el conjunto de permisos, las anomalías del certificado, el mapeo ATT&CK ni el razonamiento necesario para producir un informe de incidente. Las dos herramientas ocupan posiciones distintas del flujo. Hay disponible una comparativa detallada.

¿Por qué no operar MobSF directamente? MobSF es un motor de análisis solvente y buena parte de la disciplina de seguridad móvil se construyó sobre él. El coste es operativo y no analítico: orquestación de contenedores, escalado de workers, mantenimiento de dependencias, y la ausencia de multi-tenant, control de acceso por roles y traza de auditoría en entornos multicliente. La comparativa completa documenta el trade-off.

¿Cuál es el resultado cuando una muestra resulta benigna? Un informe firmado que establece esa conclusión, producido en diez minutos. Los resultados negativos son una salida necesaria de cualquier proceso de triaje.


Los indicadores de las muestras analizadas en la plataforma se publican en el threat feed público bajo licencia CC BY 4.0. Las prácticas de manejo y divulgación están documentadas en la página de confianza.

Threat Research

Droidwatch's research team analyzes Android & iOS malware — banking trojans, spyware, droppers and overlay kits — and writes up the static and dynamic signals that give them away. Every post is grounded in real platform output.

Analyze your first app free — drag an APK or iOS .ipa onto the homepage for a full static report in about a minute. Get started free