ASP.NET 구성 보안

업데이트: 2007년 11월

ASP.NET 구성은 전체 서버를 구성하기 위한 기능, ASP.NET 응용 프로그램 또는 응용 프로그램 하위 디렉터리의 개별 페이지를 제공합니다. 인증 모드, 페이지 캐싱, 컴파일러 옵션, 사용자 지정 오류, 디버그 및 추적 옵션 등의 기능을 구성할 수 있습니다. 이 항목에서는 로컬 또는 원격 ASP.NET 응용 프로그램을 구성할 때 유용한 정보를 통해 구성 기능의 보안을 최적화하는 방법에 대해 설명합니다. ASP.NET의 기타 기능의 보안을 유지하는 방법에 대한 자세한 내용은 참고 항목 단원에 나열된 정보를 참조하십시오.

유용한 코딩 및 구성 방법을 적용하여 응용 프로그램의 보안을 향상시킬 수 있지만 Microsoft Windows와 Microsoft IIS(인터넷 정보 서비스)에 대한 최신 보안 업데이트와 Microsoft SQL Server 또는 기타 멤버 자격 데이터 소스에 대한 업데이트를 사용하여 응용 프로그램 서버를 항상 최신 상태로 유지하는 것도 중요합니다.

안전한 코드 작성 및 응용 프로그램 보안을 위한 자세한 내용을 보려면 Michael Howard와 David LeBlanc이 공동 저술한 "Writing Secure Code" 또는 Microsoft Patterns and Practices 웹 사이트에 제공된 지침을 참조하십시오.

중요:

ASP.NET 구성 시스템에서는 ASP.NET 리소스 및 기능만 구성합니다. ASP.NET 리소스 이외의 리소스는 IIS의 구성 기능을 사용하여 구성합니다. IIS 구성에 대한 자세한 내용은 Working with the Metabase (IIS 6.0)IIS Metabase Property Reference를 참조하십시오.

구성 파일 보안

다음 표에서는 Machine.config 파일과 루트 Web.config 파일에 기본적으로 설정되어 있는 ACL(액세스 제어 목록)을 보여 줍니다. 이 두 파일은 모두 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG 디렉터리에 있습니다. 이 ACL은 디렉터리 자체에도 설정되지만 Power Users 그룹을 위한 수정 권한을 포함합니다. 이 디렉터리는 읽기 전용입니다.

Windows 계정

권한

관리자

모든 권한

ASP.NET 컴퓨터 계정(<server>\ASPNET)

읽기 및 실행

IIS_WPG(<server>\IIS_WPG)

읽기 및 실행

LOCAL SERVICE

읽기 및 실행

NETWORK SERVICE

읽기 및 실행

Power Users(<server>\Power Users)

수정

SYSTEM

모든 권한

사용자(<server>\Users)

읽기 및 실행

다음 표에서는 Web.config 파일 및 configSource 특성에 나열된 모든 파일에 설정되어야 하는 ACL을 보여 줍니다.

Windows 계정

권한

관리자

모든 권한

IIS_WPG(<server>\IIS_WPG)

읽기 및 실행

INTERACTIVE

읽기

인터넷 게스트 계정(<server>\IUSR_<server>)

읽기

NETWORK

읽기

NETWORK SERVICE

읽기

SYSTEM

모든 권한

사용자(<server>\Users)

읽기 및 실행

ASP.NET 웹 사이트 관리 도구 계정

특수

ASP.NET 구성 시스템은 구성 설정의 편집 방법에 관계없이 구성 파일에 설정된 ACL을 받아들입니다. 자세한 내용은 ASP.NET 구성 파일 편집을 참조하십시오.

구성 값 보안

응용 프로그램의 구성 파일에 중요한 정보를 저장할 경우에는 보호되는 구성을 사용하여 중요한 값을 암호화해야 합니다. 이 중에서도 특히 중요한 정보에는 machineKey 구성 요소에 저장되는 암호화 키와 connectionStrings 구성 요소에 저장되는 데이터 소스 연결 문자열이 포함됩니다. 자세한 내용은 보호되는 구성을 사용하여 구성 정보 암호화를 참조하십시오.

구성 암호화 키 컨테이너 보호

암호화 키를 사용할 때는 키가 저장되는 파일을 보호하는 일이 매우 중요합니다. 이 파일을 컨테이너라고도 합니다. 특히 고려해야 할 중요한 사항은 컨테이너에 관련된 보호 수준입니다. 이 컨테이너는 일반적인 운영 체제 파일에 저장되며 암호화 키에 대한 액세스는 이 파일의 ACL을 통해 관리됩니다. ACL은 파일이 작성된 폴더에서 상속할 수 있습니다. 범위가 로컬 컴퓨터인 키 컨테이너(useMachineContainer"true")는 %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys의 숨김 폴더에 저장됩니다.

기본적으로 키 컨테이너를 만든 사용자는 키에 대한 모든 액세스 권한을 갖습니다. 관리자 그룹을 포함하는 기타 사용자의 경우 컨테이너에 대한 액세스 권한은 컨테이너에 설정된 ACL에 따라 결정됩니다. 기타 사용자는 ASP.NET IIS 등록 도구(ASP.NET IIS 등록 도구(Aspnet_regiis.exe))의 –pa 스위치를 사용하여 컨테이너에 대한 액세스 권한을 받을 수 있습니다. 지정된 키를 사용하여 암호화하거나 암호를 해독하려는 사용자는 키 컨테이너에 액세스하는 데 필요한 권한을 갖고 있어야 합니다.

경우에 따라서는 관리자 권한이 없는 사용자도 암호화 키를 만들 수 있습니다. 이는 키가 없는 상황에서 응용 프로그램이 구성 암호화를 요청하는 경우에 발생할 수 있습니다. 컨테이너가 없으면 컨테이너가 작성되고 암호화 작업이 실행됩니다.

이 경우 .NET Framework에서는 현재 사용자의 ACL을 사용하여 필요한 키와 관련 컨테이너를 만듭니다. 이때 관리자 권한이 있는 사용자가 암호화 키 컨테이너에 액세스할 때 액세스가 거부되는 문제가 발생할 가능성이 있습니다. 관리자는 위에 언급한 폴더의 실제 파일에 대한 소유권을 획득하여 키에 대한 액세스 권한을 다시 찾을 수 있습니다. 그러나 가장 좋은 방법은 관리자 권한이 있는 사용자가 필요한 키를 미리 만들어 암호화 단계에서 키가 생성되지 않도록 하는 것입니다.

공유 호스팅 환경의 구성 보안

공유 호스팅 환경에서 악의적인 사용자가 구성 파일을 직접 수정하거나 구성 API 및 기타 관리/구성 도구를 통해 구성 설정을 수정할 가능성이 있습니다. 구성 섹션을 잠그면 응용 프로그램 구성이 수정되지 않도록 방지하는 데 도움이 됩니다. 이렇게 하려면 location 요소를 Machine.config 파일이나 계층 구조에서 제한하려는 구성 파일보다 더 위쪽에 있는 구성 파일에 추가하면 됩니다. location 요소를 사용하면 자식 구성 파일의 설정이 변경되지 않게 할 수 있습니다. 자세한 내용은 방법: ASP.NET 구성 설정 잠금방법: 위치 설정을 사용하여 특정 디렉터리 구성을 참조하십시오.

원격 구성

기본적으로 원격 구성은 사용하지 않도록 설정되어 있습니다. 이 구성을 사용할 수 있게 설정하면 DCOM 수준에서 사용자가 인증되고 구성 데이터를 읽거나 쓸 수 있는 권한은 로컬 관리자에게만 부여됩니다. 자세한 내용은 ASP.NET 원격 구성 파일 편집을 참조하십시오.

사용자 지정 구성 공급자

현재 사용자의 보안 토큰에 관계없이 사용자 지정 섹션 처리기 코드는 호스팅 프로세스 계정의 자격 증명을 사용하여 실행됩니다. 웹 시나리오의 경우 Windows 2000과 Windows XP의 <server>\ASPNET 계정, Windows Server 2003의 NETWORK SERVICE 계정 또는 명시적으로 구성된 사용자 계정입니다. 클라이언트 시나리오의 경우에는 현재 실행 중인 프로세스의 ID입니다.

구성 시스템에서는 사용자 지정 구성 섹션 처리기를 호출하기 전에 권한을 설정하며 호출은 .NET Framework에서 어떤 방식으로도 신뢰되지 않습니다. 호출은 응용 프로그램의 신뢰 권한으로 실행됩니다. ASP.NET 구성 시스템에서는 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG 디렉터리를 신뢰하지만 계층 구조에서 해당 디렉터리의 하위 디렉터리는 신뢰하지 않습니다.

사용자 지정 구성 섹션 처리기에서 CAS(코드 액세스 보안) 요청 특성을 설정하여 권한을 가져와야 합니다. 자세한 내용은 ASP.NET 코드 액세스 보안 또는 코드 액세스 보안 기본 사항을 참조하십시오.

구성 파일에서 파일 잠금 유지

구성 파일에 저장하거나 파일 핸들을 여는 작업을 여러 번 시도하는 경우에만 구성 파일이 잠깁니다. 악의적인 사용자는 Machine.config 파일이나 루트 Web.config 파일을 잠그려고 시도할 수 있지만, 완전 신뢰가 있어야 이 작업을 수행할 수 있으며 완전 신뢰는 기본적으로 ASP.NET에서 비활성화되어 있습니다.

구성 API를 사용하여 임의의 파일 읽기

구성 API의 클래스는 응용 프로그램 도메인의 일부가 아닌 디렉터리나 파일 확장명이 .config가 아닌 파일을 읽을 수 없습니다.

IIS 메타베이스 설정이 ASP.NET 요청에 적용됨

IIS에서 ASP.NET 응용 프로그램에 대한 요청을 받으면 해당 응용 프로그램의 ASP.NET 구성 설정에 관계없이 IIS 메타베이스 설정이 ASP.NET 응용 프로그램에 적용됩니다. 이러한 제약 조건 때문에 ASP.NET 응용 프로그램에 사용자가 액세스할 수 없게 되거나 ASP.NET 응용 프로그램의 보안 설정이 덜 제한적이 됩니다.

예를 들어, Web.config 파일의 보안 설정은 사이트에 대한 익명 액세스가 허용되도록 설정되어 있는 반면 IIS 메타베이스의 보안 설정은 인증된 사용자만 사이트에 액세스할 수 있도록 설정되어 있으면 익명 사용자가 사이트에 액세스하는 것이 거부됩니다. 이 문제를 해결하려면 IIS 관리자에서 익명 사용자를 허용하도록 웹 응용 프로그램을 구성하면 됩니다.

IIS 기능 보안에 대한 자세한 내용은 Security in IIS 6.0을 참조하십시오.

오류 메시지 및 이벤트

다음 단원에서는 예기치 않은 오류 메시지와 이벤트에 의해 노출되는 보안 위험을 줄일 수 있는 방법에 대해 설명합니다.

예외

원치 않는 소스에 중요한 정보가 노출되지 않게 하려면 응용 프로그램에서 자세한 오류 메시지를 표시하지 않거나, 클라이언트가 웹 서버 자체인 경우에만 자세한 오류 메시지를 표시하도록 구성합니다. 자세한 내용은 customErrors 요소(ASP.NET 설정 스키마)를 참조하십시오.

이벤트 로그

서버가 Windows Server 2003을 실행 중인 경우에는 이벤트 로그의 보안을 유지하고, 이벤트 로그에 대해 간접적인 서비스 거부 공격을 방지하도록 이벤트 로그의 크기, 보존 및 기타 기능과 관련된 매개 변수를 설정하여 응용 프로그램의 보안을 향상시킬 수 있습니다. 이벤트 로그를 구성하는 방법에 대한 자세한 내용을 보려면 Windows 도움말 및 지원에서 "이벤트 뷰어"를 검색하십시오.

상태 모니터링

성공 및 실패한 로그온 시도는 ASP.NET 상태 모니터링 기능을 통해 기록됩니다. 즉, 기본 구성에서 로그인 시도가 실패할 경우 응용 프로그램 이벤트 로그에 사용자 이름과 기타 진단 정보가 기록됩니다. 이 정보가 개인 정보로 유지되도록 이벤트 로그에 대한 액세스가 제한되어 있는지 확인하십시오.

참고 항목

개념

ASP.NET 상태 모니터링 개요

구성 설정 잠금

ASP.NET 원격 구성 파일 편집

Login 컨트롤 보안

역할 보안

멤버 자격 보안

데이터 액세스 보안

기타 리소스

ASP.NET 웹 사이트 보안

보호되는 구성을 사용하여 구성 정보 암호화

보호되는 구성을 사용하여 구성 정보 암호화