보안(WPF)
WPF(Windows Presentation Foundation) 독립 실행형 및 브라우저 호스팅 애플리케이션을 개발할 때 보안 모델을 고려해야 합니다. WPF 독립 실행형 애플리케이션은 Windows Installer(.msi), XCopy 또는 ClickOnce를 사용하여 배포되었는지 여부에 관계없이 무제한 권한(CASFullTrust 권한 집합)으로 실행됩니다. ClickOnce를 사용하여 부분 신뢰 독립 실행형 WPF 애플리케이션을 배포하는 것은 지원되지 않습니다. 그러나 완전 신뢰 호스트 애플리케이션은 .NET Framework 애드인 모델을 사용하여 부분 신뢰 AppDomain을 만들 수 있습니다. 자세한 내용은 WPF Add-Ins 개요참조하세요.
WPF 브라우저 호스팅 애플리케이션은 Windows Internet Explorer 또는 Firefox에서 호스트되며 XBAP(XAML 브라우저 애플리케이션) 또는 느슨한 XAML(Extensible Application Markup Language) 문서일 수 있습니다. 자세한 내용은 WPF XAML 브라우저 애플리케이션 개요참조하세요.
경고
XBAP는 Internet Explorer 및 이전 버전의 Firefox와 같은 레거시 브라우저가 작동해야 합니다. 이러한 이전 브라우저는 일반적으로 Windows 10 및 Windows 11에서 지원되지 않습니다. 최신 브라우저는 보안 위험으로 인해 XBAP 앱에 필요한 기술을 더 이상 지원하지 않습니다. XBAP를 사용하도록 설정하는 플러그 인은 더 이상 지원되지 않습니다. 자세한 내용은 WPF 브라우저 호스팅 애플리케이션(XBAP) 관련자주 묻는 질문을 참조하세요.
WPF 브라우저 호스팅 애플리케이션은 기본적으로 부분 신뢰 보안 샌드박스 내에서 실행되며, 기본 CAS인터넷 영역 권한 집합으로 제한됩니다. 이렇게 하면 일반적인 웹 애플리케이션이 격리될 것으로 예상하는 것과 동일한 방식으로 WPF 브라우저 호스팅 애플리케이션을 클라이언트 컴퓨터에서 효과적으로 격리할 수 있습니다. XBAP는 배포 URL의 보안 영역 및 클라이언트의 보안 구성에 따라 모든 신뢰까지 권한을 상승시킬 수 있습니다. 자세한 내용은 WPF 부분 신뢰 보안참조하세요.
이 항목에서는 WPF(Windows Presentation Foundation) 독립 실행형 및 브라우저 호스팅 애플리케이션의 보안 모델에 대해 설명합니다.
이 항목에는 다음 섹션이 포함되어 있습니다.
보안 승격하는 WPF 애플리케이션 개발을 위한
리소스
안전한 탐색
XBAP의 경우 WPF는 애플리케이션과 브라우저의 두 가지 탐색 유형을 구분합니다.
애플리케이션 탐색 브라우저에서 호스팅되는 애플리케이션 내의 콘텐츠 항목 간 탐색입니다. 브라우저 탐색 브라우저 자체의 콘텐츠 및 위치 URL을 변경하는 탐색입니다. 애플리케이션 탐색(일반적으로 XAML)과 브라우저 탐색(일반적으로 HTML) 간의 관계는 다음 그림에 나와 있습니다.
XBAP가 탐색하기에 안전한 것으로 간주되는 콘텐츠 형식은 주로 애플리케이션 탐색 또는 브라우저 탐색이 사용되는지 여부에 따라 결정됩니다.
애플리케이션 탐색 보안
애플리케이션 탐색은 다음 네 가지 유형의 콘텐츠를 지원하는 팩 URI로 식별할 수 있는 경우 안전한 것으로 간주됩니다.
콘텐츠 형식 | 묘사 | URI 예제 |
---|---|---|
자원 | 빌드 형식의 Resource프로젝트에 추가되는 파일입니다. | pack://application:,,,/MyResourceFile.xaml |
콘텐츠 | 빌드 형식의 Content프로젝트에 추가되는 파일입니다. | pack://application:,,,/MyContentFile.xaml |
원본 사이트 | 빌드 형식이 None프로젝트에 추가되는 파일입니다. | pack://siteoforigin:,,,/MySiteOfOriginFile.xaml |
애플리케이션 코드 | 컴파일된 코드 비하인드가 있는 XAML 리소스입니다. -또는- 빌드 형식의 Page프로젝트에 추가되는 XAML 파일입니다. |
pack://application:,,,/MyResourceFile
.xaml
|
메모
애플리케이션 데이터 파일 및 팩 URI에 대한 자세한 내용은 WPF 애플리케이션 리소스, 콘텐츠 및 데이터 파일
이러한 콘텐츠 형식의 파일은 사용자가 또는 프로그래밍 방식으로 탐색할 수 있습니다.
사용자 탐색. 사용자가 Hyperlink 요소를 클릭하여 탐색합니다.
프로그래밍 방식 탐색. 애플리케이션은 예를 들어 NavigationWindow.Source 속성을 설정하여 사용자를 포함하지 않고 탐색합니다.
브라우저 탐색 보안
브라우저 탐색은 다음 조건에서만 안전한 것으로 간주됩니다.
사용자 탐색. 사용자는 중첩된 Frame아니라 기본 NavigationWindow내에 있는 Hyperlink 요소를 클릭하여 탐색합니다.
영역. 탐색 중인 콘텐츠는 인터넷 또는 로컬 인트라넷에 있습니다.
프로토콜. 사용 중인 프로토콜은 http, https, 파일또는 mailto입니다.
XBAP가 이러한 조건을 준수하지 않는 방식으로 콘텐츠로 이동하려고 하면 SecurityException 예외가 발생합니다.
웹 브라우징 소프트웨어 보안 설정
컴퓨터의 보안 설정에 따라 웹 검색 소프트웨어에 부여된 액세스 권한이 결정됩니다. 웹 검색 소프트웨어에는 Internet Explorer 및 PresentationHost.exe포함하여 WinINet 또는 UrlMon API를 사용하는 모든 애플리케이션 또는 구성 요소가 포함되어 있습니다.
Internet Explorer는 다음을 포함하여 Internet Explorer에서 또는 Internet Explorer에서 실행할 수 있는 기능을 구성할 수 있는 메커니즘을 제공합니다.
.NET Framework에 의존하는 구성 요소
ActiveX 컨트롤 및 플러그 인
다운로드 수
스크립팅
사용자 인증
이러한 방식으로 보호될 수 있는 기능 컬렉션은 인터넷, 인트라넷, 신뢰할 수 있는 사이트및 제한된 사이트 영역에 대해 영역별로 구성됩니다. 다음 단계에서는 보안 설정을 구성하는 방법을 설명합니다.
제어판엽니다.
네트워크 및 인터넷 클릭한 다음 인터넷 옵션클릭합니다.
인터넷 옵션 대화 상자가 나타납니다.
보안 탭에서 보안 설정을 구성할 영역을 선택합니다.
사용자 지정 수준 단추를 클릭합니다.
보안 설정 대화 상자가 나타나고 선택한 영역에 대한 보안 설정을 구성할 수 있습니다.
메모
Internet Explorer에서 인터넷 옵션 대화 상자에 연결할 수도 있습니다. 도구 클릭한 다음 인터넷 옵션클릭합니다.
Windows Internet Explorer 7부터 .NET Framework에 대한 다음 보안 설정이 포함됩니다.
느슨한 XAML. Internet Explorer에서 XAML 파일로 이동하고 풀 수 있는지 여부를 제어합니다. (사용, 사용 안 함 및 프롬프트 옵션).
XAML 브라우저 애플리케이션. Internet Explorer가 XBAP로 이동하여 실행할 수 있는지 여부를 제어합니다. (사용, 사용 안 함 및 프롬프트 옵션).
기본적으로 이러한 설정은 인터넷, 로컬 인트라넷및 신뢰할 수 있는 사이트 영역에 대해 사용하도록 설정되며 제한된 사이트 영역에서는 사용하지 않도록 설정됩니다.
보안 관련 WPF 레지스트리 설정
인터넷 옵션을 통해 사용할 수 있는 보안 설정 외에도 다음과 같은 레지스트리 값을 사용하여 다양한 보안에 민감한 WPF 기능을 선택적으로 차단할 수 있습니다. 값은 다음 키 아래에 정의됩니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Features
다음 표에서는 설정할 수 있는 값을 나열합니다.
값 이름 | 값 형식 | 가치 데이터 |
---|---|---|
XBAP 사용 불가 | REG_DWORD | 1은 비허용, 0은 허용. |
루스Xaml금지 | REG_DWORD | 1은 허용하지 않음; 0은 허용. |
웹브라우저 비허용 | REG_DWORD | 1은 비허용; 0은 허용. |
미디어 오디오 금지 | REG_DWORD | 1을 허용하지 않음; 0을 허용함. |
미디어이미지비허용 | REG_DWORD | 1은 비허용; 0은 허용. |
미디어비디오차단 | REG_DWORD | 1은 금지합니다. 0은 허용합니다. |
ScriptInteropDisallow | REG_DWORD | 1: 허용하지 않음; 0: 허용. |
웹브라우저 제어 및 기능 제어 설정
WPF WebBrowser 컨트롤을 사용하여 웹 콘텐츠를 호스트할 수 있습니다. WPF WebBrowser 컨트롤은 기본 웹 브라우저 ActiveX 컨트롤을 감쌉니다. WPF는 WPF WebBrowser 컨트롤을 사용하여 신뢰할 수 없는 웹 콘텐츠를 호스트할 때 애플리케이션을 보호하기 위한 몇 가지 지원을 제공합니다. 그러나 일부 보안 기능은 WebBrowser 컨트롤을 사용하여 애플리케이션에서 직접 적용해야 합니다. WebBrowser ActiveX 컨트롤에 대한 자세한 내용은 WebBrowser 컨트롤 개요 및 자습서참조하세요.
메모
이 섹션은 WebBrowser 사용하여 HTML 콘텐츠로 이동하므로 Frame 컨트롤에도 적용됩니다.
WPF WebBrowser 컨트롤을 사용하여 신뢰할 수 없는 웹 콘텐츠를 호스트하는 경우 애플리케이션은 부분 신뢰 AppDomain 사용하여 잠재적으로 악의적인 HTML 스크립트 코드로부터 애플리케이션 코드를 격리해야 합니다. 애플리케이션이 InvokeScript 메서드 및 ObjectForScripting 속성을 사용하여 호스트된 스크립트와 상호 작용하는 경우 특히 그렇습니다. 자세한 내용은 WPF Add-Ins 개요참조하세요.
애플리케이션이 WPF WebBrowser 컨트롤을 사용하는 경우 보안을 강화하고 공격을 완화하는 또 다른 방법은 Internet Explorer 기능 제어를 사용하도록 설정하는 것입니다. 기능 제어는 Internet Explorer에 새롭게 추가된 요소로, 관리자와 개발자가 Internet Explorer의 기능과 WPF WebBrowser 컨트롤이 감싸고 있는 WebBrowser ActiveX 컨트롤을 호스트하는 애플리케이션의 기능을 구성할 수 있도록 합니다. 기능 컨트롤은 CoInternetSetFeatureEnabled 함수를 사용하거나 레지스트리의 값을 변경하여 구성할 수 있습니다. 기능 컨트롤에 대한 자세한 내용은
WPF WebBrowser 컨트롤을 사용하는 독립 실행형 WPF 애플리케이션을 개발하는 경우 WPF는 애플리케이션에 대해 다음 기능 컨트롤을 자동으로 사용하도록 설정합니다.
기능 제어 |
---|
기능_MIME_처리 |
FEATURE_MIME_SNIFFING |
기능_객체_캐싱 |
FEATURE_SAFE_BINDTOOBJECT |
기능 창 제한사항 |
기능_영역_고도 |
파일다운로드_제한_기능 |
FEATURE_RESTRICT_ACTIVEXINSTALL (ActiveX 설치 제한 기능) |
기능_애드온_관리 |
HTTP 사용자 이름 비밀번호 비활성화 기능 |
FEATURE_SECURITYBAND |
FEATURE_UNC_저장된파일확인 |
FEATURE_VALIDATE_NAVIGATE_URL |
FEATURE_DISABLE_TELNET_PROTOCOL (텔넷 프로토콜 비활성화 기능) |
기능_WEBOC_팝업관리 |
FEATURE_DISABLE_LEGACY_COMPRESSION (구식 압축 비활성화 기능) |
FEATURE_SSLUX |
이러한 기능 컨트롤은 무조건 사용하도록 설정되므로 완전 신뢰 애플리케이션이 손상될 수 있습니다. 이 경우 특정 애플리케이션 및 호스팅 중인 콘텐츠에 대한 보안 위험이 없으면 해당 기능 제어를 사용하지 않도록 설정할 수 있습니다.
기능 컨트롤은 WebBrowser ActiveX 개체를 인스턴스화하는 프로세스에 의해 적용됩니다. 따라서 신뢰할 수 없는 콘텐츠로 이동할 수 있는 독립 실행형 애플리케이션을 만드는 경우 추가 기능 컨트롤을 사용하도록 설정하는 것이 좋습니다.
메모
이 권장 사항은 MSHTML 및 SHDOCVW 호스트 보안에 대한 일반적인 권장 사항을 기반으로 합니다. 자세한 내용은 MSHTML 호스트 보안 FAQ: II 1부 및 MSHTML 호스트 보안 FAQ : II2부를 참조하세요.
실행 파일의 경우 레지스트리 값을 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 |
파일을 찾을 수 없는 경우 제한 구역 기능 |
실행 파일의 경우 레지스트리 값을 0으로 설정하여 다음 기능 제어를 사용하지 않도록 설정하는 것이 좋습니다.
기능 제어 |
---|
FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT |
Windows Internet Explorer에서 WPF WebBrowser 컨트롤을 포함하는 제한된 신뢰도의 XBAP(XAML 브라우저 애플리케이션)를 실행하는 경우, WPF는 Internet Explorer 프로세스의 주소 공간에서 WebBrowser ActiveX 컨트롤을 호스트합니다. WebBrowser ActiveX 컨트롤은 Internet Explorer 프로세스에서 호스트되므로 Internet Explorer에 대한 모든 기능 컨트롤도 WebBrowser ActiveX 컨트롤에 대해 사용하도록 설정됩니다.
Internet Explorer에서 실행되는 XBAP는 일반 독립 실행형 애플리케이션에 비해 추가 보안 수준을 얻습니다. 이 추가 보안은 Internet Explorer 및 WebBrowser ActiveX 컨트롤이 Windows Vista 및 Windows 7에서 기본적으로 보호 모드로 실행되기 때문입니다. 보호 모드에 대한 자세한 내용은 보호 모드 Internet Explorer에서 의 이해하고의 작업하기를 참조하세요.
메모
인터넷 영역에 있는 동안 Firefox에서 WPF WebBrowser 컨트롤을 포함하는 XBAP를 실행하려고 하면 SecurityException이 발생합니다. 이는 WPF 보안 정책 때문입니다.
부분적으로 신뢰할 수 있는 클라이언트 애플리케이션에 대해 APTCA 어셈블리 사용 중지
관리되는 어셈블리가 GAC(전역 어셈블리 캐시)에 설치되면 사용자가 설치할 명시적 권한을 제공해야 하므로 완전히 신뢰할 수 있습니다. 완전히 신뢰할 수 있으므로 완전히 신뢰할 수 있는 관리되는 클라이언트 애플리케이션만 사용할 수 있습니다. 부분적으로 신뢰할 수 있는 애플리케이션이 사용할 수 있도록 하려면 APTCA(AllowPartiallyTrustedCallersAttribute)로 표시해야 합니다. 부분 신뢰에서 실행하기에 안전하도록 테스트된 어셈블리만 이 특성으로 표시되어야 합니다.
그러나 APTCA 어셈블리가 GAC에 설치된 후 보안 결함을 나타낼 수 있습니다. 보안 결함이 발견되면 어셈블리 게시자는 기존 설치의 문제를 해결하고 문제가 발견된 후 발생할 수 있는 설치로부터 보호하기 위해 보안 업데이트를 생성할 수 있습니다. 업데이트에 대한 한 가지 옵션은 어셈블리를 제거하는 것이지만 어셈블리를 사용하는 다른 완전히 신뢰할 수 있는 클라이언트 애플리케이션이 중단될 수 있습니다.
WPF는 APTCA 어셈블리를 제거하지 않고 부분적으로 신뢰할 수 있는 XBAP에 대해 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 파일이 브라우저에서 직접 열리면 기본 인터넷 영역 권한 설정에 따라 보안 샌드박스 환경에서 로드됩니다.
그러나 독립 실행형 애플리케이션에서 느슨한 XAML 파일로 NavigationWindow 또는 Frame로 이동하는 경우 보안 동작은 다르게 나타납니다.
두 경우 모두 탐색되는 느슨한 XAML 파일은 호스트 애플리케이션의 사용 권한을 상속합니다. 그러나 이 동작은 특히 신뢰할 수 없거나 알 수 없는 엔터티에 의해 느슨한 XAML 파일이 생성된 경우 보안 관점에서 바람직하지 않을 수 있습니다. 이 유형의 콘텐츠를 외부 콘텐츠라고 하며, 탐색할 때 Frame 및 NavigationWindow 모두 격리하도록 구성할 수 있습니다. 격리는 Frame 및 NavigationWindow대한 다음 예제와 같이 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 파일 탐색은 PresentationHost 프로세스와 관련된 WPF 브라우저 호스팅 인프라를 기반으로 구현됩니다. 그러나 이러한 파일이 Windows Vista 및 Windows 7에서 Internet Explorer를 통해 직접 로드될 때보다 보안 수준이 약간 낮습니다(이 경우에도 PresentationHost를 통해 로드됩니다). 웹 브라우저를 사용하는 독립 실행형 WPF 애플리케이션이 Internet Explorer의 추가 보호 모드 보안 기능을 제공하지 않기 때문입니다.
보안을 촉진하는 WPF 애플리케이션 개발을 위한 리소스
다음은 보안을 촉진하는 WPF 애플리케이션을 개발하는 데 도움이 되는 몇 가지 추가 리소스입니다.
지역 | 자원 |
---|---|
관리 코드 | 애플리케이션 보안을 위한 패턴 및 실천 사례 지침 |
CAS | 코드 액세스 보안 |
ClickOnce | ClickOnce 보안 및 배포 |
WPF | WPF 부분 신뢰 보안 |
참고
- WPF 부분 신뢰 보안
- WPF 보안 전략 - 플랫폼 보안
- WPF 보안 전략 - 보안 엔지니어링
- 애플리케이션 대한
패턴 및 사례 보안 지침 - 코드 액세스 보안
- ClickOnce 보안 및 배포
- WPF XAML
.NET Desktop feedback