Полномочия кода
Защита по правам доступа кода основана на концепции разрешений. Каждое разрешение соответствует праву на доступ кода к защищенному ресур-например к файлу, каталогу или записи в реестре, либо праву на выполнение защищенной операции вроде вызова неуправляемого кода. Код может затребовать определенные разрешения, а политика безопасности исполняющей среды определяет, какие из них можно выдать. Полный список разрешений см. в «Code Access Permissions» (http://msdn.microsoit.com/ library/еп-us/cpguide/html/cpconcodeaccesspermissions. asp).
.NET позволяет администраторам назначать приложениям предопределенный набор разрешений. Эти наборы различаются в зависимости от уровня доверия к приложению. По умолчанию уровень доверия зависит от цифровой подписи кода, источника и местонахождения приложения.
Так, приложения, выполняемые на UNC-pecypce (в зоне безопасности Intranet), получают набор разрешений Local Intranet, а приложения, рабо-тающио на локальном компьютере (в зоне безопасности MyCompuici), — набор разрешений FullTrust.
WebnpH.io/Kemm ASP.NET можно настраивать еще детальнее, присваивая им уровни доверия. Для этого служат элементы <;?usп> в конфигурационном файле.
<trust level^Fuii | High | Low | None" originUrl= urf />
Каждый уровень присваивает приложению разрешения, состав которых определен в XML-файле политики безопасности. Каждый уровень сопоставлен со своим файлом. Сопоставления по умолчанию в ASP.NET таковы.
• High (Высокий) — соответствуетweb. highiiust.config. Разрешения этого уровня предоставляют приложению права на доступ для чтения и записи в каталог приложения (в зависимости от разрешений, определенных в операционной системе) и позволяют ему заменять объект участника аутентификации (authentication principal object). Кроме того, они запрещают приложению вызывать неуправляемый код.
• Low (Низкий) — соответствует we h iowtrust.coiifig. Этот уровень позволяет читать каталог приложения и ограничивает сетевые соединения. Приложения могут подключаться к своему хост-сайту при условии правильной настройки атрибута originUrl элемента <trust>.
• None (Нет) — соответствует^е1\_по1п^иоппд. Этот уровень предоставляет базовые разрешения на выполнение кода и позволяет приложению использовать изолированное хранилище (механизм, который дает возможность безопасно код с сохраненными данными).
Заметьте, что с уровнем доверия Full не связан какой-либо конфигурационный файл, поскольку этот уровень позволяет приложению использовать все ресурсы (в зависимости от разрешений, определенных в операционной системе), что равносильно его выполнению без CAS (хотя для управляемого кода CAS отключить нельзя). Вы можете переопределить эти сопоставления в элементе <securityPolicy> конфигурационного файла, а также настроить и расширить каждый уровень. Или создать собственные уровни с произвольным набором разрешений. Набор сопоставлений, заданных в <securityPolicy> по умолчанию, показан ниже.
<securityPolicy>
<trustl_evel name="Full" policyFile="internal" /> <trustLevel name="High" policyFile="web_hightrust.config" /> <trustl_evel name="Low" policyFile="webriowtrust.config" /> <trustLevel name="None" policyFile="web_notrust.conflg" />
</securityPoliQy>
Блокировка конфигурационных параметров
Конфигурация ASP.NET имеет иерархическую природу, и конфигурационные файлы могут располагаться на уровне компьютера, приложения и субприложения. Конфигурационные файлы нижних уровней могут переопределять параметры конфигурационных файлов верхних уровней и включать дополнительную конфигурационную информацию. Хотя такая структура обеспечивает высокую гибкость, администраторам может потребоваться блокировка конфигурационных параметров и запрет на их
изменение конкретными приложениями. Так, администратор Web-сайта может указать уровень защиты по правам доступа кода и запретить его изменение в отдельных приложениях. Для этого служит элемент <loeatK>n> в сочетании с атрибутом allowOverride.
Например, администратор Web-сайта хочет запретить вызовы неуправляемого кода. Следующий фрагмент конфигурационного файла демонстрирует, как блокировать параметры защиты для всего сайта и ограничить все приложения высоким уровнем доверия (не позволяющим вызывать неуправляемый код):
location path="somesitepath" allowOverride="false">
<trust level="high" originUrl="http://somesite.com" /> </location>
Атрибут path может ссылаться на сайт или виртуальный каталог и применяется к указанному каталогу и всем его подкаталогам. В примере, приведенном выше, при атрибуте allowOverride, равном false, приложения на сайте не смогут переопределять конфигурационные параметры, заданные в элементе <location>. Блокировать можно любые параметры — не только параметры защиты вроде уровней доверия.
Более подробные сведения см. по ссылкам:
• «Security in .NET: Enforce Code Access Rights with the Common Language Runtime* (http://msdn.microsoft.com/library/en-us/dnmagO 1/ htrnl/CAS.asp);
• «Code Access Security* (http://msdn.microsoft.com/Hbrary/en-us/cpgui-de/htmi/cpconcodeaccesspermissions.asp).
Защита на уровне каналов
Каналы передают сообщения через границы удаленно взаимодействующих AppDomain'oH, процессов и компыотерои. В .NET Framework есть два канала: HTTP и TCP.
Чтобы защитить конфиденциальную информацию, передаваемую по этим протоколам, используйте защищенный канал. Иначе с помощью программ сетевого мониторинга незашифрованную информацию легко перехватить и прочесть.
Вот некоторые из основных особенностей канальной защиты.
• HTTP-канал в IIS поддерживает передачу и прием данных, защищенных с помощью SSL SSL — наиболее распространенный механизм создания защищенного коммуникационного канала и настраивается в IIS,
• Даже при использовании незащищенного канала, например HTTP по порту 80 или TCP, вы можете вручную шифровать данные через Cryptographic API.
• Можно реализовать механизм канальной защиты ниже транспортного уровня. В Windows 2000 дая защиты данных при передаче прозрачно для приложения можно использовать Internet Protocol Security (IPSec).
• При использовании ASP.NET совместно с СОМ- или DCOM-компонентами и применении DCOM в качестве механизма удаленного взаимодействия обратите внимание на уровень аутентификации DC ОМ Packet Privacy, позволяющий шифровать данные, передаваемые через
DCOM.
Более подробные сведения см. по ссылкам:
• «Secure Web Conimimica!jo.is» в Microsoft Windows 2000 Server Resource Kit (Microsoft Press);
• спецификацию удаленного взаимодействия в «.NET Framework Developer Specifications* (http://msdn.microsoft.com/Hbrary/en-us/dndot-net/html/introremoting.asp);
• разделы MSDN по настройке защиты DCOM и NT.
Дополнительные сведения
Дополнительную информацию по вопросам безопасности, рассмотренным
в данном см. в:
• ^Understanding Digital Certificates* в Microsoft Windows 2000 Server Resource Kit (Microsoft Press);
• .NET Framework SDK (http://msdn.microsoft.com/library/en-us/net-start/html/sdkstartasp ) ;
• статыоСМ 58229 в Microsoft Knowledge Buse «INFO: Security Ramifications for IIS Applications» (http://support.microsoft.com/default.asp-x?scid=kb;en-us;158229);
• «A Blueprint for Building Web Sites Using the Microsoft Windows Platform* (http://msdn.microsoft.com/library/en-us/dndna/html/dnablue-
print.asp).
Подробнее о защите Web-сервисов см. по ссылкам:
• «Secure Web Services Using the SOAP Toolkit* (http://msdn.micro-soft.com/library/en-us/dnwebsrv/html/websvcs_usingsoap.asp);
• «Designing Secure Web-Based Applications for Microsoft Windows 2000»
(Microsoft Press);
• «Secure Internet Information Services 5 Checklist* (http://www.micro-
soft.com/TechNet/prodtechnol/iis/tips/iis5chk.asp);
• статью 0_1«75Ш; в Microsoft Knowledge Base «List of NTFS Permissions Required for IIS Site to Work» (http://support.microsoft.com/default.asp-x?scid=kb;en-us; 187506).
Общие сведения о защите см. в:
• «Microsoft Security* (lui р/ / www. mie n ..sou .com/sec u rit y ■ T
Благодарности
Выражаю глубокую признательность всем, кто внес свой вклад в подготовку этого документа, и рецензентам:
Rob Howard, Erik Olson, Venkat Chilakala, Michael Monteiro (Sapient), Suresh Kandula (Sapient), Chris Brooks, Edward Jezierski, Alex Mackman, Mikejenne, David Mowers, Amitabh Srivastava, Steve Busby, Kenny Jones.
Чтобы лучше освоить передовой опыт применения ,NI:T, вы можете обратиться к экспертам по технологиям в Центре технологий Microsoft в вашем регионе. За более подробной информацией, пожалуйста, обращайтесь на Web-страницу Microsoft Technology Centers (http://www.microsoft.com/ business/services/mtc .asp).

Безопасный код
