Que puis-je faire pour protéger mon ordinateur portable Linux contre les attaques BadUSB comme décrit par ArsTechnica ici ?
Peut-être que l'écriture d'un profil AppArmor approprié aiderait?
L'attaque BadUSB est basée sur le fait que les ordinateurs autorisent et activent les périphériques HID sur tous les ports USB. Les fausses cartes réseau ne présentent aucun danger réel. Ma réponse essaie de décrire comment utiliser udev pour désactiver temporairement l'ajout de nouveaux périphériques HID. Je ne suis pas un expert udev, mais j'ai testé mon approche et ça marche pour moi.
Pour la préparation , créez un fichier /etc/udev/rules.d/10-usbblock.rules
avec le contenu:
#ACTION=="add", ATTR{bInterfaceClass}=="03" RUN+="/bin/sh -c 'echo 0 >/sys$DEVPATH/../authorized'"
Si vous souhaitez également bloquer d'autres classes, alors recherchez le numéro de classe , copiez la ligne et modifiez la classe.
Maintenant, vous pouvez bloquer tous les nouveaux appareils HID en utilisant la commande
sed -i 's/#//' /etc/udev/rules.d/10-usbblock.rules; udevadm control --reload-rules
et débloquer avec:
sed -i 's/^/#/' /etc/udev/rules.d/10-usbblock.rules; udevadm control --reload-rules
Avant de vous arrêter, toujours débloquer , car le paramètre est persistant, et vos "bons" appareils HID seraient rejetés au redémarrage.
Je ne sais pas si vous pouvez modifier le répertoire des règles temporaires, mais si des modifications affectent le comportement, vous devez le modifier à la place, car vous n'avez pas besoin de le débloquer avant l'arrêt.
L'idée derrière BadUSB est qu'un agent malveillant re-flashe la puce du contrôleur USB d'un appareil pour faire quelque chose de méchant. C'est une possibilité intéressante, mais il y a ici de sérieuses hypothèses que les gens ont tendance à ignorer:
Il s'agit d'une vulnérabilité de sécurité, si c'est possible. Si cela est autorisé, tout hôte sur lequel l'appareil est branché peut modifier de manière permanente les caractéristiques de l'appareil. Généralement, cela nécessite un équipement spécial et un accès direct aux broches physiques de la puce, mais si un fabricant décide d'exposer la fonctionnalité via le protocole USB, cela est en soi une alarme et doit être signalé comme une vulnérabilité dans ce produit. C'est pas, cependant, une faille dans le protocole lui-même.
Le fait que 3 des 4 démos programmées impliquent des puces de Phison Electronics suggèrent que le chercheur a découvert une telle vulnérabilité dans un produit spécifique.
En flashant le firmware de votre appareil, vous pouvez obtenir une clé USB pour se signaler en tant qu'adaptateur réseau. Mais cela ne fait pas en fait une carte réseau, cela signifie simplement que l'ordinateur lui parlera comme s'il en était une. Alors maintenant, votre ordinateur commence à parler à votre Verbatim Store-n-Go en utilisant le pilote pour le D-Link DUB-E1. Mais à moins que le Store-n-Go n'ait l'interface matérielle correspondante trouvée dans le D-Link, tout ce que vous avez est une clé USB cassée.
Si la clé USB a un microcontrôleur relativement puissant à bord, vous pourrez peut-être la reprogrammer. Mais "puissant" et "périphérique USB" ne vont généralement pas ensemble.
L'un des exemples cités est d'apprendre à un appareil à se comporter comme une carte réseau, puis à supposer que tout le trafic sera bouclé sur n'importe quel ordinateur auquel vous le connectez. C'est ... un tronçon. Pour ce faire, votre ordinateur doit être déjà configuré pour définir toute nouvelle carte réseau connectée comme nouvelle passerelle par défaut. Je ne sais pas si Windows est si désireux de changement, mais si vous avez déjà configuré la mise en réseau sur un ordinateur Linux, vous savez que ce n'est jamais aussi simple.
Ce concept n'est pas entièrement superposé. Si un appareil permet de re-flasher par tout hôte connecté, c'est un problème. Je peux affirmer en toute sécurité avec 100% de certitude que cela ne conduira pas aux calamités provoquées par les articles de presse associés à bout de souffle. Mais cela mérite attention.
Et plus important encore, l'USB est puissant et puissant signifie potentiellement dangereux. La connexion d'un appareil via USB signifie nécessairement modifier le comportement de votre ordinateur, et des choses très, très dangereuses sont possibles. Nous le savons depuis les années 90. Soyez prudent lorsque vous attachez des objets à votre ordinateur. Mais cette nouvelle découverte change très peu; les nouvelles attaques possibles ici ne sont pas aussi puissantes que celles qui existent déjà, le nouveau danger est qu'elles brouillent la frontière entre les appareils "fiables" et "non fiables".
BadUSB n'est pas une attaque. C'est un outil utilisé lors de la conception d'attaques.
Lorsque vous branchez un périphérique USB sur un ordinateur, le périphérique indique à l'ordinateur de quel type de chose il s'agit, afin que l'ordinateur puisse sélectionner le pilote approprié. Par exemple, une clé USB se déclare comme un périphérique "USB Mass Storage", tandis qu'un clavier est un "Human Interface Device".
BadUSB est une technique pour réécrire le firmware d'un périphérique USB branché à partir de l'ordinateur. Par exemple, cela pourrait faire en sorte qu'une clé USB s'identifie comme une souris et faire sauter le pointeur au hasard. Ou cela pourrait faire en sorte que la clé USB s'identifie comme un concentrateur USB avec un clavier et un stockage de masse connectés, qui, lorsqu'ils sont branchés, tapent une séquence de touches qui provoque l'exécution d'un programme sur la clé USB.
La nouveauté ici n'est pas de créer des périphériques USB qui ne sont pas ce à quoi ils ressemblent - les agences de renseignement, les cybercriminels et d'autres le font depuis des années. La nouveauté est que cela peut être fait pour le matériel de base via la connexion USB, ouvrant la porte à des systèmes d'auto-propagation, tels qu'un virus qui s'écrit sur n'importe quelle clé USB qui a été branchée sur la machine, puis modifie le micrologiciel du lecteur pour essayez d'exécuter le virus chaque fois que le lecteur est branché.
C'est une chose difficile à défendre, car il fonctionne à un niveau si bas et est si flexible dans ce qu'un attaquant peut en faire. Sur un système Linux, une chose que vous pouvez faire est de vous assurer que tous les supports amovibles sont montés en tant que "noexec" - cela empêche l'exécution des programmes sur eux et rend les attaques plus difficiles. Vous pouvez également vérifier l'arborescence des périphériques USB chaque fois que vous branchez quelque chose, pour voir si quelque chose d'inattendu s'est produit.
À un niveau non technique, évitez d'utiliser un périphérique USB connecté à un système potentiellement infecté,
J'ai récemment commencé à travailler sur USBGuard qui implémente une liste blanche/liste noire de périphériques USB avec l'aide d'UDev et de la fonction d'autorisation USB du noyau Linux. Il s'agit d'un démon de l'espace utilisateur qui écoute les événements UDev et autorise ou annule l'autorisation des périphériques USB en fonction d'un ensemble de règles écrites dans un langage de règles personnalisé .
Je pense qu'il est beaucoup plus difficile pour un attaquant de reprogrammer un appareil de manière à contourner une bonne liste blanche (c'est-à-dire aussi spécifique que possible). Bien sûr, USBGuard ne peut pas vous protéger contre chaque attaque et si un attaquant a un accès physique à vos périphériques USB, il a alors accès à toutes les valeurs nécessaires pour créer une copie d'un tel périphérique, par exemple un clavier. Les claviers sont particulièrement mauvais car ils n'exportent généralement aucune valeur iSerial qui distinguerait deux claviers du même type.
Cependant, l'utilisation d'une liste blanche de périphériques connus est bonne contre les interfaces cachées/inattendues sur un périphérique USB. L'exemple notoire étant un clavier ou une carte réseau ajoutée (par reprogrammation sur une machine différente/infectée par un malware). Si vous savez que votre disque flash USB ne doit avoir qu'une seule interface de stockage de masse et qu'il a soudainement quelque chose de plus, alors vous savez que vous ne devez pas le laisser interagir avec votre système - et c'est le cas d'utilisation principal d'USBGuard.
Le même niveau peut être implémenté en utilisant simplement les règles UDev et certains assistants pour analyser les descripteurs USB, mais USBGuard le rend plus pratique.
Le moyen le plus simple est probablement d'utiliser un noyau sécurisé, je veux dire le grsecurity noyau corrigé:
Grsec propose 2 options pour désactiver l'usb après le démarrage:
le soft:
L'utilisateur peut toujours déverrouiller l'USB à l'aide d'un sysctl (kernel.grsecurity.deny_new_usb)
le dur:
Aucune clé USB après le démarrage
Grsec est un ensemble de correctifs source améliorant le niveau de sécurité du noyau Linux, et vous protégera de bien plus de problèmes de sécurité (débordement de tampon, exécution de pile et bien d'autres), voir https://grsecurity.net/features .php
Vous pouvez créer votre propre noyau linux patché grsecurity sur n'importe quelle distribution linux, mais les distributions le supportant sont:
Acceptez le premier clavier/souris USB HID, invite à l'écran pour accepter plus de claviers/souris USB HID. Probablement la manière la plus simple, je ne connais aucun système d'exploitation ou logiciel qui ait encore implémenté quelque chose comme ça.
Alternativement, affichez quelque chose à l'écran que l'utilisateur doit saisir à partir du clavier afin que vous sachiez que ce n'est pas un périphérique voyou. Comme une courte séquence de chiffres ou de lettres. (Parce que comment un appareil voyou pourrait-il savoir ce qui est à l'écran?)
Il y a des projets qui font exactement ce que vous voulez:
J'ai testé, sur ubuntu 18.04, usbdeath et usbcut. La différence est que usbdeath éteint le PC lors de l'insertion d'un appareil non autorisé. Au lieu de cela, usbcut bloque l'appareil non autorisé (sans éteindre le PC)