Безопасность доступа к коду
Безопасность доступа к коду (CAS) в платформе Microsoft .NET — это решение Microsoft, позволяющее предотвратить выполнение привилегированных действий ненадежным кодом. Когда CLR загружает сборку, она получает свидетельство о сборке и использует его для определения группы кода , к которой принадлежит сборка. Группа кода содержит набор разрешений (одно или несколько разрешений ). Код, выполняющий привилегированное действие, выполнит запрос доступа к коду , что заставит CLR пройти вверх по стеку вызовов и проверить набор разрешений, предоставленный сборке каждого метода в стеке вызовов. Группы кодов и наборы разрешений определяются администратором машины, который определяет политику безопасности . Microsoft считает CAS устаревшим и не рекомендует его использовать. [1] Он также недоступен в .NET Core и .NET.
Доказательство
[ редактировать ]Доказательством может быть любая информация, связанная со сборкой. Свидетельствами по умолчанию, которые используются защитой доступа к коду .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 1.1 (mscorcfg.msc). Окончательная политика администрируется посредством кода для текущего домена приложения.
Безопасность доступа к коду представит доказательства сборки для каждой политики, а затем примет пересечение (то есть разрешения, общие для всех сгенерированных наборов разрешений) в качестве разрешений, предоставленных сборке.
По умолчанию политики Enterprise, User и AppDomain предоставляют полное доверие (то есть позволяют всем сборкам иметь все разрешения), а политика Machine является более ограничительной. Поскольку пересечение занято, это означает, что окончательный набор разрешений определяется политикой Machine.
Обратите внимание, что система политик была исключена из .NET Framework 4.0. [2]
Группа кодов
[ редактировать ]Группы кода связывают часть доказательства с именованным набором разрешений. Администратор использует инструмент настройки .NET, чтобы указать конкретный тип свидетельства (например, «Сайт») и конкретное значение для этого свидетельства (например, www.mysite.com), а затем определяет набор разрешений, к которым будет относиться группа кода. предоставленный.
Требования
[ редактировать ]Код, выполняющий какое-либо привилегированное действие, потребует одно или несколько разрешений. Требование заставляет CLR пройти по стеку вызовов, и для каждого метода CLR будет гарантировать, что требуемые разрешения находятся в предоставленных разрешениях сборки метода. Если разрешение не предоставлено, исключение генерируется безопасности. Это не позволяет загруженному коду выполнять привилегированные действия. Например, если сборка загружена с ненадежного сайта, у сборки не будет никаких разрешений на ввод-вывод файлов, и поэтому, если эта сборка попытается получить доступ к файлу, она выдаст исключение, предотвращающее вызов.