@matteo.pisani.91Matteo Pisani
Leluja purkamassa vuodesta -91
”Lyömällä ja potkimalla” niputettu App niiden laajimman eurooppalaisen jakeluyhtiön.
PÄIVITTÄISKUVAUS
Automaatit ovat kiistatta kulttimaineita. Hakkereiden herkullisia suupaloja, aina. Aluksi ne toimivat offline vain kolikoilla, sitten alkoivat yleistyä NFC-avaimet/kortit -mallit. Jos sanon ”COGES” niin varmasti jollekin tulee parempia aikoja mieleen. Mutta… Muutamassa vuodessa asiat muuttuivat radikaalisti. Sinä häiritset ja hetken päästä huomaat, että maailma on syrjäytetty internetiin liitetyillä asioilla…
TARINA
Etenkin eräänä päivänä päätin keskeyttää maustamiseni lepakkoluolassa ja suunnata kotikaupunkiini hakemaan auringonvaloa, joten menin yliopistolle tervehtimään vanhaa professoria.
”Menkäähän kahville!” – hän sanoi- ja aloimme rupatella kävellessämme pääkäytävää pitkin.
Tullessamme perille…
Minä: ”anna kun maksan, minulla on kolikoita!”.
Hän: ”odota odota odota! anna minun käyttää automaatin sovellusta maksamiseen, kahvi tulee halvemmaksi”.
BLE + NFC
Aivot:
HOT-POT
Sielu: ”Mmm… Virtuaalilompakot ovat siistiä kamaa…”.
Erinomaista.
HOT-POT
Sielu: ”Uskaltaudutko hakkeroimaan tuon!”
~$ Valkohattu sisäinen ääni: ”vain taputuksia olkapäälle, jos ei bugipalkkiota”.
~$ Harmaahattu sisäinen ääni: ”ok, teen tuon vain opetustarkoituksessa”.
~$ Mustahattu sisäinen ääni: ”c’mon äijä, ruuvaillaan tuohon HEAP:iin, hieno Jupiter!”.
Myöhemmin samana päivänä…
Pwnie express.
ANALYYSI
On sanomattakin selvää, että otin likaisen rootatun Android-älypuhelimeni (USB Debugging Enabled), asensin kohdistetun sovelluksen Play Storesta ja dumppasin alkuperäisen *.apk:n kannettavaan tietokoneeseeni adb:n avulla.
# adb pull /data/app/com.sitael.vending-1/base.apk ./Argenta.apk
Purkasin *.apk:n apktoolilla
# apktool d ./Argenta.apk -o ./Argenta
ja purin Java-lähteet jadx:lla
# jadx ./Argenta.apk
Aluksi tein *.apk debuggattavaksi muokkaamalla AndroidManifest.xml-tiedostoa lisäämällä android:debuggable="true"
-ominaisuuden application <tag>
Sitten rakensin *.apk
# apktool b ./Argenta
luomalla uuden avaimen keytoolilla
# keytool -genkey -v -keystore Argenta.keystore -alias Argenta -keyalg RSA -keysize 2048 -validity 10000
signoin *.apk:n jarsignerilla käyttäen luotua avainta
# jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore Argenta.keystore Argenta.apk Argenta
viimeiseksi zip-korjasin sen, jotta se olisi ajettavissa
# zipalign -v 4 Argenta.apk Argenta-signed.apk
ja asensin lopullisen *.apk
# adb install ./Argenta-signed.apk
juoksutin sovelluksen älypuhelimella ja aloin tarkastella lokitietoja logcatilla suodattamalla ne sen paketin nimen kautta
# adb logcat --pid=`adb shell pidof -s com.sitael.vending`
mitään erikoista ei löytynyt, joten aloin kammeta lähdekoodeja etsien mehukasta tietoa.
Katsellessani tarkemmin AndroidManifest.xml
-tiedostoa, löysin viittauksia RushOrmiin
Ensimmäinen avainsanahaku oli siis db_name
Cool. Käynnistin puhelimen Root Explorerin etsien argenta.db
Löytyi. Niinpä vedin sen kannettavaan tietokoneeseen adb
# adb pull /data/data/com.sitael.vending/databases/argenta.db ./
ja yritin avata sitä DB Browserilla SQLite
selkeästi, se oli suojattu salasanalla
REVERSE-ENGINEERING
Palasin takaisin lähdekoodeihin, katsoin RushAndroidConfig.java
josta löysin tietokannan konfigurointiin käytetyt menetelmät.
Huomioni kiinnittyi this.encryptionKey = getDeviceId(context);
Siirryin sen määrittelyyn ja…
Havaitsin, että kohteena oleva sovellus käytti puhelimen IMEI-numeroa (*#06#)
SQLite-tietokannan salausavaimena.
Abrakadabra.
Boom baby.
Parien sekuntien tarkastelun jälkeen, Avasin UserWallets
-tauluun
ja muokkasin walletCredit
-kenttää kirjoittaen muutokset
Sitten työnsin tietokannan pumpatun luoton takaisin puhelimeen
# adb pull ./argenta.db /data/data/com.sitael.vending/databases/argenta.db
YLIMÄÄRÄYKSET
Silloin, samalla kun tunsin itseni ”Robin Hoodiksi” (nostalginen ja selkeä viittaus Age Of Empiresin huijauskoodiin +1000 kultaa) kehitin Android-apuohjelman, jolla voi nopeasti dumpata/palauttaa/pahentaa kohteena olevan sovelluksen tietokannan lennossa.
Sitten palasin taas yliopistolleni testaamaan vihdoin Hackia
Rakas päiväkirja…
KONKLUUSIO
Nollan opintopisteen tililtäni pystyin:
> Paisuttaa sovelluksen luottoa.
> Ostaa tavaraa.
> Saada jäljellä oleva luotto päivitettyä.
> Palata takaisin nollaluottotilaan.
> Paisuttaa luottoa uudelleen.
> Aloita alusta.
Kaikkien käänteisten lähteiden makrotarkastuksella löysin valtavan osuuden puhdasta koodia – ilman peittelyä – mikä tarkoitti sitä, että mitään suuria vastatoimia ei ollut otettu käyttöön käyttäjätietojen suojaamiseksi ja sovelluksen suojaamiseksi lainkaan.
Kuukausi sitten…
Valkohattuinen sisäinen ääni minussa otti puhelimen käteeni ja soitti yritykselle, joka oli tämän häpeän takana, ilmoittaakseen haavoittuvuuden. Ehdotin heille lempeästi, että heittäisivät nykyisen arkkitehtuurin pois ja kehittäisivät paremman ja turvallisemman alusta alkaen.
Hoksaa bogus.
Tags
Luo ilmainen tili ja avaa mukautettu lukukokemus.