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

Windows Server 2003 제품군에 포함된 IIS(인터넷 정보 서비스) 6.0은 인트라넷이나 인터넷 환경에서 보다 안전하고 확장성이 높은 웹 서버 기능을 제공한다. IIS는 웹 서버 시장에서 많은 비중을 차지하고 있었으나 앞서 살펴보았던 취약점에 대한 잦은 공격으로 관리상의 이슈가 많은 것이 사실이었다. 새롭게 선보이는 IIS 6.0에서는 보안과 가용성 측면에 많은 비중을 두고 상당부분이 재설계되었다. 이번 호에서는 IIS 6.0의 구성 요소와 변경 및 개선된 사항에 대해서 알아보도록 하겠다.

1. IIS 6.0 개요

윈도우 운영체제의 주요 컨셉이 '관리하기 쉬운'에 초점이 맞추어져 있었던 만큼 서버 제품군을 설치하면 대부분의 어플리케이션의 서비스가 기본적으로 활성화된 상태가 된다. IIS도 예외는 아니어서 기본으로 설치되며 대부분의 서비스를 설치와 동시에 바로 운영할 수 있는 상태로 설정이 된다. 하지만 서비스들의 취약점이 주요 위협대상인 만큼 앞서 연재를 통해 살펴보았던 내용의 대부분은 이들 서비스를 비활성화 시키는 방법에 대한 내용이었다.

Windows Server 2003에서는 이러한 문제점을 보완하기 위해서 이전과는 다른 방법을 도입했다. IIS는 기본적으로는 설치되지 않으며, 설치하더라도 보안 수준이 높은 '잠금 모드(lock down mode)'로 초기 설정되어 정적인 컨텐츠(.htm이나 .html)만 처리할 수 있는 상태가 된다. ASP나 ASP.NET, SSI(Server-Side Include) 등의 기능을 사용하려면 직접 수동으로 해당 구성요소를 활성화 시켜줘야 한다. 이로써 사용되지 않는 서비스에 의한 잠재적인 위협을 막고 관리적인 이슈를 줄일 수 있다.


2. IIS 6.0에서 향상된 기능

IIS 6.0은 기존에 제작된 웹 어플리케이션에 대한 하위 호환성을 제공하기 위해 IIS 5.0 격리모드를 제공하며, 다음과 같은 향상된 기능을 제공한다.

① 안정성

사용자의 요청을 처리하는데 있어 새로운 아키텍처를 제공하고 웹 어플리케이션이 서로 격리된 환경에서 실행된다. 따라서 이전 버전처럼 하나의 웹 사이트에 의해서 모든 웹 서비스가 중단되는 사태를 막을 수 있다. 또한 어플리케이션 별로 상태 모니터링 기능도 제공된다.

② 확장성

웹 서버의 처리 능력 및 멀티 프로세서 컴퓨터에서의 확장성을 높이기 위해 새로운 HTTP 구문 분석 및 캐싱용 커널 모드 드라이버가 제공된다. 이로써 단일 IIS 6.0 서버가 호스팅 할 수 있는 사이트 수와 동시 실행될 수 있는 작업자 프로세스의 수가 증가되었다.

③ 보안성

IIS는 불필요한 설치에 의한 잠재적인 공격 위험을 줄이기 위해 기본적으로 설치되지 않는다. 사이트에서 전송되는 데이터의 무결성 외에 웹 및 FTP 사이트 컨텐츠의 무결성도 보장하기 위해 사용할 수 있는 보안 기능과 기술이 여러 가지 포함되어 있다.

IIS 6.0에서는 응용 프로그램 서버를 보안하기 위해 다음과 같은 다양한 기능을 제공한다.

- 새로운 고급 다이제스트 인증을 포함한 인증 메커니즘
- URL 인증 : 특정 URL에 대한 역할 기반 인증을 제공한다.
- SSL(Secure Sockets Layer) 3.0 : 보다 안전한 정보를 교환 기능을 제공한다.
- 선택 가능한 암호화 서비스 공급자(CSP) : 이를 통해 사용자의 필요에 맞는 CSP(암호화 서비스 공급자)를 선택할 수 있다.

④ 관리 편의성

다양한 고객의 필요를 충족시키기 위해 IIS는 다양한 관리 편의성을 제공하며 이를 위한 관리 도구를 제공한다. 관리자는 IIS 관리자나 관리 스크립트를 사용하거나 직접 IIS 텍스트 구성 파일을 편집하여 IIS 6.0 서버를 구성할 수 있으며 IIS 서버와 사이트를 원격으로 관리할 수도 있다. IIS 6.0에 포함되어 있는 일반 텍스트기반 XML 메타베이스 구성 파일은 대부분의 IIS 구성 값이 저장되는 저장소로서 직접 편집이 가능하다. 메타베이스를 재구성함으로써 전반적인 메타베이스 성능과 서버 시작 및 종료 시간 등을 향상 시킬 수 있다.

⑤ 개발 능력 향상

마이크로소프트에서 제공하는 차세대 웹 솔루션인 ASP.NET과 IIS 6.0의 통합을 통해 향상된 개발자 경험을 제공한다. ASP.NET을 사용하면 형식 안전성, 상속, 언어 상호 운용성 및 버전 관리 같은 CLR(Common Language Runtime) 기능을 활용할 수 있다. 그리고 XML, SOAP 및 IPv6(IP 버전 6)을 포함하여 최신 웹 표준을 지원한다.


3. IIS 6.0에서 제공되는 서비스

IIS는 웹 환경으로의 정보 게시, 파일 전송, 사용자 통신 지원 등의 기본 서비스를 제공하며 이러한 서비스가 저장되는 데이터 저장소를 업데이트한다. 여기서는 IIS 6.0이 제공하는 서비스들의 종류를 알아보자.

다음 표는 IIS에서 제공되는 서비스와 서비스를 구성하는 기본 요소 그리고 해당 서비스를 호스트하는 프로세스를 정리한 것이다.

서비스 기본 구성요소 호스트 프로세스
World Wide Web 게시 서비스
(WWW 서비스)
Iisw3Adm.dll SvcHost.exe
FTP 서비스
(파일 전송 프로토콜 서비스)
FtpSvc.dll InetInfo.exe
SMTP 서비스
(Simple Mail Transfer Protocol 서비스)
SmtpSvc.dll InetInfo.exe
NNTP 서비스
(Network News Transfer Protocol 서비스)
NntpSvc.dll InetInfo.exe
IIS Admin 서비스 IisAdmin.dll InetInfo.exe

[표 1] IIS 6.0의 구성 요소와 호스트 프로세스

IIS 5.0까지는 WWW 서비스를 비롯한 FTP나 SMTP와 같은 모든 서비스들이 InetInfo.exe라는 단일 프로세스에 의해 호스트 되었지만 IIS 6.0에서는 특별히 WWW 서비스가 별도의 독립된 SvcHost.exe에 의해 호스트 되도록 변경되었다. 이것은 FTP나 NNTP와 같은 다른 서비스에 의해 발생한 오류가 웹 서비스를 제공하는데 영향을 받지 않도록 하기 위해 분리한 것이다.

IIS 6.0 핵심 구성 요소는 커널 모드 프로세스와 사용자 모드 프로세스로 구성되어 있다.

기존의 IIS 5.0에서는 별도의 커널 모드 프로세스 없이 TCP/IP를 통해 전달된 사용자의 요청이 사용자 모드 프로세스에서 WinSock을 통해서 InetInfo.exe 프로세스로 전달되고 해당 어플리케이션에 의해서 처리되는 과정으로 진행되었다. IIS 6.0에서는 보다 성능과 가용성 측면의 향상을 위해 HTTP.SYS라는 커널 모드 드라이버를 별도로 제공한다.

그리고 앞서 언급했듯이 IIS 6.0에서는 WWW 서비스가 InetInfo.exe 프로세스에 호스트 되지 않고 각각의 웹 어플리케이션이 별도의 작업자 프로세스(worker process)인 w3wp.exe에 의해서 처리된다. 각각의 웹 어플리케이션이 서로 독립적인 프로세스로 격리되어 실행되는 작업자 프로세스 격리 모드로 기본 구성되며 프로세스 별로 헬스 모니터링 및 재생(recycling) 기능이 제공된다.

새롭게 추가되는 구성요소인 WAS(Web Admin Service)는 WWW 서비스를 구성하며 작업자 프로세스의 상태를 감시 및 관리하는 역할을 담당한다.

InetInfo.exe는 IIS 6.0 구동에 필요한 환경설정 정보를 담고 있는 메타베이스를 관리하고 WWW 서비스외에 다른 서비스(FTP, SMTP, NNTP 등)를 호스트하는 프로세스이다.

 

[그림 1] IIS 5.0와 6.0의 구성요소 비교

그럼 IIS 6.0의 핵심 구성요소와 이들의 상호 작용 방법에 대해서 보다 자세히 살펴보도록 하자.

3.1 HTTP.sys

HTTP 수신 대기자는 HTTP.sys라는 커널 모드 디바이스 드라이버를 통해서 실행된다. HTTP.sys는 HTTP 요청을 사용자 모드 어플리케이션으로 라우팅하는 커널 모드 디바이스 드라이버로서 Windows의 네트워킹 하위 시스템에 포함되어 있지만 IIS 6.0의 핵심 구성 요소로 이용된다.

HTTP.sys를 커널 모드 구성 요소로 실행함으로써 다음과 같은 두 가지 성능 향상을 얻을 수 있다. 이러한 성능 향상은 HTTP 수신 대기자를 사용자 모드 구성 요소로 실행할 때는 제공되지 않는다.

커널에서 올바른 프로세스로 직접 디스패치함으로써 컨텍스트 전환 오버헤드를 줄여 사용자 요청을 빠르게 처리한다. 커널 모드 캐시를 사용하면 캐시된 반환 요청을 사용자 모드로 전환하지 않고도 처리할 수 있다.

HTTP.sys는 다음과 같은 방법으로 동작한다.

- IIS에서 웹 사이트를 만들면 해당 웹 사이트는 HTTP.sys에 등록된다.
- HTTP.sys는 웹 요청을 이 웹 사이트를 실행하는 사용자 모드 프로세스로 라우팅하고 처리된 결과를 클라이언트로 다시 보낸다.
- HTTP.sys는 내부 캐시에서 저장된 응답을 검색하기만 하고 받은 요청을 처리하지는 않는다. 따라서 웹 어플리케이션 관련 코드는 커널 모드에 로드되지 않으며 사용자 모드의 어플리케이션 코드의 영향을 받지 않는다.
- 결과적으로 어플리케이션 관련 코드 버그나 악성 코드가 커널 모드 프로세스에 영향을 주거나 시스템 오류를 유발하지 못한다.

HTTP.sys는 IIS가 사용하는 기타 서비스 기능을 다음과 같이 제공한다.

- TCP(전송 제어 프로토콜) 연결 관리
- HTTP를 올바른 요청 큐로 라우팅
- 커널 모드에서 응답 캐싱
- WWW 서비스에 대한 텍스트 기반 로깅 수행
- 연결 제한, 연결 시간 제한, 큐 길이 제한 및 대역폭 조절을 포함하는 QoS(서비스 품질) 기능 구현

커널 모드(Kernel Mode)와 사용자 모드(User Mode)

커널 모드는 컴퓨터의 모든 메모리에 접근할 수 있고 다른 어플리케이션의 프로세스로부터 격리된 메모리 공간에서 실행된다. 커널 모드 구성요소만이 하드웨어와 같은 리소스에 직접 접근이 가능하다. 반면 어플리케이션과과 이를 지원하는 서브시스템은 사용자 모드에서 실행된다. 사용자 모드의 프로세스는 직접 자원에 접근할 수 없으며 자원데 대한 접근 요구가 커널 모드 구성 요소에 의해 허가되어야 한다.


이렇게 분리함으로써 어플리케이션의 오동작이나 허가되지 않는 사용자 접근으로부터 시스템을 보호할 수 있다. 사용자 모드는 우선 순위가 낮아 보통 커널 모드에서 수행되는 프로세스보다 CPU 사이클 접근을 덜한다.

3.2 WAS(Web Admin Service)

WAS는 WWW 서비스(World Wide Web 게시 서비스)의 새 구성 요소로 WWW 서비스 관리 및 모니터링과 같은 관리 작업을 수행하고 프로세스 관리를 담당한다. 관리 작업 측면에서 WWW 서비스 관리 및 모니터링은 WWW 서비스의 서비스 제어 기능을 구현하고 메타베이스와 상호 작용하여 HTTP.sys에 전달되거나 작업자 프로세스를 관리할 때 사용되는 구성을 가져온다. 프로세스 관리 측면에서는 작업자 프로세스의 시작 및 실행 중에 필요한 정보를 유지하고 관리한다.

이 프로세스는 공유되지 않는 svchost.exe의 사용자 모드에서 Local System 권한으로 실행된다.

3.3 작업자 프로세스(Worker Process)

작업자 프로세스는 사용자 모드에서 실행되는 어플리케이션으로서 HTTP.sys로부터 전달받은 사용자의 요청을 처리하여 정적 페이지로 반환한다. 그리고 ISAPI(인터넷 서버 API) 확장 또는 필터를 호출하거나 CGI(Common Gateway Interface) 처리기를 실행하는 기능도 제공한다. 작업자 프로세스는 실제로 W3wp.exe라는 프로세스로 실행되며 WAS(WWW 서비스 관리 및 모니터링)에 의해 제어된다.

기본적으로 작업자 프로세스는 IIS 6.0에서 필수적인 기능과 호환되는 가장 강력한 보안(최소한의 액세스만 허용)을 제공하는 NetworkService 계정으로 실행된다. 작업자 프로세스는 HTTP.sys를 통해 사용자의 요청을 처리하고 응답을 보내며 작업자 프로세스는 ASP.NET와 같은 웹 어플리케이션 코드를 실행한다. IIS 구성에 따라 서로 다른 웹 어플리케이션을 처리하는 여러 개의 작업자 프로세스가 동시에 실행될 수 있다. 이렇듯 각 어플리케이션을 프로세스 경계로 구분하기 때문에 서로 영향을 미치지 않으므로 웹 서버의 안정성을 극대화할 수 있다.

3.4 InetInfo.exe

InetInfo.exe는 WWW 서비스가 아닌 IIS 6.0의 구성 요소를 호스트하는 사용자 모드 구성 요소이다. InetInfo.exe가 호스트하는 서비스에는 FTP(File Transfer Protocol) 서비스, SMTP(Simple Mail Transfer Protocol) 서비스, NNTP(Network News Transfer Protocol) 서비스 및 IIS 메타베이스가 있다. 또한 Inetinfo.exe는 IIS 6.0에서 작업자 프로세스 격리 모드가 아니라 IIS 5.0 격리 모드로 실행되는 단일 작업자 프로세스를 호스트 한다.

이번 호에서는 Windows Server 2003 제품군에서 새롭게 소개된 IIS 6.0의 주요 특징과 서비스 구성 鴉奴?대해서 알아보았다. 다음 호에서는 IIS 6.0의 보안 측면에서의 특징과 격리 모드(isolation mode)에 대해서 알아보겠다.

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