@matteo.pisani.91Matteo Pisani
Dismonterer legetøj siden ’91
“Hitting and kicking” the bundled App of their widest European distribution company.
PREFACE
Indiskutabelt er automater kultgenstande. Lækre bidder af Hackere, altid. I begyndelsen fungerede de kun offline med mønter, derefter begyndte NFC- nøgler/kort-modeller at brede sig. Hvis jeg siger “COGES” er jeg sikker på, at bedre tider vil dukke op i nogens bevidsthed. Men… I løbet af en række år ændrede tingene sig radikalt. Du distraherer dig og et øjeblik efter finder du verden afløst af ting, der er forbundet med internettet…
HISTORIE
En dag besluttede jeg mig for at afbryde krydderiet i flagermushulen og tage direkte til min hjemby for at få noget sollys, så jeg tog til universitetet for at hilse på en gammel professor.
“Gå ud og få en kop kaffe!” – sagde han- og vi begyndte at småsnakke, mens vi gik gennem hovedgangen.
Når vi var ankommet…
Mig: “Lad mig betale, jeg har mønter!”.
Han: Han: “Vent, vent, lad mig bruge automatens app til at betale, så bliver kaffen billigere”.
BLE + NFC
Hjernen: “Mmm… Virtuelle tegnebøger er fede ting…”.
Udmærket.
HOT-POT
Sjæl: “Jeg udfordrer dig til at hacke dig ind i den!”
~$ White Hat indre stemme: “bare klap på skulderen hvis ingen bug bounty belønning”.
~$ Grey Hat indre stemme: “ok, jeg gør det kun til undervisningsformål”.
~$ Black Hat indre stemme: “c’mon man, lad os skrue den HEAP, stor Jupiter!”.
Sidst på dagen…
Pwnie express.
ANALYSE
Nødvendigt at sige, at jeg hentede min beskidte rooterede Android smartphone (med USB Debugging Enabled), installerede den målrettede App fra Play Store og dumpede den originale *.apk til min bærbare computer via adb.
# adb pull /data/app/com.sitael.vending-1/base.apk ./Argenta.apk
Jeg dekompilerede *.apk med apktool
# apktool d ./Argenta.apk -o ./Argenta
og udtrak Java-kilder med jadx
# jadx ./Argenta.apk
For det første lavede jeg *.apk debuggbar ved at redigere filen AndroidManifest.xml ved at tilføje android:debuggable="true"
egenskaben application <tag>
Dernæst genopbyggede jeg *.apk
# apktool b ./Argenta
skabte en ny nøgle med keytool
# keytool -genkey -v -keystore Argenta.keystore -alias Argenta -keyalg RSA -keysize 2048 -validity 10000
signede *.apk
# keytool -genkey -v -keystore Argenta.keystore -alias Argenta -keyalg RSA -keysize 2048 -validity 10000
signerede *.apk med jarsigner ved hjælp af den genererede nøgle
# jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore Argenta.keystore Argenta.apk Argenta
til sidst zip-justerede jeg den for at gøre den køreklar
# zipalign -v 4 Argenta.apk Argenta-signed.apk
og installerede den endelige *.apk
Jeg kørte appen på smartphonen, og jeg begyndte at kigge på logfiler med logcat ved at filtrere dem via dens pakkenavn
# adb logcat --pid=`adb shell pidof -s com.sitael.vending`
Ingen speciel fundet, så jeg begyndte at finkæmme kildekoderne i jagten på saftige oplysninger.
Så ved at kigge nærmere på AndroidManifest.xml
filen, fandt jeg henvisninger til RushOrm
Så første søgeord var db_name
Cool. Jeg startede Root Explorer op på telefonen og søgte efter argenta.db
Fundet. Så jeg trak den til min bærbare computer med adb
# adb pull /data/data/com.sitael.vending/databases/argenta.db ./
og prøvede at åbne den med en DB Browser for SQLite
oplagt, den var password beskyttet
REVERSE-ENGINEERING
Gik tilbage til kildekoderne, kiggede på RushAndroidConfig.java
hvor jeg fandt de metoder, der bruges til at konfigurere databasen.
Min opmærksomhed blev fanget af this.encryptionKey = getDeviceId(context);
Jeg gik til dens definition og…
Fandt ud af, at den målrettede app brugte telefonens IMEI (*#06#)
som krypteringsnøgle til SQLite-databasen.
Abracadabra.
Boom baby.
Efter et par sekunders inspektion, åbnede jeg til UserWallets
tabellen
og redigerede walletCredit
feltet og skrev ændringer i walletCredit
feltet
så skubbede jeg databasen med pumpet kredit tilbage til telefonen
# adb pull ./argenta.db /data/data/com.sitael.vending/databases/argenta.db
VERDICT
I mellemtiden, mens jeg følte mig som “Robin Hood” (nostalgisk og eksplicit henvisning til Age Of Empires snydekode til +1000 guld) udviklede jeg et Android-værktøj til hurtigt at dumpe/restaurere/forstyrre den målrettede App’s database on the fly.
Så tog jeg tilbage til mit Universitet igen for endelig at teste Hacket
Kære dagbog…
KONKLUSION
Fra nul-kredit-konto, kunne jeg:
> Opblæse App’ens kredit.
> Købe ting.
> Få den resterende kredit opdateret.
> Gå tilbage til nul-kredittilstand.
> Opblæse kreditten igen.
> Start forfra.
Med en makroinspektion af alle de omvendte kilder fandt jeg store dele af ren kode – uden obfuscation – der betød, at der ikke blev vedtaget store modforanstaltninger for at beskytte brugerdata og gøre app’en sikker overhovedet.
For en måned siden…
Den indre White Hat-stemme i mig tog telefonen og ringede til firmaet bag denne skam for at rapportere sårbarheden. Jeg foreslog dem forsigtigt at smide den nuværende arkitektur ud og udvikle en bedre og sikker arkitektur fra bunden.
Hokus pokus.
Tags
Opret din gratis konto for at låse op for din brugerdefinerede læseoplevelse.