Seleccionar página

Mis inicios en el Android hacking

por | Nov 12, 2024 | Hacking

Al desplegar una máquina en HTB me encontre con una landing donde habia un enlace de descarga hacia una APK llamada instant.apk

Extraer el APK

Este paso lo podemos omitir porque ya tenemos el archivo apk, pero en caso de necesitar obtener el apk, se puede usar APK Extractor.

Analizar el APK

MobSF (Mobile Security Fraework)

Esta herramienta nos permite realizar un análisis pasivo y activo de APK, para instalarla:

git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF.git && cd Mobile-Security-Framework-MobSF
./setup.sh
./run.sh

JADX

Herramienta para analizar código Java a partir de archivos Dex y APK, para instalarla:

sudo apt install jadx

Abrimos la herramienta y cargamos el archivo a analizar

jadx-gui

Directorios de interés

Los directorios y archivos de interés suelens ser aquellos que contienen configuraciones críticas, lógica de la aplicación y posibles puntos de vulnerabilidad.

Directorio smali

  • Por qué: Contiene el código descompilado en lenguaje smali, que es un ensamblador específico para archivos Dalvik (bytecode de Android). Si el código Java no se descompila bien o está muy ofuscado, este directorio puede proporcionar un análisis de bajo nivel del flujo de la aplicación.
  • Qué buscar: En el smali, los atacantes buscan secuencias lógicas críticas, validaciones de seguridad, cifrados y cualquier rutina de autenticación o permisos especiales.

2. Directorio res (Recursos)

  • Por qué: Almacena los recursos de la aplicación, incluyendo imágenes, layouts, cadenas de texto y valores de configuración en XML. Los archivos res/values/strings.xml y res/xml son especialmente interesantes, ya que pueden contener claves API, URLs de servidores, y mensajes de error.
  • Qué buscar:
    • strings.xml: Puede contener claves API, URLs de servidores backend y mensajes de error que pueden dar pistas sobre el flujo de la aplicación.
    • Layouts (res/layout): Estos archivos muestran la estructura de la interfaz de usuario y permiten identificar botones o campos de texto sensibles, como aquellos para ingresar credenciales o información de pago.
    • Otros XML: El directorio res/xml puede contener configuraciones importantes, como configuraciones de autenticación o parámetros de red.

3. Archivo AndroidManifest.xml

  • Por qué: Este archivo define la estructura y los permisos de la aplicación. Es clave para entender el acceso a hardware, permisos de usuario y configuraciones de seguridad, como el uso de componentes expuestos (Activities, Services, Receivers, Providers).
  • Qué buscar:
    • Permisos: Los permisos revelan qué recursos puede acceder la app (por ejemplo, Internet, SMS, contactos, ubicación). Permisos excesivos pueden dar lugar a exploits.
    • Activities expuestas: Si alguna Activity o Service está configurada como exported=true, puede ser accesible desde otras aplicaciones, abriendo puertas a intentos de manipulación mediante Intent Injection.
    • Filtros de intent: Estos pueden revelar qué intents acepta la aplicación y abrir la posibilidad de ataques de redirección o suplantación.

4. Directorio assets

  • Por qué: El directorio assets puede contener archivos sin procesar (imágenes, configuraciones, bases de datos) que la aplicación necesita. Este directorio no está limitado por el sistema de empaquetado de Android y a menudo contiene información confidencial.
  • Qué buscar:
    • Configuraciones o Claves: Algunos desarrolladores almacenan configuraciones o claves en archivos JSON, YAML, o incluso en archivos de texto plano en este directorio.
    • Bases de datos: En ocasiones, la app puede incluir bases de datos SQLite en los assets, que pueden contener datos sensibles de usuarios o de la aplicación.

5. Directorio lib (Librerías Nativas)

  • Por qué: Contiene librerías nativas en C/C++ (.so files) que la app puede usar para realizar funciones de bajo nivel. Este código puede incluir rutinas críticas de cifrado o autenticación que no están directamente en Java, lo que añade seguridad pero también complejidad al análisis.
  • Qué buscar:
    • Librerías Cifradas: Pueden contener lógica crítica oculta del código Java. Se pueden analizar con herramientas como Ghidra o IDA Pro.
    • Puertas Traseras o Payloads: Algunos exploits o aplicaciones maliciosas ocultan código en estos .so files, que se activa en situaciones específicas.

6. Directorio META-INF

  • Por qué: Contiene los archivos de firma de la aplicación, que son esenciales para validar la integridad de la APK.
  • Qué buscar:
    • Archivos .RSA, .DSA, y .MF: Un hacker puede intentar modificar y firmar la APK para probar un análisis de seguridad en ambientes controlados. Este directorio verifica si alguien ha intentado cambiar o inyectar código en la app.

7. Código fuente de la aplicación (directorio de packages)

  • Por qué: Es el núcleo del análisis, ya que contiene el código fuente de las clases de la aplicación. Normalmente, está estructurado en subdirectorios de acuerdo al paquete raíz.
  • Qué buscar:
    • Clases de autenticación y conexión a servidores: Examinar clases que gestionan logins, tokens, cifrados y peticiones a servidores remotos.
    • Gestión de errores: Errores mal manejados o que revelan información en el código pueden ser vectores de ataque o dar información sobre la arquitectura interna de la aplicación.
    • Hardcoded secrets: Contraseñas, claves de cifrado, tokens de autenticación o claves API que están incrustadas en el código.

8. Directorio build (si está disponible)

  • Por qué: Si el proyecto fue empaquetado con configuraciones específicas, el directorio build puede incluir información sobre scripts de compilación o configuraciones de seguridad.
  • Qué buscar:
    • Configuraciones del ProGuard o R8: Si se encuentran archivos de configuración de ProGuard, el hacker puede entender cómo se ofuscó la app y usar esa información para revertir la ofuscación.

Estrategia General de Análisis

  1. Buscar datos duros: Identificar claves API, URLs de servidores, credenciales y cualquier tipo de dato que permita atacar otros sistemas asociados.
  2. Validación de la arquitectura de seguridad: Determinar si las Activities, Services, o Broadcast Receivers expuestos son vulnerables.
  3. Evaluar la lógica de autenticación: Examinar cómo la app maneja tokens de sesión y claves.
  4. Analizar el flujo de la aplicación: Entender el flujo general permite identificar puntos de entrada y salida de datos, lo cual es clave para descubrir posibles vulnerabilidades.

Estos archivos y directorios dan un panorama completo de la estructura, lógica y posibles vulnerabilidades de la aplicación, proporcionando una base sólida para un análisis de seguridad detallado.