보안(WPF)

Windows Presentation Foundation (WPF) 독립 실행형 응용 프로그램과 브라우저에서 호스팅되는 응용 프로그램을 개발하는 경우 보안 모델에 대해 고려해야 합니다. WPF 독립 실행형 응용 프로그램은 Windows Installer(.msi), XCopy, 또는 ClickOnce를 사용하여 배포되었는지 여부에 상관없이 무제한 권한(CAS FullTrust 권한 집합)으로 실행됩니다. ClickOnce를 사용하여 부분적으로 신뢰되는 독립 실행형 WPF 응용 프로그램을 배포하는 것은 지원되지 않습니다. 그러나 완전 신뢰 호스트 응용 프로그램은 .NET Framework 추가 기능 모델을 사용하여 부분 신뢰 AppDomain을 만들 수 있습니다. 자세한 내용은 WPF 추가 기능 개요를 참조하십시오.

브라우저에서 호스팅되는 WPF 응응 프로그램은 Windows Internet Explorer 또는 Firefox에서 호스팅되며 XAML browser applications (XBAPs) 또는 느슨한 Extensible Application Markup Language (XAML) 문서일 수 있습니다. 자세한 내용은 WPF XAML 브라우저 응용 프로그램 개요를 참조하십시오.

기본적으로 브라우저에서 호스팅되는 WPF 응용 프로그램은 기본 CAS Internet 영역 권한 집합으로 제한되는 부분 신뢰 보안 샌드박스 내에서 실행됩니다. 이 경우 일반 웹 응용 프로그램이 격리될 것으로 예상할 때와 동일한 방식으로 브라우저에서 호스팅되는 WPF 응용 프로그램이 실제로 클라이언트 컴퓨터에서 격리됩니다. XBAP는 배포 URL의 보안 영역 및 클라이언트의 보안 구성에 따라 권한을 전체 신뢰까지 상승시킬 수 있습니다. 자세한 내용은 WPF 부분 신뢰 보안을 참조하십시오.

이 항목에서는 Windows Presentation Foundation (WPF) 독립 실행형 응용 프로그램과 브라우저에서 호스팅되는 응용 프로그램의 보안 모델을 설명합니다.

이 항목에는 다음과 같은 단원이 포함되어 있습니다.

  • 안전한 탐색

  • 웹 브라우징 소프트웨어 보안 설정

  • WebBrowser 컨트롤 및 기능 컨트롤

  • 부분적으로 신뢰할 수 있는 클라이언트 응용 프로그램에 대해 APTCA 어셈블리 사용 안 함

  • 느슨한 XAML 파일에 대한 샌드박스 동작

  • 보안을 향상시키는 WPF 응용 프로그램 개발을 위한 리소스

안전한 탐색

XBAPs의 경우 WPF는 두 가지 탐색 유형, 즉 응용 프로그램과 브라우저를 구별합니다.

응용 프로그램 탐색은 브라우저에서 호스팅하는 응용 프로그램 내의 콘텐츠 항목 간을 탐색하는 것입니다. 브라우저 탐색은 브라우저 자체의 콘텐츠 및 위치 URL을 변경하는 탐색입니다. 다음 그림에서는 응용 프로그램 탐색(일반적으로 XAML) 및 브라우저 탐색(일반적으로 HTML) 간의 관계를 보여 줍니다.

탐색 다이어그램

XBAP에서 탐색하기에 안전하다고 간주되는 콘텐츠 형식은 주로 응용 프로그램 탐색이 사용되는지 아니면 브라우저 탐색이 사용되는지 여부에 의해 결정됩니다.

응용 프로그램 탐색 보안

다음 네 가지 형식의 콘텐츠를 지원하는 팩 URI로 식별할 수 있는 경우 응용 프로그램 탐색은 안전한 것으로 간주됩니다.

콘텐츠 형식

설명

URI 예제

리소스

빌드 형식이 리소스인 프로젝트에 추가되는 파일입니다.

pack://application:,,,/MyResourceFile.xaml

Content

빌드 형식이 콘텐츠인 프로젝트에 추가되는 파일입니다.

pack://application:,,,/MyContentFile.xaml

원본 사이트

빌드 형식이 없음인 프로젝트에 추가되는 파일입니다.

pack://siteoforigin:,,,/MySiteOfOriginFile.xaml

응용 프로그램 코드

컴파일된 코드 숨김이 있는 XAML 리소스입니다.

또는

빌드 형식이 페이지인 프로젝트에 추가되는 XAML 파일입니다.

pack://application:,,,/MyResourceFile.xaml

참고참고

응용 프로그램 데이터 파일 및 팩 URIs에 대한 자세한 내용은 WPF 응용 프로그램 리소스, 콘텐츠 및 데이터 파일을 참조하십시오.

이러한 콘텐츠 형식의 파일은 사용자가 직접 탐색하거나 프로그래밍 방식으로 탐색할 수 있습니다.

  • 사용자 탐색. 사용자가 Hyperlink 요소를 클릭하여 탐색합니다.

  • 프로그래밍 방식 탐색. NavigationWindow.Source 속성을 설정하는 등의 방법으로 사용자 개입 없이 응용 프로그램에서 탐색합니다.

브라우저 탐색 보안

브라우저 탐색은 다음 조건 하에서만 안전한 것으로 간주됩니다.

  • 사용자 탐색. 중첩된 Frame이 아니라 주 NavigationWindow 내에 있는 Hyperlink 요소를 클릭하여 사용자가 탐색합니다.

  • 영역. 탐색하는 콘텐츠가 인터넷 또는 로컬 인트라넷에 있습니다.

  • 프로토콜. 사용되는 프로토콜은 http, https, file 또는 mailto입니다.

XBAP가 이러한 조건을 충족하지 않는 방식으로 콘텐츠를 탐색하려고 할 경우 SecurityException이 throw됩니다.

웹 브라우징 소프트웨어 보안 설정

웹 브라우징 소프트웨어에 부여되는 액세스는 컴퓨터의 보안 설정에 의해 결정됩니다. 웹 브라우징 소프트웨어에는 WinINet 또는 UrlMon API를 사용하는 Internet Explorer 및 PresentationHost.exe 등의 모든 응용 프로그램 또는 구성 요소가 포함됩니다.

Internet Explorer에서 제공되는 메커니즘을 사용하면 다음을 비롯하여 Internet Explorer에서 실행이 허용되는 기능을 구성할 수 있습니다.

  • .NET Framework 기반 구성 요소

  • ActiveX 문서 및 플러그 인

  • 다운로드

  • 스크립팅

  • 사용자 인증

이 방법으로 보안 설정할 수 있는 기능 컬렉션은 인터넷, 인트라넷, 신뢰할 수 있는 사이트제한된 사이트 영역에서 영역 단위로 구성됩니다. 다음 단계에서는 보안 설정 구성 방법을 설명합니다.

  1. 제어판을 엽니다.

  2. 네트워크 및 인터넷을 클릭한 다음 인터넷 옵션을 클릭합니다.

    인터넷 옵션 대화 상자가 나타납니다.

  3. 보안 탭에서 보안 설정을 구성할 영역을 선택합니다.

  4. 사용자 지정 수준 단추를 클릭합니다.

    보안 설정 대화 상자가 나타납니다. 선택한 영역의 보안 설정을 여기서 구성할 수 있습니다.

    보안 설정 대화 상자

참고참고

또한 Internet Explorer의 인터넷 옵션 대화 상자에 액세스할 수도 있습니다.도구를 클릭한 다음 인터넷 옵션을 클릭합니다.

Windows Internet Explorer 7부터는 특히 .NET Framework에 대한 다음 보안 설정이 포함되어 있습니다.

  • 느슨한 XAML. Internet Explorer에서 XAML 파일을 탐색하여 느슨하게 하는지 여부를 제어합니다. 사용, 사용 안 함 및 확인 옵션이 있습니다.

  • XAML 브라우저 응용 프로그램. Internet Explorer에서 XBAPs를 탐색하여 실행하는지 여부를 제어합니다. 사용, 사용 안 함 및 확인 옵션이 있습니다.

기본적으로 이러한 설정은 인터넷, 로컬 인터넷신뢰할 수 있는 사이트 영역의 경우 사용하도록 설정되고 제한된 사이트 영역의 경우 사용하지 않도록 설정됩니다.

보안 관련 WPF 레지스트리 설정

인터넷 옵션을 통해 사용 가능한 보안 설정 외에 보안상 중요한 여러 가지 WPF 기능을 선택적으로 차단하는 데 사용할 수 있는 다음과 같은 레지스트리 값이 있습니다. 이러한 값은 다음 키 아래에 정의됩니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Features

다음 표에서는 설정할 수 있는 값 목록을 보여 줍니다.

값 이름

값 형식

값 데이터

XBAPDisallow

REG_DWORD

허용하지 않으려면 1이고, 허용하려면 0입니다.

LooseXamlDisallow

REG_DWORD

허용하지 않으려면 1이고, 허용하려면 0입니다.

WebBrowserDisallow

REG_DWORD

허용하지 않으려면 1이고, 허용하려면 0입니다.

MediaAudioDisallow

REG_DWORD

허용하지 않으려면 1이고, 허용하려면 0입니다.

MediaImageDisallow

REG_DWORD

허용하지 않으려면 1이고, 허용하려면 0입니다.

MediaVideoDisallow

REG_DWORD

허용하지 않으려면 1이고, 허용하려면 0입니다.

ScriptInteropDisallow

REG_DWORD

허용하지 않으려면 1이고, 허용하려면 0입니다.

WebBrowser 컨트롤 및 기능 컨트롤

WPF WebBrowser 컨트롤은 웹 콘텐츠를 호스팅하는 데 사용할 수 있습니다. WPF WebBrowser 컨트롤은 기본 WebBrowser ActiveX 컨트롤을 래핑합니다. 에서는 신뢰할 수 있는 웹 콘텐츠를 호스팅하기 위해 WPF WebBrowser 컨트롤을 사용하는 경우에 응용 프로그램을 보안하는 데 필요한 일부 지원을 제공합니다. 그러나 일부 보안 기능은 WebBrowser 컨트롤을 사용하여 응용 프로그램에서 직접 적용되어야 합니다. WebBrowser ActiveX 컨트롤에 대한 자세한 내용은 WebBrowser Control Overviews and Tutorials를 참조하십시오.

참고참고

Frame 컨트롤의 경우 WebBrowser를 사용하여 HTML 콘텐츠를 탐색하므로 이 컨트롤에도 이 단원의 내용이 적용됩니다.

WPF WebBrowser 컨트롤이 신뢰할 수 없는 웹 콘텐츠를 호스팅하는 데 사용되는 경우 응용 프로그램에서는 부분 신뢰 AppDomain을 사용하여 응용 프로그램 코드를 악의적인 HTML 스크립트 코드로부터 보호해야 합니다. 특히 응용 프로그램이 InvokeScript 메서드 및 ObjectForScripting 속성을 사용하여 호스팅되는 스크립트와 상호 작용할 경우에는 이와 같이 보호해야 합니다. 자세한 내용은 WPF 추가 기능 개요를 참조하십시오.

응용 프로그램에서 WPF WebBrowser 컨트롤을 사용하는 경우 보안을 향상시키고 공격을 완화하기 위해 Internet Explorer 기능 컨트롤이 사용되도록 설정할 수도 있습니다. 기능 컨트롤은 관리자 및 개발자가 Internet Explorer 및 WebBrowser ActiveX 컨트롤을 호스팅하는 응용 프로그램의 기능을 구성할 수 있도록 Internet Explorer에 추가됩니다. 이 컨트롤은 WPF WebBrowser 컨트롤에서 래핑합니다. 기능 컨트롤은 CoInternetSetFeatureEnabled 함수를 사용하거나 레지스트리의 값을 변경하여 구성할 수 있습니다. 기능 컨트롤에 대한 자세한 내용은 Introduction to Feature Controls and Internet Feature Controls를 참조하십시오.

WPF WebBrowser 컨트롤을 사용하는 독립 실행형 WPF 응용 프로그램을 개발할 경우 WPF에서는 응용 프로그램을 위해 다음 기능 컨트롤을 자동으로 활성화합니다.

기능 컨트롤

FEATURE_MIME_HANDLING

FEATURE_MIME_SNIFFING

FEATURE_OBJECT_CACHING

FEATURE_SAFE_BINDTOOBJECT

FEATURE_WINDOW_RESTRICTIONS

FEATURE_ZONE_ELEVATION

FEATURE_RESTRICT_FILEDOWNLOAD

FEATURE_RESTRICT_ACTIVEXINSTALL

FEATURE_ADDON_MANAGEMENT

FEATURE_HTTP_USERNAME_PASSWORD_DISABLE

FEATURE_SECURITYBAND

FEATURE_UNC_SAVEDFILECHECK

FEATURE_VALIDATE_NAVIGATE_URL

FEATURE_DISABLE_TELNET_PROTOCOL

FEATURE_WEBOC_POPUPMANAGEMENT

FEATURE_DISABLE_LEGACY_COMPRESSION

FEATURE_SSLUX

이러한 기능 컨트롤은 조건 없이 활성화되므로 전체 신뢰 응용 프로그램에 손상을 입힐 수도 있습니다. 이 경우 특정 응용 프로그램 및 해당 응용 프로그램에서 호스팅하는 콘텐츠에 대한 보안상 위험이 없으면 해당하는 기능 컨트롤을 비활성화할 수 있습니다.

기능 컨트롤은 WebBrowser ActiveX 개체를 인스턴스화하는 프로세스에 의해 적용됩니다. 따라서 신뢰할 수 없는 콘텐츠를 탐색할 수 있는 독립 실행형 응용 프로그램을 만들 경우 추가적인 기능 컨트롤의 활성화에 대해 신중히 고려해야 합니다.

참고참고

이와 관련된 권장 사항은 MSHTML 및 SHDOCVW 호스트 보안에 대한 일반적 권장 사항을 기반으로 합니다.자세한 내용은 The MSHTML Host Security FAQ: Part I of IIThe MSHTML Host Security FAQ: Part II of II를 참조하십시오.

실행 파일의 경우 레지스트리 값을 1로 설정하여 다음 기능 컨트롤을 활성화하는 것이 좋습니다.

기능 컨트롤

FEATURE_ACTIVEX_REPURPOSEDETECTION

FEATURE_BLOCK_LMZ_IMG

FEATURE_BLOCK_LMZ_OBJECT

FEATURE_BLOCK_LMZ_SCRIPT

FEATURE_RESTRICT_RES_TO_LMZ

FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7

FEATURE_SHOW_APP_PROTOCOL_WARN_DIALOG

FEATURE_LOCALMACHINE_LOCKDOWN

FEATURE_FORCE_ADDR_AND_STATUS

FEATURE_RESTRICTED_ZONE_WHEN_FILE_NOT_FOUND

실행 파일의 경우 레지스트리 값을 0으로 설정하여 다음 기능 컨트롤을 비활성화하는 것이 좋습니다.

기능 컨트롤

FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT

Windows Internet Explorer에서 WPF WebBrowser 컨트롤을 포함하는 부분 신뢰 XAML browser application (XBAP)를 실행하는 경우 WPF는 Internet Explorer 프로세스의 주소 공간에 WebBrowser ActiveX 컨트롤을 호스팅합니다. WebBrowser ActiveX 컨트롤이 Internet Explorer 프로세스에서 호스팅되기 때문에 Internet Explorer의 모든 기능 컨트롤이 WebBrowser ActiveX 컨트롤에 대해 활성화됩니다.

또한 Internet Explorer에서 실행되는 XBAP는 일반적인 독립 실행형 응용 프로그램과 달리 추가적인 보안 수준을 갖게 됩니다. 이 추가적인 보안은 Internet Explorer 및 WebBrowser ActiveX 컨트롤이 Windows Vista 및 Windows 7에서 기본적으로 보호 모드로 실행되기 때문에 제공됩니다. 보호 모드에 대한 자세한 내용은 Understanding and Working in Protected Mode Internet Explorer를 참조하십시오.

참고참고

WPF WebBrowser 컨트롤을 포함하는 XBAP를 Firefox에서 실행할 경우 인터넷 영역에 있으면 SecurityException이 throw됩니다.이는 WPF 보안 정책에 의한 것입니다.

부분적으로 신뢰할 수 있는 클라이언트 응용 프로그램에 대해 APTCA 어셈블리 사용 안 함

관리되는 어셈블리가 global assembly cache (GAC)에 설치되는 경우 사용자는 설치를 위해 명시적 권한을 제공해야 하기 때문에 이러한 어셈블리는 완전히 신뢰할 수 있게 됩니다. 이러한 어셈블리는 완전히 신뢰할 수 있으므로 완전히 신뢰할 수 있는 관리되는 클라이언트 응용 프로그램에서만 사용할 수 있습니다. 부분적으로 신뢰할 수 있는 응용 프로그램에서 이러한 어셈블리를 사용하게 하려면 AllowPartiallyTrustedCallersAttribute(APTCA)로 표시해야 합니다. 부분 신뢰에서 안전하게 실행할 수 있는 것으로 테스트된 어셈블리만 이 특성으로 표시해야 합니다.

그러나 APTCA 어셈블리는 GAC에 설치된 후 보안 결함을 드러낼 수 있습니다. 보안 결함이 발견되고 나면 어셈블리 게시자는 기존 설치에서 문제를 수정하는 동시에 문제 발견 후 수행되는 설치를 보호하기 위한 보안 업데이트를 생성할 수 있습니다. 업데이트의 한 옵션은 어셈블리를 제거하는 것이지만 이 경우 완전히 신뢰할 수 있는 다른 클라이언트 응용 프로그램이 어셈블리를 사용하지 못하게 될 수 있습니다.

WPF는 APTCA 어셈블리를 제거하지 않고 부분적으로 신뢰할 수 있는 XBAPs에 대해 APTCA 어셈블리를 사용하지 않도록 설정하는 메커니즘을 제공합니다.

APTCA 어셈블리를 사용하지 않도록 설정하려면 특수 레지스트리 키를 만들어야 합니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\<AssemblyFullName>, FileVersion=<AssemblyFileVersion>

다음은 이러한 예제입니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\aptcagac, Version=1.0.0.0, Culture=neutral, PublicKeyToken=215e3ac809a0fea7, FileVersion=1.0.0.0

이 키는 APTCA 어셈블리에 대한 항목을 설정합니다. 또한 해당 어셈블리를 사용하거나 사용하지 않도록 설정하는 값을 이 키에 만들어야 합니다. 이 값에 대한 자세한 설명은 다음에 나와 있습니다.

  • 값 이름: APTCA_FLAG

  • 값 형식: REG_DWORD

  • 값 데이터: 1(사용 안 함), 0(사용)

부분적으로 신뢰할 수 있는 클라이언트 응용 프로그램에 대해 어셈블리를 사용하지 않도록 설정해야 하는 경우 해당 레지스트리 키와 값을 만드는 업데이트를 작성할 수 있습니다.

참고참고

핵심 .NET Framework 어셈블리는 관리되는 응용 프로그램을 실행하는 데 필요하므로 이 방법으로 사용하지 않게 설정해도 영향을 받지 않습니다.APTCA 어셈블리를 사용하지 않게 설정하는 기능은 주로 이 아니거나 타사 응용 프로그램인 경우를 대상으로 합니다.

느슨한 XAML 파일에 대한 샌드박스 동작

느슨한 XAML 파일은 코드 숨김, 이벤트 처리기 또는 응용 프로그램별 어셈블리에 의존하지 않는 태그 전용 XAML 파일입니다. 브라우저에서 느슨한 XAML 파일로 직접 탐색할 경우 기본 인터넷 영역 권한 집합에 기반하여 보안 샌드박스로 로드됩니다.

그러나 독립 실행형 응용 프로그램의 NavigationWindow 또는 Frame에서 느슨한 XAML 파일로 탐색할 경우 보안 동작이 다릅니다.

두 경우 모두에 탐색한 느슨한 XAML 파일은 호스트 응용 프로그램의 권한을 상속합니다. 그러나 특히 느슨한 XAML 파일이 신뢰할 수 없거나 알려지지 않은 엔터티에 의해 생성된 경우 이 동작은 보안 관점에서 바람직하지 않습니다. 이 형식의 콘텐츠는 외부 콘텐츠로 알려져 있으며 탐색한 경우 해당 파일을 격리시키도록 FrameNavigationWindow 모두를 구성할 수 있습니다. FrameNavigationWindow에 대한 다음 예제와 같이 SandboxExternalContent 속성을 true로 설정하여 격리를 수행할 수 있습니다.

<Frame 
  Source="ExternalContentPage.xaml" 
  SandboxExternalContent="True">
</Frame>
<!-- Sandboxing external content using NavigationWindow-->
<NavigationWindow 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  Source="ExternalContentPage.xaml" 
  SandboxExternalContent="True">
</NavigationWindow>

이 설정을 사용하면 응용 프로그램을 호스팅하는 중인 프로세스와 별개인 프로세스에 외부 콘텐츠가 로드됩니다. 이 프로세스는 기본 인터넷 영역 권한 집합으로 제한되므로 호스팅 응용 프로그램 및 클라이언트 컴퓨터에서 효율적으로 격리됩니다.

참고참고

독립 실행형 응용 프로그램에서 NavigationWindow 또는 Frame으로부터 느슨한 XAML 파일로 탐색하는 기능은 WPF 브라우저 호스팅 인프라를 기반으로 구현되고 PresentationHost 프로세스와 관련되지만 보안 수준은 Windows Vista 및 Windows 7에서 콘텐츠가 Internet Explorer에 직접 로드되는 경우(이 경우에도 PresentationHost를 통해 로드됨)에 비해 약간 낮습니다. 이는 웹 브라우저를 사용하는 독립 실행형 WPF 응용 프로그램에서 Internet Explorer의 추가적인 보호 모드 보안 기능을 제공하지 않기 때문입니다.

보안을 향상시키는 WPF 응용 프로그램 개발을 위한 리소스

다음은 보안을 향상시키는 WPF 응용 프로그램을 개발하는 데 도움이 되는 추가적인 리소스입니다.

영역

리소스

관리 코드

Patterns and Practices Security Guidance for Applications

CAS

코드 액세스 보안

ClickOnce

ClickOnce 보안 및 배포

WPF

WPF 부분 신뢰 보안

참고 항목

개념

WPF 부분 신뢰 보안

WPF 보안 전략 - 플랫폼 보안

WPF 보안 전략 - 보안 엔지니어링

코드 액세스 보안

ClickOnce 보안 및 배포

XAML 개요(WPF)

기타 리소스

Patterns and Practices Security Guidance for Applications