Стратегия безопасности WPF — безопасность платформы

Хотя Windows Presentation Foundation (WPF) предоставляет множество служб безопасности, предусмотрена также возможность использования функций безопасности базовой платформы, включая операционную систему, CLR и Internet Explorer. Эти уровни объединяются, чтобы обеспечить в WPF надежную модель безопасности с глубокой защитой, которая будет пытаться исключить любые точки сбоя, как показано на следующем рисунке.

Diagram that shows the WPF security model.

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

Безопасность операционной системы

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

Microsoft Windows XP с пакетом обновления 2 (SP2)

В дополнение к общему обзору и усилению Windows существуют три ключевых компонента из Windows XP с пакетом обновления 2 (SP2), которые будут рассмотрены в этом разделе.

  • Компиляция /GS

  • Центр обновления Windows.

Компиляция /GS

Windows XP с пакетом обновления 2 (SP2) обеспечивает защиту путем перекомпиляции многих системных библиотек ядра, включая все зависимости WPF, такие как CLR, чтобы снизить вероятность переполнения буфера. Это достигается путем использования параметра /GS с компилятором командной строки C/C++. Несмотря на то, что следует явно избегать переполнения буфера, компиляция /GS представляет пример глубокой защиты против потенциальных угроз, созданных случайно или злонамеренно.

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

В общих чертах, флаг компилятора -GS защищает от некоторых потенциальных переполнений буфера путем добавления специального файла cookie безопасности для защиты адреса функции, которая содержит буферы локальных строк. После возврата функции cookie безопасности сравнивается со своим предыдущим значением. Если значение изменилось, то возможно, произошло переполнение буфера, и процесс будет остановлен с состоянием ошибки. Остановка процесса предотвращает выполнение потенциально вредоносного кода. Дополнительные сведения см. в разделе Параметр -GS (проверка безопасности буфера).

WPF компилируется с флагом -GS, чтобы добавить еще один уровень защиты для приложений WPF.

Windows Vista

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

Контроль учетных записей пользователей

Сегодня пользователи Windows предпочитают работать с правами администратора, так как многие приложения требуют такие права для установки или выполнения. Одним из примеров является возможность записи в реестр параметров приложения по умолчанию.

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

Один из способов защиты от этой угрозы безопасности состоит в запуске приложений с наименьшим количеством требуемых им привилегий. Этот способ называется принципом наименьших привилегий и является базовой функцией операционной системы Windows. Эта функция вызывается контролем учетных записей (UAC) и используется Windows UAC в двух основных случаях.

  • Для запуска большинства приложений с правами UAC по умолчанию, даже если пользователь является администратором; только приложения, требующие привилегий администратора, будут выполняться с привилегиями администратора. Для запуска с привилегиями администратора приложения должны быть явно отмечены либо в своем манифесте приложения, либо как запись в политике безопасности.

  • Для обеспечения решений совместимости, таких как виртуализация. Например, многие приложения пытаются выполнять запись в места с ограниченным доступом, такие как C:\Program Files. Для приложений, выполняющихся в рамках UAC, существует альтернативное расположение, для записи в которое не требуются права администратора. Для приложений, работающих в рамках UAC, UAC виртуализирует расположение C:\Program Files, и таким образом приложения считают, что выполняют запись в это расположение, но на самом деле запись выполняется в другое, пользовательское расположение. Такой вид работы совместимости позволяет операционной системе запускать многие приложения, которые ранее не могли работать в UAC.

Проверки целостности кода

Windows Vista включает более глубокие проверки целостности кода для предотвращения внедрения вредоносного кода в системные файлы или в ядро во время загрузки или выполнения. Это выходит за рамки защиты системных файлов.

Процесс с ограниченными правами для браузерных приложений

Браузерные приложения WPF выполняются в песочнице зоны Интернета. Интеграция WPF с Microsoft Internet Explorer расширяет эту защиту, включая дополнительную поддержку.

Предупреждение

Для работы XBAPs требуются устаревшие браузеры, такие как интернет-Обозреватель и Firefox. Эти старые версии браузера обычно не поддерживаются в Windows 10 и Windows 11. Современные браузеры больше не поддерживают технологию, необходимую для приложений XBAP из-за рисков безопасности. Подключаемые модули, поддерживающие XBAP, больше не поддерживаются.

Так как приложения браузера XAML (XBAP) обычно изолированы набором разрешений зоны Интернета, удаление этих привилегий не наносит вреда приложениям браузера XAML (XBAP) с точки зрения совместимости. Вместо этого создается дополнительный уровень глубокой защиты; если изолированное приложение сможет использовать другие уровни и перехватить процесс, этот процесс будет иметь только ограниченные привилегии.

См. раздел Использование учетных записей с наименьшими привилегиями.

Безопасность среды CLR

Среда CLR предлагает ряд ключевых преимуществ безопасности, включающих проверку, верификацию, управление доступом для кода (CAS) и методологию, критическую с точки зрения безопасности.

Проверка и верификация

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

Чтобы обеспечить безопасность типов, помочь предотвратить общие проблемы безопасности (например, переполнение буфера) и включить изолированную среду путем изоляции подпроцесса, система безопасности CLR использует концепцию верификации.

Управляемые приложения компилируются в язык MSIL. Когда методы в управляемом приложении выполняются, его MSIL-файлы компилируются в машинный код с помощью JIT-компиляции. JIT-компиляция включает процесс верификации, который применяет много правил безопасности и надежности, обеспечивающих, что код:

  • не нарушает контракты типов;

  • не вызывает переполнение буфера;

  • не имеет бесконтрольный доступ к памяти.

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

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

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

Клиентский компьютер предоставляет широкий спектр ресурсов, к которым может получить доступ управляемое приложение, включая файловую систему, реестр, службы печати, пользовательский интерфейс, отражение и переменные среды. Прежде чем управляемое приложение сможет получить доступ к любому из ресурсов на клиентском компьютере, оно должно иметь соответствующее разрешение .NET Framework. Разрешение в CAS является подклассом CodeAccessPermission; CAS реализует по одному подклассу для каждого ресурса, к которому управляемые приложения могут получать доступ.

Разрешения, которые CAS предоставляет управляемому приложению при запуске его выполнения, называются набором разрешений и определяются свидетельством, предоставляемым приложением. Для приложений WPF предоставляемое свидетельство — это расположение или зона, откуда запускаются приложения. CAS определяет следующие зоны:

  • Мой компьютер. Приложения запускаются с клиентского компьютера (полное доверие).

  • Локальная интрасеть. Приложения запускаются из интрасети (частичное доверие).

  • Интернет. Приложения запускаются из Интернета (минимальное доверие).

  • Доверенные веб-сайты. Приложения, идентифицированные пользователем как доверенные (минимальное доверие).

  • Веб-сайты без доверия. Приложения, идентифицированные пользователем как ненадежные (без доверия).

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

  • FullTrust. Для приложений, запускаемых из зоны Мой компьютер. Предоставляются все возможные разрешения.

  • LocalIntranet. Для приложений, запускаемых из зоны Локальная интрасеть. Подмножество разрешений предоставляется для обеспечения среднего уровня доступа к ресурсам на клиентском компьютере, включая изолированное хранилище, неограниченный доступ к пользовательскому интерфейсу, неограниченный доступ к диалогам для работы с файлами, ограниченное отражение, ограниченный доступ к переменным среды. Разрешения для критически важных ресурсов, таких как реестр, не предоставляются.

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

Приложениям, которые идентифицированы как происходящие из зоны Веб-сайты без доверия, CAS вообще не предоставляет разрешений. Следовательно, для них не существует предопределенный набор разрешений.

На следующем рисунке показана связь между зонами, наборами разрешений, разрешениями и ресурсами.

Diagram that shows CAS permission sets.

Ограничения песочницы безопасности зоны Интернета в равной степени применяются к любому коду, который XBAP импортирует из системной библиотеки, включая WPF. Это гарантирует, что каждый бит кода блокируется, даже WPF. К сожалению, чтобы иметь возможность выполнения, XBAP необходимо выполнять функции, которым требуется больше разрешений, чем те, которые включены в песочнице безопасности зоны Интернета.

Предупреждение

Для работы XBAPs требуются устаревшие браузеры, такие как интернет-Обозреватель и Firefox. Эти старые версии браузера обычно не поддерживаются в Windows 10 и Windows 11. Современные браузеры больше не поддерживают технологию, необходимую для приложений XBAP из-за рисков безопасности. Подключаемые модули, поддерживающие XBAP, больше не поддерживаются.

Рассмотрим приложение XBAP, в котором есть следующая страница.

FileIOPermission fp = new FileIOPermission(PermissionState.Unrestricted);
fp.Assert();

// Perform operation that uses the assert

// Revert the assert when operation is completed
CodeAccessPermission.RevertAssert();
Dim fp As New FileIOPermission(PermissionState.Unrestricted)
fp.Assert()

' Perform operation that uses the assert

' Revert the assert when operation is completed
CodeAccessPermission.RevertAssert()

Для выполнения этого приложения XBAP базовый код WPF должен выполнить больше функций, чем доступно вызываемому коду XBAP, в том числе:

  • создание дескриптора окна (HWND) для отрисовки;

  • диспетчеризацию сообщений;

  • загрузку шрифт Tahoma.

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

К счастью, WPF решает эту проблему, разрешая этим операциям выполняться с повышенными привилегиями от имени изолированного приложения. Хотя все операции WPF проверяются на соответствие ограниченным разрешениям безопасности зоны Интернета домена приложения XBAP, WPF (как и другим системным библиотекам) предоставляется набор разрешений, который включает все возможные разрешения.

Для этого необходимо, чтобы WPF предоставлялись повышенные привилегии с одновременным запретом набору разрешений зоны Интернета несущего домена приложения распоряжаться этими привилегиями.

WPF выполняет это с помощью метода Assert разрешения. В следующем примере кода показано, как это происходит.

FileIOPermission fp = new FileIOPermission(PermissionState.Unrestricted);
fp.Assert();

// Perform operation that uses the assert

// Revert the assert when operation is completed
CodeAccessPermission.RevertAssert();
Dim fp As New FileIOPermission(PermissionState.Unrestricted)
fp.Assert()

' Perform operation that uses the assert

' Revert the assert when operation is completed
CodeAccessPermission.RevertAssert()

Метод Assert в сущности предотвращает ограничение неограниченных разрешений, необходимых WPF, разрешениями зоны Интернета XBAP.

С точки зрения платформы WPF несет ответственность за правильное использование Assert; неправильное использование Assert может привести к тому, что вредоносный код получит повышенные привилегии. Следовательно, важно вызывать метод Assert только при необходимости и обеспечить сохранение ограничений песочницы. Например, изолированному коду не разрешается открывать случайные файлы, но разрешается использовать шрифты. WPF позволяет изолированным приложениям использовать функциональность шрифтов путем вызова Assert, а также для чтения WPF файлов, которые заведомо содержат эти шрифты, от имени изолированного приложения.

развертывание ClickOnce

ClickOnce — это комплексная технология развертывания, которая входит в состав .NET Framework и интегрируется с Visual Studio (дополнительные сведения см. в разделе Безопасность и развертывание ClickOnce). Автономные приложения WPF могут развертываться с помощью ClickOnce, тогда как браузерные приложения должны развертываться с помощью ClickOnce.

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

Методология, критическая с точки зрения безопасности

В отношении кода WPF, который использует разрешения для включения песочницы зоны Интернета для приложений XBAP, должна поддерживаться наивысшая возможная степень аудита и контроля безопасности. Для облегчения этого требования .NET Framework обеспечивает новую поддержку для управляемого кода, который повышает привилегии. В частности, CLR позволяет идентифицировать код, повышающий привилегии, и помечать его с помощью SecurityCriticalAttribute; любой код, не помеченный с помощью SecurityCriticalAttribute, становится прозрачным при использовании этой методологии. В свою очередь, управляемому коду, который не помечен атрибутом SecurityCriticalAttribute, запрещено повышать привилегии.

Предупреждение

Для работы XBAPs требуются устаревшие браузеры, такие как интернет-Обозреватель и Firefox. Эти старые версии браузера обычно не поддерживаются в Windows 10 и Windows 11. Современные браузеры больше не поддерживают технологию, необходимую для приложений XBAP из-за рисков безопасности. Подключаемые модули, поддерживающие XBAP, больше не поддерживаются.

Методология, критическая с точки зрения безопасности, позволяет организацию кода WPF, который повышает привилегии в ядре, критическом с точки зрения безопасности, а остальное остается прозрачным. Изоляция кода, критического с точки зрения безопасности, позволяет группе разработчиков WPF сосредоточиться на дополнительном анализе безопасности и управлении исходным кодом в ядре, критическом с точки зрения безопасности, помимо стандартных методов безопасности (см. раздел Стратегия безопасности WPF — проектирование системы безопасности).

Обратите внимание, что .NET Framework позволяет надежному коду расширять изолированную программную среду Интернет-зоны XBAP, позволяя разработчикам создавать управляемые сборки, помеченные с помощью AllowPartiallyTrustedCallersAttribute (APTCA) и развертываемые в пользовательском глобальном кэше сборок (GAC). Пометка сборки атрибутом APTCA является исключительно важной операцией безопасности, так как позволяет вызывать эту сборку любому коду, включая вредоносный код из Интернета. При этом необходимо использовать особую осторожность и рекомендации, и пользователи должны указывать, что доверяют этому программному обеспечению, чтобы установить его.

Безопасность Microsoft Internet Explorer

Наряду со средствами устранения проблем с безопасностью и упрощения настройки безопасности, Microsoft Internet Explorer 6 с пакетом обновления 2 (SP2) содержит несколько функций усовершенствования безопасности, которые повышают безопасность приложений браузера XAML (XBAP) для пользователей. Эти функции пытаются разрешить пользователям большую степень контроля над их работой в Интернете.

Предупреждение

Для работы XBAPs требуются устаревшие браузеры, такие как интернет-Обозреватель и Firefox. Эти старые версии браузера обычно не поддерживаются в Windows 10 и Windows 11. Современные браузеры больше не поддерживают технологию, необходимую для приложений XBAP из-за рисков безопасности. Подключаемые модули, поддерживающие XBAP, больше не поддерживаются.

До выпуска IE 6 с пакетом обновления 2 (SP2) пользователи могли сталкиваться со следующими проблемами:

  • произвольно всплывающими окнами;

  • запутывающим перенаправлением скриптов;

  • многочисленными диалоговыми окнами безопасности на некоторых веб-сайтах.

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

В IE 6 с пакетом обновления 2 (SP2) предусмотрено несколько возможностей для устранения таких проблем, которые связаны с концепцией пользовательской инициации. IE 6 с пакетом обновления 2 (SP2) обнаруживает, что пользователь щелкнул ссылку или элемент страницы, перед действием, которое называется пользовательской инициацией, и обрабатывает его иначе, чем когда аналогичное действие запускается с помощью скрипта на странице. Например, IE 6 с пакетом обновления 2 (SP2) включает средство блокирования всплывающих окон, которое обнаруживает, что пользователь нажал кнопку, до того как страница создаст всплывающее окно. Это позволяет IE 6 с пакетом обновления 2 (SP2) разрешать самые безвредные всплывающие окна и запрещать всплывающие окна, которые пользователи не запрашивают и не хотят видеть. Заблокированные всплывающие окна перехватываются новой панелью информации, которая разрешает пользователю вручную переопределять блокирование и просматривать всплывающие окна.

Такая же логика пользовательской инициации применяется в запросах безопасности (Открыть/Сохранить). Диалоговые окна установки ActiveX всегда перехватываются панелью информации, если только они не представляют собой обновление установленного ранее элемента управления. Эти меры комбинируются для предоставления пользователям более безопасного и более управляемого взаимодействия, поскольку они защищаются от веб-сайтов, которые беспокоят их установкой нежелательного либо вредоносного программного обеспечения.

Эти возможности также защищают клиентов, которые используют IE 6 с пакетом обновления 2 для просмотра веб-сайтов, которые позволяют им загружать и устанавливать приложения WPF. В частности, это связано с тем, что IE 6 с пакетом обновления 2 предлагает улучшенное пользовательское взаимодействие, которое уменьшают вероятность установки пользователями вредоносных или нелегальных приложений независимо от того, какая технология была использована для их построения, включая WPF. WPF дополняет эти средства защиты с использованием ClickOnce для упрощения скачивания своих приложений в Интернете. Так как приложения браузера XAML (XBAP) выполняются в песочнице безопасности зоны Интернета, их можно легко запускать. С другой стороны, для выполнения автономных приложений WPF требуется полное доверие. Для этих приложений ClickOnce будет отображать диалоговое окно безопасности во время процесса запуска, чтобы уведомить об использовании дополнительных требований к безопасности приложения. Тем не менее это должно быть инициировано пользователем, также будет управляться логикой, инициированной пользователем, и может быть отменено.

Internet Explorer 7 объединяет и расширяет возможности системы безопасности IE 6 с пакетом обновления 2 в рамках усилий, направленных на обеспечение безопасности.

См. также