Только используйте Устройства массового хранения на выбранном USB-порте - как?

На данном USB-порте я только хочу принять возможности Массового хранения USB и ничто иное. Никакие устройства HID, никакие адаптеры Bluetooth, преобразователи № RS232, ничто. Существует ли способ сделать это, например, использующий udev? Я знаю, что могу записать пользовательское правило udev для включения драйвера для данного устройства или данного порта, но я могу так или иначе исключить все другие драйверы? Я пытаюсь только позволить один класс устройств, а именно, Массовое хранение USB; существует несметное число различные модели устройства в этом классе, и я не знаю, которые собираются соединиться с портом (клиенты принесут свое собственное, нет никакого способа для меня влиять на это).

Угрозы со стороны повторно запрограммированного встроенного микропрограммного обеспечения USB только собираются ухудшиться в обозримом будущем. Я пытаюсь смягчить их для этого варианта использования: у Меня есть компьютер с внутренне подключенными периферийными устройствами USB (сетевая плата, специализированные периферийные устройства, клавиатура) и один общедоступный USB-порт, который, как только предполагается, используется для передачи файлов. Так, я не могу поместить в черный список другие модули USB в целом; но я хотел бы "санировать" тот конкретный порт, так, чтобы включение другого типа устройства ничего не делало.

Случай физически заблокирован, так, чтобы только этот определенный USB-порт был доступен снаружи, и влезающий в случай, или соединяющий в кабель клавиатуры должно быть достаточно подозрительным для инициирования ответа физической безопасности; кроме того, я не ожидаю, что большинство пользователей будет активно злонамеренным, но я ожидаю, что число невольных поставщиков услуг повторно высвеченных Карт памяти увеличится (как это было с гибкими заражениями загрузочного сектора былого). Насколько безопасность идет, действительно не имеет значения, приносит ли пользователь "вооруженный" диск USB со злонамеренным намерением или просто не знает, что это "заражено".

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

14
задан 7 October 2014 в 02:38

1 ответ

Это, кажется, работает на меня в Ubuntu 14.04 с 2 ключами флэш-памяти & телефон на базе Android как устройство хранения данных и сетевой адаптер usb & веб-камера как другой тип. (я не мог протестировать размещение концентратора 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

    Позволяет любое устройство, которые имеют устройство хранения данных как 1-й интерфейс (Составные позволенные устройства)

    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/ttyACM0 как ЯДРА == "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
    

Ссылки:

16
ответ дан 23 November 2019 в 03:02

Другие вопросы по тегам:

Похожие вопросы: