IIS 웹서버보호를위한방법 1. 필요한구성요소만설치한다. 대다수의악의적인공격은초기기본설정으로 IIS 서버가구성되어있다고가정하고취약점을노리는경우가많으므로 FTP나 NNTP, SMTP, Server Extensions 등의서비스들은사용하지않는경우에는설치하지않는것이보안및관리적인측면에서좋다. IIS 를설치한후에 [ 관리도구 ] - [ 인터넷서비스관리자 ] 를실행하여확인해보면다음과같이 ' 기본웹사이트 ' 와그하위에 IISHelp, MSADC, Printers, Scripts 와같은가상디렉토리가기본적으로구성되어있음을알수있다. 그러나이러한기본구성또한악의적인공격의대상이된다. 예를들면 ADSI 스크립트를이용해서기본웹사이트에대한설정을변경한다든지 MSADC 가상디렉토리를통한서버자원접근등이가능하다. 물론이러한문제점들은최신서비스팩과보안패치를설치함으로써해결이되지만, 보안에관심이있는관리자의경우에는 ' 기본웹사이트 ' 를중지또는제거하고초기웹서버의루트경로인 '%system drive%\inetpub\wwwroot' 가아닌다른위치에웹서버를위한루트폴더를만들어사용한다. ( 위그림을보면 ' 기본웹사이트 ' 가중지되어있고 'noenemy' 라는새로운웹사이트를만들어운영하고있음을알수있다.) 2. 최신의패치와업데이트를유지하라. Win2000 에서제공하는 IIS 5.0 버전대신 Win2003 에서 IIS 6.0 버전의사용을권장한다. 단, OS 자체를 2003 으로변경해야 IIS 6.0 버전을사용할수있다.
운영체제의서비스팩과보안패치를최신버전으로유지하는것은보안사고를예방하기 위한기본적인과제이다. 3. 프로토콜설정으로웹서버를보호한다. 불필요한프로토콜을비활성화시킴으로써잠재적인위협요소를줄일수있다. 이러한프로토콜에는 WebDAV 나 NetBIOS, SMB 이있고 TCP/IP 스택을강화하는것도도움이된다. 3.1 WebDAV 비활성화하기 WebDAV(Web Distributed and Versioning) 는웹서버상에존재하는파일들을공동으로편집 관리하기위한도구로서 HTTP 와같은웹운영프로토콜의확장된형태이다. 2003년 3 월에 IIS 에서지원하는 WebDAV에서버퍼오버플로우취약점이발견되면서주요공격대상이되고있다. IIS 설치시 WebDAV가기본으로설치되기때문에사용하지않는경우제거하는것이좋다. 레지스트리편집기 (Regedit.exe) 를실행하고, HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters 레지스트리키를찾아 DisableWebDAV라는 DWORD 값을만들어 '1' 로설정한다. 변경된값을적용하기위해서는 IIS를재시작하면된다. 3.2 NetBIOS 비활성화하기 NetBIOS 는별개의컴퓨터상에있는애플리케이션들이근거리통신망내에서서로통신할수있게해주는프로토콜로서 Windows 에의해채택되어있다. 만약웹서버에서네트워크를통한다른컴퓨터와의공유가필요없다면 NetBIOS를제거함으로써
DDos(Distributed Denial of Service) 공격이나호스트열거 (host enumeration) 에대한위험요소를줄일수있다. NetBIOS 는다음과같은포트를사용한다. TCP 와 UDP 137번포트 (NetBIOS name service) TCP 와 UDP 138번포트 (NetBIOS datagram service) TCP 와 UDP 139번포트 (NetBIOS session service) TCP/IP 에서 NetBIOS 를비활성화하는방법은다음과같다. 1 바탕화면또는제어판에서 [ 내컴퓨터 ] 의등록정보에서 [ 하드웨어 ] 탭을선택한다. 2 [ 장치관리자 ] 를실행한다. 3 [ 장치관리자 ] 의 [ 보기 ] 메뉴에서 [ 숨김장치표시 ] 를선택한다. 4 [ 장치관리자 ] 목록에서 [ 비플러그앤플레이드라이버 ] 를선택한다. 5 하위목록에서 [NetBios over Tcpip] 를선택하고 [ 제거 ] 한다. 3.3 SMB 비활성화하기 SMB(Session Message Block) 프로토콜은 Windows에서디스크와프린터를네트워크상에서공유하는데사용된다. SMB 는다음과같은포트를사용한다. TCP 139 번포트 TCP 445 번포트 SMB를비활성화하려면다음과같은방법으로 TCP/IP 에서 SMB를언바인드시키면된다. 1 바탕화면또는제어판에서 [ 네트워크환경 ] 의 [ 등록정보 ] 를실행한다. 2 현재인터넷에접속된연결의 [ 등록정보 ] 를선택한다. 3 [Microsoft 네트워크용클라이언트 ] 항목과 [Microsoft 네트워크용파일및프린터공유 ] 항목의체크를해제한다.
4. 계정관리를철저하게한다. 서버에서사용하지않는계정은제거하고, Guest 계정을비활성화시킨다. Guest 계정의활성화여부는 [ 컴퓨터관리 ] 도구에서 [ 로컬사용자및그룹 ] 의 [ 사용자 ] 메뉴의목록에서확인할수있다. 기본적으로관리자에게지정되는 Administrator 계정은컴퓨터에대한모든권한을가지므로악의적인목적으로사용하기위한목표가된다. 따라서이계정의이름을다른이름으로변경하고유추하기어려운복잡한패스워드를사용하는것이좋다. 인터넷으로익명으로접근하는사용자들은 IIS 설치시기본적으로생성되는 IUSR_Machine( 서버의NetBIOS명 ) 계정으로접근하게된다. 예를들어 'WebSvr' 라는이름의서버에는 'IUSR_WebSvr' 이라는계정이생성된다. 이계정을비활성화하고웹서버의익명접속에사용할계정을직접정의하는것이좋다. 웹애플리케이션의기능을제공하는데필요한최소한의권한을가지는계정을만들고, 인터넷관리자에서웹애플리케이션별로직접정의한계정을지정하면서버상에여러개의웹사이트를운영하는경우로그분석에도용이하다. 특정웹사이트에대해서익명연결에사용할계정을지정하려면다음그림과같이 [ 인터넷관리자 ] 에서해당사이트의 [ 등록정보 ]-[ 디렉토리보안 ]-[ 익명액세스및인증제어 ]- [ 편집 ] 에서익명사용자계정을지정하면된다.
5. 익명로그온 ( 널세션 ) 을비활성화한다. 널세션 (Null Session) 접속은인증을받지않은상태에서해당컴퓨터에접근하는것을의미하며해커들은이를이용해서원격컴퓨터의정보를제공받을수있고, 특정권한으로승격하거나 DoS 공격을수행할수도있다. 널세션접속을허용하지않으려면레지스트리편집기를이용해서 'HKLM\System\CurrentControlSet\Control\LSA' 키의 RestrictAnonymous 값을 '1' 로설정하면된다. 6. 불필요한공유를제거한다. 서버에서사용되지않는공유를제거하고사용중인공유자원에대해서는 NTFS 권한을부여함으로써자원을보호할필요가있다. 특히기본적으로공유가생성될때모든사용자들에게모든권한이부여되므로 NTFS 권한을적용해서필요한사용자에게만접근을허용하도록관리해야한다. 또한관리목적에서사용되는 C$, ADMIN$ 와같은관리공유를사용하지않는다면제거하는것이권장된다. 관리공유를사용하지않으려면레지스트리편집기를이용해서 HKLM\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters키에 AutoShareServer와 AutoShareWks 값을 REG_DWORD로만들고 '0' 으로설정하면된다. 7. 감사관리 감사관리는시스템공격을막지는못하지만진행중인공격이나침입자를인식하고공격의
흔적을추적하는데많은도움을준다. 웹서버의감사정책수준을높이고 NTFS 권한으로 로그파일을보호함으로써공격자가로그파일을지우거나변조하는것을방지하는것도 필요하다. 7.1 로그인실패로그를기록한다. 시스템에로그인하는데실패한이벤트에대해서는반드시로그를기록해야한다. 로그를통해서암호에대한무차별대입공격이나사전공격의흔적을찾을수있으며공격자가어떠한계정으로접근을시도했는지도알수있다. [ 관리도구 ] 에서 [ 로컬보안설정 ] 도구를실행하고 [ 로컬정책 ]-[ 감사정책 ] 에서 ' 로그온이벤트감사 ' 항목에서 ' 실패 ' 로그를기록하도록설정하면된다. 이렇게설정하면이후에발생하는로그인실패이벤트에대한내역을 [ 이벤트뷰어 ] 의 [ 보안로그 ] 목록에서확인할수있게된다. 7.2 개체접근실패에대한로그를기록한다. 파일이나폴더등의개체에대한악의적인접근시도에대하여감사기록을하는방법을알아보자. 먼저 7.1 에서설명한것과동일한방법으로감사정책에서 ' 개체액세스감사 ' 에대하여 ' 실패 ' 시로그를기록하도록설정한다. 그리고감사하려는대상폴더나파일을탐색기에서선택하고 [ 등록정보 ] 의 [ 보안 ] 탭에서 [ 고급 ] 버튼을누른다. 액세스컨트롤설정창에서 [ 감사 ] 탭을선택하고 [ 추가 ] 버튼을클릭한뒤 'Everyone' 그룹에대한모든실패이벤트를기록하도록감사항목을설정하면된다.
7.3 IIS 로그파일의위치를변경하고 NTFS 권한을적용한다. 기본적으로 IIS 로그파일은 '%systemroot%\system32\logfiles' 에사이트별로저장되는데이를다른폴더에저장하거나이름을변경함으로써공격자가로그파일을변경하거나삭제하는것을어느정도막을수있다. 가능하면이로그파일이저장되는디렉토리를웹사이트가위치한디스크와다른볼륨을사용하고 NTFS 권한을 Administrator( 모든권한 ), System( 모든권한 ), Backup Operators( 읽기 ) 로지정하여다른계정으로로그파일에접근하는것을막는것이좋다. 8. 사이트와가상디렉터리관리하기디렉터리탐색을통한공격을막기위해웹사이트의루트디렉터리와가상디렉터리를시스템이설치된파티션이아닌다른파티션에위치시키는것이좋다. 공격자들은경로탐색을통해운영체제의프로그램이나유틸리티를실행시키려는시도를하기때문에웹사이트를시스템파티션과분리함으로써이러한위협으로부터보호할수있다. 예를들면다음과같은 URL 을이용하여시스템자원에접근하려는시도를할수있다. /scripts/..%5c../winnt/system32/cmd.exe 이러한디렉터리탐색에의한공격을막을수있는방법을알아보도록하겠다. 8.1 웹사이트를시스템파티션이아닌다른파티션에위치시킨다. IIS 설치시에기본적으로설정되는루트디렉터리인 \inetpub\wwwroot 디렉터리를사용 하지않는다.
만약운영체제가 C: 드라이브에설치되어있다면웹사이트를 D: 드라이브와같은운영체 제가설치되지않은다른드라이브로옮긴다. 이로써디렉터리탐색공격에의한위험을 줄일수있다. 8.2 상위경로사용을제거한다. 스크립트나어플리케이션에서 MapPath와같은함수의호출시 ".." 를사용해서상위경로로접근하는것을거부하도록설정한다. 상위경로탐색을거부하는방법은다음과같다. 1 인터넷정보서비스 (IIS) 관리자를실행하고웹사이트의 [ 등록정보 ] 를확인한다. 2 [ 등록정보 ] 에서 [ 홈디렉터리 ] 탭의 [ 구성 ] 버튼을클릭한다. 3 [ 응용프로그램구성 ] 창에서 [ 응용프로그램옵션 ] 탭을선택한다. 4 [ 상위경로사용 ] 의체크를해제한다. 8.3 잠재적으로위험한가상디렉터리를제거한다. IIS 를설치하면기본적으로몇가지샘플어플리케이션이가상디렉터리로등록되는데공격대상이되기도한다. 따라서실제로운영되는웹서버에서는잠재적인위험요소인 IISSamples 나 IISAdmin, IISHelp 와같은샘플어플리케이션의가상디렉터리를제거하는것이좋다. IIS 관리자에서해당가상디렉터리를직접제거할수있다. 8.4 RDS 를제거하거나보안을강화한다.
RDS(Remote Data Services) 는 IIS를통해원격에서데이터자원에접근이가능하도록기능을제공하는구성요소이다. RDS의인터페이스는 Program Files\Common Files\System\Msadc 디렉터리에있는 Msadcs.dll 에정의되어있다. 웹어플리케이션에서 RDS 기능을사용하지않는다면이를제거하는것이좋다. RDS를제거하는방법은다음과같다. 1 '/MSADC' 가상디렉터리를 IIS에서제거한다. 2 '\Program Files\Common Files\System\Msadc' 디렉터리를삭제한다. 3 'HKLM\System\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch' 레지스트리키를제거한다. 웹어플리케이션에서 RDS를사용한다면다음과같은방법으로 RDS를안전모드로실행함으로써보안을강화하는것이좋다. 1 \Program Files\Common Files\System\Msadc 디렉터리를삭제한다. 2 'HKLM\System\CurrentControlSet\Services\W3SVC\Parameters\ ADCLaunch\VbBusObj.VbBusObjCls' 레지스트리키를삭제한다. 3 IIS 관리자를이용해서 MSADC 가상디렉터리에대한익명접속을거부하도록설정한다. 4 'HKLM\Software\Microsoft\DataFactory\HandlerInfo' 레지스트리키를생성하고 DWORD 형으로 handlerrequired라는값을생성하고 '1' 로설정한다. 8.5 웹권한을설정한다. 웹권한은 IIS 메타베이스에의해관리되는것으로 NTFS 권한과는다르므로혼동하지않도록유의해야한다. Web 권한은다음과같이웹사이트의 [ 등록정보 ] - [ 홈디렉터리 ] 탭을이용해서구성할수있으며, ' 읽기 ' 와 ' 쓰기 ', ' 스크립트소스액세스 ', ' 디렉터리검색 ' 의 4가지권한이제공된다.
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 관리자에서스크립트매핑을설정할웹사이트의 [ 등록정보 ] - [ 홈디렉터리 ] 탭에서
[ 구성 ] 버튼을클릭하면다음과같은응용프로그램매핑정보를확인할수있다. 여기서 사용하지않을확장자를선택하고 [ 편집 ] 을누른다. 여기서는예로서.htr 확장자에대한핸들러를선택하고편집하려한다..htr 확장자에대 한처리를 404.dll 에매핑하려면다음과같이 [ 찾아보기 ] 를누르고 'System 디렉터리 \inetsrv' 에위치하고있는 '404.dll' 을지정하면된다.