À la découverte de GrapheneOS

GrapheneOS est un système d'exploitation (OS) focalisé sur la sécurité et la vie privée, compatible avec l'écosystème d'applications Android dont il est dérivé.

À la découverte de GrapheneOS

Mise à jour

Une mise à jour de cet article est disponible ici :

GrapheneOS : présentation en détails de l’OS et du projet
GrapheneOS est un système d’exploitation mobile basé sur le code source d’Android (AOSP), compatible avec son écosystème d’applications, et visant à renforcer la sécurité et la vie privée. Revenons ensemble sur l’état de cet OS open-source alternatif en 2021 !

La suite de ce présent article est laissée à des fins d'archive. Elle contient quelques informations supplémentaires sur l'historique de GrapheneOS, mais il est recommandé de lire le nouvel article qui contient des informations techniques plus détaillées et à jour.

Préambule

C'est assez peu usuel de commencer par les sources mais je pense que c'est important pour certains sujets dont celui-ci. Je ne vais pas pouvoir sourcer chaque affirmation que je fais, certaines relèvent du bon sens, d'autres sont vérifiables par vous-même en une recherche.

Les informations avancées par cet article sont en grande partie la résultante du travail du chercheur en sécurité Daniel Micay. Ce dernier est le père fondateur du projet Android Hardened aujourd'hui connu sous le nom de GrapheneOS.

Vous pouvez consulter à n'importe quel comment la FAQ de GrapheneOS. Il y avait auparavant des logs IRC, mais la fermeture de Freenode signifie également la perte de ces conversations : heureusement, elles ont été sauvegardées par la communauté pour quiconque souhaite les consulter.

J'ai pris le temps de me documenter énormément sur le sujet et j'ai décidé de vous partager le résultat de mes recherches. Libre à vous de les contester, mais gardez à l'esprit que je soutiens une sécurité basée sur l'évidence plutôt que la spéculation. Sans m'attarder davantage, commençons !

Introduction (non-sponsorisée)

Le marché mobile est dominé par l'OS de Google, Android, et l'OS d'Apple, iOS. L'écrasante majorité des personnes choisissent leur appareil en fonction du prix, de ses performances, de son écran, de son module photo, voire de la marque... et une minorité fait attention au logiciel.

La sécurité est considérée comme une niche.

Mais la réalité est qu'une minorité encore plus faible de personnes s'intéresse à la sécurité de son appareil. Et celle-ci passe aussi bien par le software que par le hardware. Aborder l'entièreté des spécificités qui mènent à déterminer quel appareil est sécurisé ou non prendrait plusieurs articles, mais il est admis par la plupart des chercheurs en sécurité que les iPhone sont en avance.

Les raisons sont simples :

  • Apple gère le hardware et le software : un point de confiance unique.
  • Une enclave sécurisée qui a fait ses preuves (Secure Enclave Processor).
  • Un OS très user-safe vu comme "fermé" mais pour de bonnes raisons.
  • Des mises à jour de sécurité : jusqu'à 7 ans pour l'iPhone 5S !
  • Jailbreak, vous dites ? Une seule méthode persistante depuis 2016.
  • Sécurité : sandboxing, verified boot, mitigations diverses...
  • Vie privée : ads opt-out solide, tracking opt-in, etc.

Bref, la liste est longue. Je vais vous la faire courte après plusieurs mois de recherche sur le sujet : si vous voulez un truc qui marche et qui est sûr, un iPhone avec un SoC récent (A12+) est probablement un bon choix.

Mais Apple c'est closed-source ! C'est donc pas sûr !

Apple libère le code de nombreuses composantes de ses systèmes (macOS et iOS, dont leur noyau est dérivé de BSD). Ensuite, closed-source ne rime pas avec "pas sûr" tout comme open-source ne rime pas avec "sûr".

De plus, rien ne vous empêche de faire une MITM de vos appareils. Il se trouve que d'après les retours de personnes qui en ont fait, Apple respecte plutôt bien la télémétrie.

Je ne suis pas venu ici pour me taper la propagande d'Apple !

Il fallait que je mette à mal Android pour aborder GrapheneOS, justement. Comme vous le savez, Android est un parc très hétérogène, donc chaque constructeur est vraiment responsable de ce qu'il fait, y compris en sécurité. Et le bilan est assez catastrophique quand on compare aux efforts d'Apple.

Vous croirez peut-être bien faire en installant LineageOS pour "prolonger" les mises à jour de sécurité de votre appareil, mais saviez-vous que LineageOS :

  • Demande de tourner avec le bootlooader déverrouillé (très mauvais).
  • Builds userdebug (++ surface d'attaque), SELinux relâché.
  • Applique à moitié les patchs de sécurité pour la majorité des appareils.

C'est là que dans tout ce paysage pessimiste, je peux maintenant vous parler de GrapheneOS ! Développé principalement par le chercheur en sécurité Daniel Micay, GrapheneOS est un projet autrefois connu sous le nom de Android Hardened.

Vous en avez peut-être entendu parler un jour, vu qu'Edward Snowden en personne en a brièvement parlé sur son compte Twitter dans un thread très intéressant par ailleurs :

If I were configuring a smartphone today, I'd use @DanielMicay's @GrapheneOS as the base operating system. I'd desolder the microphones and keep the radios (cellular, wifi, and bluetooth) turned off when I didn't need them. I would route traffic through the @torproject network.

- Edward Snowden (21/09/19)

GrapheneOS ? C'est quoi ?

GrapheneOS est un OS basé sur AOSP (Android Open Source Project), donc basé sur le code source d'Android pour faire simple ; lequel utilise, si vous ne le saviez pas, Linux comme noyau.

À partir de ces sources, GrapheneOS mène un travail profond dans plusieurs parties du système pour le rendre plus sûr. Ce travail n'est donc pas forcément visible de surface, mais il est présent, et important.

hardened_malloc

Pour commencer, parlons de hardened_malloc. Il s'agit d'un allocateur de mémoire qui remplace le jemalloc standard (qui sera remplacé par scudo dans Android 11, mais il ne fait toujours pas le même compromis que hardened_malloc). Pour plus d'informations, lire le README.md.

GrapheneOS/hardened_malloc
Hardened allocator designed for modern systems. It has integration into Android's Bionic libc and can be used externally with musl and glibc as a dynamic library for use on other Linux-based pl...

Vanadium

Vanadium est le navigateur par défaut de GrapheneOS qui sert également à une partie du système et à des applications en servant la WebView. Il est basé sur Chromium, donc ce sera plus ou moins la même chose à l'utilisation, avec des améliorations de sécurité et de vie privée sous le capot (il partage des patchs communs avec Bromite que vous connaissez peut-être).

Pourquoi Chromium et pas Firefox ?

  • Le sandboxing de Firefox n'est pas au point sur Android.
  • Firefox ne fournit pas de WebView.
  • Chromium permet de mieux blend-in, cf. mon article.

Verified boot

GrapheneOS est intransigeant, il est donc exigé de le faire tourner avec un bootloader verrouillé. Vous ne devez le déverrouiller que pour l'installer la première fois, plus jamais ensuite. Gardez ce point en tête car il répondra à une interrogation majeure sur la compatibilité des appareils.

Verified boot permet de s'assurer au démarrage que l'OS n'a pas été compromis. C'est une avancée indispensable.

Granularité des permissions (network & sensors)

Android s'améliore de versions en versions sur sa gestion des permissions. GrapheneOS capitalise sur ces avancées upstream et rajoute encore deux toggles :

  • Réseau : couper l'accès réseau à une application, sans fuite contrairement à d'autres solutions.
  • Capteurs : couper l'accès d'une application au gyroscope et à d'autres capteurs du smartphone.
Spotify demande beaucoup de permissions...

Mitigations

Des améliorations substantielles ont été apportées en matière de sandboxing. De nombreuses composantes critiques du système sont mieux isolées.

À la base de ces mitigations, GrapheneOS utilise son propre modèle d'exec spawning qui remplace le modèle Zygote. Les avantages (qui dépassent largement les inconvénients) sont expliqués ici.

De plus, GrapheneOS tire profit du projet linux-hardened qui consiste en patchs destinés au noyau Linux. Les règles SELinux sont encore plus strictes que celles employées par Google dans l'OS stock des Pixel.

Attestation (attestation.app)

GrapheneOS développe, maintient, et est compatible avec un système d'attestation.

Il est possible de vérifier l'intégrité du système localement avec un second appareil. Mais aussi via un service qui demande Internet : par exemple, toutes les 4 heures l'OS envoie des informations sur l'intégrité du système à un serveur, qui envoie un mail en cas de changement suspect.

PDF Viewer

Une application minimale et sécurisée pour consulter des PDF.

GrapheneOS/PdfViewer
Simple Android PDF viewer based on pdf.js and content providers. The app doesn't require any permissions. The PDF stream is fed into the sandboxed WebView without giving it access to content or...

Surface d'attaque réduite

Par défaut, GrapheneOS vient avec le strict minimum : ce que propose AOSP pour des besoins basiques (Gallerie, Photo, Calendrier...), avec pour ajouts Vanadium, Attestation et PDF Viewer.

  • Pour les backups, GrapheneOS embarque Seedvault.
  • Pour les mises à jour OTA, GrapheneOS a son propre updater.

Il n'y a donc pas de Google Play Services ni de Google Apps ! En effet, ces derniers contribuent à ajouter une surface d'attaque conséquente en plus de nuire à votre vie privée en embarquant toute la télémétrie Google.

Ce qui veut dire aussi que des applications trop dépendantes des Play Services ne fonctionneront pas sur GrapheneOS. Pour celles qui fonctionnent encore, il est possible qu'elles dépendaient juste des Play Services pour les notifications Push. On en parle ensuite.

Et plus encore...

Je n'ai cité que ce que je connaissais à peu près de tête, GrapheneOS propose sûrement encore d'autre choses et en prévoit, même si actuellement le travail est plutôt de préparer la venue d'Android 11 au jour d'écriture de cet article.

Le site officiel donne également des informations complémentaires, bien qu'austère, mais il est simple et fonctionnel.

GrapheneOS
GrapheneOS is a security and privacy focused mobile OS with Android app compatibility.

Appareils compatibles

C'est peut-être là que certain(e)s vont être déçu(e)s car à ce jour, GrapheneOS ne supporte que les modèles suivants (liste au 15/04/21) :

  • Google Pixel 5, 4a et 4a 5G.
  • Google Pixel 4, 4 XL.
  • Google Pixel 3, 3 XL, 3a, 3a XL.

Les Pixel 2 sont en train d'être abandonnés donc j'ai jugé bon de ne pas les intégrer dans la liste... (EDIT : ils sont désormais osbolètes)

Le Pixel 4a, timidement annoncé depuis peu et qui devrait faire ses premiers pas en Octobre en Europe, pourrait être supporté également mais probablement pas directement à sa sortie.

Maintenir un appareil demande du travail.

Je vais tâcher de répondre aux interrogations communes, car nous les voyons souvent passer sur le channel Matrix :

Pourquoi ne supporter que les Pixel de Google ?

La question n'est pas de supporter une lignée précise, mais de supporter des appareils qui rentrent dans les critères du projet. Souvenez-vous : la sécurité c'est du software, mais aussi du hardware.

Il se trouve que les Pixel sont les candidats parfaits à l'heure actuelle :

  • Au moins 3 ans de mises à jour garanties par Google.
  • Google Titan M : puce à tâche équivalente au SEP d'Apple.
  • Mais surtout : possibilité de relock le bootloader avec des clés custom.
Aparté sur Google Titan M
Petite incursion dans le monde de la sécurité hardware et des enclaves sécurisées, avec la vedette Titan M, la puce de sécurité pensée par Google.

Il y a tant à dire sur ce que fait Titan M que j'aimerais lui en dédier un article. Enfin, pouvoir verrouiller le bootloader avec des clés customs est essentiel pour profiter du verified boot avec GrapheneOS.

Je m'en fous, je veux GrapheneOS sur mon Xiaomi Mi A2 !

Vous pouvez, si vous le voulez, porter les modifications principales de GrapheneOS sur votre smartphone non-compatible. Ça marchera, mais ça ne sera pas GrapheneOS proprement dit. GrapheneOS veut proposer une solution cohérente sans concessions sur la sécurité, donc le projet se doit d'être strict.

Je veux pas entendre parler de Google ! Don't be evil !

Je voulais juste couper court à ce genre d'argument qui n'est pas concret.

Google en tant qu'entreprise est bien entendu très douteuse vis-à-vis de son exploitation de nos données, mais il faut reconnaître que leurs ingénieurs ont du talent. Ils contribuent énormément à Linux pour le rendre plus sûr. De plus, c'est Google qui développe principalement Android : alors pourquoi ne pas utiliser un smartphone Google pour diminuer les intermédiaires à qui faire confiance ?

Mais l'appareil X remplit les critères !

Be the change you want to see! Vraiment, le développeur principal ne peut pas raisonnablement maintenir une pléthore d'appareils, chaque appareil doit être maintenu et cela demande de l'investissement.

Comme dit plus haut, le Pixel 4a sera supporté un jour, mais le travail doit être fait, cela ne tombe pas du ciel.

Installation

Pré-requis : un smartphone compatible, savoir lire et comprendre l'anglais.

A l'heure actuelle, il y a deux façons d'installer GrapheneOS : "classique" par la voie CLI (command-line interface), mais aussi un installeur web qui vaut le détour (et est la méthode d'installation que je conseille aux personnes débutantes).

GrapheneOS install documentation
Installation instructions for GrapheneOS, a security and privacy focused mobile OS with Android app compatibility.

Je ne peux pas me permettre de détailler l'installation à la place des instructions officielles, car elles sont complètes et à jour, je ne peux rien dire de plus et je ne devrais pas. Ne suivez pas de guide YouTube ou autre, seulement ce site qui doit être votre référence !

En cas de problème, rejoignez le channel Matrix :

Element

Utilisation : Android, sans Google

GrapheneOS est basé sur Android pur, donc vous ne devriez pas être dépaysé. Mais il n'y a pas de Google Play Services !

Vivre sans Google (oui, c'est possible)

C'est sans doute ce qui va vous demander le plus d'adaptation : il faudra faire une croix sur certaines applications, trouver des alternatives (NewPipe au lieu de YouTube, etc.), peut-être aussi même revoir la façon dont vous utilisez votre smartphone.

Ce projet communautaire recense l'état de fonctionnement de certaines applications sans Play Services :

Crowdsourced de-Googled Android apps status ratings
Remove the fear of Android app compatibility on de-Googled devices.

Pas de Play Services, veut dire aussi pas de push. Du moins, qui repose sur les serveurs de Google, donc ça va concerner une majorité des applications, comme Discord dans mon cas. Mais j'ai décidé de m'adapter, de vivre sans notifications pour beaucoup de choses.

Certaines applications, comme Signal, s'adaptent et ouvrent un websocket pour servir à peu près la même fonction.

Pour les marchés d'applications :

  • Aurora Store : client officieux du Play Store donc vous aurez accès à tout du Play Store, pas de problème pour ça, c'est juste qu'une application peut ne pas bien fonctionner... au cas par cas donc...
  • F-Droid : on ne le présente plus, c'est le marché d'applications FOSS auquel on pense quand on parle d'Android "degoogled".

Pas de root !

GrapheneOS n'inclut pas et ne supporte pas l'utilisation du root, AKA le mode super-utilisateur d'Android/Linux, pour des raisons assez évidentes de sécurité. Pas de modules Magisk ou autre, donc.

Autonomie : pas de grande différence, mais...

En théorie, l'autonomie devrait être meilleure car l'OS n'embarque pas de bloatwares et services Google.

Mais ce gain peut être compensé négativement par :

  • L'utilisation du GPS pour la localisation. Sur l'OS stock, les Play Services peuvent être utilisés pour géolocaliser, ce qui est un poil plus économe.
  • Les applications qui doivent compenser l'absence de serveurs Google pour les notifications Push, en ouvrant un websocket comme Signal.

En pratique, j'ai une très bonne autonomie et je peux utiliser mon smartphone plusieurs jours sans charger avec mon utilisation légère.

Performances

GrapheneOS met la sécurité avant tout, mais pour autant sans tout sacrifier en termes de facilité d'usage.

Il y a un petit coût en performance, notamment à cause de l'exec spawning employé : les apps prennent un peu plus de temps à démarrer si elles ne sont pas en RAM (de l'ordre de ~100ms sur un Pixel 3a), et la consommation de RAM est d'ailleurs un peu plus grande.

En dehors de ça, c'est aussi fluide et rapide qu'une expérience standard.

Mises à jour

GrapheneOS est très rapide en ce qui concerne l'application des patchs de sécurité hebdomadaire :

Android Security Bulletins | Android Open Source Project

Mon expérience

GrapheneOS est installé sur mon Pixel 3a depuis quelques mois, et j'en suis très content. Je suis un habitué d'Android donc je n'ai pas vraiment considéré iOS malgré ses grandes qualités et améliorations ces dernières années.

Tout d'abord le Pixel 3a est un smartphone génial qui correspond exactement à mes besoins : bel écran, bonne autonomie, performances correctes, pas trop gros, et excellente caméra (il est d'ailleurs possible d'utiliser Google Camera sur GrapheneOS pour profiter de tout son potentiel, mais ce n'est pas conseillé en soi).

En plus, il remplit les critères de GrapheneOS ce qui en fait un des smartphones les plus sécurisés à l'heure actuelle. Peut-être pas au niveau d'un iPhone encore, mais c'est ce qu'il se fait de mieux en matière d'Android. Je ne pourrai jamais faire un retour en arrière.

J'ai une longue histoire de bidouilleur : je compilais mes propres ROM customs pour mon Galaxy S2 à l'époque, il y a déjà 9 ans ! Mais je ne suis plus un power-user, j'ai besoin de quelque chose de simple, efficace, et sûr. Un Pixel sous GrapheneOS correspond parfaitement à ces besoins.

Mes tips (liste non-exhaustive que je complèterai)

  • Utilisez un serveur DNS(-over-TLS)  pour bloquer les publicités.
  • Google Camera est utilisable avec Gcam Services Provider.
  • Pour installer Signal, passez par le site ou par Aurora Store.
  • Gérez vos permissions avec soin : c'est très important.
  • N'utilisez pas les services d'accessibilité sauf en cas de besoin.
  • Utilisez les profils "multi-users" pour isoler davantage les apps.

Conclusion

Un peu moins de 3000 mots, c'est bien trop court pour décrire le talent à l'origine de GrapheneOS. Une seule personne réussit à tenir tête à une armée d'ingénieurs chez Apple qui prennent la sécurité au sérieux, c'est fantastique, et déprimant à la fois, car j'aimerais tellement que d'autres personnes se mettent à contribuer à cette alternative.

De plus, une partie du travail réalisé sur GrapheneOS sert également à tout le monde puisqu'Android upstream a déjà repris certaines parties autrefois propres à GrapheneOS.

Si ce n'est pas fait, je vous suggère la lecture de cet article qui est paru ultérieurement et complète celui-ci sur certains aspects :

Le modèle de sécurité mobile : Android, iOS, “Linux phones”
Petite incursion dans le monde de la sécurité mobile. Qu’en est-il de son modèle de sécurité ? Quels sont les moyens mis en oeuvre par ses acteurs principaux ?