다음을 통해 공유


Windows Forms의 추가 보안 고려 사항

.NET Framework 보안 설정으로 인해 부분 신뢰 환경에서는 로컬 컴퓨터에서와는 다르게 응용 프로그램이 실행될 수 있습니다. .NET Framework에서는 파일 시스템, 네트워크 및 관리되지 않는 API와 같은 중요한 로컬 리소스에 대한 액세스가 제한됩니다. 보안 설정은 보안 시스템에서는 확인할 수 없는 Microsoft Win32 API나 기타 API 호출 기능에 영향을 줍니다. 또한 파일과 데이터 액세스 및 인쇄를 비롯한 응용 프로그램의 다른 측면에도 영향을 줍니다. 부분 신뢰 환경에서의 파일 및 데이터 액세스에 대한 자세한 내용은 Windows Forms의 파일 및 데이터 액세스 추가 보안을 참조하십시오. 부분 신뢰 환경에서의 인쇄에 대한 자세한 내용은 Windows Forms의 인쇄 추가 보안을 참조하십시오.

다음 단원에서는 부분 신뢰 환경에서 실행되는 응용 프로그램에서의 클립보드 사용, 창 조작 수행 및 Win32 API 호출 방법에 대해 설명합니다.

클립보드 액세스

UIPermission 클래스가 클립보드에 대한 액세스를 제어하고 관련된 UIPermissionClipboard 열거형 값이 액세스 수준을 나타냅니다. 다음 표에서는 가능한 권한 수준을 보여 줍니다.

UIPermissionClipboard 값

설명

AllClipboard

클립보드 사용에 제한을 받지 않습니다.

OwnClipboard

약간의 제한을 받으면서 클립보드를 사용할 수 있습니다. 복사 또는 잘라내기 명령 작업과 같이 클립보드에 데이터를 넣는 기능은 제한을 받지 않습니다. 텍스트 상자와 같이 붙여넣기를 허용하는 내장 컨트롤은 클립보드 데이터를 받아들일 수 있지만 사용자 정의 컨트롤은 프로그래밍 방식으로 클립보드에서 데이터를 읽을 수 없습니다.

NoClipboard

클립보드를 사용할 수 없습니다.

기본적으로 로컬 인트라넷 영역에는 AllClipboard 액세스가 부여되고 인터넷 영역에는 OwnClipboard 액세스가 부여됩니다. 이것은 응용 프로그램에서 클립보드에 데이터를 복사할 수는 있지만 프로그래밍 방식으로 클립보드에 데이터를 붙여넣거나 클립보드에서 데이터를 읽을 수는 없다는 것을 의미합니다. 이러한 제한으로 인해 신뢰 수준이 완전 신뢰가 아닌 프로그램은 다른 응용 프로그램이 클립보드에 복사한 내용을 읽을 수 없습니다. 응용 프로그램에 클립보드에 대한 모든 액세스가 필요하지만 해당 권한이 없을 경우에는 응용 프로그램의 권한을 높여야 합니다. 권한 높이기에 대한 자세한 내용은 일반 보안 정책 관리를 참조하십시오.

창 조작

UIPermission 클래스는 창 조작 및 기타 UI 관련 작업을 수행할 수 있는 권한도 제어하며 관련된 UIPermissionWindow 열거형 값은 액세스 수준을 나타냅니다. 다음 표에서는 가능한 권한 수준을 보여 줍니다.

기본적으로 로컬 인트라넷 영역에는 AllWindows 액세스가 부여되고 인터넷 영역에는 SafeTopLevelWindows 액세스가 부여됩니다. 이것은 인터넷 영역에서는 응용 프로그램이 대부분의 창 작업 및 UI 작업을 수행할 수 있지만 창의 모양이 수정된다는 것을 의미합니다. 수정된 창에는 풍선 알림(처음 실행한 경우)과 수정된 제목 표시줄 텍스트가 표시되며, 제목 표시줄에 닫기 단추가 없습니다. 풍선 알림과 제목 표시줄은 응용 프로그램이 부분 신뢰 환경에서 실행되고 있음을 응용 프로그램 사용자에게 알려 줍니다.

UIPermissionWindow 값

설명

AllWindows

사용자는 모든 창과 사용자 입력 이벤트를 제한 없이 사용할 수 있습니다.

SafeTopLevelWindows

사용자가 안전한 최상위 창과 안전한 하위 창만 그리기 작업에 사용할 수 있고, 이러한 최상위 창 및 하위 창 내의 사용자 인터페이스에 대한 사용자 입력 이벤트만 사용할 수 있습니다. 이러한 안전한 창에는 명확하게 레이블이 지정되며 최소 및 최대 크기 제한이 있습니다. 이러한 제한은 시스템 로그온 화면이나 시스템 바탕 화면을 모방하는 등의 악의적인 스푸핑 공격을 방지하며 프로그래밍 방식으로 부모 창과 포커스 관련 API에 액세스하거나 ToolTip 컨트롤을 사용하는 것을 제한합니다.

SafeSubWindows

사용자가 안전한 하위 창만 그리기 작업에 사용할 수 있고, 해당 하위 창 내의 사용자 인터페이스에 대한 사용자 입력 이벤트만 사용할 수 있습니다. 예를 들어, 브라우저 내에 표시되는 컨트롤은 안전한 하위 창입니다.

NoWindows

사용자가 창이나 사용자 인터페이스 이벤트를 사용할 수 없습니다. 사용자 인터페이스를 사용할 수 없습니다.

UIPermissionWindow 열거형이 나타내는 각 권한 수준은 각 상위 권한 수준보다 더 적은 수의 작업을 허용합니다. 다음 표에서는 SafeTopLevelWindowsSafeSubWindows 값이 제한하는 작업을 보여 줍니다. 각 멤버에 필요한 정확한 권한은 .NET Framework 클래스 라이브러리 설명서에서 해당 멤버에 대한 참조 항목을 참조하십시오.

SafeTopLevelWindows 권한은 다음 표에 나열된 작업을 제한합니다.

구성 요소

제한된 작업

Application

Control

Cursor

  • Clip 속성 설정

  • Hide 메서드 호출

DataGrid

Form

NotifyIcon

  • NotifyIcon 구성 요소 사용은 완전히 제한됩니다.

SafeSubWindows 값은 SafeTopLevelWindows 값이 제한하는 작업뿐 아니라 다음 표에 나열된 작업도 제한합니다.

구성 요소

제한된 작업

CommonDialog

  • CommonDialog 클래스에서 파생된 대화 상자 표시

Control

Cursor

MessageBox

  • Show 메서드 호출

타사 컨트롤 호스팅

다른 종류의 창 조작은 폼에서 타사 컨트롤을 호스팅하는 경우에 발생할 수 있습니다. 타사 컨트롤은 사용자가 직접 개발하여 컴파일하지 않은 사용자 지정 UserControl입니다. 호스팅 시나리오를 악용하기는 어렵지만 타사 컨트롤이 렌더링 화면을 확장하여 폼의 전체 영역을 가리는 것은 논리적으로 가능합니다. 그런 다음 이 컨트롤은 중요한 대화 상자를 모방하여 사용자 이름/암호 조합이나 은행 계좌 번호 등의 정보를 사용자에게 요청할 수 있습니다.

이러한 잠재적인 위험을 방지하려면 신뢰할 수 있는 공급업체의 타사 컨트롤만 사용해야 합니다. 확인할 수 없는 소스에서 다운로드한 타사 컨트롤을 사용할 경우에는 소스 코드에서 악용 가능성을 확인하는 것이 좋습니다. 소스에 악의적인 내용이 없는지 확인한 후 어셈블리를 컴파일하여 소스와 어셈블리가 일치하는지 확인해야 합니다.

Win32 API 호출

응용 프로그램을 디자인할 때 Win32 API 함수의 호출이 필요한 경우 비관리 코드에 액세스하게 됩니다. 이 경우 Win32 API 호출이나 값을 사용할 때는 코드가 창이나 운영 체제에 대해 수행하는 작업을 확인할 수 없습니다. SecurityPermission 클래스와 SecurityPermissionFlag 열거형의 UnmanagedCode 값이 비관리 코드에 대한 액세스를 제어합니다. 응용 프로그램은 UnmanagedCode 권한이 부여된 경우에만 비관리 코드에 액세스할 수 있습니다. 기본적으로 로컬에서 실행되고 있는 응용 프로그램만 비관리 코드에 액세스할 수 있습니다.

Windows Forms의 몇몇 멤버는 비관리 코드에 대한 액세스를 제공하며 이러한 액세스에는 UnmanagedCode 권한이 필요합니다. 다음 표에서는 이 권한을 필요로 하는 System.Windows.Forms 네임스페이스의 멤버를 보여 줍니다. 멤버에 필요한 권한에 대한 자세한 내용은 .NET Framework 클래스 라이브러리 설명서를 참조하십시오.

구성 요소

멤버

Application

CommonDialog

Control

Help

NativeWindow

Screen

SendKeys

응용 프로그램에 비관리 코드를 호출할 수 있는 권한이 없을 경우에는 응용 프로그램에서 UnmanagedCode 권한을 요청하거나 해당 기능을 구현할 수 있는 다른 방법을 고려해야 합니다. 대부분의 경우 Windows Forms은 Win32 API 함수를 관리되는 방식으로 호출할 수 있는 대안을 제공합니다. 이러한 대안이 없는 상황에서 비관리 코드에 액세스해야 할 경우에는 응용 프로그램의 권한을 높여야 합니다.

비관리 코드를 호출할 수 있는 권한을 부여하면 응용 프로그램이 거의 모든 작업을 수행할 수 있습니다. 따라서 비관리 코드를 호출할 수 있는 권한은 신뢰할 수 있는 소스의 응용 프로그램에만 부여해야 합니다. 또는 응용 프로그램에 따라 비관리 코드를 호출하는 기능을 옵션으로 지정하거나 완전 신뢰 환경에서만 이 기능을 사용하도록 할 수 있습니다. 위험한 권한에 대한 자세한 내용은 위험한 권한 및 정책 관리를 참조하십시오. 권한 높이기에 대한 자세한 내용은 일반 보안 정책 관리를 참조하십시오.

참고 항목

개념

Windows Forms의 파일 및 데이터 액세스 추가 보안

Windows Forms의 인쇄 추가 보안

Windows Forms의 보안 개요

ClickOnce 응용 프로그램 보안

기타 리소스

Windows Forms 보안