Cómo hackeé máquinas expendedoras modernas by@matteo.pisani.91
209,341 lecturas

Cómo hackeé máquinas expendedoras modernas

2018/10/10
por @matteo.pisani.91 209,341 lecturas
ES
Read on Terminal Reader

Demasiado Largo; Para Leer


Companies Mentioned

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

@matteo.pisani.91

Matteo Pisani

Disassembling toys since '91

Aprender Mas
LEARN MORE ABOUT @MATTEO.PISANI.91'S EXPERTISE AND PLACE ON THE INTERNET.
react to story with heart

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

image

BLE + NFC

Cerebro: “Mmm… Las billeteras virtuales son geniales…”.

Excelente.

image

ESTOFADO

Alma: "¡Te desafío a hackear eso!"

image

~$ 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…

image

Pwnie expreso.

image

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

image

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`

image

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

image

Entonces, la primera búsqueda de palabra clave fue **db_name**

image

Enfriar. Inicié Root Explorer en el teléfono buscando **argenta.db**

image

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

image

obviamente, estaba protegido por contraseña

image

INGENIERÍA INVERSA

Regrese a los códigos fuente, mire **RushAndroidConfig.java**

image

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

image

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.

image

Bebé boom.

image

image

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

image

y editó los cambios de escritura del campo **walletCredit**

image

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.

image

luego volví a mi universidad nuevamente para finalmente probar el Hack

Querido diario…

image

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.

image

HISTORIAS RELACIONADAS

L O A D I N G
. . . comments & more!
Hackernoon hq - po box 2206, edwards, colorado 81632, usa