Hoe ik moderne automaten hackte

author
4 minutes, 8 seconds Read
Oorspronkelijk gepubliceerd door Matteo Pisani op 10 oktober 2018 192,920 lezingen

“Hitting and kicking” de gebundelde App van hun breedste Europese distributiebedrijf.

PREFACE

Onmiskenbaar zijn Automaten objecten van cult. Heerlijke hapjes van Hackers, altijd. In het begin werkten ze alleen offline met munten, daarna begonnen NFC-sleutels/kaarten modellen zich te verspreiden. Als ik “COGES” zeg, weet ik zeker dat iemand aan betere tijden zal denken. Maar… in een paar jaar tijd zijn de dingen radicaal veranderd. Je leidt af en even later, vind je de wereld verdrongen door dingen verbonden met het internet…

Verhaal

Op een dag besloot ik mezelf te onderbreken in de vleermuizengrot en rechtstreeks naar mijn geboortestad te gaan om wat zonlicht te krijgen, dus ging ik naar de universiteit om een oude professor te begroeten.

“Ga een koffie drinken!” – zei hij- en we begonnen te kletsen terwijl we door de hoofdgang liepen.

Eenmaal aangekomen…

Ik: “laat me betalen, ik heb munten!”.
Hij: “wacht wacht! Laat me de App van de automaat gebruiken om te betalen, de koffie zal goedkoper zijn”.

BLE + NFC

Brein: “Mmm… Virtuele portefeuilles zijn cool spul…”.

Uitmuntend.

HOT-POT

Ziel: “Ik daag je uit om daar in te hacken!”

~$ White Hat innerlijke stem: “gewoon schouderklopjes als er geen bug bounty beloning is”.
~$ Grey Hat innerlijke stem: “ok, ik doe dat alleen voor educatieve doeleinden”.
~$ Black Hat innerlijke stem: “kom op man, laten we die HEAP naaien, geweldige Jupiter!”.

Later op de dag…

Pwnie express.

ANALYSE

Nadeloos te zeggen dat ik mijn vuile geroot Android-smartphone (met USB Debugging Enabled) heb opgehaald, de beoogde app uit de Play Store heb geïnstalleerd en de originele *.apk via adb.

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

Ik heb de *.apk gedecompileerd met apktool

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

en de Java-bronnen uitgepakt met jadx

# jadx ./Argenta.apk 

Vooreerst heb ik de *.apk debuggable gemaakt door het AndroidManifest.xml bestand te bewerken door android:debuggable="true" property toe te voegen aan de application <tag>

Daarna heb ik de *.apk

# apktool b ./Argenta

een nieuwe sleutel gemaakt met keytool

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

ondertekend de *.apk met jarsigner met de gegenereerde sleutel

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

tot slot heb ik het zip-aligned om het runnable te maken

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

en installeerde ik de uiteindelijke *.apk

# adb install ./Argenta-signed.apk

Ik draaide de app op de smartphone en ik begon logs te bekijken met logcat door ze te filteren via de pakketnaam

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

Niets speciaals gevonden, dus begon ik de broncodes uit te kammen op zoek naar sappige informatie.

Beter kijkend naar AndroidManifest.xml bestand, vond ik verwijzingen naar RushOrm

Dus, eerste zoekterm was db_name

Cool. Ik startte de Root Explorer op de telefoon op zoek naar argenta.db

Gevonden. Dus haalde ik het naar mijn laptop met adb

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

en probeerde het te openen met een DB Browser voor SQLite

, was het beveiligd met een wachtwoord

REVERSE-ENGINEERING

Teruggegaan naar de broncodes, gekeken naar RushAndroidConfig.java

waar ik de methodes vond die gebruikt worden om de database te configureren.
Mijn aandacht werd getrokken door this.encryptionKey = getDeviceId(context);

Ik ging naar de definitie en…

Vond dat de doel App de IMEI (*#06#) van de telefoon gebruikte als encryptie sleutel voor de SQLite database.

Abracadabra.

Boom baby.

Na een paar seconden inspectie, opende ik de UserWallets tabel

en bewerkte het walletCredit veld en schreef wijzigingen

en duwde ik de database met opgepompt krediet terug naar de telefoon

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

VERDICT

In de tussentijd, terwijl ik me voelde als “Robin Hood” (nostalgische en expliciete verwijzing naar Age Of Empires cheat code voor +1000 goud) ontwikkelde ik een Android hulpprogramma om snel te dumpen / herstellen / manipuleren van de gerichte App’s database on the fly.

toen ging ik terug naar mijn universiteit om de Hack eindelijk te testen

Dagboek…

CONCLUSIE

Vanuit een nul-krediet account, kon ik:

> Het krediet van de App opblazen.
>Dingen kopen.
>Het resterende krediet bijwerken.
>Teruggaan naar de toestand met nul krediet.
>Het krediet opnieuw opblazen.
> Begin opnieuw.

Met een macro-inspectie van alle omgekeerde bronnen vond ik een enorme portie schone code – zonder obfuscatie – wat betekende dat er helemaal geen grote tegenmaatregelen waren genomen om gebruikersgegevens te beschermen en de app veilig te maken.

Een maand geleden…

De White Hat innerlijke stem van mij pakte de telefoon en belde het bedrijf achter deze schande om de kwetsbaarheid te melden. Ik stelde hen voorzichtig voor om de huidige architectuur overboord te gooien en een betere en veiligere vanaf nul te ontwikkelen.

Hocus bogus.

Tags

Word lid van Hacker Noon

Maak uw gratis account aan om uw leeservaring op maat te ontgrendelen.

Similar Posts

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.