Hvordan jeg hackede moderne salgsautomater

author
4 minutes, 18 seconds Read
Oprindeligt udgivet af Matteo Pisani den 10. oktober 2018 192,920 læsninger

“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

Tilmeld dig Hacker Noon

Opret din gratis konto for at låse op for din brugerdefinerede læseoplevelse.

Similar Posts

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.