web-dev-qa-db-fra.com

Comment puis-je détecter des appareils inconnus / non approuvés avec udev?

Je conçois une configuration sensible à la sécurité pour un client. La situation est la suivante:

Les informations sensibles doivent être stockées sur un serveur auquel le personnel non autorisé pourrait avoir accès. Il n'y a aucun moyen de sécuriser le matériel de manière à ce qu'il soit 100% sécurisé.

Voici mon approche:

Je crypte la machine racine avec cryptsetup/luks, puis je crypte une image avec cryptsetup/luks et la monte pour être le disque dur d'une machine virtuelle. La machine virtuelle a à nouveau une racine racine chiffrée.

Maintenant, je veux empêcher quiconque d'accéder au matériel de la machine pendant son fonctionnement. Je souhaite détecter les périphériques inconnus qui y sont branchés, comme une clé USB ou un périphérique Firewire, etc.

Existe-t-il un moyen de détecter les périphériques inconnus avec élégance dans udev? Jusqu'à présent, je n'ai trouvé que des moyens de définir des actions pour les périphériques que je connais. Mais je veux définir une action pour quand un périphérique inconnu se connecte.

Merci pour votre contribution.

2
flowolf

Si vous voulez quelque chose comme ça, vous devez traiter tous les appareils comme suspects et à tout moment où un appareil est inséré, demandez quelque chose que seul le propriétaire de cet appareil peut savoir. Vous ne pouvez pas ignorer cela pour un appareil que vous pensez avoir été approuvé auparavant, car l'utilisateur qui l'a inséré ne doit pas nécessairement être la même personne.

Existe-t-il un moyen de détecter les périphériques inconnus avec élégance dans udev?

udev ne comprend pas les "périphériques inconnus": il comprend soit tous les périphériques USB/firewire soit aucun, car il y a une entrée dans /dev/. Inconnu de udev signifierait que le périphérique ne fonctionne pas dans ce système. Et ID_VENDOR_ID et ID_MODEL_ID ne vous permettent pas de voir une différence entre 2 appareils de la même marque et du même modèle.

Une méthode possible:

Voir https://wiki.archlinux.org/index.php/Execute_on_USB_insert pour un script de base qui s'exécute lors de l'insertion d'un périphérique. Cela forcera tout appareil à afficher un menu auquel l'utilisateur doit vérifier qu'il peut avoir accès.

La règle dans le lien ...

ACTION=="add", RUN+="/usr/bin/exdongle run /media/%k-%E{dir_name}"

fonctionnera sur tout appareil qui tente de monter dans /media/ et démarrera le script "exdongle" (le script peut nécessiter quelques ajustements car il a un avertissement).


Ce que vous considérez comme "inconnu" est un périphérique spécifique connu sous Linux comme USB. Donc, si le support USB est présent, tous les périphériques USB sont traités de manière égale. Les appareils ont un ID de fournisseur et de produit, mais ceux-ci sont uniques par marque/modèle et non par périphérique USB.


Le seul périphérique USB ayant un ID unique est un dongle ( http://en.wikipedia.org/wiki/Software_protection_dongle ). Ceux-ci ont tendance à venir avec un logiciel de vérification (donc pas non plus pour les systèmes sans tête), mais vous pourriez être en mesure d'enregistrer l'identification dans un fichier et un script comme ci-dessus pour tester contre un ensemble connu d'identifiants.

1
Rinzwind