Que puis-je faire pour protéger mon ordinateur portable Linux contre les attaques BadUSB comme décrit par ArsTechnica ici?
La rédaction d'un profil AppArmor approprié serait peut-être utile ?
Que puis-je faire pour protéger mon ordinateur portable Linux contre les attaques BadUSB comme décrit par ArsTechnica ici?
La rédaction d'un profil AppArmor approprié serait peut-être utile ?
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 représentent pas un réel danger, ma réponse tente 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 cela fonctionne 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 /../ autorisé' "
Si vous souhaitez également bloquer d'autres classes, recherchez le numéro de classe , copiez la ligne et modifiez la classe.
Vous pouvez maintenant 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 d'arrêter, débloquez toujours , car le paramètre est persistant et vos "bons" appareils HID seraient rejetés sur redémarrer.
Je ne sais pas si vous pouvez modifier le répertoire des règles temporaires, mais si des modifications affectent le comportement, vous devriez le modifier à la place, car vous n'avez pas besoin de débloquer avant l'arrêt.
L'idée derrière BadUSB est qu'un agent malveillant ré-clignote la puce du contrôleur USB d'un périphérique pour faire quelque chose de méchant. C'est une possibilité intéressante, mais il y a ici quelques suppositions sérieuses que les gens ont tendance à ignorer:
Ceci est une vulnérabilité de sécurité à coup sûr si c'est possible. Si cela est autorisé, tout hôte sur lequel le périphérique est branché peut modifier de façon permanente les caractéristiques du périphérique. En règle générale, 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 un motif d'alarme en soi et doit être signalé comme une vulnérabilité dans ce produit. Ce n'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 faisant clignoter le micrologiciel de votre appareil, vous pouvez obtenir une clé USB pour se signaler en tant qu'adaptateur réseau. Mais cela n'en fait pas en fait une carte réseau, cela signifie simplement que l'ordinateur lui parlera comme s'il en était un. Alors maintenant, votre ordinateur commence à parler à votre Verbatim Store-n-Go en utilisant le pilote du D-Link DUB-E100 . 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 pourriez être capable de le 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 périphérique à se comporter comme une carte réseau, puis de supposer que tout le trafic sera acheminé en boucle sur n'importe quel ordinateur auquel vous le branchez. C'est ... un étirement. Pour ce faire, votre ordinateur doit déjà être configuré pour définir toute carte réseau nouvellement connectée comme nouvelle passerelle par défaut. Je ne sais pas si Windows est aussi avide de changement, mais si vous avez déjà configuré le réseau sur un ordinateur Linux, vous savez que ce n'est jamais aussi simple.
Tout ce concept n'est pas superflu. Si un appareil autorise le re-flashage par n'importe quel hôte connecté, c'est un problème. Je peux affirmer en toute sécurité avec une certitude à 100% que cela ne conduira pas aux calamités poussées par les articles de presse essoufflés associés. Mais cela mérite votre attention.
Et plus important encore, USB est puissant, et puissant signifie potentiellement dangereux. Connecter 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 ce qui existe déjà, le nouveau danger est que cela brouille la ligne entre les appareils «fiables» et «non approuvés».
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 genre 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 plug-in Périphérique USB de l'ordinateur. Par exemple, une clé USB pourrait s'identifier 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 connecté et une mémoire de masse, qui, lorsqu'elle est branchée, tape une séquence de frappes qui provoque l'exécution d'un programme sur la clé USB.
La nouveauté ici, il ne s'agit pas de fabriquer 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 au matériel de base via la connexion USB, ouvrant la porte à des systèmes auto-propagés, 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 consulter l'arborescence des périphériques USB à chaque fois que vous branchez quelque chose, pour voir si quelque chose d'inattendu s'est produit.
Sur un plan non technique, évitez d'utiliser un périphérique USB qui a été branché sur un système 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. C'est un démon de l'espace utilisateur qui écoute les événements UDev et autorise ou désautorise les périphériques USB en fonction d'un ensemble de règles écrites dans un langage de règles personnalisé.
Je pense que cela en fait beaucoup plus difficile pour un attaquant de reprogrammer un périphérique de manière à contourner une bonne liste blanche (c'est-à-dire aussi spécifique que possible). Bien entendu, USBGuard ne peut pas vous protéger de toutes les attaques et si un attaquant a un accès physique à vos périphériques USB, alors il a 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 une clé USB dispositif. L'exemple notoire étant l'ajout d'un clavier ou d'une carte réseau (par reprogrammation sur une machine différente / infectée par un malware). Si vous savez que votre disque flash USB ne devrait avoir qu'une seule interface de stockage de masse et qu'il a soudainement quelque chose de plus, vous savez que vous ne devriez 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é simplement en utilisant les règles UDev et quelques aides 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 noyau patché grsecurity :
Grsec fournit 2 options pour désactiver l'usb après le démarrage:
le soft:
L'utilisateur peut toujours déverrouiller l'usb en utilisant un sysctl (kernel.grsecurity.deny_new)
le plus difficile:
Pas d'usb du tout après le démarrage
Grsec est un ensemble de correctifs sources améliorant le niveau de sécurité du noyau Linux, et vous protégera de nombreux autres problèmes de sécurité (buffer overflow, stack exec et bien d'autres), voir https://grsecurity.net/features.php
Vous pouvez construire votre propre noyau linux patché par grsecurity sur n'importe quel Linux distro, mais les distributions qui la supportent sont:
Acceptez le premier clavier / souris USB HID, invite à l'écran pour accepter plus de claviers / souris USB HID. Probablement le moyen le 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 entrer à partir du clavier pour que vous sachiez que ce n'est pas un appareil non autorisé. Comme, une courte séquence de chiffres ou de lettres. (Parce que comment un appareil malveillant saurait-il ce qui est à l'écran?)
Il existe 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)