?

Log in

No account? Create an account
Linux USB security - Журнал Восставшей Машины [entries|archive|friends|userinfo]
ArkanoiD

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Linux USB security [Aug. 21st, 2014|02:44 pm]
ArkanoiD
[Tags|, , ]

Как мы знаем, Linux из коробки имеет дурную привычку подключать USB-устройства сразу и без вопросов. Что, разумеется, может быть использовано для rogue HIDs и прочей гадости. Настраивать udev руками всем лень. Кому интересно, есть готовый рецепт:

The BadUSB attack bases on the fact that computers allow and enable HID devices on all usb ports. Faked network adapters are no real danger. My answer tries do describe how to use udev to temporarily disable the addition of new HID devices. I'm no udev expert, but I've tested my approach, and it works for me.

For preparation, create a file /etc/udev/rules.d/10-usbblock.rules with the content:

#ACTION=="add", ATTR{bInterfaceClass}=="03" RUN+="/bin/sh -c 'echo 0 >/sys$DEVPATH/../authorized'"

If you want to block other classes too, then look up the class number, and copy the line, and change the class.

Now you can block all new HID devices using the command

sed -i 's/#//' /etc/udev/rules.d/10-usbblock.rules; udevadm control --reload-rules

and unblock with:

sed -i 's/^/#/' /etc/udev/rules.d/10-usbblock.rules; udevadm control --reload-rules

Before you shut down, always unblock, as the setting is persistent, and your "good" HID devices would be rejected on reboot.

I don't know whether you can edit the temporary rules directory, but if changes there affect the behaviour, you should edit that instead, as then you don't need to unblock before shutdown.

(from https://security.stackexchange.com/questions/64524/how-to-prevent-badusb-attacks-on-linux-desktop/64552#64552 )

Понятно, что block/unblock можно вставить в стартовые скрипты. Хоть бы кто еще нарисовал гуекнопки для всего этого, желательно, с более умными whilelists при загрузке.
linkReply

Comments:
[User Picture]From: za1chas
2014-08-21 12:23 pm (UTC)

ох блять мне бы эти проблемы...

Все устройства USB система видит и подключает у него, видите ли... ;) И ручками в консоли предлагается помудохаться, чтобы не видела и не подключала, ага :)))
(Reply) (Thread)
[User Picture]From: za1chas
2014-08-21 12:27 pm (UTC)
Я тут, помнится, целый вечерок с грамотным советчиком по аське поебался с lsusb и udev, который usb-программатор Ардуины кагбэ видел, но кагбэ позволял с ним работать только в одном из режимов avr-dude, а не во всех, что было нужно... И без результата. Хотя я сменил когда-то любимый АльтЛинукс на Убунту именно ради этого: чтобы никогда не тратить время на подключение чего-либо, чтобы всё было давно отлажено и описано миллионами леммингов... Ан хуй там.
(Reply) (Parent) (Thread)
[User Picture]From: nicka_startcev
2014-08-21 03:19 pm (UTC)
софт для программатора был "искароппки" или "свежий с сайта"? лично я несколько лет назад натыкался на чудеса и в бинарнике и в конфиге avreal - он шил примерно в 30 раз медленнее, чем аналогичный avreal на соседней машине с федорой.

при этом "ардуиновская гуйня" притащила отдельный свой программатор и конфиг, которые работали правильно.
(Reply) (Parent) (Thread)
[User Picture]From: za1chas
2014-08-21 03:32 pm (UTC)
А софта никакого вообще не было.
Был пакет Ардуино, который через это программатор мог залить загрузчик, но вот залить бинарник - уже не мог.
А эксперименты с консольными avr-dude тоже ни к чему не привели.

Кстати, а не посоветуете реальный пример батничка с КОНСОЛЬНЫМ компилятором и заливкой бинарника на Ардуину (пусть даже без программатора, а через usb)?

Я что-то задолбался с этой навороченной глюкаловой, мне хочестя нормальных консольных скриптов, которые я сам бы мог запускать и модифицировать строго под мои задачки.
(Reply) (Parent) (Thread)
[User Picture]From: nicka_startcev
2014-08-21 04:51 pm (UTC)
у меня в мэйкфайле
1. компиляция-линковка
2. cppcheck (исходник самого cppcheck придется чуть допилить под 8бит таргет)
3. заливание в плату


копипаста из моих мэйкфайлов:

PORT = /dev/ttyUSB0
#DUDE = avrdude -patmega328p -carduino -P$(PORT) -b57600 -D
DUDE = avrdude -patmega328p -cavrisp -P$(PORT) -b57600 -D

prog: all
$(DUDE) -U flash:w:"$(OUT)$(BINNAME)$(HEX)"

два варианта дудки в зависимости от конфига хотят/понимают разные имена "программатора".

итого, строка выходит (имя программатора и скорость порта важны. и именно их подбор-угадывание геморно)
avrdude -patmega328p -cavrisp -P/dev/ttyUSB0 -b57600 -D -U flash:w:"path-to-file.hex"

примеры проектов:
http://startcev.spb.ru/robo/avrdude.tar.bz2
http://startcev.spb.ru/robo/mega8.tar.bz2

в первом архиве применена (недоделанная, под конкретную задачу) либа, примерно аналогичная ардуиновской среде (консоль на компорту, побитовый ввод-вывод с перенумерацией, таймеры). либа проверена на ардуино нано. для других плат придется возиться.

во втором - всё подряд про атмегу.

лицензия свободная, ссылки на автора желательны, багрепорты и патчи приветствуются.
(Reply) (Parent) (Thread)