Pull to refresh

Comments 30

Видимо это одна из причин, почему в Win7 x64 теперь запрещено использовать не подписанные драйвера…
Проще запретить, и не ковырять дыры в своих драйверах, нежели отдуваться за чужие баги…
UFO just landed and posted this here
Да, извиняюсь, сторонние драйвера тут не причем.
В данном же случае вина скорей в аппаратной части. Да и как ты проверишь длину дескриптора программно… если говорят что он длинной 0x200, то он таковым и должен быть…
Это как в ассемблере, когда ненароком попадаешь в область данных, и в итоге данные начинают исполняться… =)
Дескриптор читается хостом и складывается в буфер в драйвере. Сам драйвер увидев, что длина 512 байт может выделить необходимый объем. Если устройство отдаст все можно обрабатывать, если не отдаст, то вывалиться по таймауту (или увидев NAK-и от устройства) и заявить о некорректной работе. Со стороны софта организовать все проверки не сложно.
UFO just landed and posted this here
В данном случае, такой запрет бы не помог. Здесь ошибка именно в компонентах операционной системы, что-то 3-их разработчиков не участвует вообще.
Вообще есть еще такая штука как Windows Logo Kit. Как раз для таких вот вещей. Любое устройство, не прошедшее WLK официально не может называться совместимым с Windows, даже если оно вроде как работает. Проходит ли Ваше устройство тесты WLK?
По-моему в данном случае вопрос про WLK неуместен. Устройство заведомо некорректное. Хотя под Win Vista тест может быть и пройдет, а под уязвимой системой он просто не запустится. Если не ошибаюсь, он устанавливает собственные драйвера шины, в данном случае при висящем на половину стеке USB, свой драйвер ему вряд ли получится пропихнуть в стек.
Сколько помню «дружбу» Windows и USB — всегда проблемы были. То в WindowsXP изначально была какая-то кривая поддержка USB, так что нормально (ну вроде как) работать стало только начиная с SP1, то в Vista при подключении одной из моих флешек (Kingston Data Travel II+) начиналась какая-то бурная «проверка» USB устройств хранения данных, а курсор мыши бесится каждую секунду раз по 5-10 переходя в режим ожидания и релаксации, да так, что вытащить невозможно было, потому что де устройство было занято каким-то процесом… Вроде на Семёрке такого не наблюдается, но чем чёрт не шутит. Моло ли, может и 7 лет может не хватить, чтобы наконец поправить за индийскими программистами :)
А где атака то? Ну то есть, это ШИНА, а на шине устройства могут делать довольно много неприятных вещей. Если устройство через DMA начнет портить память это тоже атака? А если устройсто начнет блокировать шину памяти? Ну а если оно будет генерировать немерянное количество прерываний? Таких «атак» можно придумать тысячи.
Да, в данном случае я не имею в виду конкретно USB устройства, потому как с прерываниями и DMA там напряженка — имеется в виду шины вообще (та же PCI)
Атака в том, что работа системы затрудняется.

Работа аппаратуры здесь не интересует, по той причине что она глубоко и происходит через «прокладку», т.е. операционную систему. Да, устройство аппаратное, вешается на шину, но заметьте какую шину. Шина PCI спрятана внутри системы, к тому же горячее подключение она не предусматривает. А USB как раз предназначена для быстрого и удобного подключения устройств в процессе работы, она всегда «под рукой». К тому же непосредственно USB-устройство НЕ МОЖЕТ генерировать прерывания и DMA передачи, их генерирует хост, устройство только обрабатывает запросы.
> Работа аппаратуры здесь не интересует, по той причине что она глубоко и происходит через «прокладку», т.е. операционную систему.
Нет. Устройства могут навредить так чтобы ОС даже не узнала.

> А USB как раз предназначена для быстрого и удобного подключения устройств в процессе работы, она всегда «под рукой»
Подключение usbhid, генерирующего кучу мусорных key/mouse-строков это тоже «атака», посколько «затрудняет работу с системой»?
Не поймите меня неправильно. Данная конкретная проблема имела решение (и решена в последующих версиях ОС), но в общем случае «атака на ОС через аппаратную шину» это примерно то же, что «атака на юзермод из ядра». ОС не имеет вообще никаких средств защиты от аппаратуры. И она принципиально не должна этого делать (ну то есть она должна попытаться защитить ДАННЫЕ, но даже здесь никакой гарантии быть не может)
> Нет. Устройства могут навредить так чтобы ОС даже не узнала.
>…
> ОС не имеет вообще никаких средств защиты от аппаратуры.

Но только не в случае с USB. Устройства на шине USB могут навредить только при недоработках в ОС и драйверах. Собственно поэтому я с Вами и спорю и прошу не обобщать до всех устройств. USB ближе к Ethernet, чем к PCI/MPI и прочему.

> Подключение usbhid, генерирующего кучу мусорных key/mouse-строков…

Что-то не понял, о чем Вы? Извлеките устройство и проблема исчезнет, вот если после извлечения запросы продолжат идти, то случай реально интересный.
UFO just landed and posted this here
Кстати, проведу маленькую аналогию…

Беру Ethernet и какой-то гипотетический баг в стеке TCP/IP. При помощи «аппаратного устройства», т.е. другого компьютера пошлю хитрый пакет и повешу 1ую систему. Если не брать в расчет что Ethernet и USB имеют разное назначение, то случай очень похожий.
в свое время никакой хитрости не нужно было, чтобы отправить ping of death.
А интересно, может USB устройство просто представиться клавиатурой, передать сочетания клавиш win+R и например запустить форк бомбу? :)
Вполне. Но требуется чтобы сеанс не был заблокирован.
Чтобы сработало, нужно, чтобы втыкаемое через USB устройство было уже ранее установлено и распознано в системе. Напомню, что установка допускается только в том случае, если залогинен юзер с правами установки новых устройств — обычно это админ на машине.
Про права пользователя ни разу не задумывался. Мне казалось, что устройства, использующее стандартные и подписанные драйвера (каковыми являются все HID) устанавливаются без вмешательства пользователя и независимо от его прав. Да и при заблокированном сеансе такой драйвер должен проставиться, хотя это хорошо бы проверить.
Однозначно не встанет новое USB-устройство без активной админской сессии, какое бы оно ни было. Испытывал на HID-клавиатуре «USB Haunted Cable».
> которое в буквальном смысле осуществляет DOS-атаку
DOS-атака — это как? Поставить монитор с запущенным сеансом MS-DOS напротив атакуемого компа и ждать эффекта?
Хорошо бы понять, какие еще версии MS Windows так болезненно реагируют на данный некорректный дескриптор.

Я написал некорректный код, от него компьютер повис. Выкладываю исходники, посмотрите все, какую херню я написал.
Интересно было бы посмотреть на поведение windows при подключении такой штуки удалённо, через прокидывание pnp-устройств в rdp6…
У меня в процессе отладки устройства на библиотеке V-USB был один глюк — мое устройство вырубало Windows XP в синий экран. Вставляешь в USB-порт, и винда тут же дохнет! А оказалось — я просто нечаянно дрыгал ножками, к которым были подключены сигналы D+ и D-.

А вот еще устройство из серии приколов — эмулирует USB-клавиатуру, и генерирует случайные нажатия, как будто на компе вирус сидит.



Неплохая первоапрельская шутка!


Программируя шину USB, я пришел к выводу что очень много драйверов на ней можно уронить в синий экран. Падает даже драйвер хабов и хидов при неаккуратном перетыкании, но точно понять, не получалось откуда ноги растут, к сожалению.

Вы какой конкретно драйвер роняли из AVR с V-USB? Который работу класса CDC обеспечивает (у микрософта он зовется вроде usbserial.sys)?

Случайно дергать ноги на USB никогда не пробовал, а может и зря. :)
Дело было давно, кажется был один из примеров HID. Может быть, этот глюк уже исправили.

Драйвер класса CDC usbserial.sys в Windows XP SP3 ведет себя по-другому. Если беспорядочно дергать ногами, то компьютер не сваливается в BSOD, а «замерзает», т. е. не реагирует на клавиатуру, не перемещается курсор мыши. Если такое устройство выдернуть, то работа продолжается как ни в чем не бывало. Вставляешь обратно — после определения устройства снова все замерзает. Пробовал с виртуальным COM-портом, с назначенным серийным номером.
Это явный программный глюк драйвера, так как с железом общается контроллер шины USB, а у софта драйвера видать крыша едет =).
Sign up to leave a comment.

Articles