Invest-currency.ru

Как обезопасить себя в кризис?
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Access code что это

.NET Framework 4.0. Code Access Security

Отсекая лишнее

Автор: Щербунов Нейл Анатольевич
Источник: RSDN Magazine #4-2010
Опубликовано: 15.12.2010
Исправлено: 10.12.2016
Версия текста: 1.0

Введение.

Вопросы безопасности почти всегда являются сложнейшим компонентом любой IT-системы, будь то системы операционные, управления реляционными базами данных (более известные как СУБД), или, как в случае данной статьи, платформы разработки и построения прикладного программного обеспечения. Непростым делом является глубокое понимание этого компонента в любой из обозначенных систем, а грамотная его реализация является, с моей точки зрения, некой «печатью» (hallmark, как выражаются наши коллеги на англоязычных форумах) заверяющей высочайшую квалификацию разработчика или команды, такое приложение создавших. Дело усугубляется еще и тем, что в типичном сценарии обсуждаемый вопрос находится на стыке «зон ответственности»: мало того, что приложение должно быть грамотно «обезопасено» тем самым квалифицированным разработчиком, так еще на целевой машине ее администратор (желательно не менее квалифицированный) должен настроить не менее безопасное окружение, в котором это приложение будет выполняться. Потому как если последний возьмет на вооружение простой и понятный (хоть и совершенно неправильный) подход «всем можно все», то можно уверенно сказать: разработчик зря потратил недели и месяцы своего труда, настраивая и проверяя все нюансы безопасной работы своего приложения. Администратор может быть также приверженцем противоположного подхода, который утрировано можно выразить как «никому нельзя ничего». Кстати, вполне здравый подход, по крайней мере как первая фаза построения безопасной IT-инфраструктуры предприятия. Как бы то ни было, разработчику, пишущему код управления безопасностью приложения, все время приходится держать в голове вопросы типа «а что такого может выставить в настройках администратор целевой машины, что вся моя стройная система перестанет работать»?

В .NET Framework, одной из систем, подверженных все тем же трудностям security-«состыковки», с самого начала было приложено очень немало усилий, дабы совместная работа двух обозначенных выше IT-профессионалов протекала максимально гладко, но не в ущерб безопасности кода как такового. Был разработан даже целый новый «вектор» приложения усилий в этом направлении – Code Access Security (он же CAS), авторизующий на доступ к защищаемому ресурсу не пользователя (классический подход), а сам код как таковой. Идея была зело хороша, а вот ее реализация… Ну, скажем так, получилась неоднозначной. Почему оно так получилось, пойдет речь в следующей главе, Code Access Security, начало. Но, как бы то ни было, все так и катилось вплоть до последней, 4-й версии платформы .NET Framework, в которой CAS получил буквально второе рождение, так как, фактически, был пересмотрен и перестроен чуть ли не с самого фундамента. Самое главное, с точки зрения автора, что “CAS ver. 4.0” стал гораздо понятнее, а вследствие того, гораздо практичнее для применения даже в относительно простых проектах, авторы которых до того не считали возможным применения этого механизма в силу как сложности его реализации, так и последующей поддержки на конечной машине. В новой версии была пересмотрена сама идеология ограничения доступа к коду и, что приятно, удалены множественные сущности, фигурировавшие в предыдущих версиях этой технологии, и делающие ее столь сложной для изучения. Новый вариант CAS-безопасности значительно компактнее, логичнее, более управляем, да и просто более “прозрачен”.

В данной статье автор сначала кратко рассмотрит архитектуру CAS версий предыдущих (до 4.0), дабы читатели «со стажем» могли вспомнить (а может, и просто узнать) исходную точку, с которой все началось. После такого легкого «экскурса в прошлое» мы перейдем к Code Access Security в версии .NET 4.0 и сравним – что же нового появилось и, что может даже важнее, что же было удалено из этой подсистемы безопасности. Нас также ждут довольно интенсивные практические работы с кодом (все примеры написаны на C#), призванные полнее раскрыть концепции нового подхода и показать «подводные камни» его применения к реальным приложениям. Не обойдется и без этаких «мини-тестов», когда надо будет предсказать поведение демонстрационного приложения без его запуска. Правильный ответ подтвердит корректное понимание теории того или иного аспекта безопасного кода. Разумеется, после ответа «вслепую» нужно запустить приложение и проверить догадку практикой.

Надеюсь, что знакомство с «новым-старым» инструментом безопасности будет приятным и, самое главное, понятным для читателей практически любого уровня знакомства с платформой .NET как версии текущей, так и любой из предыдущих. Разумеется, автор не рискнет предложить данную статью как базовый учебник C#/.NET Framework, все же вопросы безопасности всегда входили (и продолжают) в категорию «advanced». Тем не менее, материал будет излагаться настолько простым языком, насколько это в принципе возможно при изложении непростых концепций. Интересного и познавательного чтения!

Code Access Security, начало

Давайте бросим беглый взгляд на дела «давно минувших дней» и постараемся очень кратко обрисовать вопрос – как все было раньше? Хотя, возможно, более правильно даже сказать «как есть сейчас»? Поскольку .NET 4-й еще не настолько «заматерел», чтобы безоговорочно выпихнуть из сектора разработки ПО своих младших собратьев… Ну, как бы то ни было, но вплоть до последней версии платформы компонент CAS оперировал несколькими основополагающими сущностями:

  • Свидетельство или доказательство (оно же evidence) – характерная черта, «метка» сборки (assembly), которой она пытается убедить среду исполнения CLR в своей принадлежности той или иной кодовой группе (code group). Бывает двух основных типов: происхождение сборки (пример – URL или Zone) и подпись сборки (пример – Strong Name или Hash).
  • Кодовая группа (она же code group) – «мостик» между доказательством и связанным с ним набором разрешений (set of permissions, permissions set). Все сборки, попавшие в данную кодовую группу, будут иметь одинаковые полномочия (полномочия как раз и есть те самые наборы). Framework поставляется с несколькими предопределенными группами (пример – Internet_Zone или Restricted_Zone).
  • Условие членства (оно же membership conditions) – атрибут кодовой группы. Сообщает, какие именно свидетельства должна предоставить сборка, претендующая на свою включение в ту кодовую группу, к которой относится данный membership conditions. Скажем, предопределенная группа ‘Microsoft Strong Name’ имеет в качестве условия членства в ней наличие у сборки строгого имени, присвоенного компанией Microsoft. Если у загружаемой сборки таковой подписи не наблюдается – у нее нет ни единого шанса попасть в столь уважаемую кодовую группу.
  • Набор разрешений (он же set of permissions или permissions set) – контейнер, содержащий одно и более разрешение (permission). И снова, Framework поставляется с несколькими предопределенными наборами (пример – Internet или Everything);
  • Разрешение (оно же permission) – центральная, пожалуй, сущность всей технологии. Это то, что должна иметь сборка, желающая получить доступ к критичным (с точки зрения безопасности) ресурсам системы. И, как вы уже догадываетесь или просто знаете, Framework вновь поставляется с целой россыпью таких разрешений (например, FileIOPermission или RegistryPermission).

Далее, чтобы все это хозяйство себя проявило, и мы получили бы с него реальные выгоды, требовались усилия двух человек как минимум – разработчика и администратора. Первый применял CAS в своем коде двумя путями:

Код доступа безопасности — Code Access Security

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

содержание

Доказательства

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

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

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

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

политика

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

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

Первые три политики хранятся в XML — файлах и управляются с помощью инструментов конфигурации .NET 1.1 (Mscorcfg.msc). Заключительная политика осуществляется через код для текущего домена приложения.

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

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

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

код группы

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

требования

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

Ссылка на основную публикацию
Adblock
detector