Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Хотя Windows Presentation Foundation (WPF) предоставляет различные службы безопасности, она также использует функции безопасности базовой платформы, которая включает операционную систему, среду CLR и Internet Explorer. Эти уровни объединяются, чтобы предоставить WPF надежную модель безопасности с глубокой защитой, которая стремится избежать любой единой точки отказа, как показано на следующем рисунке:
Остальная часть этого раздела описывает функции в каждом из этих слоев, относящихся к WPF конкретно.
Предупреждение
Безопасность доступа к коду (CAS) не поддерживается современной платформой .NET, это концепция только для .NET Framework. Все функциональные возможности, связанные с CAS, обрабатываются при предположении полного доверия. Дополнительные сведения см. в разделе "Различия с WPF .NET — безопасность доступа к коду".
Безопасность операционной системы
Ядро Windows предоставляет несколько функций безопасности, которые формируют основу безопасности для всех приложений Windows, включая созданные с помощью WPF. В этом разделе рассматриваются все эти функции безопасности, важные для WPF, а также как WPF интегрируется с ними, чтобы обеспечить дальнейшую защиту.
Microsoft Windows XP с пакетом обновления 2 (SP2)
В дополнение к общему обзору и укреплению Windows существует три ключевых компонента Windows XP с пакетом обновления 2 (SP2), которые мы обсудим в этой статье:
Компиляция /GS
Центр обновления Microsoft Windows.
/GS Компиляция
Windows XP с пакетом обновления 2 (SP2) обеспечивает защиту с повторной компиляцией многих системных основных библиотек, в том числе зависимостей WPF, включая CLR, чтобы снизить риск переполнения буфера. Это достигается с помощью параметра /GS с компилятором командной строки C/C++. Хотя переполнение буфера должно быть явно избегаемо, компиляция /GS предоставляет пример глубинной защиты от потенциальных уязвимостей, которые непреднамеренно или злонамеренно создаются ими.
Исторически переполнение буфера было причиной многих эксплойтов безопасности с высоким воздействием. Переполнение буфера возникает, когда злоумышленник использует уязвимость кода, чтобы внедрить вредоносный код, записывающий мимо границ буфера. Это позволяет злоумышленнику перехватывать процесс, в котором выполняется код, перезаписав возвращаемый адрес функции, чтобы вызвать выполнение кода злоумышленника. Результатом является вредоносный код, который выполняет произвольный код с теми же привилегиями, что и перехватанный процесс.
На высоком уровне флаг компилятора -GS защищает от некоторых потенциальных переполнений буфера путем внедрения специального файла cookie безопасности для защиты возвращаемого адреса функции с локальными буферами строк. После возврата функции файл cookie безопасности сравнивается с предыдущим значением. Если значение изменилось, возможно, произошло переполнение буфера, и процесс завершается ошибкой. Остановка процесса предотвращает выполнение потенциально вредоносного кода. Дополнительные сведения см. в разделе -GS (проверка безопасности буфера).
WPF компилируется с флагом /GS, чтобы добавить еще один слой защиты в приложения WPF.
Windows Vista
Пользователи WPF в Windows Vista получат преимущества от дополнительных улучшений безопасности операционной системы, включая "Least-Privilege доступ пользователей", проверки целостности кода и изоляцию привилегий.
Контроль учетных записей пользователей
Сегодня пользователи Windows, как правило, работают с правами администратора, так как многие приложения требуют их для установки или выполнения или обоих. Возможность записи параметров приложения по умолчанию в реестр является одним из примеров.
Выполнение с правами администратора действительно означает, что приложения запускаются из процессов, которым предоставлены права администратора. Влияние на безопасность заключается в том, что любой вредоносный код, который перехватает процесс, выполняющийся с правами администратора, автоматически наследует эти привилегии, включая доступ к критически важным системным ресурсам.
Одним из способов защиты от этой угрозы безопасности является запуск приложений с минимальным количеством необходимых привилегий. Это называется принципом наименьших привилегий и является основной функцией операционной системы Windows. Эта функция называется контролем учетных записей пользователей (UAC) и используется windows UAC двумя ключевыми способами:
Выполнение большинства приложений с привилегиями UAC по умолчанию, даже если пользователь является администратором; Только приложения, которым требуются права администратора, будут работать с правами администратора. Чтобы запустить с правами администратора, приложения должны быть явно помечены в манифесте приложения или в качестве записи в политике безопасности.
Для обеспечения решений совместимости, таких как виртуализация. Например, многие приложения пытаются внести изменения в запрещенные зоны, такие как C:\Program Files. Для приложений, выполняемых в рамках UAC, существует альтернатива для каждого пользователя, в которую не требуются права администратора для записи. Для приложений, работающих в рамках UAC, UAC виртуализирует C:\Program Files, чтобы приложения, которые считают, что записывают в него, на самом деле записывают в альтернативное местоположение для каждого пользователя. Такая совместимость позволяет операционной системе запускать множество приложений, которые ранее не выполнялись в UAC.
Проверки целостности кода
Windows Vista включает более глубокие проверки целостности кода, чтобы предотвратить внедрение вредоносного кода в системные файлы или ядро во время загрузки и выполнения. Это выходит за рамки защиты системных файлов.
Процесс ограниченных прав для приложений Browser-Hosted
Размещенные в браузере приложения WPF выполняются в песочнице зоны Интернета. Интеграция WPF с Microsoft Internet Explorer расширяет эту защиту с дополнительной поддержкой.
Предупреждение
Для работы XBAPs требуются устаревшие браузеры, такие как Internet Explorer и старые версии Firefox. Эти старые браузеры обычно не поддерживаются в Windows 10 и Windows 11. Современные браузеры больше не поддерживают технологию, необходимую для приложений XBAP из-за рисков безопасности. Плагины, позволяющие использовать XBAP, больше не поддерживаются. Дополнительные сведения см. в статье Часто задаваемые вопросы о приложениях, размещенных в браузере WPF (XBAP),.
Так как приложения браузера XAML (XBAPs) обычно изолированы набором разрешений зоны Интернета, удаление этих привилегий не вредит приложениям браузера XAML (XBAPs) с точки зрения совместимости. Вместо этого создается дополнительный уровень многоуровневой защиты; если изолированное приложение сможет использовать другие слои и перехватить процесс, процесс по-прежнему будет иметь ограниченные привилегии.
См. статью "Использование учетной записи пользователя Least-Privileged".
Безопасность среды CLR
Среда CLR предлагает ряд ключевых преимуществ безопасности, включая валидацию и верификацию, Безопасность Доступа к Коду (CAS) и методология обеспечения безопасности.
Валидация и проверка
Для обеспечения изоляции и целостности сборки CLR использует процесс проверки. Проверка Общей Языковой Среды (CLR) гарантирует изоляцию сборок, проверяя файл переносимого исполняемого формата (PE) на предмет адресов, выходящих за пределы сборки. Проверка CLR также проверяет целостность метаданных, внедренных в сборку.
Для обеспечения безопасности типов и помощи в предотвращении распространенных проблем безопасности (например, переполнения буфера), а также использования песочницы путем изоляции подпроцессов в системе безопасности CLR применяется концепция проверки.
Управляемые приложения компилируются на microsoft Intermediate Language (MSIL). При выполнении методов в управляемом приложении его MSIL компилируется в машинный код с помощью компиляции JIT-In-Time. Компиляция JIT включает процесс проверки, который применяет множество правил безопасности и надежности, которые обеспечивают отсутствие кода:
Нарушение типов контрактов
Введение переполнения буфера
Неконтролируемый доступ к памяти.
Управляемый код, который не соответствует правилам проверки, не может выполняться, если он не считается доверенным кодом.
Преимущество проверяемого кода является ключевой причиной, по которой WPF строится на платформе .NET Framework. В том случае, если используется проверяемый код, вероятность использования возможных уязвимостей значительно снижается.
Безопасность доступа к коду
Клиентский компьютер предоставляет широкий спектр ресурсов, к которым может иметь доступ управляемое приложение, включая файловую систему, реестр, службы печати, пользовательский интерфейс, отражение и переменные среды. Прежде чем управляемое приложение сможет получить доступ к любому из ресурсов на клиентском компьютере, оно должно иметь разрешение .NET Framework для этого. Разрешение в CAS — это подкласс CodeAccessPermission; CAS реализует один подкласс для каждого ресурса, к которому могут получить доступ управляемые приложения.
Набор разрешений, который управляемое приложение получает от CAS (Security Access Code) при начале выполнения, называется набором разрешений и определяется на основании доказательств, предоставленных приложением. Для приложений WPF предоставленные доказательства — это расположение или зона, из которой запускаются приложения. Cas определяет следующие зоны:
Мой компьютер. Приложения, запущенные с клиентского компьютера (полностью доверенные).
Локальная интрасетя. Приложения, запущенные из интрасети. (Отчасти доверенный).
Интернет. Приложения, запущенные из Интернета. (Наименее доверенный).
Надежные сайты. Приложения, определяемые пользователем как доверенные. (Наименее доверенный).
Ненадежные сайты. Приложения, определяемые пользователем как ненадежные. (Ненадежно).
Для каждой из этих зон CAS предоставляет предопределенный набор разрешений, который включает разрешения, соответствующие уровню доверия, связанному с каждой из них. К ним относятся:
FullTrust. Для приложений, запущенных из зоны "Мой компьютер". Предоставляются все возможные разрешения.
LocalIntranet. Для приложений, запущенных из зоны локальной интрасети . Подмножество разрешений предоставляется для предоставления умеренного доступа к ресурсам клиентского компьютера, включая изолированное хранилище, неограниченный доступ к пользовательскому интерфейсу, неограниченный доступ к файлам, ограниченное отражение, ограниченный доступ к переменным среды. Разрешения для критически важных ресурсов, таких как реестр, не предоставляются.
Интернет. Для приложений, запущенных из зоны "Интернет" или "Надежные сайты". Подмножество разрешений предоставляется для предоставления ограниченного доступа к ресурсам клиентского компьютера, включая изолированное хранилище, только открытый файл и ограниченный пользовательский интерфейс. По сути, этот набор разрешений изолирует приложения от клиентского компьютера.
Приложения, принадлежащие к зоне "Ненадежные сайты", вообще не получают разрешений от CAS. Следовательно, для них не существует предопределенного набора разрешений.
На следующем рисунке показана связь между зонами, наборами разрешений, разрешениями и ресурсами:
Ограничения песочницы безопасности зоны Интернета применяются одинаково к любому коду, импортируемому XBAP из системной библиотеки, включая WPF. Это гарантирует блокировку каждого бита кода, даже WPF. К сожалению, для выполнения XBAP требуется функциональность, которая требует больше разрешений, чем предоставляет песочница безопасности интернет-зоны.
Предупреждение
Для работы XBAPs требуются устаревшие браузеры, такие как Internet Explorer и старые версии Firefox. Эти старые браузеры обычно не поддерживаются в Windows 10 и Windows 11. Современные браузеры больше не поддерживают технологию, необходимую для приложений XBAP из-за рисков безопасности. Плагины, позволяющие использовать XBAP, больше не поддерживаются. Дополнительные сведения см. в статье Часто задаваемые вопросы о приложениях, размещенных в браузере WPF (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 запрашивают необходимые разрешения. Им предоставляются только те разрешения, которые не превышают набор разрешений для зоны, из которой развертывается приложение. Уменьшая набор разрешений только тем, к которым требуется доступ, даже если они меньше, чем те, которые предоставляются набором разрешений зоны запуска, количество ресурсов, к которым у приложения есть доступ, сокращается до минимального уровня. Следовательно, если приложение угоняется, вероятность повреждения клиентского компьютера уменьшается.
Security-Critical Методология
Код WPF, использующий разрешения для включения песочницы интернет-зоны для приложений XBAP, должен подвергаться самому тщательному аудиту и контролю безопасности. Чтобы упростить это требование, платформа .NET Framework обеспечивает новую поддержку управления кодом, повышающим привилегии. В частности, CLR позволяет определить код, который повышает привилегии, и пометить его с помощью SecurityCriticalAttribute; любой код, не помеченный SecurityCriticalAttribute, становится прозрачным с помощью этой методологии. И наоборот, управляемый код, который не помечен как SecurityCriticalAttribute, ограничен в повышении привилегий.
Предупреждение
Для работы XBAPs требуются устаревшие браузеры, такие как Internet Explorer и старые версии Firefox. Эти старые браузеры обычно не поддерживаются в Windows 10 и Windows 11. Современные браузеры больше не поддерживают технологию, необходимую для приложений XBAP из-за рисков безопасности. Плагины, позволяющие использовать XBAP, больше не поддерживаются. Дополнительные сведения см. в статье Часто задаваемые вопросы о приложениях, размещенных в браузере WPF (XBAP),.
Методология Security-Critical позволяет организации кода WPF, который повышает привилегии в критическом для безопасности ядре, а оставшаяся часть является прозрачной. Изоляция критически важного кода безопасности даёт группе инженеров WPF возможность сосредоточиться на дополнительном анализе безопасности и контроле версий, касающихся критически важного ядра безопасности, выходящем за рамки стандартных практик безопасности (см. стратегию безопасности WPF — проектирование безопасности).
Обратите внимание, что платформа .NET Framework позволяет доверенному коду расширить песочницу зоны Интернета XBAP, позволяя разработчикам записывать управляемые сборки, помеченные как AllowPartiallyTrustedCallersAttribute APTCA, и развертываются в глобальном кэше сборок пользователя (GAC). Маркировка сборки с помощью APTCA является высокочувствительной операцией безопасности, так как позволяет любому коду вызывать такую сборку, включая вредоносный код из Интернета. При выполнении этой задачи необходимо проявлять крайнюю осторожность и лучшие практики, а пользователи должны доверять этому программному обеспечению, чтобы оно было установлено.
Безопасность Microsoft Internet Explorer
Помимо снижения проблем безопасности и упрощения конфигурации безопасности Microsoft Internet Explorer 6 (SP2) содержит несколько функций, которые повышают безопасность для пользователей приложений браузера XAML (XBAPs). Цель этих функций — позволить пользователям получить больший контроль над процессом просмотра.
Предупреждение
Для работы XBAPs требуются устаревшие браузеры, такие как Internet Explorer и старые версии Firefox. Эти старые браузеры обычно не поддерживаются в Windows 10 и Windows 11. Современные браузеры больше не поддерживают технологию, необходимую для приложений XBAP из-за рисков безопасности. Плагины, позволяющие использовать XBAP, больше не поддерживаются. Дополнительные сведения см. в статье Часто задаваемые вопросы о приложениях, размещенных в браузере WPF (XBAP),.
До выхода пакета обновления 2 для IE6 пользователи могли подвергаться любому из следующих факторов:
Случайные всплывающие окна.
Запутанное перенаправление скрипта.
Многочисленные диалоги безопасности на некоторых веб-сайтах.
В некоторых случаях ненадежные веб-сайты пытаются обмануть пользователей путем подделки интерфейса установки или многократного отображения диалогового окна установки Microsoft ActiveX, даже если пользователь уже отменил его. Используя эти методы, возможно, что значительное количество пользователей было обмануты в принятии плохих решений, которые привели к установке шпионских приложений.
IE6 с пакетом обновления 2 (SP2) включает несколько функций для уменьшения этих типов проблем, которые вращаются вокруг концепции инициации пользователем. IE6 с пакетом обновления 2 (SP2) определяет, когда пользователь щелкнул ссылку или элемент страницы перед действием, который называется запуском пользователя, и обрабатывает его по-другому, чем когда аналогичное действие активируется скриптом на странице. Например, IE6 с пакетом обновления 2 (SP2) включает блокировщикPop-Up , который определяет, когда пользователь нажимает кнопку перед созданием всплывающего окна. Это позволяет IE6 с пакетом обновления 2 (SP2) разрешать большинство безобидных всплывающих окон, предотвращая всплывающие окна, которые пользователи не запрашивают и не хотят. Заблокированные всплывающие окна находятся в новой Информационной строке, что позволяет пользователю вручную отменить блокировку и просмотреть всплывающее окно.
Та же логика инициации пользователем применяется к запросам безопасности Open/Save. Диалоговые окна установки ActiveX всегда скрыты панелью сообщений, если они не относятся к обновлению ранее установленного программного обеспечения управления. Эти меры объединяются, чтобы предоставить пользователям более безопасный, более контролируемый интерфейс пользователя, так как они защищены от сайтов, которые преследуют их для установки нежелательного или вредоносного программного обеспечения.
Эти функции также защищают клиентов, использующих IE6 с пакетом обновления 2 (SP2) для перехода на веб-сайты, которые позволяют им загружать и устанавливать приложения WPF. В частности, это связано с тем, что IE6 с пакетом обновления 2 (SP2) обеспечивает лучший пользовательский интерфейс, который снижает вероятность того, что пользователи могут устанавливать вредоносные или вредоносные приложения независимо от того, какая технология использовалась для его сборки, включая WPF. WPF добавляет в эти средства защиты с помощью ClickOnce для упрощения скачивания своих приложений через Интернет. Так как приложения браузера XAML (XBAPs) выполняются в песочнице безопасности в зоне Интернета, их можно легко запустить. С другой стороны, автономные приложения WPF требуют полного доверия для выполнения. Для этих приложений ClickOnce отобразит диалоговое окно безопасности во время запуска, чтобы уведомить об использовании дополнительных требований к безопасности приложения. Однако это должно быть инициировано пользователем, также управляется логикой, инициированной пользователем, и может быть отменена.
Internet Explorer 7 включает и расширяет возможности безопасности IE6 с пакетом обновления 2 (SP2) в рамках постоянной приверженности безопасности.
См. также
- Безопасность доступа к исходному коду
- Безопасность
- безопасность частичного доверия WPF
- стратегия безопасности WPF — проектирование безопасности
.NET Desktop feedback