@matteo.pisani.91Matteo Pisani
Desmontando juguetes desde el 91
«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
Crea tu cuenta gratuita para desbloquear tu experiencia de lectura personalizada.