6135 links
  • GuiGui's Show
  • Home
  • Login
  • RSS Feed
  • ATOM Feed
  • Tag cloud
  • Picture wall
  • Daily
Links per page: 20 50 100
 
  • Plug and Prey: Malicious USB Devices [ Interdire tous les périphériques USB sauf ceux autorisés]
    Ce que je cherche à faire : ne pas autoriser tout nouveau périphérique USB à initier une session data avec mon GNU/Linux. Dit autrement : je veux refuser tous les périphériques USB sauf ceux que j'ai explicitement autorisés. Je souhaite que ces restrictions s'appliquent à toutes les classes de périphériques (et pas seulement aux périphériques de stockage de masse USB, par exemple). Je souhaite lever cette restriction quand mon laptop est chez moi. Avantage : un périphérique (comme un ordinateur de poche) peut être alimenté sans avoir à lever la restriction.

    Dans les solutions pas vraiment satisfaisantes, on a :
        * Utiliser grsecurity et son option sysctl deny_new_usb. Cf : https://en.wikibooks.org/wiki/Grsecurity/Print_version#Deny_new_USB_connections_after_toggle . Problème : pas inclus dans les noyaux compilés par Debian donc "coût" de maintenance ;

        * Désactiver tout un bus USB : echo 0 > /sys/bus/usb/drivers/usb/usb1/authorized . Problème : les périphériques autorisés ne fonctionnent plus non plus ;

        * Désactiver les périphériques branchés un à un dans un script. Exemple : echo 0 > /sys/bus/usb/drivers/usb/1-1/authorized . Problème : débrancher/rebrancher le périphérique et ça repart.

        * Utiliser les fonctions d'économie d'énergie dont autosuspend (power/autosuspend_delay_ms, power/control) : ça ne peut pas fonctionner puisqu'il y aura autoresume au branchement d'un périphérique, c'est tout l'objet de l'économie d'énergie.


    Et la solution qui remplie le cahier des charges, un script udev que l'on met dans /etc/udev/rules.d/01-usblockdown.rules et qui contient :
    #Script by Adrian Crenshaw
    #With info from Michael Miller, Inaky Perez-Gonzalez and VMWare

    #By default, disable it.
    ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh -c 'for host in /sys/bus/usb/devices/usb*; do echo 0 > $host/authorized_default; done'"

    #Enable hub devices. There may be a better way than this.
    ACTION=="add", ATTR{bDeviceClass}=="09", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"

    #Other things to enable
    ACTION=="add", ATTR{idVendor}=="046d", ATTR{idProduct}=="0809", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
    ACTION=="add", ATTR{serial}=="078606B90DD3", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
    ACTION=="add", ATTR{product}=="802.11 n WLAN", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
    #ACTION=="add", ATTR{idVendor}=="413c", ATTR{idProduct}=="2106", RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"


    Autoriser un nouveau périphérique en permanence : l'ajouter à ce jeu de règles udev. Pour trouver les attributs d'un périphérique : udevadm info -a -p /sys/bus/usb/devices/1-1 ou /var/log/kern.log à la connexion du périphériques pour obtenir les attributs les plus importants.


    Désactiver le blocage et autoriser un périphérique temporairement : for host in /sys/bus/usb/devices/usb*; do echo 1 | sudo tee $host/authorized_default; done
    Le prochain périphérique USB connecté sera utilisé et déclenchera l'application du jeu de règles udev ci-dessus qui re-interdiront tout sauf les périphériques autorisés. À sa déconnexion, le périphérique ne pourra plus être reconnecté sans votre accord.


    Pour désactiver le blocage de manière permanente : sudo mv /etc/udev/rules.d/01-usblockdown.rules ~/ ; for host in /sys/bus/usb/devices/usb*; do echo 1 | sudo tee $host/authorized_default; done
    April 19, 2015 at 1:11:53 PM UTC - permalink - http://www.irongeek.com/i.php?page=security/plug-and-prey-malicious-usb-devices#3.2_Locking_down_Linux_using_UDEV
Links per page: 20 50 100
 
Mentions légales identiques à celles de mon blog | CC BY-SA 3.0

Shaarli - The personal, minimalist, super fast, database-free, bookmarking service by the Shaarli community