/ Sécurité

Sécurité des ports USB : par où commencer ?

Les périphériques USB font partie de notre quotidien, qu’il s’agisse de recharger nos appareils numériques, d’adaptateurs divers ou même des souris et claviers, tout se branche en USB. C’est simple, rapide et compatible avec tous les ordinateurs du marché. Cette simplicité et cette diffusion des ports USB en font une cible privilégiée pour les attaques à l’encontre du système d’information, et il est nécessaire de s’en prémunir. Il est à la fois impossible et impératif de s’en séparer, une solution intermédiaire doit être trouvée.

C'est l'objet de mon stage chez OVH qui a eu lieu de Septembre 2016 à Février 2017. Ma mission était simple : mettre en place une solution de protection des ports USB.

Petit sommaire

  1. USB, c'est quoi ?
  2. Quelles sont les menaces ?
    1. Physiques
    2. Software
  3. Définir le besoin
  4. Les solutions existantes
  5. Mise en place de notre solution
    1. Détails techniques
  6. Quelles alternatives pourrait-on imaginer ?

USB, c'est quoi ?

Afin de comprendre les menaces contre lesquelles nous devons nous protéger, revenons aux bases. De quoi parle-t-on vraiment lorsque l'on emploie l'abbréviation USB ?
D'après la page Wikipedia Universal Serial Bus :
Le Universal Serial Bus (USB, en français Bus Universel en Série) est une norme relative à un bus informatique en transmission série qui sert à connecter des périphériques informatiques à un ordinateur ou à tout type d'appareil prévu à cet effet (tablette, smartphone). Le bus USB permet de connecter des périphériques à chaud (quand l'ordinateur est en marche) et en bénéficiant du Plug and Play qui reconnaît automatiquement le périphérique.

Pour simplifier : USB est une technologie qui permet de connecter physiquement des appareils. Les fonctionnalités offertes par le périphérique sont annoncées avec des classes. Par exemple, la classe Mass Storage indique que la clé USB sait stocker des documents. Un même périphérique peut annoncer plusieurs classes : une imprimante peut scanner des documents et en imprimer.

main-qimg-8c1564d5fec216cb47d98cc372f02a8b-1


Quelles sont les menaces ?

Les attaques contre les ports USB fonctionnent à deux niveaux : physique et logiciel. Les périphériques USB étant directement reliés, il est important de considérer la surface d'attaque crée par le lien physique et électronique.

Attaques physiques (hardware)

Par ce terme, j’entends toutes les menaces qui s’attaquent à la couche physique du support USB : une attaque qui fonctionnerait même si le système d’exploitation n’était pas capable d’interagir avec un port USB.
Il n’existait, lorsque j’ai débuté mon stage, qu’une seule attaque possible, l’USBKill : une clé USB dont le seul but est de détruire l’ordinateur.
Elle est composée de condensateurs qui se chargent grâce au courant transmis par l’ordinateur, et une fois une certaine tension atteinte, tout est renvoyé sur la carte mère, ce qui provoque une surtension et grille les composants.

Cette catégorie d'attaques fonctionne même si la session de l’utilisateur est verrouillée, et provoque des pertes massives de données et de matériel.

Attaques logicielles (software)

J'inclus dans cette catégorie toutes les menaces qui peuvent corrompre le système d’exploitation, que ce soit en injectant un malware ou en interceptant/ex-filtrant des données.

Afin de comprendre les différentes menaces logicielles, il est important de comprendre tout ce qu’il est possible de faire avec le protocole USB. La liste des classes est fournie sur le site officiel usb.org.

Liste des classes USB
IdentifiantDescriptionMenace
01hAudio (casque, micro, ...)-
02hCommunications (Adaptateur Ethernet/ Wi-Fi, ...)Intercepter les communications de l’utilisateur, modifier les réponses
03hHuman Interface Device (clavier, souris, ...)Interagir avec le système d’exploitation en ayant des privilèges élevés
05hPhysical Interface Device-
06hImage (webcam, scanner, ...)Intercepter les communications de l’utilisateur
07hPrinter (Imprimante, ...)-
08hMass Storage (disque dur, clé USB, ...)Exfiltration volontaire des données, exploitation de vulnérabilités du système et transmission de codes malicieux
09hUSB Hub-
0AhCDC-Data-
0BhSmart Card-
0DhContent Security (Lecteur d’empreinte, ...)-
0EhVideo (webcam, ...)-
0FhPersonal Healthcare Device Class-
10hAudio/Video (webcam, TV, ...)-
11hDevice Billboard-
DChDiagnostic DeviceInteragir avec les composants de l’ordinateur
E0hWireless Controller (Adaptateur Bluetooth, ...)-
EFhMiscellaneous ActiveSync device-
FEhApplication-specific-
FFhVendor-specific-

La colonne Menace est remplie avec mon imagination et mes connaissances. Elle est sans doute incomplète, mais permet déjà d'avoir une idée de ce qui nous attend.

  • La LANTurtle ainsi que PoisonTap reposent sur 02h, Communications pour simuler une interface réseau et intercepter le trafic internet.
  • La Rubber Ducky repose sur 03h, HID en simulant un clavier et une souris pour exécuter des commandes sur l'ordinateur ciblé.
  • 08h, Mass Storage représente la menace la plus courante car c'est la plus simple à mettre en place : une clé USB est — de manière légitime — utilisée pour transporter des documents et des programmes.
    Un malware peut se propager par ce biais, dans le cadre d’une attaque ciblée ou involontaire : brancher la clé sur un ordinateur compromis revient parfois à compromettre la clé, et le malware se propage dans tout le parc.

Un appareil peut annoncer la classe USB qu'il désire, et ce de manière dynamique.
Ainsi, un appareil qui ressemble à une clé USB peut en fait être un appareil malicieux.
Voici à quoi ressemble la Rubber Ducky, par exemple :

Phoot Rubber Ducky


Définir le besoin

Afin de protéger efficacement sans déranger les utilisateurs, il est important de comprendre quel usage est fait des périphériques USB.
Les périphériques utilisés sont-ils de source sûre ? Quelles classes sont utilisées ou inutilisées ? Certains profils sont-ils plus à même de se servir de certaines classes ?

Dans notre cas, le constat était assez clair : les utilisateurs se servent de claviers, souris, casques sans fil qui leur appartiennent. Impossible donc de désactiver totalement les ports USB sans priver les utilisateurs de leurs outils de travail.
Enfin, un petit groupe de collaborateurs utilisent les clés USB comme périphérique de stockage, avec un besoin plus ou moins précis poussé : les profils Tech' s'en servent pour avoir un périphérique bootable, les profils non Tech' afin d'échanger des données avec des gens externes à OVH.

La menace qui nous intéresse se situe précisément ici : les périphériques externes ne sont pas jugés fiables, et doivent être utilisés avec prudence.


Les solutions existantes

Il existe à ma connaissance au moins deux produits répondant à la problématique qui nous intéresse.
Le premier, CIRClean, a été publié dans le domaine Open-Source par le Computer Incident Response Center du Luxembourg. Le principe : on branche deux clés USB sur un Raspberry Pi, et le contenu de la première clé est désarmé et copié sur la seconde.
Cette solution est totalement adaptée aux envionnements clos où aucun périphérique ne soit entrer ou sortir, cependant la durée du processus est proportionnel à la quantité de données, et il n'est pas toujours souhaitable que toutes les données soient copiées, par exemple si la clé appartient à un commercial d'une autre société et contient des documents sensibles.
Aussi, cette solution impose de posséder sur soi une clé de capacité suffisante, et de ne pas inverser les deux périphérique sans quoi les données sont définitivement supprimées.

La seconde, Lexsi's USB Malware Cleaner, propose une borne intéractive pour nettoyer ses clés USB. Cette borne mesure 1.5m de haut, pèse 75kg et son prix m'est inconnu.
L'approche utilisée est intéressante : le périphérique USB est inséré, son contenu est analysé et nettoyé sur place, c'est à dire que les malwares sont supprimés du périphérique.
À mon sens, cette approche est quelque peu intrusive, j'imagine difficilement un commercial accepter que des documents soient supprimés de son périphérique. Ou au contraire, il sera content et appréciera le service que vous lui rendez.
Je suis aussi inquiet de savoir si la borne est résistante aux attaques physiques, qui forceraient la société à acheter une nouvelle borne, rendant indisponible le service de sécurité !

Cependant, ces deux solutions posent un problème majeur à mon sens : l'utilisateur doit tout de même brancher un périphérique sur son ordinateur personnel afin d'accéder aux données, et rien ne l'empêche d'oublier l'étape "nettoyage".

Enfin, les anti-virus. Ces derniers ne peuvent pas être efficaces contre les attaques physiques. Aussi, je doute qu'ils soient conçus pour protéger les utilisateurs contre des appareils comme le Rubber Ducky ou LanTurtle. Ils restent cependant une solution quasi-idéale en ce qui concerne les malwares.


Présentation de notre solution

Une solution contre un type d'attaques matérielles a vite été trouvée : vendue par les créateurs de l’USB Kill, elle s’appelle USB Killer Tester. Il ne s’agit pas d’une solution utilisable en entreprise mais d’un outil de test, potentiellement dangereux pour son utilisateur ou pour l’ordinateur. Hors de question donc de s’en servir.
Les ordinateurs Apple sont aussi protégés par défaut (source), cependant cela ne résout pas le problème pour les utilisateurs de produits non Apple.

Nous nous sommes donc concentrés sur une solution qui permette d’isoler physiquement les clés USB tout en permettant à l’utilisateur d’obtenir les fichiers dont il avait besoin. Notre appareil idéal était un ordinateur complet permettant à l’utilisateur de brancher son périphérique de stockage, de sélectionner ses fichiers sur un écran et de les recevoir par mail.
En ayant un ordinateur séparé, nous avions la possibilité d’avoir du matériel jetable : aucune donnée, et donc valeur, ne serait stockée dessus. Cela peut très bien être du matériel recyclé.

Ayant des Intel NUC DE3815TYKE à disposition, nous avons décidé de nous en servir : le NUC possède un port USB 3 frontal, deux ports USB à l’arrière et un processeur assez puissant pour nos besoins. Côté logiciel, l’équipe OverTheBox travaille sur une version modifiée d’OpenWRT, un système d’exploitation libre propulsant des routeurs.

L'interface Web est gérée par LuCI, développé en Lua et relativement facile à modifier, en suivant le modèle Modèle-Vue-Contrôleur.

Chaque appareil Intel NUC DE3815TYKE coûte environ 120€, ce qui est jugé raisonnable.
Différents systèmes de détection des codes malveillants ont été ajoutés sur l'appareil : ClamAV, des règles YARA. Après essais il s’avère que ces solutions "tel quel" ne conviennent pas aux besoins d’OVH à cause des trop nombreux faux positifs et faux négatifs.
La plateforme la plus menacée est Windows[1], il a été décidé d’interdire complètement l’accès à certains fichiers en se basant sur des critères simples, comme leur extension, et de fournir des versions saines pour les documents, en les désarmant (avec DocBleach) ou en les convertissant dans un autre format (par exemple, convertir un document Word en image PNG).

Interface

Le résultat est un gestionnaire de fichiers léger qui permet de naviguer dans les dossiers et de choisir quels fichiers l'on souhaite recevoir. Ceux-ci sont envoyés par mail, ou téléchargés directement sur l'ordinateur de l'utilisateur.
Ainsi, des 0-Days telles que LNK CVE-2017-8464 sont évitées, les fichiers .lnk n'étant pas autorisés.

D’autres pistes auraient pu être suivies afin d’ajouter des fonctionnalités, cependant il n’a pas été jugé bon de les développer pour diverses raisons.
Créer un partage réseau utilisable directement dans l’explorateur de fichiers, à la manière du Cloud. Cette idée n’a pas été retenue : le traitement des fichiers étant fait à la volée lorsque ceux-ci sont utilisés, le transfert aurait été ralenti aléatoirement et inutilement — par exemple, dans le cas d’un document Word qu’il faut désarmer.
Malheureusement, selon la plateforme, ces lenteurs peuvent être généralisées au système tout entier. Aussi, le besoin ne s’est pas fait ressentir : l’interface Web semble suffisante pour les utilisateurs, et est nettement plus simple à utiliser.

Détails techniques

Afin de fonctionner, utilise hotplug (Référence technique), qui exécute un script lorsqu'un nouveau périphérique USB est branché, ou qu'un Block Device est disponible.
Ainsi, il est possible de journaliser ce qui passe par l'appareil, voire de détecter des anomalies dès le branchement.
L'interface se sert des informations stockées dans /sys/bus/usb/devices. Ce dossier contient l'architecture des périphériques USB, et chaque fichier virtuel permet d'accéder à une information.
Par exemple, bDeviceClass nous indique la classe annoncée par le périphérique branché, idVendor et idProduct le vendeur et le produit. La liste est disponble publiquement ici sur linux-usb.org/usb.ids et intégrée dans le paquet lsusb.

Ces informations sont assemblées afin de réaliser un arbre qui présente les appareils connectés :

Pe-riphe-riques-connus-1

Si l'utilisateur branche une souris ou un clavier, la ligne est rouge pour indiquer l'anomalie à l'utilisateur.

Le code a été publié sur GitHub docbleach/USBleach, basé sur l'interface OpenWRT.
Rien n'empêche un programme similaire de fonctionner, potentiellement basé sur un autre OS ? ;-)


Quelles alternatives pourrait-on imaginer ?

Plusieurs alternatives existent aux solutions proposées, certaines sont réalisables exclusivement avec du contenu déjà existant.

  • Utiliser le module usbip du kernel Linux, afin de partager les propriétés des clés USB connectées à des ordinateurs distants. Ceci permettrait par exemple d'utiliser une souris branché à notre appareil ... sympathique. Cependant cette solution est malheureusement incompatible (à ma connaissance) avec les postes Windows, qui sont notre cible principale.

  • Développer un adaptateur USB-USB qui sache filtrer les différentes classes, tout en protégant des attaques physiques. En poussant plus le principe, il serait possible d'ajouter un filtre sur les fichiers échangés par ce moyen. Je doute que ceci soit faisable simplement et de manière "sécurisée" : les menaces évoluent, il faudrait un moyen de mettre à jour régulièrement l'appareil afin qu'il soit performant, et donc créer une sorte de porte dérobée ... La présentation USB Toolkit donnée au SSTIC 2016 semble suivre cette approche.

  • Construire un logiciel qui s'interface sur le Kernel (Linux, Windows ou macOS) afin de filtrer les périphériques et les autoriser ou non. Ceci permettrait d'interdire une souris de proposer un stockage de masse, d'interdire le branchement de souris sur les ports avants de l'ordinateur, ou même de brancher des périphériques inconnus en ciblant le (vendorId, productId, classId). Le projet dkopecek/usbguard permet déjà d'écrire des règles pour les postes Linux.


Conclusion ?
J'espère que cet article vous aura satisfait voire donné des pistes et idées pour vos recherches.

Et vous, comment envisagez-vous de limiter la surface d'attaque ?


Ce stage chez OVH a été riche et m'a apporté énormément de connaissances.
L'équipe du Security Operations Center est sympathique et travaille sur des projets intéressants afin de garantir la sécurité de ses employés mais aussi (et surtout) des clients. Un défi qu'ils relèvent au quotidien !

Des offres d'emploi sont régulièrement publiées sur ovh.jobs. Un clic suffit pour accéder directement aux offres liées à la Sécurité Informatique et Stages.
N'hésitez pas à consulter régulièrement ces pages, les offres changent régulièrement.


  1. Windows étant le système d'exploitation le plus ciblé par les malwares (source), mais aussi le plus communément utilisé, il est normal qu'il s'agisse d'une cible … aucun jugement de valeur n'est effectué ici ! ↩︎

PunKeel

PunKeel

INTP, Hacker, Développeur, Défenseur Open-Source, fan de Ghibli. Fan de nouvelles technologies, y compris systemd, mais allergique à Docker.

Read More