lunes, 4 de febrero de 2013

Monitorización del tráfico en dispositivos Android (I)

Contribución de Angel Alonso-Parrizas, que ya publicó en Pentester.Es una serie sobre securización de dispositivos Android:

Hola de nuevo por estos lugares :)

El post de hoy va de cómo es posible monitorizar y analizar el tráfico de smartphones con Android. El paper original en inglés se puede encontrar en la web del SANS.

La idea es enviar todo el tráfico de red que pasa por nuestro dispositivo tunelizándolo a través de OpenVPN de tal manera que podemos capturar y analizar en tiempo real las trazas de red.
Inicialmente esta idea la propusé en el paper 'Securely Deploying Android Devices' (que también fue publicado en esta serie de posts 1 2 3) con el propósito de cifrar el tráfico de red para garantizar la confidencialidad al conectarnos desde cualquier WiFi o del 3G. Además, en ese paper comentaba como era posible implementar políticas de filtrado de tráfico.

Lo que vamos a hacer ahora es capturar todo el tráfico con tcpdump y a su vez analizarlo con Snort, lo que nos permitirá crear nuestras propias reglas y definir un 'network baseline' para detectar cualquier tráfico no autorizado. Aprovechando este diseño, ejecutaremos malware en el dispositivo para testear la efectividad de las reglas de Snort, crear nuevas reglas o bien adaptarlas. Como último punto, y dado que tenemos todo el tráfico capturado, podremos hacer 'Incident Handling' y definir los pasos para la respuesta a malware sin firmas exitentes y para malware 0-day.





Damos por hecho que el túnel OpenVPN ya se ha configurado con los certificados digitales como se explica en el post 1 por lo que vamos a configurar iptables para tunelizar el trafico.

Reglas aplicadas al Smartphone:

#!/system/bin/sh
/system/bin/iptables -F
# Trafico hacia el loopback
/system/bin/iptables -A INPUT -i lo -j ACCEPT
/system/bin/iptables -A OUTPUT -o lo -j ACCEPT

# Politica por defecto para INPUT, OUTPUT, FORWARD
/system/bin/iptables --policy INPUT DROP
/system/bin/iptables --policy OUTPUT DROP
/system/bin/iptables --policy FORWARD DROP

# ACEPTAR todo el trafico establecido
/system/bin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# ACEPTAR el traffico SSH para gestionar el dispositivo
/system/bin/iptables -A INPUT -i tun0 -p 6 --dport 22 -j ACCEPT

# ACEPTAR el trafico que viene del tunel
/system/bin/iptables -A INPUT -i tun0 -p 1 -j ACCEPT
# ACEPTAT el trafico que va hacia la IP del tunel /system/bin/iptables -A OUTPUT -d 50.19.152.221/32 -j ACCEPT
# ACEPTAR el trafico que va hacia el interfaz del tunel
/system/bin/iptables -A OUTPUT -o tun0 -j ACCEPT


Resultado de las reglas:
















Reglas aplicadas al VPN Gateway:

#!/bin/sh
/sbin/iptables -F
# Trafico al interfaz de loopback y del tunellocalhost and VPN interface tun0 allowed
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
/sbin/iptables -A INPUT -i tun0 -j ACCEPT
/sbin/iptables -A OUTPUT -o tun0 -j ACCEPT

# Politica por defecto DROP 
/sbin/iptables --policy INPUT DROP
/sbin/iptables --policy OUTPUT ACCEPT
/sbin/iptables --policy FORWARD ACCEPT

# Permitimos tofo el trafico  HTTP, HTTPS, FTP y el trafico establecido (gestion del VPS y actualizaciones)
/sbin/iptables -A INPUT  -i eth0 -p 6 --dport 80 -j ACCEPT
/sbin/iptables -A INPUT  -i eth0 -p 6 --dport 443 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport ftp -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT
/sbin/iptables -A INPUT -p ALL -i eth0 -m state –state ESTABLISHED,RELATED –j ACCEPT

# Regla para el trafico que va desde el VPN a internet  
 /sbin/iptables -A FORWARD -i tun0 -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j ACCEPT
# Permitir el trafico del VPN al interfaz publico y hacer NAT
/sbin/iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Filtramos el trafico VPN
/sbin/ip6tables --policy INPUT DROP
/sbin/ip6tables --policy OUTPUT DROP
/sbin/ip6tables --policy FORWARD DROP

Resultado de las reglas:






Ahora ya podemos empezar a capturar el tráfico con tpcdump con el siguiente comando:

screen tcpdump -i tun0 -s 0 -w /home/angel/capturex.cap

(continuará)

2 comentarios :

Gabriel Pozo dijo...

Excelente, me encantan estos temas relacionados con Android ;)

Angel Alonso-Parrizas dijo...

Gracias Gabriel. Nos alegra que te gusten. En breve continuaremos con el post.