10 marzo 2014

Creando un entorno de análisis de aplicaciones Android

A estas alturas todos sabemos que la plataforma Android es un auténtico caldo de cultivo para el malware por diversos motivos:
  • Escasos controles en el momento de la publicación de aplicaciones en Google Play
  • Ventanas de tiempo entre publicación de malware y su eliminación que permiten obtener un beneficio de estas actividades ilícitas
  • Facilidad de distribución de aplicaciones a través de métodos alternativos a los canales oficiales
  • Necesidad de una mayor granularidad en los permisos
  • Un muy largo etcétera...
Pero de esta situación también podemos sacar algo positivo, donde reina el malware nosotros tenemos campo donde investigar (como nos han enseñado en el blog www.elladodelmal.com a través de los artículos linterna molona y malware en Android), así que vamos a dedicar unas líneas a construir un entorno de análisis para jugar con el malware además de con todo tipo de aplicaciones Android.

Descripción del entorno

Con la idea de tener controlado el comportamiento de la aplicación a analizar vamos a crear un entorno repetible (a través de backups), en un dispositivo sobre el que tengamos pleno control (debe estar rooteado) y enrutando las comunicaciones que genere por una máquina que nos permita su análisis (utilizando iptables, wireshark y burp).

De forma gráfica el escenario que vamos a recrear es el siguiente:


Y para crear este entorno partiremos de los siguiente pre-requisitos:
  1. Tener un dispositivo rooteado donde hacer las pruebas (tenéis más documentación en los foros xda-developers en inglés y htcmania en español), y aunque estoy seguro de que esto sobra decirlo, si lo vais a utilizar para el análisis de malware no utilicéis vuestros dispositivo de uso diario.
  2. Instalación del Android SDK (tenéis más documentación en la Web oficial de Android ).
  3. Red Wifi a la que conectar el dispositivo.
  4. Disponer de una máquina con iptables, Wireshark y Burp instalados. En el ejemplo usaré una distribución Kali.
Empecemos con la configuración del entorno.

Preparando la distribución Kali

Como vamos a enrutar el tráfico del dispositivo a la máquina Kali, lo primero será configurarla:
  • Iniciamos y configuramos Burp
    • En Proxy > Options, editamos el Proxy que está escuchando para que atienda a todas las interfaces:

    • Actúe de forma invisible:

    • Genere un certificado de CA por host:

  • Exportamos el certificado de la CA de Burp codificado en DER, para ello podemos configurar el cliente Web de Kali para que pase por el proxy y acceder a una página Web por HTTPS:

  • Configuramos las reglas de pre-routing con iptables que nos permitirán analizar el tráfico HTTP/HTTPS en Burp:
    • echo 1 > /proc/sys/net/ipv4/ip_forward
    • iptables -F
    • iptables -t nat -F
    • iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
    • iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8080
  • Iniciamos Wireshark y le ponemos a la escucha en la interfaz de red por la que entre el tráfico del dispositivo

En este momento ya tenemos preparado el entorno de la máquina Kali, continuemos con el dispositivo.

Preparando el dispositivo Android

Antes de realizar el backup, vamos a hacer algunos ajustes previos en el dispositivo Android:
  • Instalamos la aplicación ProxyDroid para enrutar correctamente el tráfico HTTPS a nuestra máquina de análisis de comunicaciones y la configuramos del siguiente modo:



  • Importamos el certificado de la CA que habíamos exportado desde Burp, para ello lo copiamos a la SD (o memoria interna del dispositivo) y accedemos a Ajustes > Seguridad > Almacenamiento de credenciales > Instalar desde la tarjeta SD (o alamcenamiento). Tener en cuenta que estas opciones de menú pueden variar según la versión instalada de Android.
  • Configuramos la Wifi en el dispositivo y establecemos como puerta de enlace la dirección IP de la máquina Kali
Con esto ya tenemos el dispositivo listo para su castigo, así que vamos a realizar un backup que poder restaurar finalizados nuestros análisis. Tenemos las siguientes opciones:
  • Nandroid, os dejo un enlace a un tutorial.
  • Herramienta adb del Android SDK:
    • Para hacer backup:   adb backup -apk -shared -all -system -f C:\estado0.ab
    • Para hacer restore:    adb restore C:\estado0.ab
Ya tenemos preparada la máquina Kali para capturar el tráfico y el entorno sobre el que vamos a realizar las pruebas, de modo que sólo queda activar la aplicación ProxyDroid en el dispositivo:


Y empezaremos a capturar el tráfico del dispositivo en el Wireshark y Burp de la máquina Kali:

Algunas herramientas útiles

Encontraréis de gran utilidad para la realización del análisis las siguientes herramientas:
Tenéis un ejemplo de uso de las 3 primeras herramientas en el artículo de reversing de Pixel Dungeon.

Otros recursos de información

Por último, en los siguientes enlaces podéis encontrar información de mucha utilidad para vuestros análisis:

Artículo cortesía de Miguel Ángel García
Twitter: @nodoraiz

5 comments :

Fakeuser dijo...

Hay algo que no entiendo, se supone que configurando el proxy en el
dispositivo android ya me aseguro de que todo el tráfico pasé a través
de el proxy, no es así?

Para qué se necesita entonces el IP Tables?

José María Roncero dijo...

@Fakeuser El iptables lo usa para redirigir el tráfico de los puertos http/https al puerto de escucha del proxy.

José María Roncero dijo...

Excelente artículo.

Miguel Ángel García dijo...

Hola Fakeuser!,

En principio no deberías necesitarlo, pero después de unas cuantas pruebas te puedo decir que hay momentos en los que a ProxyDroid se le escapa alguna conexión (esto está principalmente ligado a la ROM que se cargue en el dispositivo)... es el salvavidas.

Petter dijo...

Hola
Soy nuevo en esto... y pues no logro conectar al proxy.....
una pregunta el pc tiene que tener s.o. linux? o como hago en windows 8??
gracias