Безопасность приложений в Microsoft .NET. Часть 2

Павел Исаев

Разрешения для приложений

Модификация политик безопасности

Примеры приложений с использованием запросов безопасности

 

В первой части данной статьи, опубликованной в № 6 нашего журнала, мы рассмотрели модели безопасности платформы Microsoft .NET, классы для регламентации доступа к защищенным ресурсам, а также ролевую модель безопасности. Теперь мы расскажем об установке разрешений для приложений и о модификации политик безопасности, а также приведем примеры приложений с использованием запросов безопасности.

Разрешения для приложений

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

Местные настройки безопасности компьютера в конечном счете определяют, какие разрешения будут получены для управляемого кода. Поскольку от компьютера к компьютеру эти настройки могут меняться, никогда нельзя быть уверенным, что код получит достаточно разрешений для своего функционирования во время выполнения. Поэтому каждый разработчик должен быть знаком с основными концепциями безопасного доступа к коду для написания приложений, эффективно взаимодействующих с CLR.

Взаимодействие с системой безопасности во время выполнения осуществляется за счет императивных и декларативных вызовов функций системы. Декларативные вызовы осуществляются путем применения атрибутов, а императивные — экземпляров классов, поддерживающих информационную безопасность. Вызовы функций безопасности могут быть только императивными или и одновременно теми и другими.

Поскольку большинство ресурсов защищено в соответствии с предопределенными политиками безопасности, то можно предположить, что у разработчиков редко будет появляться потребность в новых функциях. При выполнении кода во время доступа к ресурсам делается соответствующая проверка разрешений на его право выполнять эти операции. Поэтому главная задача разработчика состоит в документировании используемых разрешений и в обеспечении адекватного поведения кода в контексте принятых политик безопасности. Это достигается при помощи запросов на разрешение и с помощью инструментов, обеспечивающих конфигурирование безопасности. В таблице перечисляются инструменты и утилиты, поддерживающие безопасность.

 

Инструменты для поддержки безопасности в .NET

Необходимо добавить атрибуты в файл с именем AssemblyInfo вашего проекта для осуществления запроса на разрешения. Эти атрибуты могут быть записаны в метаданные сборки. Они проверяются, когда сборка загружается.

Существует три вида запросов на разрешения:

  • минимальные разрешения (Request Minimum) — минимально необходимый для работы сборки набор разрешений. Если такие разрешения не получены, система (.NET Framework) не выполняет сборку и создает исключение политики безопасности. Если минимальные разрешения не получены, это эквивалентно набору разрешений с именем Nothing;
  • необязательные разрешения (Request Optional) — набор разрешений, которые сборка может использовать, но она также может выполняться, если разрешения не предоставлены. Если необязательные разрешения не получены, это эквивалентно набору FullTrust. Хорошей практикой является создание сборки без разрешений, вместо того чтобы использовать необязательные разрешения (если они ей действительно не нужны). Это позволит предотвратить получение кодом дополнительных разрешений, и он выполнится с минимальным количеством привилегий;
  • отказ от разрешений (Request Refused) — выполнение запроса приводит к тому, что сборка лишается всех разрешений даже в том случае, если они у нее были. Выполнение этого запроса эквивалентно набору Nothing.

Разрешения, которые сборка фактически получает, — результат выполнения следующей формулы:

,

где FG — конечный результат; SP — разрешения, установленные для сборки политикой безопасности, пересеченные с M — минимальным разрешением, объединенным с O — необязательным разрешением, без R — запросов типа «отказ от разрешений».

Как уже говорилось, для выполнения запросов на разрешения необходимо в файл проекта AssemblyInfo.cs добавить один или несколько атрибутов. Параметры атрибутов зависят от формы запроса, который вы хотите осуществить. Обычно разрешения предоставляются в соответствии с одним из вызываемых методов экземпляра класса SecurityAction (RequestMinimum, RequestOptional или RequestRefused). Приведем фрагмент кода, который может быть размещен в файле с именем AssemblyInfo.cs в случае программирования на языке C#:

 

1. // Эти атрибуты могут быть добавлены

// в файл AssemblyInfo.cs

// Запрос на специальные разрешения

[assembly:UIPermission(

SecurityAction.RequestMinimum,

Window = UIPermissionWindow.SafeTopLevelWindows)]

// Запрос на минимальные разрешения

[assembly:PermissionSet(

SecurityAction.RequestMinimum,

Name = “LocalIntranet”)]

// Запрос на необязательные разрешения

[assembly:PermissionSet(

SecurityAction.RequestOptional,

Unrestricted = false)]

2. // Для корректной обработки исключений, которые

// могут возникнуть, если в процессе выполнения

// сборки не будут предоставлены разрешения,

// необходимо добавить в код модуля их обработку

using System.Security;

using System.IO;

FileStream fs = null;

try

{

// open a file for reading

fs = new FileStream(“C:\\log.txt”,

FileMode.Open,

FileAccess.Read);

// read from file

}

catch (SecurityException se)

{

// display error message

MessageBox.Show(“ExceptionMessage: “ + se.Message);

}

 

В начало В начало

Модификация политик безопасности

В платформе .NET Framework для модификации политик безопасности используется Microsoft Management Console (MMC), которую можно запустить с закладки «Панель управления/Администрирование/ММС». Выбирая из дерева в левой стороне окна приложения необходимую группу, можно, зафиксировав необходимую зону, нажать правую клавишу мыши и, выбрав в появившемся меню опцию «Свойства», перейти к следующему окну.

 

Манипулируя закладками «Основная», «Условия членства», «Разрешения», можно менять политики безопасности для выбранной зоны.

 

Каждый выбранный тип кодовой группы имеет собственные наборы разрешений. Манипулируя списком разрешений на соответствующей закладке, можно просматривать списки стандартных для платформы разрешений.

 

Если вернуться к первому окну, выбрать кодовую группу, нажать правую клавишу мыши и выбрать опцию new, то можно запустить в работу мастер создания новой кодовой группы.

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

Помимо оконного, встроенного в систему приложения, описанного выше, при помощи консольной утилиты (Code Access Security — Caspol.exe) можно просматривать политики безопасности и манипулировать ими. Эта утилита поставляется с пакетом .NET Framework SDK или Microsoft Visual Studio .Net.

В начало В начало

Примеры приложений с использованием запросов безопасности

На компакт-диске в директориях: ..examples/Permission/fulltrust и ..examples/Permission/permissionrequest находятся исходные тексты двух проектов, рассмотрение которых позволит составить представление о возможностях среды Visual Studio .Net для написания приложений с использованием запросов безопасности.

 

Результат работы приложения из директории ..examples/Permission/fulltrust — окно с тремя кнопками. Первая кнопка работает с экземпляром класса IsolatedStorageFile (поддерживающим изолированную память), вторая — с экземпляром класса Environment (поддерживающим доступ к переменным окружения), последняя — с экземпляром класса FileStream (открытие файла). Во всех трех случаях производится унифицированная обработка исключений, инициируемых системой безопасности.

 

Для проекта из ..examples/Permission/fulltrust успешная обработка во всех трех случаях происходит в силу того, что приложение выполняется с набором разрешений под именем FullTrust (по умолчанию) и никаких запросов на разрешения не делается. Достаточно будет модифицировать файл проекта AssemblyInfo.cs, добавив в него атрибуты типа:

 

[assembly:EnvironmentPermission(SecurityAction.Request-

Minimum, Read = “USERNAME”)]

[assembly:FileIOPermission(SecurityAction.Request-

Minimum, All = “D:\\test.txt”)]

 

Функциональность приложения изменится, так как, например, в случае открытия файла указано разрешение только для диска D и т.п.

Читатели, интересующиеся подробностями, могут найти в вышеуказанной директории код, приводящий к подобным результатам. Он тривиален: фактически в запросе (несколько строк кода в файле AssemblyInfo.cs) указывается один из типов запросов, перечисленных в первой таблице в первой части статьи, а в тексте программы используются предустановленные классы с аналогичными названиями (как правило, без слова permission в названии), например IsolatedStorgeFilePermission и IsolatedStorgeFile.

 

В следующей части данной статьи мы рассмотрим получение информации о пользователях и группах пользователей в Microsoft .NET, а также некоторые примеры приложений, получающих и использующих подобную информацию.

КомпьютерПресс 8'2005

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует