Pull to refresh

Comments 88

UFO just landed and posted this here
Очень интересное утверждение.

На счет шаблонов, а где их нет?

Я правильно понимаю что конфиг udev/devd не портит USB? Т.е. если это драйвер, значит портит, а если конфиг, который читает драйвер, то не портит. Так?

Касательно конфигов, как уже было упомянуто, драйвер простой, его вполне можно доработать чтобы не требовалась перезагрузка. Более того, если идти дальше, можно много внести всяких гибкостей, например блокирование записи и т.д. У вас это получиться на других системах простой правкой конфига?
Функционала UDEV хватит, чтобы писать гибкие правила проверки и блокировки устройств, в том числе и с привязкой к временным промежуткам)
Хватит. Но когда речь идет о гибкости которая не заложена, по-моему, подобный подход решит эту проблему. Я не утверждал о простой блокировки записи. Безусловно мы его смешиваем с анализом и принятием решения динамически. В прошлом посте я выразился не точно. Извиняюсь.

Ну и речь в статье, все-таки не об UDEV)))
Дорогой автор, успокойтесь)) Ваша статья, как «вводный краткий курс» в системное программирование под ОС семейства MS Windows, имеет место быть — в свое время она бы мне помогла. Вот если бы Вы в статье уделили внимание еще и написанию inf-файлов, было бы совсем хорошо. А вот мониторить и конфигурировать драйвер можно через WMI-интерфейс.
конфигурировать драйвер можно через WMI-интерфейс

Расскажите, как с USB решить дело. Я решений не искал. Было бы интересно узнать.
WMI будет работать только когда драйвер его поддерживает. Драйвер шины USB поддерживает соответствующий функционал и предоставляет для него интерфейсы? Вопрос заключался в этом.
Он будет поддерживаться, если вы в драйвере зарегистрируете соответствующего агента)) В DDK все описано и есть примеры.
Еще раз, драйвер USB в Windows, его поддерживает? И если да, то какие интерфейсы управления он предоставляет?
Еще раз отвечаю, зачем Вам знать, поддерживает ли этот интерфейс существующий драйвер USB? Вы в своем фильтр-драйвере его поддержите и настраиваете с помощью него свои «белые (черные)» списки)
Драйвер USB шины, должен зарегистрироваться с WMI как провайдер. Иначе он не будет управляться через WMI.

Вы в своем фильтр-драйвере его поддержите и настраиваете с помощью него свои «белые (черные)» списки)

А тогда фильтр зачем?
А Вы разве не фильтр-драйвер написали? В своей статье Вы так его и обозвали — фильтр верхнего уровня.
А это вопрос к вам был? Зачем фильтр, если через WMI управлять можно? Вы утверждали что в фильтре надо это сделать.
Фух, устал я)) Ваш фильтр-драйвер Вам нужен для реализации Вашей логики блокировки подключения «ненужных» USB-устройств. А вот конфигурировать список «ненужных» USB-устройств предлагаю реализовать через WMI. Вот и все. Сами же писали, что в этом у вас недоработка, что при изменении списка «ненужных» USB-устройств требуется перезагрузить компьютер.
Недоработка и недостаток не одно и тоже.

А прикрутив я WMI к своему фильтру, чтобы я выиграл стратегически? Кроме потерянного времени?
Вот за то время, которое Вы потратили на пререкания со мной, Вы могли бы уже прикрутить к своему драйверу провайдер WMI, и время не было бы потрачено зря — Вам новые знания, Вашим читателям польза. И, по моему сугубо-субъективному мнению, время, потраченное на приобретение новых знаний и применение этих знаний на практике, никогда не станет потерянным. Я не вижу смысла продолжать эту ветвь комментариев — засим откланиваюсь.
Ваша позиция понятна. «В интернете кто-то не прав» (С).
UFO just landed and posted this here
Автор начал с того, что существующие решения небесплатные, а затем сваял драйвер, который ещё нужно дорабатывать и — о чудо! — который нужно небесплатно подписать, чтобы он заработал на современных ОС.
Я ничего не упустил?
Мне казалось, что заголовок гласит о написании, а не предложении абсолютно бесплатного решения.

О каких современных ОС идет речь? Драйвер работает на всех ОС.
Любая статья предполагает обоснование необходимости.
Если кодили just for fun — ок, но только Ваш fun малоинтересен. Уровня задачки начального курса программирования на уровне ядра. Да и справились Вы так себе — да и сами написали, что ещё пилить и пилить.
Попробуйте использовать свой драйвер на любой поддерживаемой в настоящий момент 64-разрядной ОС Windows.
Использую, работает. Прежде чем утверждать подобное стоило бы проверить.

Задача не just for fun, она вышла из практики, была реальная потребность. Если вам этот fun не интересен, поправьте, но по-моему, вас никто не заставляет давать какие-либо комментарии на этот счет. Если не интересно, зачем вообще читать?

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

Справился безусловно так себе.

А вообще, вы просто передергиваете мои слова, тем самым меняя смысл.
Если задача из жизни, которую Вы не хотите, чтобы обсуждали — зачем о ней здесь писать? Хабр предполагает конструктивную критику, а не только восторженные вопли.
Вы пишите, что была реальная необходимость, и Вы задачу решили — эээ, в Вашей компании нет ни одного компьютера под управлением 64-разрядной ОС позже Windows 7 включительно? Вы так и не услышали: без подписи на этих системах драйвер работать не будет! Так в чём тогда интересность и ценность Вашего решения?
Например, вы заблокировали доступ к Интернету одному из пользователей, но не заблокировали устройства этого ПК. В таком случае пользователю достаточно просто принести USB-модем, и Интернет у него будет. Т.е. простым блокированием доступа к Интернету дело не ограничивается.

В самом начале, я написал практическую потребность, извиняюсь если написал размыто.

Вы пишите, что была реальная необходимость, и Вы задачу решили — эээ, в Вашей компании нет ни одного компьютера под управлением 64-разрядной ОС позже Windows 7 включительно?

Я драйвер подписываю.

Несмотря на свою простоту в моем случае данный драйвер достаточно эффективно решает поставленную задачу.

Я явно сказал что в моем случае.

Вы так и не услышали: без подписи на этих системах драйвер работать не будет!

Еще раз, я писал о разработке, а не об обходе проверки подписи.

Так в чём тогда интересность и ценность Вашего решения?

Решать вам, и остальным читателям.
То есть у Вас или Вашей компании есть деньги на сертификат для подписи драйвера, но нет денег на решение проблемы подключения сторонних устройств?
И в итоге специалист, имеющий доступ к сертификату, целый день тратит на написание драйвера, который к тому же потом требует доработки?
Извините, но если бы Вы работали в моей компании, после этого я бы Вас уволил.
Но Вы правы: всегда может быть иное мнение. Посмотрим, что скажут другие.
Для себя я всё понял, спасибо за диалог.
Не кажется глупым решением уволить человека, который справился с задачей, без дополнительных трат и проприетарного ПО? И потом искать замену? Странное решение на мой скромный взгляд.
Если решение на уровне учителя информатики в школе — тогда да. Но тут, как видите, не тот уровень.
Специалист на работе должен заниматься работой. Его рабочий день стоит дороже софта для блокировки.
Кроме того, если за день он не успел отладить простой драйвер до состояния «больше недостатков нет» — тогда он точно не на своём месте.
Вы правда не знаете что проверку подписи можно отключить?
Переводом в тестовый режим? Знаю, на рабочих станциях не использую. Лишняя брешь защиты.
Да нет у него никакой компании… И в компанию автора на место автора его бы не взяли
Может и есть, просто он там один, на должности генерального директора. Увольняет всех.
Извините, вакансий нет. Спросите автора статьи — судя по всему, работа у них не пыльная.

Ну да, не пыльная. С киркой и отбойным молотком ходить не надо. Кнопочки там всякие нажимаю.

Во-первых, проверка подписи отключается в Windows штатно, во-вторых, не секрет (вы это точно знаете), что в сети гуляет утилита, позволяющая подписать особым просроченным сертификатом любой драйвер, а MS закрыть уязвимость, используемую этим сертификатом не может, предпочитая игнорировать проблему.
Штатно — это перевод в тестовый режим. Слово «тестовый» Вам ничего не говорит? Да, на своём личном компьютере я для разработки могу включить такой режим, могу отключить UAC и постоянно работать под админом — но это не есть решение для рабочих станций, где необходима нормальная работа ОС и нормальный, штатный уровень безопасности.
«Утилита в сети» — это украденый сертификат с китайской программой для подписи.
Ребята, мы здесь обсуждаем решения для компании или пиратские обходы дома на завалинке? Давайте мухи — отдельно, котлеты — отдельно.
А можете дать ссылку на эту утилиту с просроченным сертификатом или более полную информацию? Спасибо.
Спасибо, очень интересно. На прошлой работе стояла похожая задача — надо было запретить подключение к определённому usb хабу всех устройств, кроме usb накопителей. Т. к. это было ПО для терминалов, я просто сделал перехват сообщений WM_DEVICECHANGE, и принудительно отрубал все устройства с требуемого хаба, которые не являются usbstorage.
Насколько я помню, да, давненько уже было. В крайнем случае можно devcon'ом рубить.
О таком решении я и не думал. В целом хорошее. Но в моем случае оно бы не подошло.
У такого решения есть проблема с открытыми хэндлами. SetupApi не отключит девайс с открытыми хэндлами, а устройство (та же флэшка) может, например, быть занята при запущенном приложении автозапуска. До появления уведомления о новом устройстве можно успеть много чего на нем открыть. Вариант — перебирать хэндлы и закрывать их вручную, что не очень хорошо сказывается на стабильности работы приложений.
Не понимаю, о каких открытых хэндлах в данном случае идёт речь, если честно. Сообщение WM_DEVICECHANGE передаётся до тех пор, пока не обработается. Чисто теоретически, на замусоренной системе, кто-то может успеть его обработать раньше. Но тогда моя программа его не получит. Или мы говорим о разных вещах.
P.S. в моём конкретном случае было допустимо рубить устройства devcon'ом (издержки производства, иногда, например, на уже поставленных терминалах отходит питание от купюроприёмника, и devcon — единственный способ программно вернуть устройство в рабочее состояние).

Безотносительно кода, решение весьма странное.
Если у пользователя нет прав администратора, то задачу можно решить проще, стандартными средствами контроля доступа, а если права есть, то он может просто использовать обычный драйвер, разве нет?

Приведите пример стандартных средств.
Извините, я давно usb-свистками не пользовался, но разве они уже могут устанавливать свои драйвера и софт, который требуется им для работы, без прав админа?
Ну тут разграничение прав, админ ставит софт, пользователь использует
0_о А зачем админу сначала ставить софт для работы usb-модема, а затем писать драйвер, чтобы этот usb-модем не мог работать?
А дело только в модемах? Во-вторых, много драйверов в современных Windows предустановлены.
Пример то был с модемом. И очевидно, что он не очень удачный. На моей практике, когда пользователи пытались подобным образом обойти блокировку на развлекательные ресурсы, то они обломались.Операционные системы win-7, win-8 на тот момент были.
У USB устройств есть классы, у этих классов устройств часто бывает стандартный интерфейс. Для этого стандартного интерфейса есть предустановленный драйвер в системе. И?
Вы на практике сталкивались с тем, чтобы удалось использовать usb-модем без установки дополнительного ПО?
Именно так. Не надо только путать современные модемы, с модемами времен Windows XP.
Еще раз, для стандартного класса USB устройства в системе может присутствовать драйвер. Сейчас сетевые адаптеры есть работающие по USB. И никакого спец. софта для них не нужно.
Ни один Yota модем, которыми я к сожалению — вынужден с завидной периодичностью пользоваться — не устанавливает никакие драйвера. Windows 7 — 10. На XP говорят приходится что то ставить, но к сожалению возможности проверить — нет.
Таких подавляющее большинство.

Возможно я не прав, но чтобы модем заработал, ему надо создать новое подключение (обычно это делает ПО модема при установке).


Без прав администратора пользователь во-первых, не сможет установить драйвер модема, а во-вторых, если драйвер уже есть и не нужен, не сможет создать новое сетевое подключение.


В крайнем случае, можно, например, явно запретить пользователю создание новых подключений через групповые политики.

В том и прелесть, что люди подключили модем без прав админа.
А можете модель модема озвучить?
Не могу, знаю только сам факт. Т.к. ИТ'шники обращались с такой просьбой.
Тогда не факт, что это факт. Вполне вероятно либо прошляпили админский доступ, либо юзер оказался достаточно продвинутым и упорным, чтобы ломануть учетку локального админа, например включил встроенного администратора. Беглый поиск по интернету не выявил модель usb-модема, которую можно установить без прав админа. Так что вполне вы занимались написание велосипеда из за не отлаженных должным образом политик и регламентов.Если пользователь установивший вопреки правилам модем не понес никакого наказания, и не было подробного расследования для выявления факта халатности админов, где гарантия, что тот же самый юзер в следующий раз не получит снова права админа и не удалит из системы этот самописный драйвер?
Я написал, а ваше дело мне верить или нет. Есть люди которым вы верите, есть которым я.

Я еще раз подчеркну, в Windows предустановленных драйверов огромная масса. Полагаться на то что устройство потребует особой установки, не очень верно. Т.к. не дает максимальной гарантии.

P.S. На счет наказаний немного ставит в ступор. Вы встречали когда-нибудь человека которого всегда наказывали только по делу?
А в чем ступор? Первая превентивная мера защиты от несанкционированного доступа это письменное уведомление о санкциях за этот доступ под роспись. Выпуск соответствующего документа это первое, что я прошу от руководства клиента, когда они хотят в чем то ограничить пользователей. Как я и указал выше вопрос правильных политик и регламентов.

И лично я не ставлю под сомнение лично Вашу честность. Но вот сама предыстория вызывает сомнения.

Главную мысль, которую я пытаюсь озвучить, что не нужно начинать искать решение задач администрирования чисто техническими средствами.
Как показывает практика, в регламентах любой компании всегда есть дыры. Если цель ходить и заниматься справедливостью, тогда да. Хороший подход. Если ликвидировать вариант угрозы на корню, тогда технически. Пусть техника думает. Человеческий фактор никто не отменял. Да и ходить и заниматься воспитанием людей не самое интересное занятие. Лучше, если они не будут иметь технической возможности.
Вы не поняли. Вопрос не в абстрактной справедливости, а в рациональности. Где гарантия что, использование вашего решения по обходу подписи драйверов не нанесет значительный урон безопасности? Или что не создаст проблем при подключении устройств, драйвера к которому писали «индусы», но вот именно их и нужно подключить именно к этому рабочему месту? Конечно надежней запретить использование металлических кухонных ножей, но заставлять всех использовать одноразовые пластиковые не рационально.
Вы не поняли. Вопрос не в абстрактной справедливости, а в рациональности. Где гарантия что, использование вашего решения по обходу подписи драйверов не нанесет значительный урон безопасности?

В каком месте я обхожу подпись драйверов?

Или что не создаст проблем при подключении устройств, драйвера к которому писали «индусы», но вот именно их и нужно подключить именно к этому рабочему месту?

С таким подходом лучше тогда вообще ничего не делать, т.к. любое решение может нанести вред. Какие проблемы может породить фильтрация обычных запросов PnP, который писала Microsoft?

Конечно надежней запретить использование металлических кухонных ножей, но их заставлять всех использовать не рационально.

По-моему, вы перевернули все с ног на голову.

В каком месте я обхожу подпись драйверов?


За это извиняюсь, про обход подписи это был не ваш комментарий.

Какие проблемы может породить фильтрация обычных запросов PnP, который писала Microsoft?
Вам разве не приходилось еще сталкиваться с тем что «это не должно приводить к проблемам» не обязательно означает, что «это действительно не привело к проблемам». Особенно когда дело касается Microsoft. :)

По-моему, вы перевернули все с ног на голову.
там опечатка была, поэтому фраза действительно получилась бессмысленной. Возможно Вам приходилось читать притчу «про хакера и начальника столовой»?

Ну опять же вернусь к тому, что Ваше решение в итоге не защищает от того, кто будет специально искать как его обойти\сломать, т.к. нужно не только совершенствовать замки, но и ловить взломщиков.

Вам разве не приходилось еще сталкиваться с тем что «это не должно приводить к проблемам» не обязательно означает, что «это действительно не привело к проблемам». Особенно когда дело касается Microsoft. :)

Я много с чем сталкивался. И Microsoft последняя в списке. Статистически. Вообще когда говорят «особенно Microsoft» — все становиться ясно.

Ну опять же вернусь к тому, что Ваше решение в итоге не защищает от того, кто будет специально искать как его обойти\сломать

Ну сломайте kernel mode драйвер. Обойдите его механизмы. Вы сейчас сказали в целом правильную вещь, но бессмысленную. Т.к. из такого утверждения следует что не надо ничего писать, потому что это сломают.
Сдаётся мне, что отсутствие модели модема, отсутствие понимания автором защиты драйверов подписью, откровенно высосанные из пальца детали истории, отсутствие исходников и скомпилированного детища, а также активность на Хабре в рабочее время намекает, что статья — копипаста, не имеющая ничего общего с реальностью.
В принципе, согласен в этом с Ivan_83.

"А чё они говорят что у меня бомбит, когда у меня не бомбит"(С)

Я очень давно не видел этих модемов, но те что видел лет 5 назад были обычно составными устройствами состоящими из диска с дрова и ком порта(CDC). иногда с возможность работы как USB сетевуха. Многие из них требовали спец софт для активации CDC/Сетевухи. Однако их можно было потом заставить остаться в этом состоянии. В Win7 и выше вроде бы есть дрова для CDC COM порта. Насчёт USB сетевухи не уверен. Остаётся только вопрос можно ли с неадминской учеткой создавать сетевое подключение.
Дрова для некоторых USB сетевых карт есть изначально в windows 7 и более новых. Если нужно модемное подключение, то с неадминской учётки можно создать новое подключение, но нельзя запомнить пароль для всех пользователей — только для своего. Чего вполне хватает для получения интернета на устройстве. Чаще всего, новое подключение не нужно вообще, хватит стандартного сетевого подключения, создаваемого windows для каждой сетевой карты.

Многие модемы умеют прикидываться сетевой картой и прав админа для них не нужно, в системе уже все есть, сам в универе так делал.
Если у вас телефон на android подключите его как usb модем, думаю вы удивитесь.
Технология называется ndis

Отличное замечание! Да действительно, для подключение смартфона ( я проверял Android)
в качестве модема на win10 никаких драйверов и ПО не требуется.Но это меня натолкнуло на мысль, что мы слишком зациклились на модемах и подключению по usb. Действительно пользователь может подрубить к компу и usb-wifi( современные свистки большей частью тоже без установки драйверов), а смартфон превратить в точку доступа одним нажатием, и воткнуть сетевую карту wi-fi в pci слот на материнке, и принести роутер, который может использвать в качестве wan подключения wi-fi со смартфона либо также подключать usb-модем в роутер, а компьютер подключить по Ethernet. Соответственно в двух последних случаях метод защиты автора не будет действовать, но зато будет действовать банальное отключение Dhcp на брэндмауре.
Можно фильтровать и PCI. Как вы себе представляете что пользователь рабочего ПК вставил плату? Нет можно конечно. Вы такое видели, среди не разработчиков?
Я видел когда юзер чтобы поставить игру переустановил виндовс, т.к. ему не давали прав администратора для этого. А воткнуть плату для человека хоть раз собиравшего-разбиравшего комп не проблема и таких людей среди пользователей достаточно.
А как же ваши ранее упомянутые регламенты компании, расследования инцидентов и система наказаний? На которые, как я понял, надо ставить приоритет, а не на технические решения.

А воткнуть плату для человека хоть раз собиравшего-разбиравшего комп не проблема и таких людей среди пользователей достаточно.

Сколько я видел людей работающих за ПК, они кнопки с трудом нажимают. Что уж говорить о подключении сетевой платы.

И потом, PCI это все-таки не hot-plug. Когда USB массовый. Даже если и так, вы слишком много уделяете внимания вещам, которые по своей натуре маловероятны. Целесообразно ли тратить на защиту от таких случаев много сил?
А как же ваши ранее упомянутые регламенты компании, расследования инцидентов и система наказаний? На которые, как я понял, надо ставить приоритет, а не на технические решения.

Человека уволили в этот же день. Он как раз на испытательном сроке был.

Два правила на брендмауре это быстрее чем писать драйвер по всевозможные варианты usb и pci устройств.
Ну понятно. Без комментариев.
Штука интересная, однако, мне кажется, что где-то видел бесплатное ПО для решения подобного вопроса, так сходу название вспомнить не могу.
Вполне может быть. Я не утруждал себя поисками.
UFO just landed and posted this here
Домашнего ПК да. А если у вас есть терминал МФУ — например, вы печатаете с USB, будет очень неприятно, если какой-нибудь умник подойдёт к вашему терминалу с USB клавиатурой.
Чего-то я упустил тему Ring0 за последние года 4.
Сейчас в студии уже можно компилить в .sys без бубна? После подключения WDK ессно…
Sign up to leave a comment.