подпись kernel драйвера
От: Michael  
Дата: 01.06.20 10:16
Оценка:
Всем привет,
для проекта хочу сделать kernel-драйвер (типа виртуальная камера),
знаю сейчас нужно проходить какую-то процедуру проверки в Windows Hardware Developer Center.
Кто нибудь проходил? Какие подводные камни?
Заранее спасибо за ответы
Re: подпись kernel драйвера
От: Черный Властелин Австралия https://www.softperfect.com
Дата: 01.06.20 11:14
Оценка: 31 (5)
Здравствуйте, Michael, Вы писали:
M>для проекта хочу сделать kernel-драйвер (типа виртуальная камера),
M>знаю сейчас нужно проходить какую-то процедуру проверки в Windows Hardware Developer Center.
M>Кто нибудь проходил? Какие подводные камни?
M>Заранее спасибо за ответы

Для старых версий десятки и прошлых поколений Windows подойдет EV либо простой серт от компании у кого есть кросс-сертификат из этого списка (e.g. DigiCert, GlobalSign).

Для последних версий системы нужна подпись MS, ее можно получить только обладая EV-сертификатом. Подписи бывают двух видов:

1) attestation, где просто заливается бинарник драйвера и МС его подписывает. Возможно не будет работать на новых версиях Windows Server согласно документации от МС, хотя в моих тестах работало.

2) HLK — нужно ставить Windows Hardware Lab Kit и проходить через муторную систему тестов. В качестве бонуса получается какая-то сертификация типа Compatible with Windows (R).

Короче говоря если хотите чтобы работало всегда и везде — нужен EV серт и аккаунт в MS. Кроме того, EV серты вроде как не выдаются частным лицам, потому может понадобится еще и компания. Хотя кому-то вроде удавалось получить на ИП.
Re[2]: подпись kernel драйвера
От: Michael  
Дата: 01.06.20 12:17
Оценка:
Здравствуйте, Черный Властелин, Вы писали:

ЧВ>Здравствуйте, Michael, Вы писали:

M>>для проекта хочу сделать kernel-драйвер (типа виртуальная камера),
M>>знаю сейчас нужно проходить какую-то процедуру проверки в Windows Hardware Developer Center.
M>>Кто нибудь проходил? Какие подводные камни?
M>>Заранее спасибо за ответы

ЧВ>Для старых версий десятки и прошлых поколений Windows подойдет EV либо простой серт от компании у кого есть кросс-сертификат из этого списка (e.g. DigiCert, GlobalSign).


ЧВ>Для последних версий системы нужна подпись MS, ее можно получить только обладая EV-сертификатом. Подписи бывают двух видов:


ЧВ>1) attestation, где просто заливается бинарник драйвера и МС его подписывает. Возможно не будет работать на новых версиях Windows Server согласно документации от МС, хотя в моих тестах работало.


ЧВ>2) HLK — нужно ставить Windows Hardware Lab Kit и проходить через муторную систему тестов. В качестве бонуса получается какая-то сертификация типа Compatible with Windows (R).


ЧВ>Короче говоря если хотите чтобы работало всегда и везде — нужен EV серт и аккаунт в MS. Кроме того, EV серты вроде как не выдаются частным лицам, потому может понадобится еще и компания. Хотя кому-то вроде удавалось получить на ИП.


понял, спасибо.

позвонил в контору где получал обычный сертификат, действительно говорят для ИП нельзя EV...

вообще интересно может кто подписывает такой софт за возмездно конечно...
Re[3]: подпись kernel драйвера
От: mauzer_tim Верблюд  
Дата: 01.06.20 17:30
Оценка:
Здравствуйте, Michael, Вы писали:
M>позвонил в контору где получал обычный сертификат, действительно говорят для ИП нельзя EV...
Вот тут
Автор: Евгений Музыченко
Дата: 19.08.17
товарищ пишет, что получил серт на ИП через GlobalSign всего-то за пару месяцев. Так что, видимо можно.

M>вообще интересно может кто подписывает такой софт за возмездно конечно...

Это все очень стремно, маловероятно что кто-то этим будет заниматься. Подписывателю нужно как-то убедиться, что вы не делаете что-то вредоносное. Но, даже, если и найдется контора, которая этим занимается и подпишет вам драйвер, где гарантия что она не подпишет им кому-то другому малварь и этот серт отзовут (и ваш драйвер станет тыквой)?
Re: подпись kernel драйвера
От: wantus  
Дата: 03.06.20 18:27
Оценка:
M>(типа виртуальная камера),

Слегка в тему — https://github.com/johnboiles/obs-mac-virtualcam
Обсуждение — https://news.ycombinator.com/item?id=23404485
Re: подпись kernel драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 04.06.20 08:23
Оценка: +1
Здравствуйте, Michael.

На мой взгляд, самый беспроигрышный вариант — это приобрести EV-сертификат, который поддерживает подписывание
ядерного кода (kernel-mode code signing). Не знаю, как сейчас, но раньше при покупке EV можно было сразу взять и
"обычный" (т.е. не EV) сертификат SHA1 для подписывания под старые версии Win, у которых SHA256 или не работает
"из коробки" (Windows 7, Server 2008 R2), или вообще не поддерживается (Vista, Server 2008).

Далее, имея EV-сертификат, нужно будет зарегистрироваться на портале MS (процедура бесплатная).
И после этого можно подписывать свои драйверы любым из трех способов:

Cross-Signing — подписывание "по-старинке" с помощью signtool.exe и кросс-сертификатов.
Сертификаты: standard (SHA1) или EV (SHA256).
Такой драйвер будет работать на всех версиях Windows, включая Windows 10 и Windows Server 2016,
за исключением систем с включенным Secure Boot или Device Guard / HVCI.
Также могут возникнуть проблемы при использовании EV-подписи SHA256 на системах до Windows 8.
Например, на Windows 7 / Windows Server 2008 R2 потребуется установить обновление KB 3033929
(или то, которое его включает), иначе драйвер не будет загружен.

Attestation-Signing — подписывание через портал MS (загрузка .cab-архивов с драйверами на портал MS).
Сертификаты: только EV.
Такой драйвер будет работать только на Windows 10 и Windows Server 2016, но Secure Boot ему не помеха.
На системах с включенным Device Guard / HVCI драйвер может не загрузиться (зависит от политик).

WHQL Signing — подписывание через портал MS после прохождения HLK-тестов.
Сертификаты: только EV.
Драйвер будет работать только на Windows 10 и Windows Server 2016, но с любыми настройками Secure Boot и
Device Guard / HVCI. При этом для WHQL доступны дополнительные "бонусы":

* при первой установке устройства, когда доступны варианты, система всегда отдает предпочтение
драйверу с WHQL-подписью перед всеми остальными.

* возможна неинтерактивная установка (т.н. server-mode installation) без выдачи каких-либо сообщений
пользователю.

* возможны варианты с установкой и обновлением драйвера через Windows Update.

* и др.

> знаю сейчас нужно проходить какую-то процедуру проверки в Windows Hardware Developer Center.

> Кто нибудь проходил? Какие подводные камни?

Главный "подводный камень" — очень запутанная система логинов, профилей, настроек, подписок и т.п. на Microsoft.
Например, ты подписываешь драйверы через портал, а учетные записи для него почему-то настраиваешь в Azure.
Подписку покупаешь на одну учетку, а саму подписку видишь только под другой. И куча всяких терминов вроде appid,
tenantId, key и т.п., можно голову сломать. Драйвер иногда не подписывается по непонятным причинам и нет
нормального диагностического сообщения. Иногда подпись повисает на несколько часов (хотя в другое время проходит
за 10-15 минут). Они (MS) еще имеют привычку раз в несколько месяцев что-то поменять (читай — сломать) и
снова приходится разбираться, как попасть в нужное тебе окно...
Отредактировано 04.06.2020 8:26 okman . Предыдущая версия .
Re[2]: подпись kernel драйвера
От: Черный Властелин Австралия https://www.softperfect.com
Дата: 04.06.20 10:19
Оценка:
Здравствуйте, okman, Вы писали:
O>На мой взгляд, самый беспроигрышный вариант — это приобрести EV-сертификат, который поддерживает подписывание
O>ядерного кода (kernel-mode code signing). Не знаю, как сейчас, но раньше при покупке EV можно было сразу взять и
O>"обычный" (т.е. не EV) сертификат SHA1 для подписывания под старые версии Win, у которых SHA256 или не работает
O>"из коробки" (Windows 7, Server 2008 R2), или вообще не поддерживается (Vista, Server 2008).

Да это так, только многие здесь не имеет никакой компании, а получить EV без компании проблематично. Ну и SHA-1 версия она тоже EV, единственное отличие в алгоритме хеширования. У мну две EV подписи SHA1 и SHA256 от DigiCert.

O> WHQL Signing — подписывание через портал MS после прохождения HLK-тестов.

O> Сертификаты: только EV.
O> Драйвер будет работать только на Windows 10 и Windows Server 2016, но с любыми настройками Secure Boot и
O> Device Guard / HVCI. При этом для WHQL доступны дополнительные "бонусы":
O> * возможна неинтерактивная установка (т.н. server-mode installation) без выдачи каких-либо сообщений
O> пользователю.

Это справедливо и для attestation. Никаких диалогов "Доверяете ли вы XXX?" не появляется, неважно attestation или HLK.

O>Главный "подводный камень" — очень запутанная система логинов, профилей, настроек, подписок и т.п. на Microsoft.

O>Например, ты подписываешь драйверы через портал, а учетные записи для него почему-то настраиваешь в Azure.
O>Подписку покупаешь на одну учетку, а саму подписку видишь только под другой. И куча всяких терминов вроде appid,
O>tenantId, key и т.п., можно голову сломать. Драйвер иногда не подписывается по непонятным причинам и нет
O>нормального диагностического сообщения. Иногда подпись повисает на несколько часов (хотя в другое время проходит
O>за 10-15 минут). Они (MS) еще имеют привычку раз в несколько месяцев что-то поменять (читай — сломать) и
O>снова приходится разбираться, как попасть в нужное тебе окно...

Это точно, процедуру подписи МС реализовал через пень-колоду, да и она отваливается периодически по непонятным причинам.
Re[3]: подпись kernel драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 04.06.20 12:10
Оценка:
Здравствуйте, Черный Властелин, Вы писали:

ЧВ>Да это так, только многие здесь не имеет никакой компании, а получить EV без компании проблематично.


Сейчас вроде бы обычному "физику" и стандартный сертификат еще попробуй найди...

ЧВ>Ну и SHA-1 версия она тоже EV, единственное отличие в алгоритме хеширования. У мну две EV подписи SHA1 и SHA256 от DigiCert.


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

ЧВ>Это справедливо и для attestation. Никаких диалогов "Доверяете ли вы XXX?" не появляется, неважно attestation или HLK.


Гм, спасибо, не знал.
Re[2]: подпись kernel драйвера
От: Michael  
Дата: 04.06.20 13:04
Оценка:
Здравствуйте, wantus, Вы писали:

M>>(типа виртуальная камера),


W>Слегка в тему — https://github.com/johnboiles/obs-mac-virtualcam


1) "такое" у меня уже есть...
у меня есть DirectShow вариант, но
новые приложения которые юзают уже новое MediaFoundation (замена Directshow) не могут использовать DirectShow виртуальные камеры.
Но в новом-продвинутом MF виртуальные камеры оказывается можно делать только через kernel-драйверы....очередное "спасибо" Microsoft'у...


2)позвонил в GlobalSign- действительно делают на ИП, начал процесс... Вроде ничего сложного пока нет...
Re[4]: подпись kernel драйвера
От: Черный Властелин Австралия https://www.softperfect.com
Дата: 04.06.20 23:20
Оценка:
Здравствуйте, okman, Вы писали:
ЧВ>>Ну и SHA-1 версия она тоже EV, единственное отличие в алгоритме хеширования. У мну две EV подписи SHA1 и SHA256 от DigiCert.
O>Насколько я знаю (поправьте, если ошибаюсь), EV бывают только SHA2, с ключами не менее определенной длины и строго на USB-токенах.

Ну хз у меня SHA1 и SHA256 оба на токене, вот скриншот SHA1 версии — она вроде как тоже EV:

Re[5]: подпись kernel драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 05.06.20 16:17
Оценка:
Здравствуйте, Черный Властелин, Вы писали:

ЧВ>Ну хз у меня SHA1 и SHA256 оба на токене, вот скриншот SHA1 версии — она вроде как тоже EV:


Не, надо смотреть не сюда, а в поле "Certificate Policies".
Например, у нас в EV-сертификате SHA256 там такая строка: Policy Identifier=1.3.6.1.4.1.4146.1.2
А в сертификате SHA1 (который на том же токене) другая: Policy Identifier=1.3.6.1.4.1.4146.1.50

1.3.6.1.4.1.4146.1.2 — это "Extended validation certificate policy for code signing", а 1.3.6.1.4.1.4146.1.50 — "Code signing certificate policy".

В подписях тоже, кстати, OID-ы разные. По ним, как я понимаю, система отличает "богатый" сертификат от "бедного"
Кросс-подпись: 1.3.6.1.5.5.7.3.3 (Digital Signature).
Attestation-подпись: 1.3.6.1.4.1.311.10.3.5.1 (Attested WHQL).
WHQL-подпись: 1.3.6.1.4.1.311.10.3.39 (EV WHQL).
Re[6]: подпись kernel драйвера
От: Черный Властелин Австралия https://www.softperfect.com
Дата: 05.06.20 21:33
Оценка:
Здравствуйте, okman, Вы писали:
O>Не, надо смотреть не сюда, а в поле "Certificate Policies".
O>Например, у нас в EV-сертификате SHA256 там такая строка: Policy Identifier=1.3.6.1.4.1.4146.1.2
O>А в сертификате SHA1 (который на том же токене) другая: Policy Identifier=1.3.6.1.4.1.4146.1.50

Да странно, у меня в обоих SHA1 и SHA256 одинаково:

[1]Certificate Policy:
Policy Identifier=2.16.840.1.114412.3.2
[1,1]Policy Qualifier Info:
Policy Qualifier Id=CPS
Qualifier:
https://www.digicert.com/CPS
[2]Certificate Policy:
Policy Identifier=2.23.140.1.3

Вроде как последняя строчка это и есть EV согласно микрософту.

CAs must declare one of the following policy OIDs in its Certificate Policy extension end-entity certificate:

DV 2.23.140.1.2.1
OV 2.23.140.1.2.2
EV 2.23.140.1.1.
IV 2.23.140.1.2.3
EV Code Signing 2.23.140.1.3
Non-EV Code Signing 2.23.140.1.4.1


Видимо у разных центров сертификации разные подходы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.