@matteo.pisani.91Matteo Pisani
Rozbor hraček od roku ’91
„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
Vytvořte si bezplatný účet a odemkněte si vlastní čtení.