Вопросы безопасности сборок

При создании сборки можно указать набор разрешений, который требуется для ее выполнения. От свидетельства зависит, предоставляются ли сборке определенные разрешения.

Существует два различных способа использования свидетельств.

  • Входное свидетельство объединяется со свидетельством, собранным загрузчиком для создания окончательного набора свидетельств, используемых для разрешения политики. К методам, использующим такую модель, относятся Assembly.Load, Assembly.LoadFrom и Activator.CreateInstance.

  • В качестве окончательного набора свидетельств для разрешения политики используется неизмененное входное свидетельство. К методам, использующим такую модель, относятся Assembly.Load(byte[]) и AppDomain.DefineDynamicAssembly().

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

  • Добавить запрос разрешения для всех разрешений, которые должны быть у кода, и заранее обрабатывать сбои загрузки, которые происходят, если такие разрешения не предоставляются.

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

    Примечание.

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

В момент загрузки свидетельство сборки используется в качестве входных данных для политики безопасности. Политика безопасности устанавливается администратором предприятия и компьютера, а также параметрами политики пользователя и определяет набор разрешений, предоставленных всем управляемым кодом при выполнении. Политику безопасности можно установить для издателя сборки (если она создана сигнатурой средства подписи), для веб-сайта и зоны (которая была концепцией интернет-Обозреватель), из которой была скачана сборка или для строгого имени сборки. Например, администратор компьютера может установить политику безопасности, разрешающую всему коду, загруженному с веб-узла и подписанному определенной компанией-производителем программного обеспечения, иметь доступ к базе данных на компьютере, но запрещающую запись на диск компьютера.

Сборки со строгими именами и средства подписывания

Предупреждение

Строгие имена не являются средством обеспечения безопасности. Они служат только для однозначной идентификации.

Сборку можно подписать двумя разными, но взаимодополняющими способами: с помощью строгого имени или с помощью SignTool.exe (программы подписывания). При подписи сборки строгим именем в файл, содержащий манифест сборки, добавляется зашифрованный открытый ключ. Подпись строгим именем гарантирует уникальность имени, предотвращает подмену имени и после разрешения ссылки предоставляет вызывающему объекту определенное удостоверение.

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

Можно присвоить сборке и строгое имя, и цифровую подпись, созданные с помощью SignTool.exe (программы подписывания), или можно использовать их по отдельности. При использовании средств подписи можно подписывать одновременно только один файл; для сборки, состоящей из нескольких файлов, подписывается файл, содержащий манифест сборки. Строгое имя хранится в файле, содержащем манифест сборки, но цифровая подпись, созданная с помощью SignTool.exe (программы подписывания), хранится в зарезервированном месте переносимого исполняемого (PE) файла, содержащего манифест сборки. Подпись сборки с помощью SignTool.exe (программы подписывания) может использоваться (со строгим именем или без него), когда уже существует иерархия доверия, основанная на подписях SignTool.exe (программы подписывания), или когда в политике используется только часть ключа и не проверяется цепочка доверия.

Примечание.

При использовании для сборки как строгого имени, так и подписи сначала необходимо назначить строгое имя.

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

Строгое именование и подпись с помощью SignTool.exe (программы подписывания) гарантируют целостность благодаря цифровым подписям и сертификатам. Все технологии, упоминание, то есть хэш-проверка, строгое именование и подписывание с помощью SignTool.exe (средство подписи), работают вместе, чтобы гарантировать, что сборка не была изменена каким-либо образом.

См. также