web-dev-qa-db-fra.com

Pourquoi les systèmes d'exploitation ne protègent-ils pas contre les claviers USB non fiables?

Dernièrement, j'ai lu des choses comme BadUSB et RubberDucky qui sont essentiellement des clés USB qui indiquent à l'ordinateur qu'elles sont un clavier. Une fois qu'ils sont branchés, ils "tapent" toutes les commandes qu'on leur a demandé d'exécuter. Ma question est la suivante: pourquoi les claviers sont-ils automatiquement approuvés dans presque tous les systèmes d'exploitation? Par exemple, si un système d'exploitation détecte un nouveau clavier branché, pourquoi ne pas afficher une invite de mot de passe et empêcher ce clavier de faire quoi que ce soit jusqu'à ce qu'il entre le mot de passe? Il ne semble pas que cela créerait une tonne de problèmes d'utilisation. Y a-t-il une raison pour laquelle cette mesure de protection ou une autre n'est pas utilisée?

47
trallgorm

Le modèle de confiance d'un périphérique que vous branchez à votre ordinateur est tout simplement difficile en soi. La norme USB a été créée pour permettre à quiconque de créer un périphérique USB. La sécurité n'était pas un facteur. Même si c'était le cas, où placez-vous la confiance? L'industrie du cinéma a essayé ce modèle avec HDMI, et il a échoué lamentablement. Vous ne pouvez pas simultanément donner à quelqu'un un appareil qui fait quelque chose et l'empêcher de comprendre comment faire la même chose.

Votre exemple propose de faire confiance à l'utilisateur. Le problème le plus évident est que personne ne veut taper des mots de passe uniquement pour utiliser un clavier. À moins que cela ne résout vraiment quelque chose?

L'utilisateur déjà fait confiance à l'appareil, sinon il ne le brancherait pas sur son ordinateur. Étant donné que la confiance est déjà établie, pourquoi ne feraient-ils pas simplement tout ce qui est nécessaire pour le faire fonctionner?

61
Steve Sether

Pour commencer, les claviers ont tendance à être approuvés beaucoup plus tôt dans le processus de démarrage que le système d'exploitation.Si vous avez un mot de passe BIOS ou une clé Bitlocker, vous devrez le saisir avant le chargement du système d'exploitation, à l'aide du clavier. En fait, un clavier particulièrement malveillant pourrait faire à peu près n'importe quoi pour empêcher le système d'exploitation de se charger, et probablement d'inclure, en faisant semblant d'être un lecteur de démarrage et en démarrant un rootkit avant de laisser le système d'exploitation démarrer.

Vous pouvez également étendre les mêmes règles aux souris (elles peuvent cliquer sur un ensemble de points prédéfinis pour ouvrir le clavier virtuel, puis taper ce qu'elles veulent).

Vous pouvez également décider que vous n'utiliserez que des appareils en lesquels vous avez confiance et accepter le faible risque de mauvaises choses.

21
Matthew

La réponse est Convivialité

Comment l'utilisateur doit-il consentir à ce que la souris/le clavier soit approuvé? Avec le clavier/souris qui pourrait être malveillant? Comment gérez-vous le boîtier lorsque vous devez échanger/remplacer le clavier? Surtout dans le scénario de serveur, vous avez plusieurs claviers/souris stockés ailleurs et vous saisissez le meilleur suivant lorsque vous avez besoin d'un accès physique au serveur. Vous ne vous souviendrez pas quel clavier appartenait à quel serveur après des mois/années et le clavier pourrait même être détruit. Comment utiliser le clavier de remplacement? Donnez votre consentement avec le clavier inconnu? Comment faire cela avec le premier clavier? Disons que vous essayez un nouveau PC d'un ami et utilisez votre propre clavier, puis donnez-le à votre ami. Comment donner son consentement à son clavier? Edit: Vous pouvez demander un mot de passe avant la première utilisation mais voir mon dernier mais dernier paragraphe.

Donc, fondamentalement, la question non résolue est: Comment l'ordinateur peut-il établir une connexion sécurisée/sécurisée avec l'utilisateur qui ne peut pas être truquée/contournée par d'autres matériels/logiciels/méchants/.. . d'une manière facilement utilisable?

La règle 3 des 10 lois immuables de la sécurité informatique est: "Si un méchant a un accès physique illimité à votre ordinateur, ce n'est plus votre ordinateur." Si vous mettez un BadUSB d'un méchant, vous êtes le serviteur du méchant et lui donnez un accès physique par procuration. Notez qu'il existe des attaques pires similaires à celles d'un mauvais USB. Par exemple, mettre un appareil d'un méchant dans un FireWire ou une autre interface DMA lui permet de lire/écrire n'importe quelle mémoire et d'exécuter n'importe quel code et même de contourner les écrans de verrouillage de Windows/Linux/Mac. ne placez jamais un appareil non fiable dans votre ordinateur.

Edit: En raison de cette règle et de telles attaques, on n'a pas pensé à la norme (la sécurité physique était moins importante à ce moment-là, sauf dans les cas où l'accès physique était de toute façon restreint), quelque chose comme cela n'a jamais fait partie de la norme. Il y avait déjà beaucoup d'attaques possibles plus faciles avec un accès physique, donc cela ne valait pas la peine de considérer un si petit cas Edge, cela aurait considérablement augmenté la complexité du système, surtout si l'autorisation devait être partagée entre plusieurs systèmes d'exploitation et le BIOS ( "Appuyez sur F10 pour le BIOS") et combien à stocker. Le problème suivant se pose lorsque vous décidez où afficher le mot de passe, en particulier si plusieurs moniteurs sont détectés comme un écran d'ordinateur portable défectueux. Tout cela aurait également eu un impact négatif sur l'acceptation des utilisateurs et une norme plus facile à utiliser aurait pu devenir la norme à la place. Étant donné que les appareils sont fabriqués par des entreprises économiques, la complexité (= coût) et l'acceptation (moins de pièces vendues) ont augmenté, ce boîtier Edge mince n'aurait pas été important à l'époque.

Il existe sur le marché des logiciels spécialisés qui vous permettent de définir des périphériques USB de confiance pour les environnements de haute sécurité d'entreprise, mais en raison des points que j'ai mentionnés, ils ne sont pas largement utilisés.

7
H. Idden

L'OS ne sait rien du monde en dehors de lui-même. Il est naturellement conçu pour faire confiance au matériel, car il n'a aucun moyen de vérifier si le matériel existe vraiment. En fait, si vous deviez comparer le concept d'un OS fonctionnant sur du matériel au film The Matrix , vous seriez à peu près sur place. Le système d'exploitation est simplement une collection d'octets qui sont finalement traités par le matériel. Il peut fonctionner sur un morceau de matériel réel, virtualisé avec d'autres systèmes d'exploitation qui ne se connaissent pas, ou même être physiquement distribué sur plusieurs unités matérielles qui agissent comme un ensemble cohérent. La seule vraie exigence est que le matériel agisse de manière cohérente avec la façon dont le système d'exploitation pense qu'il devrait se comporter.

À la fin de la journée, le système d'exploitation ne peut exister sans le matériel et dépend totalement du matériel pour dire la vérité. Bien que des progrès aient été réalisés vers la création de systèmes plus sécurisés (par exemple, lorsqu'ils ont commencé à restreindre la façon dont les bus PCI peuvent utiliser DMA), ce sont encore principalement des solutions matérielles à la sécurité. Le système d'exploitation peut refuser l'entrée à partir de périphériques USB, mais il ne peut pas déterminer de manière fiable ce qu'est un périphérique USB en l'examinant, car le périphérique peut mentir. Il peut s'identifier comme ce qu'il veut et le système d'exploitation ne peut rien y faire. Toute vérification du matériel devrait provenir de plus de matériel. Tout ce que l'OS sait, c'est qu'il reçoit un signal sur un bus connu conforme à un protocole connu. Vous pouvez facilement émuler cela en utilisant tout autre type de logiciel fonctionnant dans un hyperviseur, par exemple; le système d'exploitation ne peut pas faire la différence.

Nous pouvons certainement faire des choses pour rendre les choses plus difficiles pour les logiciels malveillants, comme exiger un type de puce de chiffrement avec des clés asynchrones, peut-être en utilisant un système de clé de liste noire/liste blanche, qui protégerait contre les actes de malveillance occasionnels, mais cela ne ferait que gêner le développement et augmenter le coût du nouveau matériel, frustrer les consommateurs et bloquer la concurrence qui ne parvient pas à accéder à la liste blanche ou est même activement bloquée par une liste noire. Il n'y a pas de solution parfaite au problème, et toute solution raisonnable devrait être faite au niveau matériel, car le système d'exploitation ne peut pas facilement déterminer si le matériel est ce qu'il dit être.

1
phyrfox

La question semble toujours être entre la sécurité et la convivialité. Avec les attaques HID, l'équilibre semble être en faveur des commodités en raison de l'accès physique nécessaire à ces attaques. Évidemment, cela pourrait être implémenté, mais il ne semble pas nécessaire de le faire pour le moment, pourquoi ajouter du code supplémentaire et des problèmes si la menace est minime à l'époque.

1
Sighbah