lunes, 29 de septiembre de 2014

Android Forensics: Descubriendo Cuentas de Usuario

Resulta que, como ya comenté en post anteriores, el principio de Locard sigue estando presente en la informática forense, el cual viene a decir que cuando dos objetos entran en contacto siempre se queda residuos (dicho bástamente ;) )

El caso es que si lo aplicamos a la informática forense y, partiendo de esa base, hay mucha probabilidad de encontrar evidencias cuando analicemos un dispositivo.

En este post vengo a mostraros CÓMO es posible identificar las cuentas de usuarios que han existido en un terminal (al menos en el mio) tras hacer una restauración de fábrica.

En ocasiones, y en los terminales Android, es muy común el hacer el típio "Resturar de fábrica" que básicamente lo que estamos haciendo es un Wipe al sistema, borrando todos los datos de usuario, cache de programas, aplicaciones, etc...

Dicho esto, recientemente lo hice en mi terminal, algo antiguo si, pero funcional, hablo de una Samsung Galaxy S GT i9000 el cual está rooteado y con una rom modificadad, CynanogenMod para ser más exacto.

Casi todos la información relativa al usuario y aplicaciones se almacenan en la partición de "Datos". Cuando hacemos un "Retore Default" o "Retaurar de fábrica" el proceso es bastante rápido, lo que me llevo a pensar que en algún lado tendría que hacer una "ligera" copia de los datos de usuario.

Al final, Android es un Unix y como bien sabéis el almacenamiento físico está unido al sistema a través de unos ficheros especiales (controladores) llamados nodos (device nodes). 
Estos nodos nos proporcionan acceso al dispositivo en bruto y a sus particiones, por lo tanto si un nodo de dispositivo es direccionado (cargado o montado por el sistema) nos lleva a pensar que todo el contenido del mismo es accesible por software (en este caso ADB), eso si como root, de ahí la importancia de tener el dispositivo "rooteado".

Podría estar hablando largo y tendido del tema de nodos, pero no es el caso, así que no me andaré más por las ramas.

El escenario es: Dispositivo Android recien restaurado de fábrica. Terminal rooteado y con acceso al mismo por adb.

El primer paso, al conectar el terminal al equipo es comprobar su conectividad, para ello:

$adb devices
List of devices attached
393320C3387D00EC    device


Observamos que el terminal está montado y es accesible por adb.
Lo siguiente que debemos hacer, y como he comentado antes, es acceder al mismo como usuario "root"

$adb root
$adb shell >> abrimos una sesión de terminal en el dispositivo

Ya tenemos nuestra consola abierta.
Vamos a ver qué particiones tenemos montado en el terminal, aqui he de decir que dependerá si nuestro dispositivo está basado en MTD (Memory Technology Device) o en EMMC (Embedded Multimedia Card), las particiones están montadas en /proc/mtd o /proc/emmc/ dependiendo de lo anterior:

root@GT-I9000:/dev/block # cat /proc/mtd                                    
dev:    size   erasesize  name
mtd0: 00780000 00040000 "boot"
mtd1: 00780000 00040000 "recovery"
mtd2: 1a600000 00040000 "datadata"
mtd3: 01180000 00040000 "cache"
mtd4: 00c80000 00040000 "efs"
mtd5: 01000000 00040000 "radio"
mtd6: 00b00000 00040000 "reservoir"


Mi Terminal está basado en MTD, así que me queda comprobar qué tipo de particiones corresponde a qué:

root@GT-I9000:/dev/block # cat /proc/partitions                             
major minor  #blocks  name

  31        0       7680 mtdblock0
  31        1       7680 mtdblock1
  31        2     432128 mtdblock2
  31        3      17920 mtdblock3
  31        4      12800 mtdblock4
  31        5      16384 mtdblock5
  31        6      11264 mtdblock6
 253        0      72804 zram0
 179        0    8028160 mmcblk0
 179        1    6062048 mmcblk0p1
 179        2    1966080 mmcblk0p2
 179        8   15622144 mmcblk1
 179        9   15618048 mmcblk1p1
 254        0     614400 dm-0
 254        1    1347584 dm-1


Llegados a este punto seguro que estáis diciendo, "UFFFFF no me entero de ná ;)", es fácil, lo que hemos hecho es preguntar qué particiones está montando el sistema al arrancar (/proc/mtd/) y luego le pregunto qué nodo es el que ha montado (/proc/partitions), mejor así no?? :D

Aqui es donde entra un poco la picaresca del analista, por decirlo de alguna forma, si somos observadores vemos que mtd1 > monta la partición de recovery y este a su vez monta el mtdblock1 pero... ¡¡¡ El terminal tiene una tarjeta SD !!!!!
Sin pegas, también está montada como mmcblk0p1

Menudo rollo no? La de vueltas que estoy dando, y ahora cuál analizo???

Todo va a depender un poco de cómo esté funcionando el almacenamiento y salvaguarda de los datos en el terminal, pero si que tenemos en claro que el recovery ha podido usar mtdblock1 como mmcblk0p1

Ya tenemos "lo gordo" localizado, ahora nos queda buscar información del usuario/s que han existido. Todos sabemos que cualquier terminal con SO Android ha de tener una cuenta de gmail
Así que vamos a buscarla ;)

$cd /dev/block
$strings mtdblock1 | egrep -o 'account="?.{1,25}@gmail.com"?'
 
Pues no me ha devuelto nada, vamos a probar con la MMC
 
root@GT-I9000:/dev/block # strings mmcblk0p1 | egrep -o 'account="?.{1,25}@gmail.com"?'>
account=*********@gmail.com
account=
*********@gmail.com
account=
*********@gmail.com
account=
*********@gmail.com
account=
*********@gmail.com
account=
*********@gmail.com
account=
*********@gmail.com

Voila!!!! 
YA SABEMOS QUÉ USUARIO HA USADO SU CUENTA DE GMAIL EN ESTE TERMINAL

Pero me surge una pregunta, y si cambio la búsqueda y en vez de account busco password?

Os lo dejo para vosotros :)

viernes, 12 de septiembre de 2014

Hack&Beers - Making off

Como algunos ya sabéis, la filosofía Hack&Beers va creciendo de manera increíble, son muchas las peticiones que recibimos desde todas las partes de España para montar eventos y también algunas del extranjero. Poco a poco iremos incorporando cada vez más dinamizadores en otras zonas, por ahora tenemos todos los que vemos en el mapa.


Agradeceros a todos el interés y las ganas que mostráis día a día. Hace ya unas semanas presentamos nuestra promo de Hack&Beers que podéis ver en el siguiente enlace: "Hack&Beers The Originals"

Ya tenemos disponibles los polos y covers de Hack&Beers, contactar conmigo en @eduSatoe para los pedidos. Os recuerdo que somos una organización sin ánimo de lucro y el precio de los polos y covers es sólo para cubrir su coste.



El motivo de este post no es otro sino el de presentaros nuestro "Making off" del último evento que tuvo lugar el 30 de Julio en Córdoba y que pese a ser período vacacional recibió una aceptación impresionante. Dar las gracias a un profesional en la materia como @powi_ban por su trabajo desinteresado.


Gracias a todos y os esperamos en el próximo Hack&Beers. Y ya sabéis #Hack #Amigos y #Beers.

Un handshake !!


"El genio se hace con 1% de talento y un 99% de trabajo"
Albert Einstein

miércoles, 3 de septiembre de 2014

Pentesting con Android, Listado de Herramientas

Hoy vengo a hablaros de herramientas de [in]Seguridad y Pentesting para dispositivos Android.
Sabemos de sobra que existen muchas herramientas para este Sistema Operativo que cumplen con ese cometido, voy a tratar de haceros un pequeño resumen de las que yo he probado:


En el día de ayer la empresa zimperium hacía publica su aplicación zAnti - Mobile Penetration Testing Toolkit después de tres años de duro trabajo.
La versión de zAnti 2.0 ahora incluye en su versión comunity las siguiente mejoras (os dejo el contenido original):

Android Network Toolkit (zANTI 2.0) is an award-winning mobile penetration testing toolkit that enables IT Security managers and Pentesters to perform complex security audits and simulates advanced hackers’ capabilities in an organization’s network through a user-friendly mobile app.
Download zANTI 2.0 Now! (APK)

  • zPacketEditor – Perform manual pen testing of apps or web applications while performing MITM.
  • ICMP Redirect – Support full duplex MITM, using our own implementation of ICMP redirect.
  • MITM features – Utilize intercept download, redirect URL, replace images and insert HTML.
  • Password complexity audit – Benefit from unlocked optimized, big, huge, custom dictionaries and incremental (brute-force).

 BUGTROID

De los creadores de la distro de seguridad española BUGTRAQ  (poco hay que decir sobre ella que no conozcamos ya). 
La misma está disponible en google play en dos versiones, una free y una pro.

DSPLOIT

Es una de las herramientas más completas que podemos encontrar e instalar en nuestros terminales android si nos dedicamos al mundillo de la seguridad, la misma reúne distintas herramientas para el análisis y pentesting de redes en una sola suite unificada. Permite realizar pruebas de seguridad de la red en la que se encuentra conectada el dispositivo móvil, lo que puede ayudar a hacer tests de seguridad en clientes que haya que auditar ad-hoc. Según la web de los creadores de la herramienta, esta aplicación ofrece el kit de herramientas más completo y avanzado para llevar a cabo este tipo de tareas, apoyándose en las características siguientes.
Para  su instalación es necesario tener el terminal rooteado



En su página web indican que es una aplicación Android para el análisis de seguridad en las redes inalámbricas y la captura de Facebook, Twitter, LinkedIn y otras cuentas.

También dispone de otra aplicación en su web DroidSheep Guard la cual trata de detectar ARP-Spoofing en la red, tales como un ataque de DroidSheep, FaceNiff y otro software.

Personalmente no la he probado.

PenTest Tools List 
 Esta aplicación reune gran cantidad de enlaces a distintas aplicaciones que podemos instalar en nuestro terminal, entre sus características principales:

  • Enlaces a Aplicaciones en la Play Store.
  • Los enlaces a aplicaciones que no están en la Play Store
  • Los enlaces a código fuente de aplicaciones
  • Enlaces a sitios web de la aplicación.
  • Los enlaces a Google el nombre de la aplicación o la aplicación del paquete.
  • Alternativas enlaces a Google Play como por ejemplo Aptoide
Seguramente hay muchas más, y/o conocéis otras, pero estás son las que yo he probado y conozco.

Sed buenos con las mismas.

Things Up!!!

lunes, 1 de septiembre de 2014

Proxychains: qué es y como funciona

Hola a tod@s.

El motivo de este post es completar la información del post del blog de mi amigo Rober García aka @1gbdeinfo en su blog

Proxychains + tor en Kali o como pasar desapercibido 

Todos sabemos, tanto aquellos que nos dedicamos al mundillo de la seguridad informática, como los que estan empezando que permanecer en el anonimato es uno de los aspectos más importantes de la Seguridad Informática si desea llevar a cabo pruebas de penetración en un equipo remoto entonces se requiere conexión activa que seguramente revelar su identidad, a veces es necesario para ocultar su identidad mientras se hace la evaluación de vulnerabilidad debido a su anonimato y la seguridad. 
Proxychains basa su funcionamiento en Proxy Chaning que ess un concepto que es muy útil para ocultar una identidad en Internet.


Pero veamos qué es Proxy Chaining 

El funcionamiento normal de un proxy es cómo el siguiente gráfico:


Pero el funcionamiento de Proxy Chaining es el siguiente:

 Así que podemos decir que Proxy Chaining es el proceso de usar varios proxys en cadena.

 Aclarado este concepto, vamos a ver cómo funciona Proxychains.

Todos sabemos que proxychains es una aplicación Open Source que nos permite realizar conexiones TCP y DNS usando un proxy, como por ejemplo TOR

Ahora bien, TOR no es requisito indispensable para usar proxychains ya que podemos usar cualquier tipo de proxy SOCKS4, SOCKS5 y HTTPS.

Ya sabemos el conjunto que hace proxychains con proxy chaining y su alcance, como bien se describió en el post anterior

Tan sólo añadir una cosilla más, en el fichero de configuración de proxychains vemos tres posibles usos del mismo:

  • Dynamic Chain: muy útil si estás usando proxys públicos. Su funcionamiento es recorrer los proxys en el orden escrito y saltarse los proxys caidos (muertos)
  • Strict Chain: igual que el anterior, pero no se salta los proxys caidos (muertos)
  • Random Chain: toma los proxys en orden aleatorios 
Espero haberos aclaro un poco más el concepto de funcionamiento, así como la forma de trabajar proxychains :)


Jesús D. Angosto
@jdangosto