How I hacked modern Vending Machines

author
3 minutes, 21 seconds Read
Julkaissut Matteo Pisani 10. lokakuuta 2018 192,920 lukemaa

”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

Liity Hacker Noon

Luo ilmainen tili ja avaa mukautettu lukukokemus.

Similar Posts

Vastaa

Sähköpostiosoitettasi ei julkaista.