Come ho hackerato i moderni distributori automatici

author
3 minutes, 59 seconds Read
Originariamente pubblicato da Matteo Pisani il 10 ottobre 2018 192,920 letture

.

“Colpire e prendere a calci” l’App in bundle della loro più ampia società di distribuzione europea.

PREFATTO

Indubbiamente le Vending Machine sono oggetti di culto. Deliziosi bocconcini di Hackers, sempre. All’inizio funzionavano offline solo con le monete, poi si sono diffusi i modelli NFC-chiavi/carte. Se dico “COGES” sono sicuro che a qualcuno verranno in mente tempi migliori. Ma… in un po’ di anni le cose sono cambiate radicalmente. Ti distrai e un attimo dopo trovi il mondo soppiantato da cose collegate a internet…

STORIA

Un giorno decisi di interrompere la stagionatura nella bat-caverna e andare direttamente nella mia città natale a prendere un po’ di sole, così andai all’Università a salutare un vecchio professore.

“Vai a prendere un caffè!” – mi disse- e cominciammo a chiacchierare mentre camminavamo attraverso il corridoio principale.

Una volta arrivati…

Io: “lasciami pagare, ho le monete!”.
Lui: “aspetta aspetta! fammi usare l’App della Vending Machine per pagare, il caffè sarà più economico”.

BLE + NFC

Cervello: “Mmm… I portafogli virtuali sono roba forte…”.

Eccellente.

HOT-POT

Anima: “Ti sfido ad hackerarlo!”

~$ White Hat inner voice: “solo pacche sulla spalla se non c’è ricompensa per il bug bounty”.
~$ Grey Hat inner voice: “ok, lo farò solo per scopi educativi”.
~$ Black Hat inner voice: “c’mon man, let’s screw that HEAP, great Jupiter!”.

Più tardi in quel giorno…

Pwnie express.

ANALISI

Inutile dire che ho preso il mio smartphone Android con il rooting sporco (con debug USB abilitato), ho installato l’applicazione mirata dal Play Store e ho scaricato l’originale *.apk sul mio portatile tramite adb.

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

Ho decompilato il *.apk con apktool

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

e ho estratto i sorgenti Java con jadx

# jadx ./Argenta.apk 

In primo luogo, ho reso il *.apk debuggabile modificando il file AndroidManifest.xml aggiungendo la proprietà android:debuggable="true" al file application <tag>

Poi, ho ricostruito il *.apk

# apktool b ./Argenta

creato una nuova chiave con keytool

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

firmato il *.apk con jarsigner usando la chiave generata

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

infine, ho allineato lo zip per renderlo eseguibile

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

e ho installato il file finale *.apk

# adb install ./Argenta-signed.apk

Ho eseguito l’applicazione sullo smartphone e ho iniziato a guardare i log con logcat filtrandoli attraverso il nome del pacchetto

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

Non ho trovato nulla di speciale, così ho iniziato a setacciare i codici sorgente in cerca di informazioni succose.

Guardando meglio il file AndroidManifest.xml, ho trovato riferimenti a RushOrm

Quindi, la prima parola chiave di ricerca è stata db_name

Fico. Ho avviato il Root Explorer sul telefono cercando argenta.db

trovato. Quindi l’ho portato sul mio portatile con adb

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

e ho provato ad aprirlo con un DB Browser per SQLite

ovviamente, era protetto da password

REVERSE-ENGINEERING

Sono tornato ai codici sorgente, ho guardato RushAndroidConfig.java

dove ho trovato i metodi usati per configurare il database.
La mia attenzione è stata catturata da this.encryptionKey = getDeviceId(context);

Mi sono spostato alla sua definizione e…

Ho scoperto che l’App mirata utilizzava l’IMEI del telefono (*#06#)come chiave di crittografia per il database SQLite.

Abracadabra.

Boom baby.

Dopo un paio di secondi di ispezione, ho aperto alla tabella UserWallets

e ho modificato il campo walletCredit scrivendo le modifiche

poi ho spinto il database con credito pompato al telefono

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

VERDICT

Nel frattempo, mentre mi sentivo come “Robin Hood” (riferimento nostalgico ed esplicito a Age Of Empires cheat code per +1000 gold) ho sviluppato un’utility per Android per scaricare/ripristinare/manipolare rapidamente al volo il database dell’App presa di mira.

poi sono tornato di nuovo alla mia Università per testare finalmente l’Hack

Caro diario…

CONCLUSIONE

Da zero credito account, ho potuto:

> Gonfiare il credito dell’App.
> Comprare roba.
> Aggiornare il credito rimanente.
> Tornare allo stato di credito zero.
> Gonfiare nuovamente il credito.
> Ricominciare da capo.

Con una macroispezione di tutti i sorgenti invertiti ho trovato un’enorme porzione di codice pulito – senza offuscamento – che significava nessuna grande contromisura adottata per proteggere i dati degli utenti e rendere l’App sicura in assoluto.

Un mese fa…

La voce interiore White Hat di me ha preso il telefono e ha chiamato la società dietro questa vergogna per segnalare la vulnerabilità. Ho gentilmente suggerito loro di gettare l’attuale architettura e svilupparne una migliore e sicura da zero.

Hocus bogus.

Tags

Iscriviti a Hacker Noon

Crea il tuo account gratuito per sbloccare la tua esperienza di lettura personalizzata.

Similar Posts

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.