Как работает подпись драйверов, когда Windows находится в автономном режиме?

Я понимаю основы подписи. У вас должен быть закрытый ключ и сертификат (не обязательно) от надежного центра сертификации. Затем у вас должен быть открытый ключ подписавшего, чтобы проверить его целостность.

Я вижу, как это работает онлайн; Сайту выдается сертификат (не обязательно) от авторитетного центра сертификации (например, Verisign), и Firefox (например) может проверить подлинность сертификата, связавшись с указанным центром сертификации.

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

Мой вопрос таков; как Windows узнает, что драйвер подписан авторитетным центром сертификации, когда он находится в автономном режиме и не может проверить этот авторитетный центр сертификации?

Сохраняет ли Windows набор открытых ключей от авторитетных центров сертификации в Windows? Нельзя ли изменить этот список, чтобы загрузить драйвер, как если бы он имел сертификат авторитетного центра сертификации?

Как подписание драйверов работает в автономном режиме?


person Sam    schedule 19.06.2015    source источник


Ответы (1)


Да, Windows хранит коллекцию доверенных корневых сертификатов. Некоторое программное обеспечение, такое как IE и Chrome, использует эту коллекцию; некоторые программы, такие как Firefox, поставляются со своим собственным списком. Вот как работает проверка сертификата; никто не получает корневые сертификаты от ЦС через Интернет, потому что как узнать, что вы действительно разговариваете с ЦС?

Вы можете просмотреть хранилище корневых сертификатов Windows с помощью MMC через подключаемый модуль Certificates. Обратите внимание, что каждая учетная запись пользователя имеет собственное хранилище сертификатов в дополнение к глобальному хранилищу («Учетная запись компьютера»).

Однако Windows не использует этот список доверенных сертификатов для подписи драйверов. Вместо этого ядро ​​Windows имеет встроенный список корневых сертификатов. Проверка сертификатов для драйверов основана на том встроенном списке, который, если я правильно понимаю, полностью состоит из корневых сертификатов, принадлежащих Microsoft.

Когда драйвер подписан третьим лицом центр сертификации, сертификат с перекрестной подписью использовал.

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

person Harry Johnston    schedule 20.06.2015
comment
Я понимаю, что вы можете использовать MMC для просмотра коллекции корневых сертификатов Windows, но где корневые сертификаты хранятся в Windows? Кроме того, какие привилегии потребуются для записи в хранилище сертификатов? Очевидно, администратор или выше, но потребуются ли права администратора или системы для чтения и изменения хранилища сертификатов? - person Sam; 20.06.2015
comment
Физическое расположение файла не имеет значения — оно все равно может измениться. Инструмент Сертификаты позволяет добавлять и удалять сертификаты, или вы можете сделать это в программном обеспечении с помощью .NET System.Security.Cryptography.X509Certificates API. Для управления корневым хранилищем сертификатов системы вам необходимы права администратора. (Имейте в виду, однако, что это не позволит вам добавить новые корневые сертификаты для подписи драйверов, поскольку механизм проверки драйверов не использует хранилище корневых сертификатов.) - person Harry Johnston; 20.06.2015
comment
Интересный. Какой механизм использует механизм проверки драйверов, если он не использует корневое хранилище сертификатов? - person Sam; 20.06.2015
comment
Я уже рассказал об этом в третьем и четвертом абзацах моего ответа. В ядро ​​встроено небольшое количество корневых сертификатов (возможно, только один), принадлежащих Microsoft. Сторонние драйверы обычно используют сертификат, подписанный сторонним центром сертификации, поэтому они также должны поставляться с сертификатом с перекрестной подписью. Сертификат с перекрестной подписью предоставляется центру сертификации корпорацией Майкрософт и подтверждает ядру, что корпорация Майкрософт одобрила корневой сертификат центра сертификации для использования с подписью драйвера. - person Harry Johnston; 21.06.2015
comment
Вы упомянули, что механизм проверки драйверов не использует корневое хранилище сертификатов. Я хотел бы перейти на более низкий уровень и задать один из двух вопросов; 1. Какой метод использует механизм проверки драйверов для проверки целостности загружаемых драйверов? 2. Какие конструкции на диске будет использовать этот механизм проверки драйверов (например, файлы, используемые ядром для хранения корневых сертификатов)? Я хотел бы иметь возможность манипулировать этими конструкциями на диске и в памяти (с помощью отладчика ядра). Если вы не знаете, должна ли быть литература, которую я должен читать? - person Sam; 22.06.2015
comment
Чтобы вы посоветовали? - person Sam; 22.06.2015
comment
Я предполагаю, что соответствующие сертификаты встроены непосредственно в ntoskrnl.exe и/или bootmgr. Детали реализации, вероятно, не задокументированы; нет смысла делать подрыв системы проще, чем это абсолютно необходимо. - person Harry Johnston; 22.06.2015
comment
Я осмотрюсь. Спасибо! Вы были очень информативны и актуальны. - person Sam; 22.06.2015
comment
@Sam Чего ты пытаешься достичь? Если вам нужно внедрить свой самодельный драйвер на свою машину для тестирования, вам не нужно подписывать его Microsoft (и затем переподписывать каждый раз, когда вы его перекомпилируете), — используйте TESTSIGNING< Параметр /i> в загрузчике Windows. - person Anton Samsonov; 22.06.2015
comment
Ах, спасибо! Я пытаюсь выяснить возможный сценарий эксплуатации, включающий кражу сертификатов проверки драйверов и их использование для обхода подписи драйверов как при установке, так и при загрузке состояния проверки драйверов в Windows. - person Sam; 25.06.2015