Windows Forms의 보안 개요
업데이트: 2007년 11월
.NET Framework가 출시되기 전에는 사용자의 컴퓨터에서 실행되는 모든 코드가 해당 컴퓨터의 사용자가 가지고 있는 리소스 액세스 권한과 동일한 권한을 가졌습니다. 예를 들어, 사용자가 파일 시스템에 액세스할 수 있으면 코드도 파일 시스템에 액세스할 수 있었고, 사용자가 데이터베이스에 액세스할 수 있으면 코드도 데이터베이스에 액세스할 수 있었습니다. 이러한 권한은 사용자가 로컬 컴퓨터에 명시적으로 설치한 실행 파일의 코드에는 허용되지만 인터넷이나 로컬 인트라넷에서 받은 악의적인 코드에는 허용되지 않습니다. 이러한 코드는 권한 없이 사용자의 컴퓨터 리소스에 액세스해서는 안 됩니다.
.NET Framework에서는 코드가 갖는 권한을 사용자가 갖는 권한과 구분할 수 있도록 코드 액세스 보안이라는 인프라를 제공합니다. 기본적으로 인터넷이나 인트라넷에서 받은 코드는 부분 신뢰 환경으로 알려진 환경에서만 실행할 수 있습니다. 부분 신뢰 환경에서는 응용 프로그램이 일련의 제한을 받기 때문에 응용 프로그램이 로컬 하드 디스크에 액세스할 수 없으며 비관리 코드도 실행할 수 없습니다. .NET Framework에서는 코드의 출처가 어디인지, 코드에 강력한 이름의 어셈블리가 있는지 여부, 코드가 인증서로 서명되었는지 여부 등 코드의 ID를 기준으로 코드가 액세스할 수 있는 리소스를 제어합니다.
Windows Forms 응용 프로그램을 배포하는 데 사용하는 ClickOnce 기술을 사용하면 부분 신뢰 환경, 완전 신뢰 환경 또는 높은 권한이 있는 부분 신뢰 환경에서 실행되는 응용 프로그램을 쉽게 개발할 수 있습니다. ClickOnce에서는 응용 프로그램이 신뢰할 수 있는 방법으로 로컬 사용자의 완전 신뢰 권한이나 높은 권한을 요청할 수 있도록 권한 높이기 및 신뢰할 수 있는 응용 프로그램 배포와 같은 기능을 제공합니다.
.NET Framework의 보안 이해
코드 액세스 보안을 사용하면 코드의 출처 및 코드 ID의 기타 측면에 따라 서로 다른 수준으로 코드를 신뢰할 수 있습니다. 공용 언어 런타임에서 보안 정책을 확인하기 위해 사용하는 증명 정보에 대한 자세한 내용은 증명 정보를 참조하십시오. 코드 액세스 보안은 악의적인 코드로부터 컴퓨터를 보호하고 신뢰할 수 있는 코드가 보안상 의도적으로 또는 실수로 손상되지 않도록 합니다. 뿐만 아니라 코드 액세스 보안을 사용하면 응용 프로그램에 부여할 권한만 지정할 수 있으므로 응용 프로그램이 수행할 수 있는 작업을 보다 상세하게 제어할 수 있습니다. 코드 액세스 보안은 공용 언어 런타임을 대상으로 하는 모든 관리 코드에 적용되며, 해당 코드가 코드 액세스 보안 권한 검사를 한 번도 수행하지 않는 경우에도 마찬가지로 적용됩니다. .NET Framework의 보안에 대한 자세한 내용은 주요 보안 개념 및 코드 액세스 보안 기본 사항을 참조하십시오.
사용자가 웹 서버 또는 파일 공유에서 직접 Windows Forms 실행 파일을 실행하는 경우, 코드가 있는 위치와 코드가 시작되는 방법에 따라 응용 프로그램에 부여되는 신뢰 수준이 달라집니다. 응용 프로그램을 실행하면 응용 프로그램이 자동으로 평가되어 공용 언어 런타임에 명명된 권한 집합을 받습니다. 기본적으로 로컬 컴퓨터의 코드에는 Full Trust 권한 집합이 부여되고, 로컬 네트워크의 코드에는 Local Intranet 권한 집합이 부여되며, 인터넷의 코드에는 Internet 권한 집합이 부여됩니다.
참고: |
---|
.NET Framework 버전 1.0 서비스 팩 1과 서비스 팩 2에서는 인터넷 영역 코드 그룹에 Nothing 권한 집합이 부여됩니다. 다른 모든 .NET Framework 릴리스에서는 인터넷 영역 코드 그룹에 Internet 권한 집합이 부여됩니다. 각 권한 집합에 부여되는 기본 권한은 기본 보안 정책 항목을 참조하십시오. 부여 받은 권한에 따라 응용 프로그램이 제대로 실행될 수도 있고 보안 예외가 생성될 수도 있습니다. 대부분의 Windows Forms 응용 프로그램은 ClickOnce를 사용하여 배포됩니다. ClickOnce 배포를 생성하는 데 사용되는 도구의 보안 기본값은 앞에서 설명한 보안 기본값과 다른 값입니다. 자세한 내용은 다음 설명을 참조하십시오. |
보안 정책은 수정할 수 있기 때문에 응용 프로그램에 실제로 부여되는 권한이 기본값과 다를 수 있습니다. 이것은 응용 프로그램이 어떤 컴퓨터에서는 권한이 있지만 다른 컴퓨터에서는 권한이 없을 수 있다는 것을 의미합니다.
보다 안전한 Windows Forms 응용 프로그램 개발
보안은 응용 프로그램 개발의 모든 단계에서 매우 중요합니다. 보안 코딩 지침을 검토하고 이에 따라 개발을 시작합니다.
그런 다음 응용 프로그램을 완전 신뢰 환경에서 실행해야 하는지 아니면 부분 신뢰 환경에서 실행해야 하는지 여부를 결정합니다. 응용 프로그램을 완전 신뢰 환경에서 실행하면 로컬 컴퓨터의 리소스에 쉽게 액세스할 수 있지만, 보안 코딩 지침 항목에 따라 응용 프로그램을 엄격하게 디자인하고 개발하지 않으면 응용 프로그램과 해당 사용자가 심각한 보안 위험에 노출됩니다. 응용 프로그램을 부분 신뢰 환경에서 실행하면 보다 안전한 응용 프로그램을 쉽게 개발할 수 있고 위험이 크게 줄어들지만, 특정 기능의 구현 방법과 관련하여 보다 철저한 계획을 세워야 합니다.
부분 신뢰 환경, 즉 Internet 또는 Local Intranet 권한 집합을 선택하는 경우 이 환경에서의 응용 프로그램의 동작 방식을 결정합니다. Windows Forms에서는 부분 신뢰 환경에서 기능을 안전하게 구현하는 방법을 제공합니다. 데이터 액세스와 같은 특정 응용 프로그램 부분을 부분 신뢰 환경과 완전 신뢰 환경에 대해 다르게 디자인하고 작성할 수 있습니다. 응용 프로그램 설정과 같은 일부 Windows Forms 기능은 부분 신뢰 환경에서 작동하도록 디자인되었습니다. 자세한 내용은 응용 프로그램 설정 개요를 참조하십시오.
응용 프로그램을 실행할 때 부분 신뢰 환경에서 허용되는 권한보다 더 많은 권한이 필요하지만 완전 신뢰 환경을 원하지 않는 경우에는 필요한 추가 권한만 어설션한 상태로 부분 신뢰 환경에서 실행할 수 있습니다. 예를 들어, 부분 신뢰 환경에서 실행하려고 하는데 사용자의 파일 시스템에 있는 디렉터리에 대한 읽기 전용 액세스 권한을 응용 프로그램에 부여해야 하는 경우, 해당 디렉터리에 대해서만 FileIOPermission을 요청할 수 있습니다. 이러한 방법을 제대로 사용하면 응용 프로그램에는 더 많은 기능을 제공하고 사용자에 대한 보안 위험은 최소화할 수 있습니다.
부분 신뢰 환경에서 실행할 응용 프로그램을 개발하는 경우, 응용 프로그램에서 사용해야 하는 권한과 응용 프로그램에서 선택적으로 사용할 수 있는 권한을 추적해야 합니다. 모든 권한이 파악되면 응용 프로그램 수준에서 선언적으로 권한을 요청해야 합니다. 권한 요청을 통해 응용 프로그램에 필요한 권한 및 사용하지 않을 권한에 대한 정보를 .NET Framework 런타임에 알립니다. 권한 요청에 대한 자세한 내용은 권한 요청 및 권한 요청을 참조하십시오.
선택적 권한을 요청할 때는 부여되지 않은 권한이 필요한 작업을 응용 프로그램이 수행할 경우 생성되는 보안 예외를 처리해야 합니다. SecurityException을 적절히 처리하면 응용 프로그램이 계속 작업을 수행할 수 있습니다. 응용 프로그램은 특정 기능을 사용자가 사용할 수 없도록 할지 여부를 예외를 통해 결정할 수 있습니다. 예를 들어, 필요한 파일 권한이 사용자에게 부여되지 않은 경우에는 저장 메뉴 옵션을 비활성화할 수 있습니다.
때때로 적절한 권한을 모두 어설션했는지 여부를 알기 어려운 경우가 있습니다. 예를 들어, 화면에서 보안을 위협하지 않을 것처럼 보이는 메서드 호출이 실행 도중 특정 시점에 파일 시스템에 액세스할 수 있습니다. 필요한 모든 권한이 갖추어지지 않은 응용 프로그램을 배포하면 데스크톱에서 이 응용 프로그램을 디버깅할 때는 테스트 결과가 좋지만 배포할 경우 문제가 발생할 수 있습니다. .NET Framework 2.0 SDK와 Visual Studio 2005에는 모두 응용 프로그램에 필요한 권한을 계산할 수 있는 도구가 포함되어 있습니다. 이 도구는 각각 MT.exe 명령줄 도구와 Visual Studio의 권한 계산 기능입니다.
다음 항목에서는 Windows Forms의 추가 보안 기능에 대해 설명합니다.
항목 |
설명 |
---|---|
부분 신뢰 환경에서 파일 및 데이터에 액세스하는 방법을 설명합니다. |
|
부분 신뢰 환경에서 인쇄 기능에 액세스하는 방법을 설명합니다. |
|
부분 신뢰 환경에서 창 조작, 클립보드 사용, 비관리 코드 호출 등의 작업을 수행하는 방법을 설명합니다. |
적절한 권한을 사용하여 응용 프로그램 배포
Windows Forms 응용 프로그램을 클라이언트 컴퓨터에 배포하는 가장 일반적인 방법은 응용 프로그램을 실행하는 데 필요한 모든 구성 요소를 설명하는 배포 기술인 ClickOnce를 사용하는 것입니다. ClickOnce에서는 매니페스트라는 XML 파일을 사용하여 응용 프로그램을 구성하는 파일과 어셈블리 및 응용 프로그램에 필요한 권한을 설명합니다.
ClickOnce에는 클라이언트 컴퓨터에 대한 높은 권한을 요청하기 위한 두 가지 기술이 있으며 이 두 기술은 모두 Authenticode 인증서를 사용합니다. 이 인증서를 통해 사용자에게 응용 프로그램의 소스를 신뢰할 수 있음을 확인시켜 줄 수 있습니다.
다음 표에서는 이러한 기술에 대해 설명합니다.
높은 권한 기술 |
설명 |
---|---|
권한 높이기 |
응용 프로그램이 처음 실행될 때 사용자에게 보안 대화 상자를 표시합니다. 권한 높이기 대화 상자에서는 사용자가 응용 프로그램에 추가 신뢰 권한을 부여할 것인지 여부에 대한 결정을 내릴 수 있도록 응용 프로그램을 게시한 사람에 대한 정보를 사용자에게 알려 줍니다. |
신뢰할 수 있는 응용 프로그램 배포 |
시스템 관리자가 클라이언트 컴퓨터에 게시자의 Authenticode 인증서를 설치하는 작업을 한 번 수행해야 합니다. 이 때부터 해당 인증서로 서명된 모든 응용 프로그램은 신뢰할 수 있는 것으로 간주되므로 추가 메시지 없이 로컬 컴퓨터에서 완전 신뢰 환경으로 실행될 수 있습니다. |
배포 환경에 따라 선택할 기술이 달라집니다. 자세한 내용은 ClickOnce 배포 전략 선택을 참조하십시오.
기본적으로 Visual Studio 또는 .NET Framework 2.0 SDK 도구(Mage.exe 및 MageUI.exe)를 사용하여 배포되는 ClickOnce 응용 프로그램은 완전 신뢰 권한이 있는 클라이언트 컴퓨터에서 실행되도록 구성되어 있습니다. 부분 신뢰 권한을 사용하거나 몇몇 추가 권한만 사용하여 응용 프로그램을 배포하려면 이 기본값을 변경해야 합니다. 이 기본값은 배포를 구성할 때 Visual Studio 또는 .NET Framework 2.0 SDK 도구의 MageUI.exe를 사용하여 변경할 수 있습니다. MageUI.exe를 사용하는 방법에 대한 자세한 내용은 연습: 수동으로 ClickOnce 응용 프로그램 배포를 참조하십시오.
ClickOnce의 보안 요소와 권한 높이기에 대한 자세한 내용은 ClickOnce 배포 및 보안을 참조하십시오. 신뢰할 수 있는 응용 프로그램 배포에 대한 자세한 내용은 신뢰할 수 있는 응용 프로그램 배포 개요를 참조하십시오.
응용 프로그램 테스트
Visual Studio를 사용하여 Windows Forms 응용 프로그램을 배포한 경우 개발 환경에서 설정된 제한된 권한이나 부분 신뢰 환경에서 디버깅을 사용할 수 있습니다.
참고 항목
개념
참조
매니페스트 생성 및 편집 도구, 그래픽 클라이언트(MageUI.exe)