.
@matteo.pisani.91Matteo Pisani
Smonta giocattoli dal ’91
“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
Crea il tuo account gratuito per sbloccare la tua esperienza di lettura personalizzata.