Використовуйте пристрої масового зберігання лише на вибраному USB-порту - як?


14

На даному порті USB я хочу лише прийняти USB-накопичувачі, і більше нічого. Ні пристроїв HID, ні адаптерів Bluetooth, ні перетворювачів RS232, нічого. Чи є спосіб це зробити, наприклад, використовуючи udev? Мені відомо, що я можу написати власне правило udev для включення драйвера для певного пристрою чи даного порту, але чи можу я якось виключити всі інші драйвери? Я намагаюся дозволити лише один клас пристроїв, а саме USB Mass Storage; У цьому класі є безліч різних моделей пристроїв, і я не знаю, які збираються підключитися до порту (клієнти привезуть свої власні, я не можу на це вплинути).

Загрози від перепрограмованої мікропрограми USB лише погіршаться в осяжному майбутньому. Я намагаюся пом'якшити їх для цього випадку використання: у мене є комп'ютер із внутрішньо підключеною USB-периферією (мережева карта, спеціалізована периферія, клавіатура) та один відкритий для USB порт, який повинен використовуватись лише для передачі файлів. Отже, я не можу вносити в чорний список інші USB-модулі; але я хотів би «очистити» саме цей порт, щоб підключення іншого типу пристрою нічого не призведе.

Корпус фізично заблокований, так що ззовні доступний лише цей один специфічний порт USB, і втручання в корпус або сплайсинг в кабель клавіатури повинно бути досить підозрілим, щоб викликати фізичну реакцію безпеки; Більше того, я не очікую, що більшість користувачів будуть активно зловмисними, але я очікую, що кількість мимоволих носіїв повторно миготілих USB-накопичувачів зросте (як це було з інфекціями завантажувального сектору завантаження в минулому). Що стосується безпеки, то не важливо, чи користувач приносить «збройний» USB диск із шкідливим наміром, чи просто не знає, що він «заражений».

Я усвідомлюю, що ідеальна безпека тут неможлива, і дозволяти користувачеві взаємодіяти з системою будь-яким способом - ризиковано - але, на жаль, мені потрібно збалансувати безпеку проти зручності використання: комп'ютер повинен бути клієнтським. Крім того, я не намагаюся захищати від цілеспрямованого, рішучого нападника з цим; скоріше, я використовую це як один із методів пом'якшення наслідків, щоб система не мала плодів.


2
Гм. Я просто вивчаю речі, тому не впевнений, чи це може допомогти, але подивіться, чи це доречно: " linux-usb.org/FAQ.html " Конкретно, прокрутіть до "Чому я бачу лише один пристрій зі свого багатоцільового пристрою зберігання даних "питання, і є рядок" Якщо ви не хочете робити це для всіх пристроїв SCSI, ви можете сказати ядру сканувати конкретний пристрій за допомогою; echo> / proc / scsi / scsi "scsi add-single-device 0 0 0 1 ""
Сергій Колодяжний

1
Ви хочете лише заблокувати конкретний порт на USB Mass Storage?
Каз Вулф

3
"При фізичному доступі битва за безпеку програється". ~ Кожен користувач Security.SE коли-небудь.
Каз Вулф

1
@Piskvor Я не впевнений, але, можливо, вам пощастить знайти відповідь на security.stackexchange.com або на одному з інших більш просунутих / професійно орієнтованих сайтів.
Брайан Z

2
Можливо, це може допомогти: irongeek.com/… , особливо 3.2 Блокування Linux за допомогою розділу UDEV.
alci

Відповіді:


16

Здається, він працює для мене в Ubuntu 14.04 із двома флеш-клавішами та телефоном Android, як мережевий адаптер для зберігання та мережевий адаптер та веб-камера, як і інші. (Не вдалось перевірити розміщення usb-концентратора)

  1. Перевірте USB-порт (який є батьківським пристроєм для підключеного пристрою)

    $ udevadm info --name=/dev/sdc --attribute-walk
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0':
        KERNELS=="2-1.2:1.0"
        SUBSYSTEMS=="usb"
        DRIVERS=="usb-storage"
        ATTRS{bInterfaceClass}=="08"
        ATTRS{bInterfaceSubClass}=="06"
        ATTRS{bInterfaceProtocol}=="50"
        ATTRS{bNumEndpoints}=="02"
        ATTRS{supports_autosuspend}=="1"
        ATTRS{bAlternateSetting}==" 0"
        ATTRS{bInterfaceNumber}=="00"
    
  2. Створіть правило udev, що відповідає імені ядра порту usb без usb-storageдрайвера

    /etc/udev/rules.d/90-remove-non-storage.rules

    Дозволити будь-який пристрій, який має сховище як перший інтерфейс (композитні пристрої дозволені)

    KERNELS=="2-1.2:1.0", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo 1 > /sys/bus/usb/drivers/hub/2-1\:1.0/port2/device/remove'"
    

    Блокуйте будь-який пристрій, який не має інтерфейсу для зберігання (Композиційні пристрої відмовлено)

    Насправді, телефон встановлюється як модем /dev/ttyACM0KERNELS == "2-1,2: 1,1". Це не дозволить телефонам (композитним пристроям) монтувати лише прості пристрої зберігання даних.

    KERNELS=="2-1.2:1.[0-9]*", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo 1 > /sys/bus/usb/drivers/hub/2-1\:1.0/port2/device/remove'"
    

    Блокуйте лише інтерфейси, які не є сховищами (Композитні пристрої дозволено лише для зберігання)

    Після деякого пошуку про спосіб відключення лише не дозволених інтерфейсів. Відключення водія, здається, працює. Мій телефон можна використовувати лише як сховище. Він не створюється /dev/ttyACM0.

    KERNELS=="2-1.2:1.[0-9]*", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo -n %k >/sys%p/driver/unbind'"
    
  3. Перезавантажте правила udev

    udevadm control --reload-rules
    

Список літератури:


Побий мене ...
Каз Вулф

@Whaaaaaat, так, authorizedце теж працює, але removeце більш чистий спосіб, оскільки користувач все одно відключить його від мережі. Я перевірив відключені диски, вони все ще є usb-storageдрайвером для батьківського вузла. Я погоджуюся, є деякі випадки, коли usb-storageїх не можна використовувати. BTW, :) Ви споживаєте занадто багато коментарів (2 хв., 1 хв.), Ви можете відредагувати 1-й (через <
5хв

@Whaaaaaat: Коли я тестував це, драйвер USB-накопичувача завантажувався прямо до створення блокових пристроїв; монтувати їх було не потрібно.
Пісквор вийшов з будівлі

@Piskvor Чи відповів це на ваше запитання? Якщо так, то слід позначити це правильною відповіддю та нагородити свою суму.
Джон Скотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.