.
@matteo.pisani.91Matteo Pisani
Démontage de jouets depuis 91
« Hitting and kicking » l’App groupée de leur plus large société de distribution européenne.
PREFACE
Indiscutablement, les distributeurs automatiques sont des objets de culte. Des bouchées délicieuses pour les hackers, toujours. Au début, ils ne fonctionnaient hors ligne qu’avec des pièces de monnaie, puis, les modèles NFC- clés/cartes ont commencé à se répandre. Si je dis « COGES », je suis sûr que des temps meilleurs vont venir à l’esprit de quelqu’un. Mais… En quelques années, les choses ont radicalement changé. Vous distrayez et un moment après, trouvez le monde supplanté par des choses connectées à l’internet…
HISTOIRE
Un jour, j’ai décidé d’interrompre l’assaisonnement dans la bat-cave et de diriger vers ma ville natale pour avoir un peu de soleil, donc je suis allé à l’université pour saluer un vieux professeur.
« Va prendre un café ! ». – il a dit – et nous avons commencé à bavarder tout en marchant dans le couloir principal.
Une fois arrivé…
Moi : « laissez-moi payer, j’ai des pièces ! ».
Il : « attendez attendez ! laissez-moi utiliser l’application du distributeur automatique pour payer, le café sera moins cher ».
BLE + NFC
Cerveau : « Mmm… Les portefeuilles virtuels sont des trucs cool… ».
Excellent.
HOT-POT
Ame : « Je te défie de pirater ça ! »
~$ Chapeau blanc voix intérieure : « juste des tapes sur l’épaule si pas de récompense de bug bounty ».
~$ Chapeau gris voix intérieure : « ok, je vais le faire à des fins éducatives seulement ».
~$ Chapeau noir voix intérieure : « allez mec, on se tape ce HEAP, super Jupiter ! ».
Plus tard dans la journée…
Pwnie express.
ANALYSE
Il va sans dire que j’ai pris mon smartphone Android rooté sale (avec débogage USB activé), installé l’application ciblée depuis le Play Store et vidé l’original *.apk sur mon ordinateur portable via adb.
# adb pull /data/app/com.sitael.vending-1/base.apk ./Argenta.apk
J’ai décompilé le *.apk avec apktool
# apktool d ./Argenta.apk -o ./Argenta
et extrait les sources Java avec jadx
# jadx ./Argenta.apk
En premier lieu, j’ai rendu le *.apk débuggable en modifiant le fichier AndroidManifest.xml en ajoutant la propriété android:debuggable="true"
à la application <tag>
Puis, j’ai reconstruit le *.apk
# apktool b ./Argenta
créé une nouvelle clé avec keytool
# keytool -genkey -v -keystore Argenta.keystore -alias Argenta -keyalg RSA -keysize 2048 -validity 10000
signé le *.apk avec jarsigner en utilisant la clé générée
# jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore Argenta.keystore Argenta.apk Argenta
en dernier lieu, je l’ai aligné par zip pour le rendre exécutable
# zipalign -v 4 Argenta.apk Argenta-signed.apk
et j’ai installé l’*.apk
# adb install ./Argenta-signed.apk
J’ai lancé l’App sur le smartphone et j’ai commencé à regarder les logs avec logcat en les filtrant via son nom de package
# adb logcat --pid=`adb shell pidof -s com.sitael.vending`
Rien de spécial trouvé, j’ai donc commencé à passer au peigne fin les codes sources à la recherche d’informations juteuses.
En regardant mieux le fichier AndroidManifest.xml
, j’ai trouvé des références à RushOrm
Donc, la première recherche par mot-clé était db_name
Cool. J’ai démarré le Root Explorer sur le téléphone en cherchant argenta.db
Found. Je l’ai donc tiré sur mon ordinateur portable avec adb
# adb pull /data/data/com.sitael.vending/databases/argenta.db ./
et j’ai essayé de l’ouvrir avec un DB Browser pour SQLite
évidemment, il était protégé par un mot de passe
REVERSE-ENGINEERING
Retourner aux codes sources, regarder RushAndroidConfig.java
où j’ai trouvé les méthodes utilisées pour configurer la base de données.
Mon attention a été attirée par this.encryptionKey = getDeviceId(context);
Je suis passé à sa définition et…
J’ai découvert que l’App ciblée utilisait l’IMEI du téléphone (*#06#)
comme clé de cryptage pour la base de données SQLite.
Abracadabra.
Boom baby.
Après quelques secondes d’inspection, j’ai ouvert la table UserWallets
et j’ai édité le champ walletCredit
en écrivant les changements
puis j’ai repoussé la base de données avec le crédit pompé vers le téléphone
# adb pull ./argenta.db /data/data/com.sitael.vending/databases/argenta.db
VERDICT
En attendant, alors que je me sentais comme « Robin des Bois » (référence nostalgique et explicite au code de triche d’Age Of Empires pour +1000 or), j’ai développé un utilitaire Android pour vider/restaurer/tamper rapidement la base de données de l’App ciblée à la volée.
alors je suis retourné à nouveau à mon Université pour enfin tester le Hack
Cher journal…
CONCLUSION
À partir d’un compte à zéro crédit, j’ai pu :
> Gonfler le crédit de l’appli.
> Acheter des trucs.
> Obtenir la mise à jour du crédit restant.
> Revenir à l’état de crédit zéro.
> Gonfler à nouveau le crédit.
> Recommencer.
Avec une inspection macro de toutes les sources inversées, j’ai trouvé une énorme portion de code propre – sans obfuscation – qui signifiait qu’aucune grande contre-mesure n’avait été adoptée pour protéger les données des utilisateurs et sécuriser l’App du tout.
Il y a un mois…
La voix intérieure de White Hat en moi a pris le téléphone et a appelé la société derrière cette honte pour signaler la vulnérabilité. Je leur ai gentiment suggéré de jeter l’architecture actuelle et d’en développer une meilleure et sécurisée à partir de zéro.
Hocus bogus.
Tags
Créez votre compte gratuit pour débloquer votre expérience de lecture personnalisée.