Безопасность доступа кода - Code Access Security
Безопасность доступа кода (CAS), в Microsoft .NET рамки, это Microsoft решение для предотвращения выполнения привилегированных действий ненадежным кодом. Когда CLR загружает сборка он получит свидетельство для сборки и используйте это, чтобы определить кодовая группа которому принадлежит сборка. Группа кода содержит набор разрешений (один или несколько разрешения ). Код, выполняющий привилегированное действие, выполнит доступ кода требовать что заставит CLR подняться на стек вызовов и изучите набор разрешений, предоставленный сборке каждого метод в стеке вызовов. Группы кода и наборы разрешений определяются администратором машины, который определяет политика безопасности.
Свидетельство
Доказательством может быть любая информация, связанная со сборкой. Доказательствами по умолчанию, которые используются для защиты доступа к коду .NET, являются:
- Каталог приложения: каталог, в котором находится сборка.
- Издатель: цифровая подпись издателя сборки (требуется, чтобы сборка была подписана через Аутентикод ).
- URL: полный URL-адрес, с которого была запущена сборка
- Сайт: имя хоста URL / удаленного домена / VPN.
- Зона: зона безопасности, в которой находится сборка.
- Хеш: криптографический хэш сборки, который определяет конкретную версию.
- Строгое имя: комбинация имени сборки, версии и открытого ключа ключа подписи, используемого для подписи сборки. Ключ подписи - это не сертификат X509, а настраиваемая пара ключей, созданная инструментом строгого именования SN.EXE или Visual Studio.
Разработчик может использовать настраиваемое свидетельство (так называемое свидетельство сборки), но для этого необходимо написать сборку безопасности, а в версии 1.1[требуется разъяснение ] .NET это средство не работает.
Свидетельства, основанные на хеш-коде сборки, легко получить в коде. Например, в C #, доказательства могут быть получены с помощью следующего пункта кода:
это.GetType().сборка.Свидетельство
Политика
Политика - это набор выражений, которые используют свидетельства для определения членства в группе кода. Группа кода дает набор разрешений для сборок в этой группе. В .NET есть четыре политики:
- Enterprise: политика для семейства машин, которые являются частью Active Directory установка.
- Машина: политика для текущей машины.
- Пользователь: политика для вошедшего в систему пользователя.
- AppDomain: политика для домена исполняемого приложения.
Первые три политики хранятся в XML файлы и администрируются с помощью .NET Configuration Tool 1.1 (mscorcfg.msc). Окончательная политика администрируется с помощью кода для текущего домена приложения.
Безопасность доступа кода будет представлять свидетельство сборки для каждой политики и затем будет принимать пересечение (то есть разрешения, общие для всего сгенерированного набора разрешений) в качестве разрешений, предоставленных сборке.
По умолчанию политики Enterprise, User и AppDomain предоставляют полное доверие (то есть они позволяют всем сборкам иметь все разрешения), а политика Machine является более строгой. Поскольку пересечение взято, это означает, что окончательный набор разрешений определяется политикой компьютера.
Обратите внимание, что в .NET Framework 4.0 система политик исключена.[1]
Кодовая группа
Группы кода связывают часть свидетельства с именованным набором разрешений. Администратор использует .NET Configuration Tool, чтобы указать конкретный тип свидетельства (например, сайт) и конкретное значение для этого свидетельства (например, www.mysite.com), а затем определяет набор разрешений, который будет использоваться группой кода. предоставляется.
Требования
Код, выполняющий какое-либо привилегированное действие, потребует одного или нескольких разрешений. Требование заставляет CLR обходить стек вызовов, и для каждого метода среда CLR гарантирует, что требуемые разрешения находятся в предоставленных разрешениях сборки метода. Если разрешение не предоставлено, ценная бумага исключение брошен. Это не позволяет загруженному коду выполнять привилегированные действия. Например, если сборка загружается с ненадежного сайта, сборка не будет иметь никаких разрешений ввода-вывода файла, и поэтому, если эта сборка попытается получить доступ к файловому коду, безопасность доступа вызовет исключение, предотвращающее вызов.