Защита доступа к коду - Code Access Security

Безопасность доступа к коду (CAS) в платформе Microsoft .NET - это решение Microsoft для предотвращения выполнения привилегированных действий ненадежным кодом. Когда среда CLR загружает сборку, она получает свидетельство сборки и использует его для определения группы кода , к которой принадлежит сборка. Группа кода содержит набор разрешений (одно или несколько разрешений ). Код, выполняющий привилегированное действие, будет выполнять требование доступа к коду, что заставит CLR пройти вверх по стеку вызовов и проверить набор разрешений, предоставленных сборке каждого метода в стеке вызовов. Группы кода и наборы разрешений определяются администратором машины, который определяет политику безопасности .

Свидетельство

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

  • Каталог приложения: каталог, в котором находится сборка.
  • Издатель: цифровая подпись издателя сборки (требуется, чтобы сборка была подписана через Authenticode ).
  • URL : полный URL-адрес, с которого была запущена сборка.
  • Сайт: имя хоста URL / удаленного домена / VPN.
  • Зона: зона безопасности, в которой находится сборка.
  • Хеш : криптографический хеш сборки, который определяет конкретную версию.
  • Строгое имя: комбинация имени сборки, версии и открытого ключа ключа подписи, используемого для подписи сборки. Ключ подписи - это не сертификат X.509 , а настраиваемая пара ключей, созданная инструментом строгого именования SN.EXE или Visual Studio .

Разработчик может использовать настраиваемое свидетельство (так называемое свидетельство сборки), но для этого требуется написать сборку безопасности, а в версии 1.1 .NET это средство не работает.

Свидетельства, основанные на хэше сборки, легко получить в коде. Например, в C # свидетельство может быть получено с помощью следующего предложения кода:

this.GetType().Assembly.Evidence

Политика

Политика - это набор выражений, которые используют свидетельства для определения членства в группе кода. Группа кода предоставляет набор разрешений для сборок в этой группе. В .NET есть четыре политики:

  • Предприятие: политика для семейства машин, которые являются частью установки Active Directory .
  • Машина: политика для текущей машины.
  • Пользователь: политика для вошедшего в систему пользователя.
  • AppDomain: политика для домена исполняемого приложения.

Первые три политики хранятся в файлах XML и управляются с помощью .NET Configuration Tool 1.1 (mscorcfg.msc). Окончательная политика администрируется с помощью кода для текущего домена приложения.

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

По умолчанию политики Enterprise, User и AppDomain предоставляют полное доверие (то есть они позволяют всем сборкам иметь все разрешения), а политика Machine является более строгой. Поскольку пересечение занято, это означает, что окончательный набор разрешений определяется политикой компьютера.

Обратите внимание, что система политик была удалена в .NET Framework 4.0.

Кодовая группа

Группы кода связывают часть свидетельства с именованным набором разрешений. Администратор использует .NET Configuration Tool, чтобы указать конкретный тип свидетельства (например, сайт) и конкретное значение для этого свидетельства (например, www.mysite.com), а затем определяет набор разрешений, который будет использоваться группой кода. предоставляется.

Требования

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

использованная литература