Silverlight를 설치하려면 여기를 클릭합니다.*
Korea 대한민국변경|Microsoft 전체 사이트
MSDN
|개발자 센터|라이브러리|MSDN Online|다운로드|코드 센터|Subscriptions|MSDN 행사
MSDN Home   MSDN Home
MSDN 홈 > .NET Framework 홈 > 기술 문서(Articles) > Windows Presentation Foundation 보안 샌드 박스

Windows Presentation Foundation 보안 샌드 박스

  


Mark Alcazar
Windows Presentation Foundation 플랫폼
Microsoft Corporation

2005 년 9 월

개요: XBAP 보안 샌드 박스 작성에 사용하는 기술 개요 및 샌드 박스의 기능 세트를 개설하여 개발시의 트레이드 오프에 대해 논리적으로 설명합니다.

적용 대상:
   WinFX Runtime Components September CTP (PDC 2005 Build)
   Windows Presentation Foundation (WPF)
   Web Browser Applications (WBAs)

목차

시작
개요
기능에 관한 고려사항
철저한 방어
마무리

시작

WinFX 플랫폼의 일부인 Windows Presentation Foundation(WPF)에 의해 XAML 브라우저 응용 프로그램(XBAP)이라는 새로운 응용 프로그램이 도입되었습니다. XAML 브라우저 응용 프로그램은 브라우저에 실행되어 인스톨되지 않는 온라인 전용 응용 프로그램입니다. 이 응용 프로그램은 보안 샌드 박스로 실행되어 Web 상의 WPF 플랫폼의 기능을 활용합니다.

이 문서에서는 XBAP 보안 샌드 박스의 작성에 사용하는 기술의 개요 및 샌드 박스의 기능 세트를 개설하고, 개발시의 트레이드 오프에 대해 논리적으로 설명합니다.

  • XAML 브라우저 응용 프로그램에서 가능한 조작의 종류에 대해 설명합니다.
  • 경험 풍부한 개발자에 의한 보안 샌드 박스의 설계 이해를 돕습니다.
  • 샌드 박스내에서 할 수 없는 조작 가운데 어떤 것이 설계에 의해서 제한되는지, 어떤 것이 버그 가능성이 있는지 판단하여 피드백을 제공합니다.
주의   이 문서는 WinFX 런타임과 XAML 브라우저 응용 프로그램 (XBAP)에 대한 사전 지식이 있는 독자를 대상으로 기술하였습니다.

WinFX 런타임과 XAML 브라우저 응용 프로그램 개요는 Web 에 있어서의 Windows Presentation Foundation: XAML 브라우저 응용 프로그램를 참조해 주세요.

개요

샌드 박스란 일반적인 보안 용어로 응용 프로그램의 실행권한을 제한하는 환경을 말합니다. 인터넷에서 다운로드 한 응용 프로그램의 공급원이 불분명하거나 신뢰할 수 없는 경우에 샌드 박스화가 더욱 중요합니다. 여기에서는 XAML 브라우저 응용 프로그램용으로 작성된 Windows Presentation Foundation 샌드 박스의 개요를 설명합니다.

코드 액세스 보안

WPF 샌드 박스는 .NET Framework 의 기초 보안 기술인 코드 액세스 보안(CAS)을 사용해 구축된 보안 모델입니다. 이 보안 모델은 권한 집합과 배포 영역의 편성을 사용해 응용 프로그램의 권한을 결정합니다. CAS 에 대한 자세한 내용은 코드 액세스 보안 (영문)을 참조해 주세요.

액세스 허가 요구

코드 액세스 보안의 중요한 특징은 코드가 특정 레벨의 액세스 허가를 요구할 수 있는 것입니다. 일반적으로 권한 검증이 필요한 경우는 코드가 명시적으로 특정 액세스 허가를 요구 합니다. 디스크에 액세스 하는 API 를 예로 들어 봅시다. 파일을 작성하는 코드가 FileIOPermission.Demand() 를 호출합니다. 이 요구에 의해 .NET 런타임이 스택 워크를 실행하여 호출 모듈안에 필요한 액세스 권한을 가지고 있는지 판별합니다.

CAS 의 스택 워크의 구조는 다양하고 복잡합니다. 상세한 내용은 MSDN 코드 액세스 보안 (영문)를 참조해 주세요.

보안 예외

코드가 필요한 액세스 권한을 보유하고 있지 않은 경우, 요구는 실패되며 .NET Framework 런타임이 보안 예외를 보냅니다. 이 때문에 개발자가 샌드 박스에서 제공할 수 없는 기능을 이용해 XAML 브라우저 응용 프로그램을 작성하려면, 보안 예외가 발생합니다.

샌드 박스와 부분 신뢰

샌드 박스는 일반적인 보안 용어로 응용 프로그램의 실행권한을 제한하는 환경입니다. 부분 신뢰는 코드 액세스 보안에 근거하는 보안 샌드 박스를 말합니다. 인터넷에서 배포 한 XBAP 와 XAML (Extensible Application Markup Language) 파일은 모두 부분 신뢰 범위 내에서 실행됩니다.

이 문서에서 사용하고 있는 부분 신뢰란 "인터넷으로부터 배포 한 XBAP 에 적용된 샌드 박스"와 같은 의미가 있습니다. CAS는 영역에 근거하는 보안 체제이므로, 인트라넷 응용 프로그램은 인터넷 응용 프로그램용의 샌드 박스보다 대규모 샌드 박스를 요구할 수 있습니다. 인터넷 샌드 박스가 제약이 많은 어려운 환경으로, 다양한 상황을 설정할 수 있기 때문에 이 문서에서는 인터넷 샌드 박스로 실행하는 기능에 초점을 맞춰 설명합니다.

인터넷 액세스 권한 집합

인터넷 샌드 박스를 사용한 응용 프로그램의 기본값으로 실행을 허가할 수 있는 조작의 종류를 간단하게 소개합니다. 이래 목록의 실제 액세스 허가에 대한 자세한 내용은 System.Security.Permissions Namespace (영문)을 참조해 주세요.

인터넷 존에서 사용할 수 있는 디폴트 액세스 허가

FileDialogPermission.Open 표준의 [File Open] 대화 상자를 안전한 방법으로 사용하는 것을 허가합니다.
IsolatedStorageFilePermission 상태 정보의 최대 512K까지 디스크상의 안전한 장소에 쓰는 것을 허가합니다.
UIPermission.SafeTopLevelWindows 하나의 브라우저 윈도우 액세스를 허가합니다. 추가 WPF 윈도우를 열 수 없습니다.
PrintingPermission.Safeprinting 사용자에 prompt를 표시하는 안전한 방법의 인쇄를 허가합니다.
WebPermission 응용 프로그램 원래 배포 사이트의 네트워크 액세스를 허가합니다.
WebBrowserPermission WPF Frame 요소에 대해 HTML (또는 다른 XBAP)를 포함한 컨텐츠에 안전하고 확실한 방법으로 안내하는 것을 허가합니다 (WinFX Beta 2 에서 컴퓨터에 WPF 가 설치 되어 있는 경우만, 액세스 허가가 인터넷 존에 추가됩니다).
MediaPermission WPF 의 Image, Audio 및 Video 요소에 대해, 안전하고 확실한 방법으로 컨텐츠를 호스트 하는 것을 허가합니다 (WinFX Beta 2 에서는 컴퓨터에 WPF 가 설치 되어 있는 경우만, 이 액세스 허가가 인터넷 존에 추가됩니다).

인터넷 존에서 사용할 수 없는 액세스 허가의 예


FileIOPermission 액세스 허가는 디스크상에서 파일의 읽고 쓰기를 제어합니다. 인터넷 존의 응용 프로그램에서는 사용자의 하드 디스크에 있는 파일을 읽어낼 수 없습니다.
RegistryPermission 이 액세스 허가는 레지스트리의 읽고 쓰기를 제어합니다. 인터넷 존의 응용 프로그램에서는 사용자의 레지스트리내 상태에 액세스 하거나 상태를 제어할 수 없습니다.
SecurityPermission.UnmanagedCode 이 액세스 허가는 Win32 네이티브 기능 호출을 제어합니다.

전반적 방침

어떤 조작을 실행 가능하도록 하는 경우, 최종 사용자에게 보안 위험이 생기지 않도록 구현을 분석할 필요가 있습니다. 일반적인 가이드 라인으로 WPF개발 팀은 기존의 Web 플랫폼에서 실행 가능한 시나리오를 보고 샌드 박스로도 가능하게 해야 할지를 검토합니다. 다른 Web 플랫폼에서는 실행할 수 없는 새로운 시나리오를 샌드 박스로 가능하게 하려면 철저한 분석을 하여, 최종 사용자에게 보안 위험이 발생하지 않도록 해야 합니다. 예:

  • 이미지의 경우, 공급원 이외의 Web 사이트에서 컨텐츠를 호스트 하는 것이 허가되었습니다. 이것은 다른 Web 플랫폼 (HTML)에서 이 기능이 허가되어 있기 때문입니다.
  • 3D 와 같이 새로운 기능은 (모든 그래픽 조작이 브라우저의 윈도우에 의한 제약을 받고 있는 경우) 보안 위험이 없다는 것을 입증하면 부분 신뢰로 실행할 수 있습니다.

부분 신뢰로 실행할 수 있는 기능 세트

WPF 플랫폼의 기능 가운데 일부만이 부분 신뢰로 실행할 수 있습니다. 일부만 가능한 것은 부분 신뢰로 실행할 수 있는 기능에 관한 타당성이 엄밀하게 검증되었기 때문입니다. WPF 기능 세트는 다음의 4 개의 카테고리로 나누어져 있습니다.

  1. 부분 신뢰로 실행 가능한 기능 (버튼 등)
  2. 부분 신뢰로 실행 가능하고, 안전상의 이유로 동작에 다소의 변경이 추가되는 기능 (팝업 컨트롤 등)
  3. 설계에 따라 부분 신뢰로는 실행이 불가능한 기능 (Window.DragMove 메소드나 비관리형 코드를 사용해 상호 운용 가능한 메소드 등)
  4. 현재는 부분 신뢰로 실행할 수 없지만 차기의 릴리스로 추가될 가능성이 있는 기능

설계에 따라 부분 신뢰로 실행할 수 없는 기능은 특정 액세스 허가를 명시적으로 요구합니다. 예를 들어 윈도우상에서 DragMove 메소드를 호출하면 UIPermission.AllWindows 가 요구됩니다.

현재는 실행할 수 없지만 향후 사용 가능성이 있는 기능은 일반적으로 보안 예외로 합니다. API 에 대해 현재의 문서에서 부분 신뢰로 실행할 수 없는 또는 특별한 권한이 필요하다고 기재하지는 않습니다.

Windows Presentation Foundation 는 아직 개발 프로세스가 진행 중입니다. 부분 신뢰로 동작돼야 하는 기능에 대한 요구는 버그일 가능성이 있습니다. 마이크로소프트의 개발 팀에 연락해 주십시오 (전자메일 : wpfsec@microsoft.com)

부분 신뢰로 실행 가능한 기능

전반
  • 브라우저 윈도우
  • 공급원 사이트로의 액세스
  • 분리된 기억 영역 파일의 입출력
  • 파일 오픈 다이얼로그
  • UIAutomation 공급자
  • Cicero IME
  • 커멘드 명령
  • 타블렛 PC 의 stylus/잉크

Web 통합

  • IE 다운로드 다이얼로그
  • 최상위레벨의 사용자 주도 네비게이션
  • 프레임 또는 네비게이션 윈도우내에서 호스트 되는 HTML
  • mailto: 링크
  • URI (커멘드행) 인수
  • ASMX Web 서비스
  • HTML IFrame 로 호스트 되는 XBAP

XPS 문서

  • XPS 문서 viewer

시각 효과
  • 2-D
  • 3-D
  • 애니메이션

미디어(및 크로스 도메인 렌더링)

(and cross-domain rendering)

  • 이미지
  • 오디오
  • 영상

유동문서

  • 페이지 편집
  • 텍스트 플로우
  • 최적 패러그래프
  • 하이픈 자동 삽입

텍스트

  • 매입 폰트와 시스템 폰트
  • Adobe CFF
  • 모양

편집
  • 텍스트 박스
  • 리치 텍스트 박스
  • plaintext와 잉크 클립보드
    • 프로그램에 의한 절취/카피
    • 사용자 주도의 붙이기 (Ctrl + V 등)

컨트롤

  • 버튼
  • 슬라이더
  • 스크롤 viewer
  • 팝업 컨트롤 (윈도우내에 제한)
  • 팝업 베이스의 컨트롤 (메뉴 등)
  • 기본 컨트롤

설계에 따라 버전 1 에서는 사용할 수 없는 기능

전반
  • 독립 실행형 윈도우
  • 새로운 윈도우의 개시
  • 응용 프로그램으로 정의된 다이얼로그
  • 응용 프로그램으로 기동된 보존 다이얼로그
  • UIAutomation 클라이언트

Web 통합

  • Windows Communication Foundation Web 서비스

통합 전반

  • HwndHost
  • 음성인식의 완전한 지원

미디어
  • 비트 맵 효과

편집

  • 리치(RTF, XAML) 클립보드
  • 스펠링

사용 기능에 관한 고려사항

각 기능을 부분 신뢰로 실행 가능하도록 만드는 결정 사항에 대해 설명합니다.

Windows, 스푸핑(Spoofing), 피싱

UI 스푸핑과 피싱은 신뢰 받은 응용 프로그램의 UI 를 신뢰도가 낮은 응용 프로그램이 모방하는 보안 공격 수법을 나타냅니다. 예를 들어 Windows의 로그 온 UI를 꼭 닮은 윈도우를 작성하는 것은 일종의 스푸핑에 해당됩니다. Windows XP SP2로 제공되어 있는 Internet Explorer 에서는 스푸핑에 대한 HTML의 취약성을 경감시키는 기능이 도입되었습니다. 여기에서는XAML 브라우저 응용 프로그램이 스푸핑 대책으로서 채용하고 있는 모델을 소개합니다.

브라우저 윈도우

XAML 브라우저 응용 프로그램의 컨텐츠는 브라우저의 메인 윈도우 인플레이스에 표시됩니다. 스푸핑에 대한 취약성은 브라우저 표준이 신뢰 받은 UI (주소 바, 상태 바, 윈도우 아이콘, 브라우저 크롬등)에 의해서 경감됩니다. 게다가 표준의 WPF 윈도우로 사용 가능한 프로그래밍 모델 가운데, 브라우저로 사용할 수 있는 것은 일부로 한정되어 있습니다 (예를 들어 브라우저의 윈도우의 아이콘을 변경하려면 InvalidOperationException를 보냅니다.).

윈도우

인터넷 샌드 박스에서는 XAML 브라우저 응용 프로그램으로 WPF 윈도우를 작성할 수 없습니다. 윈도우 (또는 HwndSource 에 상당하는 클래스)를 작성하려면 UIPermission.AllWindows가 요구됩니다. 상기의 스푸핑에 의한 위험을 경감하기 위한 조치이지만, 개발할 수 있는 응용 프로그램의 종류도 제한됩니다. WPF의 차기 릴리스에서는 이 제한을 없애기 위한 대책을 강구할 예정입니다만, 당면의 대책은 아래서 설명합니다.

팝업 컨트롤 (및 그 서브 클래스)을 인터넷 존에서 인스턴스화 할 수 있습니다. 부분 신뢰의 팝업 컨트롤은 항상 브라우저 윈도우의 컨텐츠 영역내로 한정되었기 때문에 스푸핑의 가능성이 낮아집니다.

MessageBox 클래스를 부분 신뢰로 사용할 수 있습니다. MessageBox 에 의해서 작성된 UI는 제약이 있기 때문에 시스템 다이얼로그를 전부 모방하거나 사용자의 입력을 취득하는 것은 불가능합니다.

응용 프로그램으로 대화 상자나 2 번째의 윈도우를 표시할 필요가 있는 경우는 다음과 같은 대책을 마련할 수 있습니다.

  •  인터넷상의 응용 프로그램의 대부분 (전자 상거래 사이트 등)는 대화 상자를 사용하고 있지 않습니다. 그 대신에 웹사이트식의 모델을 사용해 상태 메시지나 오류 메시지를 페이지상에 “인프레이스" 표시합니다. 개발중의 응용 프로그램에서도 대화 상자 대신에 “인프레이스” UI 모델이 적합한지 검토해 주세요.
  •  상태 메시지를 표시할 필요가 있는 응용 프로그램에서는 팝업 컨트롤을 사용할 수 있습니다.
  •  응용 프로그램으로 상태 또는 경고를 표시하는 경우는 System.Windows.MessageBox 를 사용합니다
  •  대화 상자나 2 번째의 윈도우를 표시할 필요가 있는 응용 프로그램에는 System.Windows.Forms.Form 클래스를 사용할 수 있습니다. 이것은 다음과 같은 제약이 있습니다.
    •  윈도우에 컨텐츠가 인터넷에서 취득된 것을 보여주는 신뢰 풍선이 표시됩니다.
    •  대화 상자 내에서는 System.Windows.Forms 컨트롤만을 호스트 할 수 있습니다.
    • System.Windows.Forms 을 사용하여, 추가 working set가 필요합니다.

그래픽 조작

그래픽 (3D애니메이션 포함) 조작은 모두 톱 레벨의 브라우저 윈도우로 한정되어 부분 신뢰로 실행할 수 있습니다.

이미지와 디코더

이미지 요소를 사용한 이미지의 표시는 부분 신뢰로 실행 가능합니다. 이미지는 응용 프로그램의 리소스나, 응용 프로그램의 원래 배포 사이트의 이미지, 다른 Web 사이트의 이미지 등을 참조하는 URI 를 사용해 표시할 수 있습니다. 다만 URI 이 다른 Web 사이트상의 이미지를 참조하는 경우는 이미지 요소로부터 프로그램에 의해서 메타데이터에 액세스 할 수 없습니다 (자세한 내용은 네트워크 섹션 참조). WPF 플랫폼에서는 다양한 이미지 형식이 지원됩니다. (.jpg,.gif,.tiff,.png,.bmp 등).

이미지 디코더는 Web 플랫폼 취약성의 원인의 하나로 판명되었습니다. WPF 플랫폼에서 사용할 수 있는 디코더/엔코더의 종류를 확장하기 위한 일반적인 메커니즘이 있지만, 부분 신뢰로 사용할 수 있는 것은 일부 코덱에 한정되어 있습니다. 마이크로소프트에서는 까다로운 테스트와 검토 프로세스를 통과한 코덱만을 부분 신뢰로 실행 가능하게 하는 것을 추천합니다.

BitmapCodecInfo 클래스에 따라 공개된 정보에는 설치 된 코덱에 관한 정보가 포함되어 정보개시 위험이 있습니다. 부분 신뢰로 이 클래스의 속성에 액세스 할 수 없습니다.

편집

Web 응용 프로그램에서 클립보드 액세스를 가능하게 하는 것은 보안 및 프라이버시상 문제가 있습니다. Web 응용 프로그램이 클립보드에 액세스 할 수 있으면, 중요한 데이터가 취득될 우려가 있습니다. 한편, 응용 프로그램 사이에서의 잘라내기/붙이기 조작은 최종 사용자기 당연 할 수 있는 기본적인 조작의 하나입니다. WPF 에서는 이 문제의 해결책으로서 카피 조작과 사용자 주도의 붙이기 조작만을 허가하는 방법을 채용합니다.

구체적으로 설명하면, 붙이기 커멘드를 호출하려면 사용자가 붙이기 조작에 할당할 수 있는 키의 편성 (CTRL + V)을 사용하거나, 브라우저의 편집 메뉴를 사용할 필요가 있습니다. 그러나 프로그램에 의해서 (예를 들어 DataObject 클래스에서 직접) 붙이기 커멘드를 호출하려면, 보안 예외가 되어 실패합니다. 이 모델에서는 사용자가 기대하고 있는 조작을 실행할 수 있는 한편 악질적인 응용 프로그램에 의해서 최종 사용자의 중요한 데이터가 취득하는 것을 막을 수 있습니다.

현재는 클립보드의 형식 가운데 일부만이 부분 신뢰로 실행 가능합니다 (예를 들어, CF_TEXT). 부분적으로 신뢰 받고 있는 응용 프로그램과 완전하게 신뢰 받고 있는 응용 프로그램의 사이에 권한의 악용이 승격되는 것을 막기 위해, CF_XAML 등 보다 리치한 형식은 현시점에서는 사용할 수 없습니다. 이 제한은 WPF 의 차기의 릴리스로 해결될 예정입니다. 드래그 앤드 드롭의 사용에 대해서는 악질적인 수단으로 이용되는 케이스가 빈번히 발생합니다.

네비게이션

네비게이션은 Web 응용 프로그램에 고유한 요소의 하나입니다. 부분 신뢰에서는 응용 프로그램이 다음의 세가지의 장소의 컨텐츠에 안내할 수 있습니다.

  1. 응용 프로그램에 리소스 또는 컨텐츠 파일로서 포함된 컨텐츠
  2. 공급원사이트의 서버에 게시된 컨텐츠
  3. 다른 사이트에 호스트 되어 있는 컨텐츠

다른 사이트의 컨텐츠에 안내하기 위해서는 사용자의 액션이 필요합니다. 즉, 네비게이션은 사용자가 하이퍼 링크를 클릭한 결과로 일어나는 것입니다.

도메인 안에서 네비게이션 사용자의 액션이 필요한 이유는 사용자 경험(experience)을 Windows XP SP2 로 도입한 보안 조치와 일치시키기 위해서 입니다. Internet Explorer 에서는 프로그램에 의해서 실행 파일 등이 안전하지 않은 종류의 파일에 안내하면, 브라우저의 상부에 정보 바가 표시됩니다. 이러한 Windows XP SP2 로의 보안 대책의 자세한 내용은 Windows XP Service Pack 2 Overview (영문)을 참조해 주세요. 사용자가 개시하는 네비게이션만을 지원 하는 것은 도메인간 공통의 서버에 있는 안전하지 않은 종류의 파일이 가지는 위험으로부터 사용자를 지키기 위한 보다 제한적인 대책입니다.

http: 프로토콜, mailto: 프로토콜, pack: 프로토콜에의 네비게이션은 부분 신뢰로 지원됩니다. 그러나 HTML Web 페이지로 사용할 수 있는 그 외의 프로토콜 (javascript:, mks:, res: 등)은 모든 것이 .NET Framework 응용 프로그램으로 사용할 수 있는 것은 아닙니다. 이것은 .NET Framework 가 현시점에서 모든 프로토콜을 네이티브로 지원 하지 않기 때문에 엄밀한 의미의 보안 대책이 아닙니다.

HTML 서브 프레임 네비게이션

프레임을 HTML 컨텐츠로 안내하는 것은 부분 신뢰로 가능합니다. 다만 프레임의 경우 응용 프로그램의 공급원사이트의 컨텐츠만이 허가됩니다. WPF Beta 2 에서는 프레임을 HTML 컨텐츠에 안내하는 기능을 WebBrowserPermission 가 제어됩니다.

네트워크 액세스

기본값에서는 인터넷 존에서는 응용 프로그램 원래 배포 사이트의 Web 요구 밖에 실행할 수 없습니다. 이것은 인터넷상의 페이지를 액세스 할 수 있는 것이 같은 도메인에 있는 페이지의 문서 오브젝트 모델 (DOM) 로 기존의 Web 도메인 간의 보안 모델에 따르고 있습니다. WPF 플랫폼에서는 이러한 제약을 넘어 이미지 요소나 비디오 요소가 공급원 이외의 도메인의 컨텐츠를 표시하는 것을 허가하고 있습니다. 다만 외부 사이트로부터 디코드된 비트를 읽어내는 것은 허가되지 않습니다. 예를 들어 외부 사이트로부터 취득한 이미지에 대해서 BitmapSource.CopyPixels 메소드를 호출하면 WebPermission 가 요구됩니다.

이유는 이미지와 영상의 표시가 안전한 조작으로 간주되기 때문입니다. 그러나 외부 사이트로부터의 로우데이터에 액세스 하면 개발자가 외부 사이트의 데이터를 취득하기 위해 WebPermission 가 대치됩니다.

인쇄

WPF 의 PDC 2005 이후의 릴리스에서는 WPF 컨텐츠 인쇄를 부분 신뢰로 실행 할 수 있게 될 예정입니다. 부분 신뢰로 인쇄 기능을 사용할 경우, 인쇄 대화 상자를 표시해 사용자의 동의를 얻는 것을 필수로 검토합니다. 인쇄 요구에 사용자로부터의 명시적인 동의가 필요하면 서비스 거부 (Denial-of-Service, DoS) 공격과 정보개시 공격을 막을 수 있습니다.

컨트롤과 레이아웃

WPF 의 일부인 컨트롤과 레이아웃은 부분 신뢰로 사용 가능합니다 (예를 들어 DockPanel,Grid,Button 등). 이 문서의 윈도우 섹션 의 설명대로 System.Windows.Controls.Primitives.Popup 클래스는 항상 부분 신뢰로 브라우저의 윈도우내에 들어가도록 클립 됩니다 .팝업 클래스에서 파생하는 모든 요소 (메뉴 등)도 이 클립 동작에 따릅니다.

상호 운용성

비관리형 코드로 상호 운용성을 실현하는 메소드나 속성은 부분 신뢰에서는 사용할 수 없습니다 (WindowInteropHelper 등). 이러한 클래스의 사용은 부분 신뢰로 상정되어 있지 않기 때문입니다.

입력

지금까지 설명한 보안 기능의 몇가지 (붙이기 커멘드, 네비게이션)는 사용자에 의해 시작되었는지의 확인이 필요합니다. 그 결과 프로그램에 의한 입력 이벤트의 생성은 신뢰 받은 조작으로 간주해집니다. 입력 이벤트의 생성에 사용 가능한 훅이 있는 메소드는 부분 신뢰로 사용하지 못하고, UIPermisison.Unrestricted를 요구합니다. 예를 들어 InputManager 클래스에 관련된 속성, 메소드, 이벤트의 대부분은 부분 신뢰로 사용할 수 없습니다.

그 외 기능

이미지 효과

이미지 효과는 부분 신뢰로 실행할 수 없습니다.

ActiveX controls

ActiveX 컨트롤 WPF는 현시점에서는 XAML에 임베디드 된 ActiveX 컨트롤은 지원 하지 않습니다. 응용 프로그램으로 ActiveX 컨트롤을 호스트 하고 싶은 경우는 WPF 프레임이 ActiveX 컨트롤을 호스트 하고 있는 HTML 컨텐츠를 나타내도록 해야 합니다.HTML 페이지로 ActiveX 컨트롤을 사용하는 경우와 같은 제한이 적용됩니다.

철저한 방어

안전한 시스템을 구축하려면 다수의 방어 층이 필요합니다. 성을 예로 들어보면 성벽, 다리, 내벽 등이 성을 둘러싸고 있습니다. 그 중의 하나가 무너져도 다른 방어 층이 내부의 시민들을 보호하는 구조입니다.

이 문서에서는 코드 액세스 보안에 적용되는 보안 대책과 설계상의 고려사항에 대해 설명해 왔습니다. 성의 예와 같이 WPF 플랫폼에도 다수의 방어 층이 장비되어 있습니다. 여기에서는 이러한 철저한 방어 수단에 대해서 개요를 설명합니다.

프로세스 보안

사용자의 대부분이 Administrator 권한을 사용해 컴퓨터를 실행하는 경우 그 컴퓨터로 실행하는 부정한 코드에 포괄적인 권한이 주어집니다. 이 문제에 대처하기 위해 Windows Vista 의 사용자 계정 보호 (UAP) 기능에서는 컴퓨터를 Administrators 그룹에 속하는 계정으로 실행했을 경우에서도 응용 프로그램의 권한이 제한됩니다.

Windows Vista 의 사용자는 새로운 조치로 보호받으며 WinFX 라인 타임은 Windows XP SP2 와 Windows Server 2003 에서도 사용 가능합니다. 이러한 운영체제를 사용하는 사용자를 보호하기 위해서 XBAP 는 모든 Administrator 와 파워 사용자의 토큰이 제외된 프로세스로 실행됩니다. 그 결과 앞서 설명한 CAS 보안 메커니즘에 결함이 있는 경우도 부정한 코드는 컴퓨터상에서 Administrator 권한을 가지지 않습니다.

크리티컬하고 트랜스페어렌트한 어셈블리

WPF에서는 .NET Framework의 새로운 기능으로 크리티컬하고 트랜스퍼런트한 코드를 사용하고 있습니다. 이 기능으로 WPF 어셈블리의 보안 면에서 가장 중요한 코드 속성에 메타데이터가 사용됩니다. 정적 코드 분석 툴에 의해 검토가 필요한 위험한 패턴이 검색 됩니다 (게다가 보안 면에서 가장 중요한 코드를 명시적으로 식별하기 위해 코드 베이스 전체의 보안 감사가 간단하게 됩니다).

샌드 박스 무효화와 제어

마이크로소프트에서는 WPF 플랫폼을 안전하게 하기 위해서 최대의 노력을 했지만 관리자가 최종 사용자의 컴퓨터상에서 WPF의 기능을 제한하고 싶은 상황을 생각해볼 수 있습니다.

  • 관리자가 존에 근거해 기능을 제한합니다. 예를 들어, 회사에서, 사용자의 컴퓨터상에서 인터넷 XBAP 가 실행되는 것을 금지하여, 인트라넷 XBAP의 실행만을 허가하고 싶은 경우 등을 생각할 수 있습니다.
  • 관리자가 존에서 사용 가능한 액세스 권한을 제어합니다 (예를 들어, 인트라넷 응용 프로그램에 액세스 권한을 많이 주어 인터넷 응용 프로그램의 권한을 제한하는 등).
  • 중대한 보안 취약성이 발견되었을 경우에, 수정 프로그램을 입수할 때까지 관리자는 스위치를 사용해 기능을 오프로 할 수 있습니다.

WPF에는 기능 세트의 온과 오프를 바꾸는 " 大 스윗치" (예를 들어, XBAP 를 오프로 하는 XPS 문서를 오프로 하는 등)와 개별의 기능에 적용하는 "小 스윗치" 가 있습니다.“ 大 스윗치”는 존 마다 변경할 수 있는 [인터넷 옵션] 패널의 스윗치에 대응하고 ” 小 스윗치”는 코드 액세스 허가에 대응합니다.

[인터넷 옵션] 패널로 제어

Internet Explorer 7 에서는 WPF 고유의 기능을 제어하기 위한 보안 설정이 새롭게 추가되었습니다 (Internet Explorer 의 보안 설정을 커스터마이즈 하려면 인터넷 옵션 패널의 보안 탭에 있는 사용자설정 을 클릭합니다).[인터넷 옵션 l] 패널에 표시되는 다른 보안 설정과 같이 WPF의 설정도 영역별로 나뉩니다. 대이미지 자를 표시하거나, WPF 컨텐츠를 유효 또는 무효로 할 수 있습니다. 관리자는 컴퓨터로 인터넷 XBAP를 실행하지 않고, 인터넷 XPS 문서는 대이미지자의 표시 후에 실행되도록 설정할 수 있습니다.

스위치를 사용해 설정할 수 있는 기능은 다음과 같습니다.

  • XPS 문서
  • XAML 브라우저 응용 프로그램 (XBAP)
  • XAML 페이지

관리자는 IEAK 의 사용이나 그룹 정책에 의한 변경의 배포 등의 메커니즘을 통해서 설정을 변경할 수 있습니다.

레지스트리 키를 사용한 제어

WPF 사용자 전원이 Internet Explorer 7을 사용한다고는 할 수 없습니다. Internet Explorer 7을 사용하지 않는 사용자를 위해, 모든 환경에서 기능을 오프로 할 수 있는 레지스트리 키가 있습니다.

CAS 정책을 사용한 제어

코드 액세스 보안은 Caspol 이라는 커멘드 라인 툴로 설정할 수 있습니다. 관리자는 Caspol 를 사용해 지정의 액세스 권한 집합에 포함되는 액세스 허가를 변경합니다 (예를 들어, 인터넷 존에서 사용할 수 있는 액세스 허가를 변경하는 등). 보안 정책의 관리 방법의 자세한 내용은 정책의 관리 (영문)를 참조해 주세요.

이 문서의 인터넷의 액세스 권한 집합에 설명된 것처럼, WPF 에는 인터넷 존에 추가할 수 있는 새로운 기본값의 액세스 권한이 있습니다. 관리자는 WebBrowserPermission 또는 MediaPermission를 설정하는 것으로, 광범위하게 영향을 주는 이러한 기능을 자세하게 조정할 수 있습니다.

마무리

충분한 기능을 갖추고 동시에 기본값 상태로 안전성의 높은 인터넷 플랫폼을 작성하는 것은 매우 어려운 작업입니다. 이 문서에서는 XAML 브라우저 응용 프로그램의 샌드 박스를 작성하는데 필요한 설계상의 고려사항에 대한 개요를 설명했습니다. 개발자는 XBAP를 사용해 구축할 수 있는 응용 프로그램의 종류를 파악하고 그 제약을 이해할 필요가 있습니다. XBAP 샌드 박스는 개발자에게 편리한 툴이며 샌드 박스내에서 실행되는 응용 프로그램은 모두 디폴트 상태로 안전하다는 큰 이점이 있습니다.

  

Top of Page Top of Page


Microsoft