?

Log in

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: _slw
2014-08-21 11:15 am (UTC)
я предлагаю полностью забанить подключение клавиатур и мышек, а для разблокировки требовать ввода рутового пароля.
(Reply) (Thread)
[User Picture]From: sporaw
2014-08-21 12:38 pm (UTC)
unrar.rar
(Reply) (Parent) (Thread)
[User Picture]From: egorfine
2014-08-21 12:04 pm (UTC)
Я вообще считаю что "BadUSB" — это такая неудачная затянувшаяся шутка.
(Reply) (Thread)
[User Picture]From: arkanoid
2014-08-21 12:42 pm (UTC)
Ну проблема-то с rogue devices безотносительна badusb.
(Reply) (Parent) (Thread)
[User Picture]From: egorfine
2014-08-21 12:42 pm (UTC)
На фоне прямого доступа thunderbolt или PCI к оперативной памяти BadUSB не только меркнет, он вообще исчезает.
(Reply) (Parent) (Thread)
[User Picture]From: arkanoid
2014-08-21 12:46 pm (UTC)
thunderbolt отключается (и даже apple научился его отрубать вообще когда экран лочится), pci не везде доступен и убедить пользователя в него что-то втыкать непросто. Разные сценарии атаки.
(Reply) (Parent) (Thread)
[User Picture]From: egorfine
2014-08-21 12:49 pm (UTC)
Как в линуксе отключить Thunderbolt?

Ну и PCI очень разный бывает. В почти любом ноутбуке PCI торчит наружу в виде удобного разъема (Thunderbolt, ExpressCard). Воткуться туда элементарно.
(Reply) (Parent) (Thread)
[User Picture]From: arkanoid
2014-08-21 01:01 pm (UTC)
не в любом. сейчас полно ноутов без expresscard. а thunderbolt dma на маках в частности отключается через efi password.
(Reply) (Parent) (Thread)
[User Picture]From: egorfine
2014-08-21 03:49 pm (UTC)
Как отключить thunderbolt в линуксе?
(Reply) (Parent) (Thread)
[User Picture]From: arkanoid
2014-08-21 04:02 pm (UTC)
на маке? я так понимаю, что если его через efi отключить, он так и останется отключенным и в линуксе тоже. нет?

а тебе интересно гонять нативный линукс на маке?

Edited at 2014-08-21 04:03 pm (UTC)
(Reply) (Parent) (Thread)
[User Picture]From: egorfine
2014-08-21 07:28 pm (UTC)
Не на маке.

У меня есть 100500 серверов, у них есть thunderbolt и мне нужно закрыть этот вектор атаки.
(Reply) (Parent) (Thread)
[User Picture]From: arkanoid
2014-08-21 07:32 pm (UTC)
а что за железо?
(Reply) (Parent) (Thread)
[User Picture]From: egorfine
2014-08-21 07:33 pm (UTC)
Черт его знает.
Я его в глаза не видел - все в датацентрах стоит. Подозреваю, что все чипсеты интелевые.
(Reply) (Parent) (Thread)
[User Picture]From: ivanaxe
2014-08-21 08:31 pm (UTC)
термоклеевой пистолет.

Нет особого смысла закрывать т-болт на линуксе или маке или вдруг на опенсолярисе если он способен инициализироваться ещё до загрузки ос
(Reply) (Parent) (Thread)
[User Picture]From: egorfine
2014-08-21 08:32 pm (UTC)
ага, и в микросхеме биоса оторвать ноги, отвечающие за перепрошивку. Ага, и до этого снять дамп биоса и убедиться в том, что там нет закладок. И еще снять такой же дамп в чипсете. И в SATA-контролере. И в....

не, мне бы пока просто поры выключить и я был бы счастлив. :)
(Reply) (Parent) (Thread)
[User Picture]From: ivanaxe
2014-08-21 08:57 pm (UTC)
Никакой перепрошивки!
Просто однократно rogue pci device может объявить себя загрузочным диском, однократно же загрузиться (если позволят) и оставить закладок.
А может поизображать из себя таки клавиатуру.
А может чёрта в ступе -- всё зависит от фантазии воображаемого атакующего.

Ну если так уж хочется отключить именно под линуксом -- должно работать отключение pci hotplug.
(Reply) (Parent) (Thread)
[User Picture]From: egorfine
2014-08-22 08:48 am (UTC)
А вот не факт что PCI Hotplug решает. Thunderbolt получает аппаратный доступ к DMA. Никакого hotplug PCI устройства. Аттакер просто подключается, читает память и уходит. Разговоривать с ОС ему не нужно.
(Reply) (Parent) (Thread)
[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)
[User Picture]From: Evgeny Kolesnikov
2014-08-22 08:08 am (UTC)
Остался без ответа самый главный вопрос: где ты хочешь видеть эту кнопку и как вообще ей пользоваться?

Как я себе представляю тут вообще кнопки не нужны, а твои надежные устройства должны быть вбиты в то же rule. Надо что-то новое подключить? Будь добр отредактировать rule через sudo. Навернулась клава? Загрузись с rescue диска и поправь rule.

Впрочем, менеджер whitelist'a, наверное, не помешал бы. И место ему где-нибудь в System Settings, а оне нынче у всех свои.
(Reply) (Thread)
[User Picture]From: arkanoid
2014-08-22 08:16 am (UTC)
Где-то там, да. Но людям нужен гуй.
(Reply) (Parent) (Thread)
[User Picture]From: Evgeny Kolesnikov
2014-08-22 08:50 am (UTC)
А может быть просто спрашивать при подключении? Ну типа вот ща мы включим: 1) Storage: Transcend 2GJF8, 2) HID Device: SuperEvil Keyboard 3) Network Adapter: Huivei 3G и по результатам опроса чекбоксов — в бан или в полезные. Ну и менеджер листов в настройках.

Но тут надо над udev думать на тему вкорячивания диалога в процессе подключения. Но я уже видел на эту тему что-то.
(Reply) (Parent) (Thread)
[User Picture]From: arkanoid
2014-08-22 09:41 am (UTC)
Да, что-то такое я и имел в виду.

Кстати, MacOS с установленным Parallels Desktop для начала спросит "а что с этим девайсом делать" ;-)
(Reply) (Parent) (Thread)
[User Picture]From: Evgeny Kolesnikov
2014-08-22 10:25 am (UTC)
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=615493
(Reply) (Parent) (Thread)
[User Picture]From: arkanoid
2014-08-22 04:22 pm (UTC)
В system settings, с вариантами: allow -- deny -- ask.
(Reply) (Parent) (Thread)
[User Picture]From: auto194419
2014-08-22 03:51 pm (UTC)
более убийственных аргументов против говно-систем ваших придумать трудно.
(Reply) (Thread)
[User Picture]From: arkanoid
2014-08-22 04:21 pm (UTC)
Можно подумать, в винде все это делается удобнее.
(Reply) (Parent) (Thread)
[User Picture]From: Evgeny Kolesnikov
2014-08-23 02:24 am (UTC)
До 7-ки ЕМНИП — вообще никак. В 7-ке, через эту консоль полайси (udev rules просто детский сад по сравнению). Но общий смысл тот же — надо руками, где-то под капотом.

Спрашивать при втыкании там так же не принято. И дрова скачивает и ставит сама, если не нашлось локально.
(Reply) (Parent) (Thread)
From: shadowfoto
2014-09-01 03:33 pm (UTC)
вообще говоря - как. но сторонним софтом, как раз черные/белые списки.
другой вопрос что такой вектор атаки хоть и существует, но массовый пользователь он такой массовый, что "проще дать, чем объяснить почему так нельзя".
(Reply) (Parent) (Thread)