La securite de Firefox OS

credits

Mozilla

Firefox OS phones

Equipe Sécurité de Firefox OS

Nouvel OS mobile construit autour du web

1. Firefox OS

Open Web

Le web ouvert comme plateforme mobile

  • Technologies Web : apps "natives" en HTML/JavaScript/CSS
  • Moteur de rendu Gecko (le même que pour Firefox)
  • APIs web (JS) pour accéder aux functionnalités "natives" (accès caméra, carte SD, géolocalisation...)

Installation

App-Manager screenshot

Architecture

Gaia

  • Interface utilisateur (UI)
    • Entièrement écrite en HTML/CSS/JS
  • Applications utilisateur
  • Applications système
    • Appels, SMS, E-mails
    • Caméra, radio, musique
    • Navigateur web

Applications Web

  • Application Firefox OS = Web App
    • Application "hostée" ou "packagée"
  • Sécurité d'une appli web
    • Content Security Policy (CSP)
    • DOM-based XSS
    • Input/output data sanitization & escaping
    • etc.
    • (on y reviendra)

Architecture

Un site web classique

Site Web Présentation par Julien Wajsberg et Jérémie Patonnier

Architecture

Un site web moderne

Site Web Présentation par Julien Wajsberg et Jérémie Patonnier

Architecture

Une application web

Site Web Présentation par Julien Wajsberg et Jérémie Patonnier

Architecture

Une application web « packagée »

Site Web Présentation par Julien Wajsberg et Jérémie Patonnier

APIs et permissions

  • L'accès à une fonctionnalité matérielle passe toujours par une API
  • L'appel à cette API peut être autorisée ou non, au cas par cas
    • accord de l'utilisateur
    • accord implicite
    • application installée ou non
Présentation par Julien Wajsberg et Jérémie Patonnier

Permissions

L'application doit être

  • certifiée
  • ou privilégiée
  • ou hébergée
  • ou simplement accessible sur le web

pour utiliser une API.

Passer d'un site web à une application Firefox OS

Ajouter un manifeste.

  • Fichier JSON
  • Contient les infos nécessaires au navigateur pour intéragir avec l'app

manifest.webapp (version soft)

        {
          "name": "My App",
          "description": "My elevator pitch goes here",
          "launch_path": "/",
          "icons": { "128": "/img/icon-128.png" },
          "developer": {
            "name": "Your name or organization",
            "url": "http://your-homepage-here.org"
          }
        }
      

App manifest

Présentation par Julien Wajsberg et Jérémie Patonnier

Types d'application…

  • Contenu Web - sans privilèges particuliers, mais permet tout de même l'accès à certaines APIs (ex: géolocalisation)
  • Applications hébergées - stockées et servies par un serveur web. Facile à mettre à jour, mais a un accès limité aux APIs.
  • Applications packagées - packagées dans des fichiers ZIP, elles peuvent être installées depuis n'importe quel site.
  • Applications privilégiées - revues par la Marketplace, packagées, et signées par une clé identifiant la Marketplace.
  • Applications certifiées - ces applications font partie du système et ne peuvent pas être installées autrement.

App permissions

Présentation par Julien Wajsberg et Jérémie Patonnier

Gecko

  • Moteur de rendu (layout engine)
    • Firefox
    • Thunderbird
    • Firefox OS
  • Prend du contenu (HTML, XML)
  • Le formatte (CSS)
  • L'affiche à l'écran
Basic data flow
Moteur JavaScript (SpiderMonkey)

Script Processing Model

Exemple

démo

Gonk

  • Couche bas-niveau
    • Noyau Linux simplifié
    • HAL (Hardware Abstraction Layer)
    • Librairies Open Source (libusb, bluez)
    • Libraires Android (GPS, caméra)
    • Librairies OEM (firmware modem)
  • Gecko a été porté sur Gonk : accès total
    • Interfaces exposées : pile téléphone, display frame buffer...

2. Securité

Sécurité de Firefox OS

  • Hardware
    • Remote debugging, hardware hardening
  • Système
    • Infrastructure, sandboxing, mises à jour
  • Applications
    • App manifest, permissions, Marketplace
xkcd.com/538

Enjeux

  • Security by design
    • Open Source <> security by obscurity
  • Protéger le système sans le fermer
    • Un système sécurisé par défaut pour les utilisateurs
    • Un environnement favorable pour les développeurs d'apps
  • Partenaires
    • Open Source -> code modifié
    • Prévention par des choix d'architecture
  • Code OEM, drivers hardware

Vulnérabilitiés physiques

Attaques réseau

Vulnérabilités physiques

  • Vol
    • Accès à la mémoire interne, à la carte SD
    • Accès au téléphone si pas vérouillé (pin code, lockscreen)
    • Accès aux services enregistrés
  • Compromission invisible après "emprunt"
    • Installation d'apps malveillantes (hooks de Web Activities)
    • Détournement du trafic (proxy: pas d'UX)
  • Visibilité de données privées en public
    • Mots de passe (lockscreen, pin code, hotspot) visibles
    • Visibilité des caractères tapés sur le clavier

Attaques réseaux

  • Téléphonie et SMS
  • Hotspot WiFi
    • Bruteforcing
  • Bluetooth
    • Parce que le bluetooth est secure
  • NFC
    • Implémentation critique (paiement)

Le Remote debugging

Une fonctionnalité critique

  • Pour les développeurs/ses
    • Accès root
    • Débugguer des applis certifiées
    • Accèder à des préférences ou aux settings des applis
    • ADB over WiFi
  • Pour la sécurité
    • Protéger le système sans le fermer
    • Téléphone rooté ou non

Le Remote debugging

Comment protéger ?

  • Désactiver le serveur de debug lorsque l'écran est vérouillé
  • Wipe data à l'activation du remote debugging
  • Vérouiller l'accès au remote debugging par un mot de passe / code PIN
  • ADB authentifié

Sécurité Système

Accès au hardware

  • Uniquement par les APIs Web
    • Implémentées dans Gecko
    • Pas d'APIS "natives" ni "back doors"

Content process sandboxing

Risques

  • Use case : une faille a été trouvée dans Gecko
  • Risques :
    • Escalation de privilège (content -> parent process via IPDL)
    • Exploitation de vulnérabilités noyau
    • Exploitation d'un bug hardware
  • Probabilité basse
  • Criticité haute

Content process sandboxing

Seccomp

  • Seccomp: Secure Computing mode
    • Linux kernel > 2.6.12
    • Limite les appels système d'un process à read, write, sigreturn, exit
    • Utilise prctl()
    • Peut-être démarré après l'init d'un process

Content process sandboxing

Seccomp-BPF

  • Seccomp mode filter (or mode 2)
    • Linux kernel > 3.5
    • Implémente BPF pour filter les appels système
    • Utilise une liste blanche d'appels système (plutôt que des fonctions hardcodées)
    • Plus flexible

Content process sandboxing

seccomp_filter.h

    #if defined(__arm__)
    #define SECCOMP_WHITELIST_ARCH_HIGH \
      ALLOW_SYSCALL(msgget), \
      ALLOW_SYSCALL(recv), \
      ALLOW_SYSCALL(mmap2),
    #endif
    

Mises à jour Système

Risques

Mises à jour Système

Risques

  • Paquets de mise à jour compromis
  • Processus de vérification de mise à jour compromis
  • Etat du système corrompu ou inconnu pendant la mise à jour
  • Vulnérabilité dans le mécanisme de mise à jour
  • Paquets vulnérables non mis à jour

Mises à jour Système

  • Patchs et mises à jour buildés, testés, signés et distribués par l'OEM
  • Firmware Over The Air Updates (FOTA)
    • Si changements dans Gonk
    • Peut être utilisé pour tout: drivers, firmware, settings, security updates, Gaia, Gecko
  • Mozilla System Update utility (MSU)
    • Même processus, framework que pour Firefox Desktop: Mozilla ARchive (MAR)

Mises à jour Système

Update Service

Mises à jour Système

Update Service

  • Vérification de :
    • Origine de la MàJ et du manifest (protocol:domain:port)
    • Intégrité du fichier (SHA-256)
    • Signature du code (certificat vérifié)
  • Connexion SSL
  • Téléchargement complets des paquets dans un endroit sécurisé avant le début de la MàJ
  • MàJ dans un état "sécurisé" (pas de web apps en marche)
  • Stockage des clés dans un endroit sécurisé

Applications

Application Sandbox

Application Sandbox

  • Données stockées par application: cookie, données, locaStorage, IndexedDB, permissions (y compris pour des iframes de même origine)
  • Une application ne peut pas ouvrir une autre app (iframe, url)
  • Permissions sanboxées (ex: autorisation d'utiliser la géolocalisation)
  • Sandboxing de l'API Browser: deuxième sandbox pour du contenu ouvert qui serait ouvert

Application Sandbox

Inconvénients

  • Nécessité de se reloguer sur un même service, de gérer les autorisations plusieurs fois
  • Duplication des données stockées depuis un même site

Application Sandbox

Avantages

  • Stabilité du modèle : pas d'intéraction entre apps via un tiers, pas de problème à l'installation, suppression des apps (données supprimées)
  • Pas d'attaques inter-apps
  • Données privées : pas de traçage d'une app et de ses données depuis une autre

Infrastructure

  • Permission Manager
  • Access Control List
  • Credential Validation
  • Permission Store

Indice de confiance

  • Application :
    • Certified: ++ (higly trusted)
    • Privileged: + (trusted)
    • Web: - (untrusted)

Principe du minimum de permissions

  • Principe of least permissions
  • Commencer avec le minimum vital de permissions
  • Le Manifest liste les permissions supplémentaires à donner par Gecko

Revue des applications privilégiées par le Marketplace

  • Une app doit être revue par le Marketplace pour être de type "privilégié"
  • L'app est alors numériquement signée par le Marketplace

Applications hostées ou packagées

  • Packagée
    • Fichier ZIP signé
    • Les apps certifiées et privilégiées DOIVENT être packagées
    • Stockage des données, assets, source en local
  • Hostée
    • Seul le manifest est installé sur le téléphone
    • Contient l'URL vers la page de démarrage de l'app
    • L'app est traité comme du contenu web : stockée à distance, récupéré par HTTP

Configuration du manifest

Aspects securité

  • Permissions
    • Description : le nom de la permission. Obligatoire.
    • Droits d'accès : read, readwrite, readcreate, createonly. Obligatoire pour certaines APIs seulement.
    • Table des permissions dans Gecko : PermissionTable.jsm
    • Permissions implicites : obtenus automatiquement par l'app à l'installation

Configuration du manifest

Aspects securité

  • installs_allowed_from
    • Origine de l'app
    • Seules les origines spécifiées peuvent installer l'app
    • Permet aux fournisseurs de l'app de restreindre les apps à un Marketplace autorisé

Configuration du manifest

Aspects securité

  • Content Security Policy
    • Appliquée à toutes les pages chargées de l'app
    • Ne peut que renforcer la CSP appliquée par défaut

Content Security Policy

DOM-based XSS

IndexedDB

  • Base clé/valeur
  • Pas de risque de SQLi

Gestion des permissions par l'utilisateur

  • Demande d'autorisation au moment où l'app a besoin d'une permission
  • data usage intention
  • Onglet dans "Settings" : gestion des permissions par app

Protection des données privées

Enjeux

  • Fournir l'accès de permissions certifiées (caméra) à des apps privilégiées
  • Revues de sécurité dans le Marketplace (cf quelques résultats)
  • Devtools
  • Renforcement de la sécurité de FxOS : notamment au niveau du chiffrement

Framework de Cryptographie

  • Crypto Worker (encryption primitives)
  • WebCrypto API (non-user related encryption)
  • IndexedDB encryption
  • Full disk encryption (data partition, optionnally SD card
  • A "trust core" in Gonk for key storage, keys derivation, signing and encrypting data to user and/or device

Contribuer

TP

Revue de sécurité d'une web app

Contact