Cómo hackeé las máquinas expendedoras modernas

author
4 minutes, 27 seconds Read
Publicado originalmente por Matteo Pisani el 10 de octubre de 2018 192,920 lecturas

«Golpeando y pateando» la App de su más amplia distribuidora europea.

PREFACIO

Indiscutiblemente, las Vending Machines son objeto de culto. Deliciosos bocados de los Hackers, siempre. Al principio funcionaban offline sólo con monedas, luego, los modelos NFC- llaves/tarjetas empezaron a extenderse. Si digo «COGES» seguro que a alguien le vienen a la cabeza tiempos mejores. Pero… En un montón de años las cosas cambiaron radicalmente. Te distraes y un momento después, te encuentras con el mundo suplantado por las cosas conectadas a internet…

Historia

Un día decidí interrumpir el aderezo en la batcueva y dirigirme a mi ciudad natal para que me diera la luz del sol, así que fui a la Universidad a saludar a un viejo profesor.

«¡Vete a tomar un café!» – dijo- y nos pusimos a charlar mientras caminábamos por el pasillo principal.

Una vez llegados…

Yo: «¡déjame pagar, que tengo monedas!».
Él: «¡espera espera! déjame usar la App de la máquina expendedora para pagar, el café será más barato».

BLE + NFC

Cerebro: «Mmm… Los monederos virtuales son algo genial…».

Excelente.

HOT-POT

Alma: «¡Te reto a hackear eso!»

~$ Voz interior del Sombrero Blanco: «sólo palmaditas en el hombro si no hay recompensa de bug bounty».
~$ Voz interior del Sombrero Gris: «vale, lo haré sólo con fines educativos».
~$ Voz interior del Sombrero Negro: «¡vamos hombre, jodamos ese HEAP, gran Júpiter!».

Más tarde en ese día…

Pwnie express.

ANÁLISIS

No hace falta decir que cogí mi sucio smartphone Android rooteado (con la depuración USB activada), instalé la App objetivo desde la Play Store y volqué el *.apk a mi portátil a través de adb.

# adb pull /data/app/com.sitael.vending-1/base.apk ./Argenta.apk

Descompilé el *.apk con apktool

# apktool d ./Argenta.apk -o ./Argenta

y extraje las fuentes Java con jadx

# jadx ./Argenta.apk 

En primer lugar, hice el *.apk depurable editando el archivo AndroidManifest.xml y añadiendo la propiedad android:debuggable="true" a la propiedad application <tag>

Luego, reconstruí el *.apk

# apktool b ./Argenta

creé una nueva clave con keytool

# keytool -genkey -v -keystore Argenta.keystore -alias Argenta -keyalg RSA -keysize 2048 -validity 10000

firmé el *.apk con jarsigner usando la clave generada

# jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore Argenta.keystore Argenta.apk Argenta

por último, lo alineé en zip para hacerlo ejecutable

# zipalign -v 4 Argenta.apk Argenta-signed.apk

e instalé el *.apk

# adb install ./Argenta-signed.apk

Ejecuté la App en el smartphone y empecé a mirar los logs con logcat filtrándolos por su nombre de paquete

# adb logcat --pid=`adb shell pidof -s com.sitael.vending`

No encontré nada especial, así que empecé a peinar los códigos fuente buscando información jugosa.

Mirando mejor el archivo AndroidManifest.xml, encontré referencias a RushOrm

Así que la primera búsqueda de palabras clave fue db_name

Cool. Arranqué el Root Explorer en el teléfono buscando argenta.db

Found. Así que lo saqué a mi portátil con adb

# adb pull /data/data/com.sitael.vending/databases/argenta.db ./

y traté de abrirlo con un DB Browser para SQLite

obviamente, estaba protegido por contraseña

REVERSE-ENGINEERING

Volví a los códigos fuente, miré en RushAndroidConfig.java

donde encontré los métodos utilizados para configurar la base de datos.
Me llamó la atención this.encryptionKey = getDeviceId(context);

Pasé a su definición y…

Encontré que la App objetivo utilizaba el IMEI del teléfono (*#06#)como clave de cifrado para la base de datos SQLite.

Abracadabra.

Boom baby.

Después de un par de segundos de inspección, abrí la tabla UserWallets

y edité el campo walletCredit escribiendo los cambios

luego empujé la base de datos con el crédito bombeado hacia el teléfono

# adb pull ./argenta.db /data/data/com.sitael.vending/databases/argenta.db

VERDICTO

Mientras tanto, mientras me sentía como «Robin Hood» (referencia nostálgica y explícita al código de trucos de Age Of Empires para conseguir +1000 de oro) desarrollé una utilidad para Android que permite volcar/restaurar/manipular rápidamente la base de datos de la App objetivo sobre la marcha.

entonces volví a mi Universidad de nuevo para probar por fin el Hack

Querido diario…

CONCLUSIÓN

Desde la cuenta de crédito cero, pude:

>Inflar el crédito de la App.
>Comprar cosas.
>Actualizar el crédito restante.
>Volver al estado de crédito cero.
>Inflar el crédito de nuevo.
> Empezar de nuevo.

Con una macroinspección de todas las fuentes invertidas encontré enorme porción de código limpio – sin ofuscación- que significaba que no se habían adoptado grandes contramedidas para proteger los datos del usuario y hacer que la App fuera segura en absoluto.

Hace un mes…

La voz interior de Sombrero Blanco que hay en mí cogió el teléfono y llamó a la empresa que estaba detrás de esta vergüenza para informar de la vulnerabilidad. Les sugerí gentilmente que desecharan la arquitectura actual y desarrollaran una mejor y segura desde cero.

Hocus bogus.

Etiquetas

Únete a Hacker Noon

Crea tu cuenta gratuita para desbloquear tu experiencia de lectura personalizada.

Similar Posts

Deja una respuesta

Tu dirección de correo electrónico no será publicada.