Aller au contenu

Devices managés et GrapheneOS

Un smartphone moderne embarque une constellation de capteurs — GPS, accéléromètre, baromètre, microphone, caméra, NFC — qui en font un device IoT de haute valeur lorsqu'il est correctement sécurisé et managé.


Le smartphone comme device IoT industriel

Les smartphones Android et iOS ne sont pas que des téléphones. Ce sont des ordinateurs de poche équipés de 15 à 20 capteurs, d'une connectivité multi-radios (Wi-Fi 6E, 5G, Bluetooth 5.3, NFC, UWB), d'un processeur puissant et d'une autonomie de 8 à 16 h. Ces caractéristiques en font des platforms idéales pour certains cas d'usage IoT :

  • Inspection terrain : technicien équipé d'un device qui capture des photos, mesure la position GPS, lit des tags NFC sur les équipements et soumet des rapports structurés.
  • Suivi logistique : device porté ou fixé dans un véhicule qui remonte position, vitesse, accélérations (détection d'impact), température ambiante.
  • Contrôle d'accès : device qui lit des badges NFC, enregistre les entrées/sorties et synchronise les droits depuis un serveur central.
  • Maintenance prédictive : device positionné sur une machine qui mesure vibrations (accéléromètre) et son (microphone) et envoie les données vers un pipeline d'analyse.

La contrainte principale n'est pas matérielle — c'est la gestion du logiciel. Un Android standard est trop permissif, trop évolutif de façon non contrôlée, et insuffisamment sécurisé pour un usage industriel.


GrapheneOS : Android sécurisé pour usage professionnel

GrapheneOS est un système d'exploitation Android open-source fortement durci, maintenu par l'équipe GrapheneOS. Il est officiellement supporté sur les smartphones Google Pixel (Pixel 6 à Pixel 9 séries).

Ce que GrapheneOS apporte par rapport à Android AOSP

GrapheneOS n'est pas simplement "Android sans Google". Il intègre des renforcements de sécurité substantiels qui en font un système pertinent pour les déploiements industriels :

  • Sandboxing d'applications renforcé : chaque application tourne dans un bac à sable plus strict que sur Android standard, avec des politiques SELinux plus restrictives.
  • Accès aux capteurs contrôlé : possibilité de couper entièrement l'accès à la caméra, au microphone, aux capteurs de mouvement et au GPS pour des applications spécifiques — ou globalement.
  • Network permission : permission réseau révocable par application. Une application peut être empêchée d'accéder à internet tout en fonctionnant normalement.
  • Mémoire durcie : allocateur mémoire hardened_malloc, mitigation de corruption mémoire, adresses aléatoires.
  • Mises à jour rapides : GrapheneOS reçoit les patches de sécurité Android dans les heures suivant leur publication — bien avant la plupart des constructeurs.
  • Boot vérifié : impossible de booter sur un système modifié sans clé valide (Verified Boot intégral).

Limites à connaître

  • Uniquement supporté sur Google Pixel (pas de port officiel sur d'autres devices).
  • La procédure de flash nécessite de déverrouiller le bootloader, ce qui efface le device.
  • Les services Google Play ne sont pas installés par défaut (disponibles en sandbox via Sandboxed Google Play si requis).
  • Pas de solution MDM certifiée Android Enterprise — la gestion distante se fait via des solutions alternatives.

Procédure de flash GrapheneOS sur Pixel

La procédure officielle utilise l'installateur web basé sur WebUSB. Voici le processus complet en production.

Prérequis

  • Pixel 6a, 7, 7a, 8, 8a, 8 Pro, 9, 9 Pro ou Fold (vérifier la liste officielle)
  • PC avec Chrome ou Edge (WebUSB requis)
  • Câble USB-C de qualité (câble de données, pas uniquement de charge)

Étapes de déploiement

1. BACKUP
   Sauvegarder toutes les données existantes (le flash efface tout)

2. DEVELOPER MODE
   Paramètres → À propos du téléphone → Numéro de build (7 taps)
   Paramètres → Options développeur → Débogage USB → ON

3. OEM UNLOCK
   Options développeur → Déverrouillage OEM → ON
   Cette option n'est disponible que si le SIM a été activé ou le device
   déjà configuré (protection anti-vol Google)

4. BOOTLOADER UNLOCK
   adb reboot bootloader
   fastboot flashing unlock
   → Confirmer sur l'écran du device (vol. bas + power)
   → Le device se réinitialise

5. FLASH VIA INSTALLATEUR WEB
   Accéder à https://grapheneos.org/install/web
   Brancher le device en mode fastboot
   Sélectionner le modèle et lancer l'installation
   Durée : 5 à 10 minutes

6. RE-LOCK BOOTLOADER
   fastboot flashing lock
   → IMPÉRATIF pour restaurer le Verified Boot
   → Un device avec bootloader déverrouillé est considéré comme non sécurisé

7. FIRST BOOT
   Configurer sans compte Google (usage IoT pur)
   Activer le chiffrement (activé par défaut sur GrapheneOS)

Automatisation pour flotte

Pour flasher plusieurs dizaines de devices, le script CLI grapheneos-factory-install.sh (disponible dans les releases GrapheneOS) permet une installation en ligne de commande sans interaction manuelle après le premier déverrouillage OEM.


Profils utilisateurs et sandboxing applicatif

GrapheneOS expose les profils utilisateurs Android avec des contrôles supplémentaires.

Profil dédié pour l'application IoT

La meilleure pratique en déploiement industriel est de créer un profil utilisateur secondaire dédié exclusivement à l'application IoT, séparé du profil owner :

Profil Owner (réservé à l'administrateur)
└── Configuration réseau, VPN, certificats
└── Installation/désinstallation d'applications
└── Accès aux logs système

Profil IoT Worker (profil de travail)
└── Uniquement l'application IoT installée
└── Pas de navigateur, pas de Google Play
└── Redémarrage automatique sur ce profil (kiosk mode)

Kiosk mode natif

GrapheneOS supporte le mode kiosk natif : un seul profil, une seule application au premier plan, impossible de quitter sans code PIN administrateur. Configuré via les paramètres du profil ou un script ADB au déploiement.


Gestion de flotte : MDM et alternatives

La gestion distante de devices GrapheneOS ne passe pas par Android Enterprise standard (qui nécessite Google Play). Deux approches sont utilisées en production.

Approche 1 — MDM via Managed Configurations (sans Google)

Des solutions MDM open-source comme Headwind MDM ou Flyve MDM (fork d'GLPI) s'appuient sur une application agent installée sur le device. Cette application maintient une connexion persistante avec le serveur MDM et applique les configurations.

Fonctionnalités disponibles :

  • Déploiement et mise à jour d'applications (APK)
  • Configuration Wi-Fi, VPN, certificats
  • Géolocalisation
  • Wipe à distance (profil ou device complet)
  • Inventaire (version OS, apps installées, statut batterie)

Approche 2 — Configuration via ADB + script Python

Pour des flottes homogènes où la configuration initiale suffit (pas de reconfiguration fréquente), un script de provisioning ADB applique la configuration une fois lors du déploiement :

import subprocess
import json

DEVICES = [
    {"serial": "29281JEGR01234", "site": "usine_nord", "asset_id": "DEV-047"},
    {"serial": "29281JEGR05678", "site": "usine_sud",  "asset_id": "DEV-048"},
]

def provision_device(device: dict):
    serial = device["serial"]
    adb = lambda cmd: subprocess.run(
        ["adb", "-s", serial] + cmd.split(),
        capture_output=True, text=True
    )

    # Pousser la configuration JSON de l'app IoT
    config = json.dumps({
        "mqtt_host": "mqtt.industrial.local",
        "mqtt_port": 8883,
        "device_id": device["asset_id"],
        "site": device["site"],
        "reporting_interval_s": 30
    })
    adb(f"push /tmp/iot_config.json /sdcard/Download/iot_config.json")

    # Désactiver les fonctions non nécessaires
    adb("shell settings put global airplane_mode_on 0")
    adb("shell settings put system screen_off_timeout 300000")  # 5 min
    adb("shell pm disable-user --user 0 com.android.chrome")
    adb("shell pm disable-user --user 0 com.google.android.gms")

    # Pousser le certificat CA de l'infrastructure
    adb("push /path/to/ca.crt /sdcard/Download/ca.crt")
    adb("shell am start -a android.intent.action.INSTALL_CA_CERT "
        "-d file:///sdcard/Download/ca.crt")

    print(f"[OK] {serial}{device['asset_id']} provisionné")

for device in DEVICES:
    provision_device(device)

Comparatif GrapheneOS vs Android vs iOS pour IoT industriel

Critère GrapheneOS Android AOSP Android Standard (OEM) iOS (MDM)
Sécurité système Excellente Bonne Moyenne à bonne Très bonne
Contrôle granulaire des capteurs Complet Partiel Limité Partiel
Mises à jour de sécurité Très rapides (heures) Variables Variables (1–6 mois) Rapides
Support MDM Android Enterprise Non Oui Oui Non (MDM Apple)
Durée de support hardware 5–7 ans (Pixel) Dépend OEM 3–5 ans 5–6 ans
Coût de la licence OS Gratuit Gratuit Licence OEM Inclus Apple
Facilité de provisioning en flotte Moyen (ADB/scripts) Bonne (Android Enterprise) Très bonne (MDM certifié) Bonne (Apple DEP)
Verrouillage applicatif (kiosk) Natif Via MDM Via MDM Via MDM
Isolation entre applications Maximale Standard Standard Standard
Services Google Play Optionnel (sandbox) Intégré Intégré N/A

Ce qu'il faut retenir

  • Un smartphone moderne est un device IoT polyvalent lorsque l'OS est correctement durci et le logiciel maîtrisé.
  • GrapheneOS offre un niveau de sécurité supérieur à Android standard grâce à ses renforcements système et son modèle de permission granulaire.
  • Le flash en production requiert une procédure rigoureuse : déverrouillage OEM, flash, re-lock bootloader, provisioning applicatif.
  • Sans MDM Android Enterprise officiel, la gestion de flotte GrapheneOS repose sur des agents open-source ou des scripts ADB.

Chapitre suivant : Fleet management — provisionner, configurer et surveiller des centaines de devices IoT à distance.