Управление доступом для кодаCode Access Security

Внимание!

Управление доступом для кода и частично доверенный кодCode Access Security and Partially Trusted Code

Платформа .NET Framework предоставляет механизм для принудительного применения различных уровней доверия к разным частям кода, выполняемым в одном и том же приложении. Этот механизм называется управлением доступом для кода.The .NET Framework provides a mechanism for the enforcement of varying levels of trust on different code running in the same application called Code Access Security (CAS). Управление доступом для кода в .NET Framework не следует использовать в качестве механизма обеспечения границ безопасности на основе происхождения кода или других аспектов, связанных с удостоверениями.Code Access Security in .NET Framework should not be used as a mechanism for enforcing security boundaries based on code origination or other identity aspects. Мы обновляем рекомендации с учетом того, что управление доступом для кода и прозрачный для системы безопасности код не будут поддерживаться в качестве механизма безопасности при работе с частично доверенным кодом, особенно с кодом неизвестного происхождения.We are updating our guidance to reflect that Code Access Security and Security-Transparent Code will not be supported as a security boundary with partially trusted code, especially code of unknown origin. Мы не рекомендуем загружать и выполнять код из неизвестных источников, не предприняв дополнительные меры безопасности.We advise against loading and executing code of unknown origins without putting alternative security measures in place.

Эта политика действует в отношении всех версий платформы .NET Framework, кроме платформы .NET Framework в составе Silverlight.This policy applies to all versions of .NET Framework, but does not apply to the .NET Framework included in Silverlight.

Современные, в высокой степени взаимосвязанные компьютерные системы часто подвержены воздействию кода из разных, иногда неизвестных источников.Today's highly connected computer systems are frequently exposed to code originating from various, possibly unknown sources. Код можно вложить в электронную почту, содержащуюся в документах или скачать через Интернет.Code can be attached to email, contained in documents, or downloaded over the Internet. К сожалению, многие пользователи уже на собственном опыте испытали действие небезопасного кода, включая вирусы и черви, который может повреждать и уничтожать данные, приводя к потере времени и денег.Unfortunately, many computer users have experienced firsthand the effects of malicious mobile code, including viruses and worms, which can damage or destroy data and cost time and money.

Большинство распространенных механизмов обеспечения безопасности предоставляют пользователям права на основе их учетных данных (обычно это пароль), и ограничивают доступ пользователей к ресурсам (как правило, папкам и файлам).Most common security mechanisms give rights to users based on their logon credentials (usually a password) and restrict resources (often directories and files) that the user is allowed to access. Однако этот подход неспособен решить некоторые проблемы: пользователи получают код из множества источников, некоторые из которых могут быть ненадежными; код может содержать ошибки или уязвимые места, которые могут использоваться вредоносным кодом. Кроме того, код в некоторых случаях может выполнять действия без ведома пользователя.However, this approach fails to address several issues: users obtain code from many sources, some of which might be unreliable; code can contain bugs or vulnerabilities that enable it to be exploited by malicious code; and code sometimes does things that the user does not know it will do. В результате возможно повреждение компьютерных систем и утечка конфиденциальных данных, когда осмотрительные и благонадежные пользователи запускают вредоносное или содержащее множество ошибок программное обеспечение.As a result, computer systems can be damaged and private data can be leaked when cautious and trustworthy users run malicious or error-filled software. Для выполнения кода большинство механизмов безопасности, применяемых в операционных системах, требуют, чтобы каждая его часть была полностью доверенной, кроме, возможно, сценариев на веб-страницах.Most operating system security mechanisms require that every piece of code must be completely trusted in order to run, except perhaps for scripts on a Web page. Таким образом, необходим механизм безопасности с широкой областью применения, позволяющий коду, полученному от одной компьютерной системы, безопасно выполняться в другой системе даже при отсутствии отношений доверия между этими системами.Therefore, there is still a need for a widely applicable security mechanism that allows code originating from one computer system to execute with protection on another system, even when there is no trust relationship between the systems.

В целях защиты компьютерных систем от вредоносного мобильного кода, обеспечения возможности безопасного исполнения кода, поступившего из неизвестных источников, и защиты доверенного кода от преднамеренного или случайного нарушения безопасности платформа .NET Framework предлагает механизм безопасности, называемый управлением доступом для кода.The .NET Framework provides a security mechanism called code access security to help protect computer systems from malicious mobile code, to allow code from unknown origins to run with protection, and to help prevent trusted code from intentionally or accidentally compromising security. Управление доступом для кода позволяет определять разные уровни надежности для кода, в зависимости от происхождения и других параметров его удостоверения.Code access security enables code to be trusted to varying degrees depending on where the code originates and on other aspects of the code's identity. Управление доступом для кода также обеспечивает соблюдение различных уровней доверия для кода, минимизируя количество кода, для выполнения которого требуется полное доверие.Code access security also enforces the varying levels of trust on code, which minimizes the amount of code that must be fully trusted in order to run. С помощью управления доступом для кода можно снизить вероятность того, что код будет использован не по назначению вредоносным или содержащим множество ошибок кодом.Using code access security can reduce the likelihood that your code will be misused by malicious or error-filled code. Оно может также ограничить вашу ответственность, так как вы можете указать для кода набора операций, разрешенных к выполнению.It can reduce your liability, because you can specify the set of operations your code should be allowed to perform. Управление доступом для кода помогает также снизить уровень возможного ущерба от уязвимых мест в коде.Code access security can also help minimize the damage that can result from security vulnerabilities in your code.

Примечание

В .NET Framework 4 были внесены значительные изменения в систему управления доступом для кода.Major changes have been made to code access security in the .NET Framework 4. Наиболее заметным изменением является прозрачность безопасности, но существуют и другие существенные изменения, влияющие на управление доступом для кода.The most notable change has been security transparency, but there are also other significant changes that affect code access security. Сведения об этих изменениях см. в разделе изменения в системе безопасности.For information about these changes, see Security Changes.

Управление доступом для кода в основном затрагивает код библиотек и приложения с частичным доверием.Code access security primarily affects library code and partially trusted applications. Разработчики библиотек должны защищать свой код от несанкционированного доступа из приложений с частичным доверием.Library developers must protect their code from unauthorized access from partially trusted applications. Приложения с частичным доверием — это приложения, загружаемые из внешних источников, например Интернета.Partially trusted applications are applications that are loaded from external sources such as the Internet. Приложения, установленные на локальном компьютере или в локальной интрасети, выполняются с полным доверием.Applications that are installed on your desktop or on the local intranet run in full trust. Безопасность приложений с полным доверием не влияет на управление доступом для кода, если они не помечены как прозрачные для безопасности, так как они являются полностью доверенными.Full-trust applications are not affected by code access security unless they are marked as security-transparent, because they are fully trusted. Единственное ограничение для приложений с полным доверием состоит в том, что приложения с атрибутом SecurityTransparentAttribute не могут вызывать код, помеченный атрибутом SecurityCriticalAttribute.The only limitation for full-trust applications is that applications that are marked with the SecurityTransparentAttribute attribute cannot call code that is marked with the SecurityCriticalAttribute attribute. Приложения с частичным доверием должны запускаться в "песочнице" (например, в браузере Internet Explorer), чтобы к ним применялось управление доступом для кода.Partially trusted applications must be run in a sandbox (for example, in Internet Explorer) so that code access security can be applied. Если вы загрузили приложение из Интернета и попытаетесь запустить его с рабочего стола, вы получите NotSupportedException ответ с сообщением: "Предпринята попытка загрузить сборку из сетевого расположения, что привело бы к тому, что сборка была изолирована в предыдущих версиях .NET Framework.If you download an application from the Internet and try to run it from your desktop, you will get a NotSupportedException with the message: "An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. Этот выпуск .NET Framework не включает политику CAS по умолчанию, поэтому данная загрузка может быть опасной".This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous." Если вы уверены, что приложение может быть доверенным, можно включить его для выполнения с полным доверием с помощью <элемента лоадфромремотесаурцес >.If you are sure that the application can be trusted, you can enable it to be run as full trust by using the <loadFromRemoteSources> element. Сведения о запуске приложения в песочнице см. в разделе как Выполнение не вполне безопасного кода в изолированной среде.For information about running an application in a sandbox, see How to: Run Partially Trusted Code in a Sandbox.

Любой управляемый код, предназначенный для среды CLR, получает преимущества управления доступом для кода, даже если он не выполняет ни одного вызова управления доступом для кода.All managed code that targets the common language runtime receives the benefits of code access security, even if that code does not make a single code access security call. Дополнительные сведения см. в разделе Основы управления доступом для кода.For more information, see Code Access Security Basics.

Ключевые функции управления доступом для кодаKey Functions of Code Access Security

Управление доступом для кода помогает ограничить доступ кода к защищенным ресурсам и операциям.Code access security helps limit the access that code has to protected resources and operations. В.NET Framework управление доступом для кода выполняет следующие функции:In the .NET Framework, code access security performs the following functions:

  • Определяет разрешения и наборы разрешений, представляющих право доступа к различным системным ресурсам.Defines permissions and permission sets that represent the right to access various system resources.

  • Дает возможность представить в коде требование, чтобы вызывающие его объекты имели какие-то конкретные разрешения.Enables code to demand that its callers have specific permissions.

  • Дает возможность представить в коде требование, чтобы вызывающие объекты имели цифровую сигнатуру, позволяя таким образом вызывать защищенный код только пользователям из конкретной организации или веб-узла.Enables code to demand that its callers possess a digital signature, thus allowing only callers from a particular organization or site to call the protected code.

  • Вводит ограничения кода во время выполнения, сравнивая предоставленные разрешения каждого участника в стеке вызовов с разрешениями, которые участники должны иметь.Enforces restrictions on code at run time by comparing the granted permissions of every caller on the call stack to the permissions that callers must have.

Обход стека вызоваWalking the Call Stack

Чтобы определить, разрешен ли коду доступ к ресурсу или выполнение операции, система безопасности среды выполнения обходит стек вызовов, сравнивая разрешения, выданные каждому вызывающему объекту, с затребованными разрешениями.To determine whether code is authorized to access a resource or perform an operation, the runtime's security system walks the call stack, comparing the granted permissions of each caller to the permission being demanded. Если какой-либо вызывающий объект в стеке вызовов не имеет запрашиваемого разрешения, создается исключение безопасности и ему отказывается в доступе.If any caller in the call stack does not have the demanded permission, a security exception is thrown and access is refused. Обход стека вызовов предназначен для предотвращения отвлекающих атак, когда менее доверенный код вызывает более доверенный и использует его для выполнения неправомочных действий.The stack walk is designed to help prevent luring attacks, in which less-trusted code calls highly trusted code and uses it to perform unauthorized actions. Требование разрешений от всех вызывающих объектов во время выполнения влияет на производительность, но необходимо для защиты кода от отвлекающих атак со стороны менее доверенного кода.Demanding permissions of all callers at run time affects performance, but it is essential to help protect code from luring attacks by less-trusted code. Для повышения производительности можно заставить код выполнять меньше обходов стека. Однако вы должны быть уверены, что при этом в системе безопасности не возникнет уязвимостей.To optimize performance, you can have your code perform fewer stack walks; however, you must be sure that you do not expose a security weakness whenever you do this.

На рисунке ниже показан обход стека, происходящий, когда метод сборки A4 требует, чтобы вызывающие его объекты обладали разрешением P.The following illustration shows the stack walk that results when a method in Assembly A4 demands that its callers have permission P.

Управление доступом для кодаCode access security
Обход стека безопасностиSecurity stack walk

ЗаголовокTitle ОписаниеDescription
Основы управления доступом для кодаCode Access Security Basics Описывается управление доступом для кода и распространенные способы его использования.Describes code access security and its most common uses.
Прозрачный для системы безопасности код, уровень 2Security-Transparent Code, Level 2 Описывает модель прозрачности безопасности в .NET Framework 4.Describes the security transparency model in the .NET Framework 4.
Использование библиотек из частично доверенного кодаUsing Libraries from Partially Trusted Code Описывается, как предоставить доступ к библиотекам и использовать их из неуправляемого код.Describes how to enable libraries for use with unmanaged code and how to use libraries from unmanaged code.
Основные понятия безопасностиKey Security Concepts Обзор многих ключевых терминов и принципов, используемых в системе безопасности .NET Framework.Provides an overview of many of the key terms and concepts used in the .NET Framework security system.
Безопасность на основе ролейRole-Based Security Описывается использование безопасности на основе ролей.Describes how to incorporate security based on roles.
Cryptographic ServicesCryptographic Services Описывается использование шифрования в приложениях.Describes how to incorporate cryptography into your applications.