Hur jag hackade moderna varuautomater

author
4 minutes, 27 seconds Read
Ursprungligen publicerad av Matteo Pisani den 10 oktober 2018 192,920 läsningar

”Hitting and kicking” the bundled App of their widest European distribution company.

PREFACE

Indisputabelt är automater föremål för kult. Läckra bitar av hackare, alltid. I början fungerade de offline endast med mynt, sedan började NFC-nycklar/kortmodeller spridas. Om jag säger ”COGES” är jag säker på att någon kommer att tänka på bättre tider. Men på några år förändrades saker och ting radikalt. Du distraherar och ett ögonblick senare finner du världen ersatt av saker som är anslutna till internet…

HISTORIA

En dag bestämde jag mig för att avbryta kryddningen av mig själv i fladdermusgrottan och åka direkt till min hemstad för att få lite solljus, så jag åkte till universitetet för att hälsa på en gammal professor.

”Gå och ta en kopp kaffe!” – sa han – och vi började småprata medan vi gick genom huvudkorridoren.

När vi väl kom fram…

Jag: ”Låt mig betala, jag har mynt!”.
Honom: Han: ”Vänta, låt mig använda automatens app för att betala, kaffet blir billigare”.

BLE + NFC

Hjärnan: ”Jag har en massa mynt: ”

Excellent.

HOT-POT

Soul: ”Jag utmanar dig att hacka dig in i det!”

~$ White Hat inre röst: ”bara klappar på axeln om ingen bug bounty belöning”.
~$ Grey Hat inre röst: ”ok, jag gör det endast i utbildningssyfte”.
~$ Black Hat inre röst: ”c’mon man, låt oss skruva på den HEAP, bra Jupiter!”.

Senare på dagen…

Pwnie express.

ANALYS

Nödvändigt att säga att jag plockade upp min smutsiga rotade Android-smartphone (med USB Debugging Enabled), installerade den målinriktade appen från Play Store och dumpade den ursprungliga *.apk till min laptop via adb.

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

Jag dekompilerade *.apk med apktool

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

och extraherade Javakällorna med jadx

# jadx ./Argenta.apk 

För det första gjorde jag *.apk debuggbar genom att redigera filen AndroidManifest.xml genom att lägga till egenskapen android:debuggable="true" till application <tag>

Därefter byggde jag om *.apk

# apktool b ./Argenta

skapar en ny nyckel med keytool

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

signerar *.apk med jarsigner med hjälp av den genererade nyckeln

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

Sluttligen zippade jag den för att göra den körbar

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

och installerade den slutliga *.apk

Jag körde appen på smarttelefonen och började titta på loggar med logcat genom att filtrera dem via dess paketnamn

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

Inte något speciellt hittades, så jag började kamma igenom källkoderna och sökte efter saftig information.

Som jag tittade närmare på AndroidManifest.xml-filen hittade jag referenser till RushOrm

Så, första sökningen på nyckelordet var db_name

Cool. Jag startade upp Root Explorer på telefonen och sökte efter argenta.db

Fyndat. Så jag drog den till min laptop med adb

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

och försökte öppna den med en DB Browser för SQLite

visst, den var lösenordsskyddad

REVERSE-ENGINEERING

Tillbaka till källkoderna, tittade på RushAndroidConfig.java

hos jag hittade metoderna som används för att konfigurera databasen.
Min uppmärksamhet fångades av this.encryptionKey = getDeviceId(context);

Jag gick till dess definition och…

Fann att den målinriktade appen använde telefonens IMEI (*#06#)som krypteringsnyckel för SQLite-databasen.

Abracadabra.

Boom baby.

Efter några sekunders inspektion, öppnade jag till UserWallets tabellen

och redigerade walletCredit fältet genom att skriva ändringar

därefter tryckte jag databasen med pumpad kredit tillbaka till telefonen

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

VERDICT

Under tiden, medan jag kände mig som ”Robin Hood” (nostalgisk och uttrycklig hänvisning till Age Of Empires fuskkod för +1000 guld) utvecklade jag ett Android-verktyg för att snabbt dumpa/återskapa/störda den målinriktade appens databas i farten.

Därefter gick jag tillbaka till mitt universitet igen för att äntligen testa Hacket

Kära dagbok…

KONKLUSION

Från noll-kreditkonto kunde jag:

> Uppblåsa appens kredit.
> Köpa saker.
> Få den återstående krediten uppdaterad.
> Gå tillbaka till noll-kredittillståndet.
> Blåsa upp krediten igen.
> Börja om igen.

Med en makroinspektion av alla omvända källor hittade jag enorma delar av ren kod – utan obfuskering – som innebar att inga större motåtgärder vidtagits för att skydda användardata och göra appen säker överhuvudtaget.

För en månad sedan…

Den inre rösten i mig, som var en vit hatt, lyfte på luren och ringde till företaget som står bakom den här skammen för att rapportera sårbarheten. Jag föreslog försiktigt att de skulle kasta den nuvarande arkitekturen och utveckla en bättre och säkrare arkitektur från grunden.

Hocus bogus.

Taggar

Gå med i Hacker Noon

Skapa ett kostnadsfritt konto för att låsa upp din anpassade läsupplevelse.

Similar Posts

Lämna ett svar

Din e-postadress kommer inte publiceras.