paint-brush
Cómo hackeé máquinas expendedoras modernaspor@matteopisani91
228,835 lecturas
228,835 lecturas

Cómo hackeé máquinas expendedoras modernas

por Matteo P.2018/10/10
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Indiscutiblemente, las <strong>Máquinas</strong> <strong>Expendedoras</strong> son objetos de culto. Deliciosos bocados de <strong>Hackers</strong> , siempre. Al principio, trabajaban fuera de línea solo con <strong>monedas</strong> , luego, los modelos <strong>de tarjetas/llaves NFC</strong> comenzaron a extenderse. Si digo “ <strong>COGES</strong> ” 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...

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Cómo hackeé máquinas expendedoras modernas
Matteo P. HackerNoon profile picture

"Golpeando y pateando" la aplicación incluida de su empresa de distribución europea más grande.

PREFACIO

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...

HISTORIA

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.

ESTOFADO

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.

ANÁLISIS

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

INGENIERÍA INVERSA

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

VEREDICTO

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…

CONCLUSIÓN

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.