How I hacked modern Vending Machines

author
4 minutes, 33 seconds Read
Původně publikoval Matteo Pisani dne 10. října 2018 192,920 přečtení

„Bít a kopat“ svazek App jejich nejširší evropské distribuční společnosti.

PREFACE

Předměty kultu jsou nesporně automaty. Lahodná sousta hackerů, vždy. Zpočátku fungovaly offline pouze s mincemi, pak se začaly šířit modely s NFC-klíči/kartami. Když řeknu COGES, určitě se někomu vybaví lepší časy. Ale… Za hromadu let se věci radikálně změnily. Člověk odvede pozornost a za chvíli zjistí, že svět nahradily věci připojené k internetu…

STORY

Jednoho dne jsem se rozhodl přerušit koření v netopýří jeskyni a nasměrovat se do rodného města za sluníčkem, a tak jsem se vydal na univerzitu pozdravit starého profesora.

„Jdi si dát kafe!“ „Jdi si dát kafe,“ řekl jsem. – řekl- a začali jsme klábosit, zatímco jsme procházeli hlavní chodbou.

Jakmile jsem dorazil…

Já: „Nech mě zaplatit, mám mince!“.
On: „Nechte mě zaplatit, mám mince!“:

BLE + NFC

Mozek: „Počkejte, počkejte, nechte mě zaplatit pomocí aplikace automatu, káva bude levnější“: „

Vynikající.

HOT-POT

Duše: „Vyzývám tě, abys to hacknul!“

~$ Vnitřní hlas White Hat: „jen poplácání po rameni, pokud nebude odměna za bug bounty“.
~$ Vnitřní hlas Grey Hat: „ok, udělám to jen pro vzdělávací účely“.
~$ Vnitřní hlas Black Hat: „no tak chlape, pojďme se na ten HEAP vykašlat, skvělý Jupiter!“.

Později toho dne…

Pwnie express.

ANALÝZA

Nutno říct, že jsem vzal svůj špinavý rootnutý smartphone s Androidem (s povoleným laděním USB), nainstaloval cílenou aplikaci z Obchodu Play a zahodil původní *.apk do notebooku přes adb.

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

Dekompilaci *.apk jsem provedl pomocí apktool

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

a extrakci zdrojových kódů Javy pomocí jadx

# jadx ./Argenta.apk 

Nejprve jsem vytvořil *.apk laditelný úpravou souboru AndroidManifest.xml přidáním vlastnosti android:debuggable="true" do application <tag>

Poté jsem znovu vytvořil *.apk

# apktool b ./Argenta

vytvořil nový klíč pomocí keytool

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

podepsal *.apk pomocí jarsigneru s použitím vygenerovaného klíče

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

na závěr jsem ji zazipoval, aby byla spustitelná

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

a nainstaloval jsem finální *.apk

# adb install ./Argenta-signed.apk

Aplikaci jsem spustil na smartphonu a začal jsem se dívat na logy pomocí logcatu tak, že jsem je filtroval přes její název balíčku

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

Nic zvláštního jsem nenašel, takže jsem začal pročesávat zdrojové kódy a hledat šťavnaté informace.

Podívám-li se lépe do souboru AndroidManifest.xml, našel jsem odkazy na RushOrm

Takže první hledané klíčové slovo bylo db_name

Cool. Spustil jsem Průzkumníka kořenů v telefonu a hledal argenta.db

Nalezeno. Tak jsem ho vytáhl do notebooku pomocí adb

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

a zkusil ho otevřít pomocí DB Browser pro SQLite

samozřejmě, byla chráněna heslem

REVERSE-ENGINEERING

Vrátil jsem se ke zdrojovým kódům, podíval se na RushAndroidConfig.java

kde jsem našel metody používané pro konfiguraci databáze.
Moji pozornost upoutal this.encryptionKey = getDeviceId(context);

Přešel jsem na jeho definici a…

Zjistil jsem, že cílená aplikace používá IMEI telefonu (*#06#)jako šifrovací klíč pro databázi SQLite.

Abrakadabra.

Bum baby.

Po několika vteřinách kontroly, jsem otevřel do tabulky UserWallets

a upravil pole walletCredit zápis změn

poté jsem databázi s načerpaným kreditem posunul zpět do telefonu

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

VERDICT

V mezidobí, zatímco jsem si připadal jako „Robin Hood“ (nostalgická a explicitní narážka na cheatovací kód Age Of Empires pro +1000 goldů), vyvinul jsem pro Android utilitu pro rychlý výpis/obnovu/změnu databáze cílové aplikace za běhu.

poté jsem se opět vrátil na univerzitu, abych Hack konečně otestoval

Drahý deníčku…

KONKURZ

Z účtu s nulovým kreditem jsem mohl:

> Nafouknout kredit aplikace.
> Nakoupit věci.
> Aktualizovat zbývající kredit.
> Vrátit se do stavu nulového kreditu.
> Znovu nafouknout kredit.
> Začněte znovu.

Makrokontrolou všech obrácených zdrojových kódů jsem našel obrovskou porci čistého kódu – bez obfuskace -, což znamenalo, že nebyla přijata žádná velká protiopatření, která by chránila uživatelská data a aplikaci vůbec zabezpečila.

Před měsícem…

Vnitřní hlas White Hat ve mně zvedl telefon a zavolal do společnosti, která za touto ostudou stojí, aby zranitelnost nahlásil. Jemně jsem jim navrhl, aby současnou architekturu zahodili a od základu vyvinuli lepší a bezpečnější.

Hokus bogus.

Tags

Join Hacker Noon

Vytvořte si bezplatný účet a odemkněte si vlastní čtení.

Similar Posts

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.