IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Un chercheur fait un jailbreak de RabbitOS et découvre que le rabbit r1 enregistre vos positions GPS précises
Le nom de votre réseau WiFi et d'autres infos qui sont transmises aux serveurs de l'entreprise

Le , par Stéphane le calme

8PARTAGES

18  0 
Après que le rabbit r1 a fait les gros titres pour des situations comme l'enregistrement en secret des conversations des utilisateurs sur l'appareil sans qu'il soit possible de les effacer, le codage en dur de clés d'API et plusieurs autres scandales, des individus à tenter de le jailbreaker pour découvrir d'autres secrets cachés dans le firmware.

Motivations

Après que les titres aient attiré mon attention, j'ai commencé à faire de la rétro-ingénierie sur une copie de l'APK que j'ai trouvé sur internet (oui, « RabbitOS » est juste une application fonctionnant en mode kiosque sur Android 13 AOSP). Il n'y a pas de « modèles d'IA locaux » ou quoi que ce soit de ce genre, donc une fois que vous comprenez l'API qu'il utilise pour parler au Cloud, vous pouvez remplacer le matériel Rabbit R1 par un petit script Python. J'ai fait de la rétro-ingénierie de leur API, et j'ai écrit mes conclusions (ce n'est rien de très excitant, juste du JSON sur une websocket).

Il y a environ une semaine, j'ai acheté un R1 sur eBay pour 122 livres sterling (ce qui est toujours bien plus que ce qu'il vaut objectivement). Alors pourquoi l'ai-je acheté en toute connaissance de cause ?

Eh bien, dans les mises à jour ultérieures de l'application, ils ont commencé à obscurcir leur code, et je l'ai pris personnellement ! J'adore le jeu du chat et de la souris (ou de la tortue et du lièvre ?), et le jeu était lancé. Quels sont les secrets qu'ils essaient de me cacher ?

Ils utilisent un obscurcisseur commercial, et pour être honnête, il est plutôt bon, ce qui rend mon approche purement statique fastidieuse. J'ai donc décidé qu'il était temps d'avoir une R1 en main, pour la manipuler. Oui, j'avais déjà compris l'API, mais je ne voulais pas être exclu des futures mises à jour. Non pas parce que je tiens particulièrement à pouvoir interroger les médiocres API de Rabbit, mais parce que c'est ma fierté qui est en jeu.

De plus, je n'avais jamais examiné la sécurité de démarrage d'un appareil Android moderne auparavant, c'était donc une occasion d'apprentissage intéressante sur ce front.

Au cours de mon analyse statique de leur code obscurci, j'ai noté une logique permettant de détecter des outils d'analyse standard tels que Magisk et Frida (s'il était détecté, il refuserait de s'exécuter). J'allais donc probablement devoir développer mon propre outil. Amusant ! Bien sûr, je pourrais essayer de contourner leurs détections anti-analyse, mais c'est beaucoup moins amusant. Le code obfusqué prend également des mesures pour vérifier qu'il s'exécute sur un R1, par opposition à n'importe quel autre appareil Android, et je pourrais usurper ou patcher ces vérifications, mais cela devient ennuyeux (et tend à ne pas être une approche à l'épreuve du temps).

Pousser la charge utile

J'ai commencé à écrire mon propre logiciel client USB en Python, non pas parce qu'il y a quelque chose de mal avec mtkclient (qui implémente déjà tout ce qui est nécessaire) mais parce que je voulais m'assurer que je comprenais tout autant que possible. Une fois que j'ai réussi à le faire fonctionner, j'ai décidé de le porter sur js/WebSerial, juste pour le plaisir.

Et maintenant, j'ai une page web qui peut jailbreaker un Rabbit R1 physiquement connecté.

Dans l'esprit des jeux de mots terribles sur le thème du lapin, j'ai nommé le jailbreak « carroot ».

Au démarrage, ça ressemble à ça :


Une fois qu'il aura démarré, nous pourrons nous connecter et jeter un coup d'œil rapide :

Code : Sélectionner tout
1
2
3
4
5
$ rlwrap nc 192.168.0.69 1337
# id
uid=0(root) gid=0(root) groups=0(root) context=u:r:rootkit:s0
# getprop ro.boot.verifiedbootstate
green
Comme vous pouvez le voir, nous sommes root, et le système pense qu'il a été démarré de manière sécurisée, sans même avoir besoin de modifier les valeurs des propriétés du système. Notez que mon shell TCP est tellement dépouillé qu'il n'y a pas d'invite « # » par défaut, je l'ai ajoutée ici pour plus de clarté.

Le domaine SELinux privilégié « rootkit » est configuré dans le cadre de flashable-android-rootkit.


Constatations

Alors, qu'est-ce qu'ils essayaient de nous cacher ?

Pour être honnête, je n'ai encore rien trouvé de particulièrement intéressant. L'analyse ne fait que commencer ! Si je partage mon jailbreak, c'est en grande partie dans l'espoir que d'autres personnes se joindront à moi dans mon analyse.

Ce que j'ai remarqué, c'est qu'ils enregistraient tout dans des fichiers texte sur le stockage interne :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
:/storage/emulated/0 # ls -al ./Android/data/tech.rabbit.r1launcher.r1/files/logs/
total 7140
drwxrws--- 2 u0_a66 ext_data_rw    4096 2024-07-07 00:52 .
drwxrws--- 3 u0_a66 ext_data_rw    4096 2024-07-04 22:11 ..
-rw-rw---- 1 u0_a66 ext_data_rw  671954 2024-07-05 01:37 2024-07-01.log
-rw-rw---- 1 u0_a66 ext_data_rw 1472020 2024-07-04 23:40 2024-07-04.log
-rw-rw---- 1 u0_a66 ext_data_rw  782800 2024-07-06 16:45 2024-07-05.log
-rw-rw---- 1 u0_a66 ext_data_rw 1747449 2024-07-07 00:52 2024-07-06.log
-rw-rw---- 1 u0_a66 ext_data_rw 2565224 2024-07-07 03:47 2024-07-07.log
À l'époque (le 7 juillet), je l'ai signalé publiquement dans le discord de la communauté Rabbitude. Je trouvais simplement amusant qu'ils choisissent de remplir leurs 128 Go d'espace de stockage avec des enregistrements aussi verbeux.

Mais en y regardant de plus près, et en y réfléchissant plus profondément, les choses sont devenues inquiétantes.

Ces enregistrements comprennent :
  • Vos positions GPS précises (qui sont également envoyées à leurs serveurs).
  • Le nom de votre réseau WiFi.
  • Les identifiants des tours de téléphonie mobile à proximité (même si aucune carte SIM n'est insérée, ces identifiants sont également envoyés à leurs serveurs).
  • Votre adresse IP orientée vers l'internet.
  • Le jeton d'utilisateur utilisé par l'appareil pour s'authentifier auprès de l'API de Rabbit.
  • Les MP3 codés en base64 de tout ce que le Rabbit vous a dit (et leur transcription textuelle).

Cette situation est préoccupante pour les raisons suivantes : il n'est tout simplement pas nécessaire d'enregistrer autant de données de manière aussi détaillée :
  • Il n'est tout simplement pas nécessaire d'enregistrer autant de données avec autant de détails, en particulier sur un appareil qui ne dispose pas d'une sécurité matérielle digne de ce nom. Je n'ose imaginer ce qu'ils enregistrent aussi du côté du back-end !
  • Il n'existait aucun moyen pour l'utilisateur final de réinitialiser l'appareil en usine, ce qui rendait les enregistrements permanents. Si l'on ajoute à cela le fait que les marchés d'occasion sont très actifs, on obtient la recette d'un désastre. Il n'y a même pas de bouton « déconnexion » sur l'appareil !

Heureusement pour la personne à qui j'ai acheté mon R1, je l'ai réinitialisé en utilisant mtkclient avant de faire quoi que ce soit avec.

Heureusement pour tous les autres, la dernière mise à jour de RabbitOS (v0.8.112) a corrigé ce problème alors que j'étais en train d'écrire cet article. Ils ont réduit la journalisation et ajouté une option de réinitialisation des paramètres d'usine !

C'est la première fois que je vois Rabbit être un tant soit peu proactif en ce qui concerne les problèmes de confidentialité et de sécurité des utilisateurs, plutôt que de simplement réagir aux articles de presse écrits à ce sujet.

Je n'ai pas pris la peine de le signaler en tant que problème de sécurité, tout d'abord parce que je n'avais pas pleinement réfléchi aux conséquences à ce moment-là, et ensuite parce que je ne m'attendais pas à être pris au sérieux par l'entreprise, sur la base de ses réponses antérieures aux problèmes de sécurité. J'étais également préoccupé par le développement de mon outil de jailbreaking ! Je suppose que quelqu'un d'autre leur a signalé le problème et je dois admettre que j'ai été positivement surpris par leur réponse. J'espère que cela marque un pas dans la bonne direction en ce qui concerne leur attitude vis-à-vis des problèmes de sécurité. En tout cas, ils ont fait paraître le problème plus grave qu'il ne l'est en réalité, plutôt que d'essayer de le minimiser.

Il serait évidemment préférable qu'ils n'enregistrent jamais ces informations, mais cela fait partie de l'état d'esprit « aller vite et pulvériser des informations confidentielles partout » que nous attendons de l'industrie technologique moderne.

Cela réaffirme ma conviction que les consommateurs devraient avoir la possibilité d'inspecter et de modifier le code qui s'exécute sur les appareils qu'ils possèdent. Lorsque ces capacités sont refusées par un fournisseur, je prends des mesures pour rectifier la situation.

l'outil expérimental de jailbreaking qu'il a développé (Tethered Jailbreak) pour aider les chercheurs à accéder à leurs propres R1

Source : David Buchanan

Et vous ?

Quelle est votre opinion sur les pratiques de sécurité de Rabbit Inc. ? Pensez-vous que l’entreprise a agi de manière responsable en matière de sécurité et de confidentialité des données.
Pensez-vous que le jailbreak est justifié dans ce cas ? Explorez les avantages et les inconvénients du jailbreak du Rabbit R1, en tenant compte des problèmes de sécurité et des restrictions imposées par l’entreprise.
Quelles autres mesures de sécurité devrait-on prendre pour protéger les appareils IoT ? Parlez des meilleures pratiques pour sécuriser les appareils connectés, en particulier ceux qui utilisent des systèmes d’exploitation personnalisés.
Comment RabbitOS pourrait-il améliorer sa transparence envers les utilisateurs ? Proposez des idées pour que Rabbit Inc. communique davantage sur les fonctionnalités, les mises à jour et les problèmes de sécurité.
Avez-vous déjà possédé un appareil IoT qui vous a déçu ? Partagez vos expériences avec des appareils connectés et les leçons que vous en avez tirées.

Une erreur dans cette actualité ? Signalez-nous-la !