@matteo.pisani.91Matteo Pisani
Dismontera leksaker sedan ’91
”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
Skapa ett kostnadsfritt konto för att låsa upp din anpassade läsupplevelse.