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

이번 호는 연재의 마지막 순서로서 IIS 6.0의 보안 측면에서의 특징과 격리 모드(isolation mode)에 대해서 알아보겠다.


4. IIS 6.0의 보안 측면 특징

마이크로소프트사는 IIS의 취약점에 대한 악의적인 공격의 패턴을 분석하고 IIS 6.0을 보다안전하게 만들기 위해서 다양한 예방 수단을 도입했다. 보안 측면에서 IIS 6.0의 특징을 살펴보면 다음과 같이 정리할 수 있다.

① IIS는 Windows Server 2003에 기본적으로 설치되지 않는다. 예상되는 시스템의 공격 요소를 줄이기 위해 IIS 5.0와는 다르게 운영체제 설치 시에 기본적으로 설치되지 않는다. 웹 서비스를 제공하기 위해서는 관리자가 직접 IIS 구성 요소를 설치해야 한다.

② IIS를 설치하더라도 초기 상태는 잠금 모드이다. 즉, 정적인 컨텐츠(.htm, .html)에 대한 기능만 제공되며 ASP나 ASP.NET과 같은 동적인 컨텐츠를 제공하려면 해당 요소를 활성화 시켜야 한다.

③ 도메인 관리의 그룹 정책을 통해 구성원들이 자신의 컴퓨터에 IIS를 임의로 설치할 수 없도록 지정할 수 있다.

④ IIS 6.0에서 사용자의 요청을 처리하는 작업자 프로세스는 낮은 권한을 가진 NetworkService 계정으로 실행되며 이로써 악의적인 공격에 의한 피해를 최소화 할 수 있다.

⑤ IIS 6.0에서는 지정된 파일 확장자에 대한 요청에만 응답하며 인식하지 못하는 파일 확장자에 대한 요청은 거부한다.

⑥ 악의적인 사용자가 웹 서버에 접근하여 웹 사이트의 파일을 훼손하는 것을 막기 위해 웹사용자에게 웹 컨텐츠 파일에 대한 쓰기 권한을 부여하지 않는다.

⑦ 서버에 업로드 될 수 있는 데이터의 크기를 제한할 수 있고, 웹 사용자에 대한 응답 시간 제한을 제어함으로써 위험 요소를 최소화할 수 있다.

⑧ 웹 사용자들에 대하여 명령줄 도구(command line tool)의 접근을 막음으로써 이러한 도구를 이용한 악의적인 공격을 막을 수 있다.

⑨ 기존의 IIS의 버퍼 오버플로우 결함을 이용한 공격을 막기 위해 IIS 6.0의 작업자 프로세스는 버퍼 오버플로우가 발생하면 해당 어플리케이션을 찾아서 종료시킨다.

⑩ 웹 서버 상에서 여러 개의 웹 사이트를 운영할 경우 이들 어플리케이션을 서로 분리된 프로세스에서 실행 될 수 있도록 함으로써 이전처럼 공격에 의하여 모든 웹 서비스가 중단되는 상황을 막을 수 있다.

⑪ IIS 6.0에는 SSL의 개선된 버전이 포함되어 있다. 이로써 보다 빠른 성능을 얻을 수 있고, SSL 인증서를 원격으로 관리하거나 선택적으로 암호화 서비스 공급자를 지정할 수 있다.

⑫ IIS 6.0 인증 기능에 마이크로소프트의 인증 서비스인 Passport를 통합하였다. Passport 인증 서비스를 이용해서 확인된 Passport ID를 Active Directory 사용자로 매핑하여 사용할 수 있다.


5. IIS 6.0의 격리 모드

IIS 6.0은 어플리케이션을 작업자 프로세스 격리 모드 또는 IIS 5.0 격리 모드에서 실행한다. 두 격리 모드는 모두 HTTP(하이퍼텍스트 전송 프로토콜) 수신 대기자인 HTTP.sys의 영향을 받지만 내부 작업은 완전히 다르게 수행된다.

작업자 프로세스 격리 모드는 IIS 6.0의 새 아키텍처 및 작업자 프로세스 핵심 구성 요소를 사용하는 반면 IIS 5.0 격리 모드는 기존의 IIS 5.0의 특정 기능과 동작에 종속된 어플리케이션의 호환성을 위해 제공된다. 격리 모드는 IIs5IsolationModeEnabled 메타베이스 속성을 사용하여 지정한다.

어떠한 어플리케이션 격리 모드를 선택하느냐에 따라 성능, 안정성, 보안 및 기능 가용성이 달라진다. 작업자 프로세스 격리 모드는 어플리케이션에 보다 강력한 플랫폼을 제공하므로 IIS 6.0에 권장되는 모드이다. 또한 작업자 프로세스 격리 모드에서는 작업자 프로세스에서 실행 중인 어플리케이션이 기본적으로 NetworkService 계정으로 실행되므로 보다 높은 수준의 보안을 제공한다.

반면 IIS 5.0 격리 모드에서 실행 중인 어플리케이션은 기본적으로 LocalSystem 계정으로실행 된다. 이 계정을 사용하면 컴퓨터에 있는 거의 모든 리소스를 액세스 및 변경할 수 있으므로 보안에 주의해야 한다.

작업자 프로세스 격리 모드가 향상된 격리, 안정성, 가용성 및 성능을 제공할지라도 기존 환경에서 작성된 일부 어플리케이션에서 호환성 문제가 발생할 수 있으므로 이 경우에는 IIS 5.0 격리 모드를 사용해야 한다.

IIS 5.0 격리 모드를 사용하려면 다음 그림과 같이 IIS 관리자에서 웹 사이트의 [등록정보]의 [서비스] 탭에서 [IIS 5.0 격리 모드에서 WWW 서비스 실행]을 선택하면 된다.
 

[그림 1] IIS 5.0 격리 모드

잠깐!
IIS 6.0에서는 두 어플리케이션 격리 모드를 동시에 실행할 수 없다. 예를 들어 같은 IIS 서버에서 하나의 웹 어플리케이션은 작업자 프로세스 격리 모드에서 실행하고 다른 웹 어플리케이션은 IIS 5.0 격리 모드에서 실행할 수 없다. 어플리케이션을 별도의 모드에서 실행해야 하는 경우에는 다른 컴퓨터에서 실행해야 한다.


5.1 작업자 프로세스 격리 모드

작업자 프로세스 격리 모드는 새로운 IIS 6.0 핵심 구성 요소를 모두 사용한다. 작업자 프로세스 격리 모드를 사용하면 다음 섹션에서 설명할 어플리케이션 풀링, 재생 및 상태 검색 기능을 사용할 수 있다.

다음은 작업자 프로세스 격리 모드에서 실행 중인 IIS 6.0의 아키텍처를 보여주는 그림이다. 
 

[그림 2] 작업자 프로세스 격리 모드

위 그림을 보면 어플리케이션 관련 코드가 작업자 프로세스에만 로드 됨을 알 수 있다. 이 아키텍처는 작업자 프로세스에서 서비스 장애가 발생하더라도 World Wide Web 게시 서비스(WWW 서비스)나 IIS Admin 서비스 및 HTTP.sys는 영향을 받지 않고 계속 실행될 수 있으므로 IIS를 매우 안정적인 상태로 유지되도록 한다. 또한 작업자 프로세스에서 실행 중인 웹 사이트는 프로세스 경계를 통해 서로 격리되므로 다른 작업자 프로세스에서 장애가 발생해도 영향을 받지 않는다.

작업자 프로세스 격리 모드에서 사용자 요청을 처리하는 과정을 정리해보면 다음과 같다.

① HTTP.sys에 사용자 요청이 도착
② HTTP.sys는 요청이 유효한지 확인한다. 요청이 유효하지 않으면 HTTP.sys가 해당 코드를 클라이언트에게 다시 보낸다.
③ 요청이 유효玖?HTTP.sys가 해당 응답이 자신의 커널 코드 캐시에 있는지 검사한다.
④ 커널 코드 캐시에 응답이 있으면 HTTP.sys가 응답을 즉시 반환한다.
⑤ 캐시에 응답이 없으면 HTTP.sys가 올바른 요청 큐를 찾아서 이 큐에 요청을 추가한다.
⑥ 큐에 할당된 작업자 프로세스가 없으면 HTTP.sys가 작업자 프로세스 하나를 시작하도록 WWW 서비스로 신호를 보낸다.
⑦ 작업자 프로세스가 큐에서 요청을 가져와서 처리한다.
⑧ 작업자 프로세스가 HTTP.sys로 처리한 결과를 보낸다.
⑨ HTTP.sys가 클라이언트에게 응답을 보낸다.

요청 큐(Request Queue)
HTTP.sys는 커널 모드에서 사용자의 HTTP 요청을 접수하고 이를 등록된 작업 프로세스 별로 요청 큐에 해당 정보를 저장한다. 즉, 작업자 프로세스당 하나의 요청 큐를 가지게 되고 큐에 저장된 정보를 순서대로 꺼내와서 처리하는 방법으로 진행된다.

이러한 구조는 윈도우 어플리케이션에서 OS에서 메시지 펌핑으로 각 윈도우 메시지 큐에 메시지를 전달하고 어플리케이션이 메시지를 꺼내서 이를 처리하기 위한 윈도우 프로시저를 호출하는 것과 매우 흡사하다.

작업자 프로세스에 오류가 발생하거나 성능상의 병목현상 또는 프로세스 재생으로 인한 대기시간이 발생하더라도 커널 모드에서 해당 작업자 프로세스에 대한 요청 큐를 관리하므로 사용자의 요청을 처리할 수 있게 된다.


5.2 IIS 5.0 격리 모드

IIS 5.0 격리 모드는 IIS 5.0용으로 개발된 어플리케이션에 대한 호환성을 제공한다. IIS 6.0이 IIS 5.0에서 실행 중일 때의 요청 처리 방법은 IIS 5.0에서의 요청 처리 방법과 거의 같다. 하지만 IIS 5.0 격리 모드에서는 IIS 6.0에서 제공되는 어플리케이션 풀링, 재생 및 상태 검색 기능을 사용할 수 없다.

다음은 IIS 5.0 격리 모드에서 실행 중인 IIS 6.0의 아키텍처를 보여주는 그림이다.
 

[그림 3] IIS 5.0 격리 모드

IIS 5.0 격리 모드에서 HTTP.sys를 사용하는 방법은 요청을 WWW 서비스에서 관리하는 단일 요청 큐에만 라우팅한다는 점만 제외하고 작업자 프로세스 격리 모드에서 HTTP.sys를 사용하는 방법과 같다. 격리 모드의 구성 방법(in-process, 풀링됨 또는 out-of-process)에 따라 요청이 Inetinfo.exe에서 처리되거나 별도의 DLLHost.exe에 의해서 호스트 되어 처리된다.


5.3 격리 모드별 기능 비교

다음 표는 작업자 프로세스 격리 모드와 IIS 5.0 격리 모드에서 웹 어플리케이션을 실행할 때 IIS 6.0 기능이 어떤 역할을 하는지에 대해 정리한 것이다.


[표1] 격리 모드 별 호스트 프로세스의 비교
IIS 기능 IIS 5.0 격리 모드
(호스트/구성 요소)
작업자 프로세스 격리 모?br>(호스트/구성 요소)
작업자 프로세스 관리 없음 Svchost.exe/WWW 서비스
작업자 프로세스 없음 W3wp.exe/작업자 프로세스
in-process ISAPI 확장 실행 Inetinfo.exe W3wp.exe
out-of-process ISAPI 확장 실행 DLLHost.exe 없음(모든 ISAPI 확장이 in-process임)
ISAPI 필터 실행 Inetinfo.exe W3wp.exe
HTTP.sys 구성 Svchost.exe/WWW 서비스 Svchost.exe/WWW 서비스
HTTP 프로토콜 지원 Windows 커널/HTTP.sys Windows 커널/HTTP.sys
IIS 메타베이스 Inetinfo.exe Inetinfo.exe
FTP Inetinfo.exe Inetinfo.exe
NNTP Inetinfo.exe Inetinfo.exe
SMTP Inetinfo.exe Inetinfo.exe



연재를 마치며

지금까지 총 7회에 걸쳐 IIS 웹 서버의 보안 취약점 분석 및 웹 서버 보호 방법, 그리고 최근에 출시된 IIS 6.0에 대하여 알아보았다.

세상에 100% 완벽하고 안전한 프로그램은 없다. 약간의 취약점이라도 있다면 그 부분을 찾아서 악의적으로 사용하려는 시도는 계속될 것이다. 관리자들은 계속해서 새로운 보안 소식에 관심을 가지고 웹 서버를 안전한 상태로 유지하는 노력을 해야 할 것이다.

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