정보보안/정보2009. 2. 27. 21:25

이번 호에서는 사이트와 가상 디렉터리 관리와 스크립트 매핑 측면에서 IIS 웹 서버를 보호하는 방법을 알아보도록 하겠다.


8. 사이트와 가상 디렉터리 관리하기

디렉터리 탐색을 통한 공격을 막기 위해 웹 사이트의 루트 디렉터리와 가상 디렉터리를 시스템이 설치된 파티션이 아닌 다른 파티션에 위치시키는 것이 좋다. 공격자들은 경로 탐색을 통해 운영체제의 프로그램이나 유틸리티를 실행시키려는 시도를 하기 때문에 웹 사이트를 시스템 파티션과 분리함으로써 이러한 위협으로부터 보호할 수 있다. 예를 들면 다음과 같은 URL을 이용하여 시스템 자원에 접근하려는 시도를 할 수 있다.

/scripts/..%5c../winnt/system32/cmd.exe

이러한 디렉터리 탐색에 의한 공격을 막을 수 있는 방법을 알아보도록 하겠다.

8.1 웹 사이트를 시스템 파티션이 아닌 다른 파티션에 위치시킨다.

IIS 설치시에 기본적으로 설정되는 루트 디렉터리인 \inetpub\wwwroot 디렉터리를 사용하지 않는다. 만약 운영체제가 C: 드라이브에 설치되어 있다면 웹 사이트를 D: 드라이브와 같은 운영체제가 설치되지 않은 다른 드라이브로 옮긴다. 이로써 디렉터리 탐색 공격에 의한 위험을 줄일 수 있다.

8.2 상위 경로 사용을 제거한다.

스크립트나 어플리케이션에서 MapPath와 같은 함수의 호출시 ".."를 사용해서 상위 경로로 접근하는 것을 거부하도록 설정한다.

상위 경로 탐색을 거부하는 방법은 다음과 같다.
① 인터넷 정보 서비스(IIS) 관리자를 실행하고 웹 사이트의 [등록정보]를 확인한다.
② [등록정보]에서 [홈 디렉터리] 탭의 [구성] 버튼을 클릭한다.
③ [응용 프로그램 구성] 창에서 [응용 프로그램 옵션] 탭을 선택한다.
④ [상위 경로 사용]의 체크를 해제한다.
 

[그림 1] 상위 경로 사용 해제하기

8.3 잠재적으로 위험한 가상 디렉터리를 제거한다.

IIS를 설치하면 기본적으로 몇 가지 샘플 어플리케이션이 가상 디렉터리로 등록되는데 공격 대상이 되기도 한다. 따라서 실제로 운영되는 웹 서버에서는 잠재적인 위험 요소인 IISSamples나 IISAdmin, IISHelp와 같은 샘플 어플리케이션의 가상 디렉터리를 제거하는 것이 좋다. IIS 관리자에서 해당 가상 디렉터리를 직접 제거할 수 있으며, 지난 호에서 설명한 IISLockdown 도구를 이용해서도 이들을 간단히 제거할 수 있다.

8.4 RDS를 제거하거나 보안을 강화한다.

RDS(Remote Data Services)는 IIS를 통해 원격에서 데이터 자원에 접근이 가능하도록 기능을 제공하는 구성요소이다. RDS의 인터페이스는 Program Files\Common Files\System\Msadc 디렉터리에 있는 Msadcs.dll에 정의되어 있다.

웹 어플리케이션에서 RDS 기능을 사용하지 않는다면 이를 제거하는 것이 좋다. RDS를 제거하는 방법은 다음과 같다.

① '/MSADC' 가상 디렉터리를 IIS에서 제거한다.
② '\Program Files\Common Files\System\Msadc' 디렉터리를 삭제한다.
③ 'HKLM\System\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch' 레지스트리 키를 제거한다.

웹 어플리케이션에서 RDS를 사용한다면 다음과 같은 방법으로 RDS를 안전모드?실행함으로써 보안을 강화하는 것이 좋다.

① \Program Files\Common Files\System\Msadc 디렉터리를 삭제한다.
② 'HKLM\System\CurrentControlSet\Services\W3SVC\Parameters\
ADCLaunch\VbBusObj.VbBusObjCls' 레지스트리 키를 삭제한다.
③ IIS 관리자를 이용해서 MSADC 가상 디렉터리에 대한 익명 접속을 거부하도록 설정한다.
④ 'HKLM\Software\Microsoft\DataFactory\HandlerInfo' 레지스트리 키를 생성하고 DWORD형으로 handlerRequired라는 값을 생성하고 '1'로 설정한다.

8.5 웹 권한을 설정한다.

웹 권한은 IIS 메타베이스에 의해 관리되는 것으로 NTFS 권한과는 다르므로 혼동하지 않도록 유의해야 한다. Web 권한은 다음과 같이 웹 사이트의 [등록정보] - [홈 디렉터리] 탭을 이용해서 구성할 수 있으며, '읽기'와 '쓰기', '스크립트 소스 액세스', '디렉터리 검색'의 4가지 권한이 제공된다.
 

[그림 2] 디렉터리에 대한 웹 권한 설정하기


9. 스크립트 매핑 설정하기

IIS는 클라이언트가 요청한 자원의 파일 확장자에 따라서 이를 처리할 ISAPI 확장 핸들러를 지정하게 되어 있는데 이를 스크립트 매핑이라고 한다. 예를 들어 .asp, .shtm, .hdc 등의 확장자를 가진 자원을 요청하면 asp.dll이 처리하고 .aspx에 대한 요청은 Aspnet_isapi.dll이 처리하게 되어 있다.

9.1 확장 핸들러에 대한 최신 패치를 유지한다.

특정 확장 핸들러의 취약점이 공격 대상이 될 수 있다. 특정 확장 핸들러의 취약점이 발견되고 이를 패치하지 않은 상태에서 서비스를 제공할 경우 공격자는 이를 대상으로 공격할 수 있다. 따라서 항상 최신 보안 패치를 유지해야 한다.

그리고 어플리케이션에서 사용하지 않는 .htr이나 .printer, .idc와 같은 확장자에 대한 핸들러는 제거하는 것이 좋다. 실제로 이들 특정 확장자에 대한 핸들러의 취약점을 이용하여 서버 자원에 접근할 수 있는 백도어가 여러 가지 발견된 바 있다.

9.2 404.dll 매핑 사용으로 서버 자원을 보호한다.

이는 파일 확장자에 대한 매핑이 정확하게 지정되지 않은 경우 서버상의 파일이나 스크립트가 클라이언트로 다운로드 될 수 있다. 이를 막기 위해 404.dll 파일에 확장자를 매핑함으로써 서버 자원이 다운로드 되는 것을 막을 수 있다. 이 404.dll에 매핑이 되면 해당 확장자에 대한 요청에 대해서 "HTTP 404 - 파일을 찾을 수 없습니다" 오류 페이지를 응답으로 사용자에게 전송하게 된다.

IIS 관리자에서 스크립트 매핑을 설정할 웹 사이트의 [등록정보] - [홈 디렉터리] 탭에서 [구성] 버튼을 클릭하면 다음과 같은 응용 프로그램 매핑 정보를 확인할 수 있다. 여기서 사용하지 않을 확장자를 선택하고 [편집]을 누른다.
 

[그림 3] 확장자별 응용 프로그램 매핑 정보

여기서는 예로서 .htr 확장자에 대한 핸들러를 선택하고 편집하려 한다. .htr 확장자에 대한 처리를 404.dll에 매핑하려면 다음과 같이 [찾아보기]를 누르고 'System 디렉터리\inetsrv'에 위치하고 있는 '404.dll'을 지정하면 된다.
 

[그림 4] 404.dll로 매핑 설정하기

지금까지 4회에 걸쳐 IIS 웹 서버 보호방법을 9가지 측면에서 구체적으로 알아보았다.

다음 호에서는 기존의 IIS 웹 서버에서 노출된 취약점을 보완하여 윈도우 2003 서버에서 새롭게 제공되는 IIS 6.0에 대해서 살펴보도록 하겠다.

출처 : 안철수 연구소
Posted by Huikyun