Indiscutiblemente, las Máquinas Expendedoras son objetos de culto. Deliciosos bocados de Hackers , siempre. Al principio, trabajaban fuera de línea solo con monedas , luego, los modelos de tarjetas/llaves NFC comenzaron a extenderse. Si digo “ COGES ” seguro que a alguien se le ocurrirán tiempos mejores. Pero… En un montón de años las cosas cambiaron radicalmente. Te distraes y, un momento después, encuentras el mundo reemplazado por cosas conectadas a Internet...
Un día decidí interrumpir mi sazón en la bat-cueva y dirigirme a mi ciudad natal para tomar un poco de sol, así que fui a la Universidad a saludar a un anciano profesor.
“¡Ve a tomar un café!” —dijo— y comenzamos a charlar mientras caminábamos por el corredor principal.
Una vez llegado…
Yo: “¡déjame pagar, tengo monedas!”. Él: “¡Espera, espera! déjame usar la aplicación de la máquina expendedora para pagar, el café será más barato”.
BLE + NFC
Cerebro: “Mmm… Las billeteras virtuales son geniales…”.
Excelente.
Alma: "¡Te desafío a hackear eso!"
~$ Voz interior de White Hat : "solo palmaditas en el hombro si no hay recompensa de recompensa por errores". ~ $ Voz interior de Gray Hat : “ok, lo haré solo con fines educativos”. ~ $ Voz interior de Black Hat : “vamos hombre, ¡vamos a joder ese MONTÓN, gran Júpiter!”.
Más tarde ese día…
Pwnie expreso.
No hace falta decir que recogí mi teléfono inteligente Android rooteado sucio (con la depuración USB habilitada ), instalé la aplicación específica de Play Store y descargué el * .apk original en mi computadora 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 extrajo fuentes de Java con jadx
# jadx ./Argenta.apk
En primer lugar, hice * .apk depurable editando el archivo AndroidManifest.xml agregando la propiedad **android:debuggable="true"**
a la **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 -validez 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é para hacerlo ejecutable
# zipalign -v 4 Argenta.apk Firmado en Argenta.apk
e instalé el *.apk final
# adb install ./Argenta-signed.apk
Ejecuté la aplicación en el teléfono inteligente y comencé a buscar registros con logcat filtrándolos a través de su nombre de paquete
# adb logcat --pid=`adb shell pidof -s com.sitael.vending`
No encontré nada especial, así que comencé a revisar los códigos fuente en busca de información jugosa .
Mirando mejor el archivo **AndroidManifest.xml**
, encontré referencias a RushOrm
Entonces, la primera búsqueda de palabra clave fue **db_name**
Enfriar. Inicié Root Explorer en el teléfono buscando **argenta.db**
Fundar. Así que lo saqué a mi computadora portátil con adb
# adb pull /data/data/com.sitael.vending/databases/argenta.db ./
e intenté abrirlo con un DB Browser para SQLite
obviamente, estaba protegido por contraseña
Regrese a los códigos fuente, mire **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...
Se descubrió que la aplicación objetivo usaba el IMEI **(*#06#)**
del teléfono como clave de cifrado para la base de datos SQLite .
Abracadabra.
Bebé boom.
Después de un par de segundos de inspección, abrí la mesa **UserWallets**
y editó los cambios de escritura del campo **walletCredit**
luego empujé la base de datos con crédito bombeado de vuelta al teléfono
# adb pull ./argenta.db /data/data/com.sitael.vending/databases/argenta.db
Mientras tanto, mientras me sentía como "Robin Hood" (referencia nostálgica y explícita al código de trucos de Age Of Empires por +1000 de oro ), desarrollé una utilidad de Android para volcar / restaurar / manipular rápidamente la base de datos de la aplicación objetivo sobre la marcha.
luego volví a mi universidad nuevamente para finalmente probar el Hack
Querido diario…
Desde una cuenta de crédito cero , podría:
> Inflar el crédito de la aplicación.> 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 inspección macro de todas las fuentes invertidas , encontré una gran parte de código limpio , sin ofuscación , lo que significaba que no se adoptaron grandes contramedidas para proteger los datos del usuario y hacer que la aplicación fuera segura en absoluto .
Hace un mes…
Mi voz interior White Hat tomó el teléfono y llamó a la compañía detrás de esta vergüenza para informar la vulnerabilidad. Les sugerí amablemente que desecharan la arquitectura actual y desarrollaran una mejor y más segura desde cero.
Hocus falso.