20 enero 2014

Análisis de AutomateIT (2 de 3)

En el post anterior realizamos un análisis de la aplicación AutomateIT que nos permitió identificar todos los aspectos necesarios para simular los servicios Web utilizados en el proceso de desbloqueo de nuevas características.

Para confirmar el conocimiento reunido durante el análisis vamos a crear un escenario donde explotarlo a modo de prueba de concepto.

Escenario

Para la ejecución de la prueba de concepto se partirá de la siguiente configuración:

- Router con IP 192.168.0.1
- Dispositivo Android con IP 192.168.0.100. En este dispositivo se encontrará instalada la aplicación AutomateIT
- Equipo Kali Linux con IP 192.168.0.109. En esta máquina se crearán los servicios Web de desbloqueo de características y se utilizarán técnicas de spoofing contra el dispositivo Android para redirigir las peticiones de AutomateIT de modo que sea Kali quien responda en lugar del servidor de la aplicación.

Pasos

1. Antes de empezar con la explotación comprobamos los puntos que tenemos en la aplicación:


 2. Iniciamos el servidor Apache:



3. Se crea el fichero /var/www/ws/AutomateItRulesMarket/getUserDetails.php . Se configura para que nos devuelva 3000 puntos (nos servirá para validar el escenario de ataque):

<?php

echo '{"UserEmail":"'.$_GET["UserEmail"].'","IsUserRegistered":true,"UserId":"666666","IsPro":"0","Nickname":"Dr0pALL","CountryCode":"ES","PromoCode":"appoftheday","Score":"3000","Gender":"0","DateOfBirth":null}';

?>

4. Se crea el fichero /var/www/ws/UnlockFeatures/getFeaturesCost.php :

{"FeaturesCost":[{"FeatureName":"CalendarTrigger","Cost":"5"},{"FeatureName":"CompositeOrTrigger","Cost":"5"},{"FeatureName":"CompositeAndTrigger","Cost":"5"},{"FeatureName":"SensorTrigger","Cost":"5"},{"FeatureName":"RecurringEventTrigger","Cost":"5"},{"FeatureName":"CompositeAction","Cost":"5"},{"FeatureName":"EnableDisableScreenLockAction","Cost":"5"},{"FeatureName":"CopyRule","Cost":"5"},{"FeatureName":"RuleActivePeriod","Cost":"5"},{"FeatureName":"CancelDelayedExecutionByTrigger","Cost":"5"},{"FeatureName":"CellIdTriggerUnlimitedLocations","Cost":"5"}]}

5. Se crea el fichero /var/www/ws/UnlockFeatures/unlockFeature.php :

<?php

$contenido = file_get_contents('php://input');
$json = json_decode($contenido);
$claro  = $json->UserEmail . $json->FeatureName;
echo '{"Result":0,"UnlockCode":"'.sha1( $claro ).'","Score":3000}';

?>

6. Desde la máquina Kali se realizará un ataque MITM contra el dispositivo Android con arpspoof:
6.1. En un terminal activamos el forwarding de paquetes IPv4 y mantenemos el ARP spoof en sentido router:



6.2. Abrimos otro terminal y mantenemos el ARP spoof en sentido dispostivo Android:



7. Desde la máquina Kali realizamos DNS spoof para redirigir las peticiones del dominio automateitapp.com al servidor Apache que hemos levantado:



8. En el dispositivo Android:
8.1. Reiniciamos la caché DNS. Para esto lo que mejor suele funcionar es un hard reboot (apagar el dispositivo y extraer la batería durante 30 segundos).
8.2. En la aplicación nos dirigimos a "Más > Desbloquear características". Si todo ha funcionado correctamente veremos los 3000 puntos:


8.3. Una vez se ha confirmado la puntuación, sólo hay que desbloquear característica por característica:



8.4. Veremos además como nuestra puntuación no baja porque en el servicio Web " unlockFeature.php " siempre devolvemos un Score de 3000.


Artículo cortesía de Miguel Ángel García.

2 comments :

♛ Felipe ♛ dijo...

¡Genial artículo!


Una propuesta para simplificar un poco el proceso:


¿y si en vez de ejecutar un MiTM estableces como proxy un equipo de tu red donde esté escuchando burp (u otro proxy) y modificas las respuestas al vuelo? Con Pou funcionaba para hacerlo rico ;-)

Miguel Ángel García dijo...

Tienes toda la razón Felipe, de hecho antes de programar los WS verifiqué el comportamiento de forma similar a como indicas.


Al final quedó el MITM pensando en sus posibilidades en otros escenarios donde alteraba las peticiones de los usuarios: denegando desbloqueos de características, o más divertido, enviando reglas falsas que podrían perjudicar al usuario a través del buscador desde el sistema de buscador de reglas... aunque todo esto ha quedado fuera de esta prueba de concepto.



Un saludo y muchas gracias!.