티스토리 뷰

다음 그림은 일반적으로 IIS 웹 서버가 노출되어 있는 보안상의 취약점과 위협 요소를 정리한 것이다.


[그림1] 웹 서버의 취약점과 위협요소

이러한 웹 서버의 보안상 취약점과 각각의 대응책에 대해서 정리해 보도록 하자.


1. 프로파일링(Profiling)

프로파일링은 특정 웹 사이트에 대한 정보를 모으는데 사용되며 공격자는 이렇게 모아진 정보를 이용해서 취약점을 찾아 공격한다.

  • 취약점
    - 불필요하게 사용되는 프로토콜이나 열려 있는 포트가 프로파일링의 대상이 되며 일반적으로 포트 스캔, 포트 스윕, NetBIOS와 SMB 열거(Server Message Block enumeration)와 같은 방법이 사용된다.

  • 대응책
    - 프로파일링 공격에 대한 대응책으로 불필요한 포트를 막고 ICMP(Internet Control Message Protocol), NetBIOS, SMB와 같은 불필요한 프로토콜을 비활성화 시켜야 한다.


    2. 서비스 거부(Denial of Service) 공격

    서비스 거부(DoS) 공격은 클라이언트의 요청에 의해 서버가 응답할 수 없는 상태가 되는 것을 말한다.

  • 취약점
    - 주로 TCP/IP 스택이 취약하게 설정되어 있거나 최신 패치가 적용되지 않은 서버가 공격대상이 되며, 네트워크 레벨의 SYN Floods, 버퍼 오버플로우, 과도한 요청으로 웹 서버에게 부하를 주는 공격 방법 등이 사용된다.

  • 대응책
    - 이에 대한 대응책으로 TCP/IP 스택을 강화하고 시스템 소프트웨어에 대하여 최근 패치와 업데이트를 지속적으로 적용해야 한다.


    3. 불법적인 접근

    권한 없는 사용자가 제한된 기능을 실행하거나 정보에 접근하려는 것을 말한다.

  • 취약점
    - IIS의 권한 제어상의 취약 사항이나 NTFS 권한의 취약점이 공격대상이 된다.

  • 대응책
    - 이에 대한 대응책으로 Web 권한이나 NTFS 권한을 강화하여 익명 사용자가 제한된 자원에 접근할 수 없도록 해야 한다.


    4. 임의의 코드 실행(Arbitrary code execution)

    공격자가 악의적인 코드를 서버 상에서 실행시켜서 서버의 리소스에 영향을 주거나 시스템의 하위에 마운트되어 추가 공격하려는 행위을 말한다.

  • 취약점
    - IIS 설정상의 취약점이나 패치되지 않은 서버가 공격 대상이 되며, 경로 탐색(path traversal)이나 코드 주입으로 버퍼 오버플로우를 발생시키는 방법이 사용된다.

  • 대응책
    - 대응책으로 "../"로 상위 경로를 탐색하려는 URL 접근을 거부하도록 IIS를 설정하고, 시스템 명령과 유틸리티 파일 또는 해당 폴더에 접근 권한(ACL)을 강화하고, 최근의 업데이트와 패치가 적용된 상태로 시스템을 유지해야 한다.


    5. 정보 공개(Information Disclosure)

    웹 서버 상의 특정 소스 코드나 정보가 외부에 공개되는 것을 말한다.

  • 취약점
    - 최신 패치가 적용되지 않은 서버의 IIS 서비스에 존재하는 백도어나 기타 불필요한 서비스나 프로토콜이 공격 대상이 된다.

  • 대응책
    - 항상 최근의 업데이트와 패치를 유지해야 하며, 서버 상에 데이터베이스 연결 문자열과 같은 주요 정보를 소스 코드상에 직접 기입하지 않고 다른 저장소(예: 레지스트리)를 사용하는 것이 좋다.


    6. 바이러스, 웜, 토로이 목마

    대부분의 경우 이들 코드는 시스템 자원을 소비해서 느려지거나 실행이 중단되도록 만든다. 코드레드 웜의 경우 ISAPI 필터의 버퍼 오버플로우 취약점을 이용하여 IIS 서비스에 영향을 준 대표적인 예이다.

    구분 설명
    바이러스 자기 복제를 하며, 컴퓨터 시스템을 파괴하거나 작업을 지연 또는 방해하는 악성 프로그램이다.
    분산형 시스템, 네트워크에 상주하는 독립 프로그램 또는 실행 가능한 코드 모듈을 말한다. 웜은 가능한 많은 시스템 자원을 이용하기 위해 필요하다면 스스로 자기 자신을 복제한다.
    트로이 목마 시스템에서 정상적인 기능을 하는 프로그램으로 가장해 다른 프로그램 안에 숨어 있다가 그 프로그램이 실행될 때 자신이 활성화하는 악성 프로그램을 말한다. 컴퓨터 바이러스와 달리 자기 복사 능력은 없지만, 자기자신이 실행되는 순간 시스템에 직접적인 피해를 가하는 특징을 가지고 있다.
    [표 1] 바이러스, 웜, 트로이목마의 구분


  • 취약점
    - 바이러스나 웜과 같은 악성 코드는 주로 패치가 안된 서버와 불필요하게 실행중인 서비스나 ISAP 필터와 확장을 대상으로 공격한다.

  • 대응책
    - 최근의 소프트웨어 패치를 항시 적용하고, 사용되지 않는 ISAPI 필터나 확장 기능을 비활성화 시켜야 한다. 안티바이러스 프로그램으로 바이러스의 침투를 예방하고 자동으로 치료할 수 있는 환경을 설정한다. 또한 공격 대상의 영역을 최소화하기 위해 최소한의 권한으로 프로세스가 실행되도록 설정해야 한다.

    지금까지 IIS 웹 서버의 취약점과 대응책을 개괄적으로 알아보았다. 다음 호에서부터는 IIS 웹 서버를 보호하기 위한 보다 구체적인 방법을 살펴보도록 하겠다.


  • 1. 필요한 구성요소만 설치한다.

    1.1 IIS의 구성요소

    IIS 웹 서버는 5.0버전부터 Windows 운영체제의 구성요소로 포함되어 배포되고 있다. IIS를 설치하면 다음과 같은 서비스나 웹 사이트, 폴더, 계정이 기본적으로 설치 또는 구성되는데 이 중에서 필요한 구성요소만 설치하는 것이 최우선 과제이다.

    항목 설명
    서비스 웹과 FTP 관리를 위한 IIS 관리 서비스
    World Wide Web 서버 서비스
    FTP 서비스
    메일 발송을 위한 SMTP(Simple Mail Transport Protocol) 서비스
    뉴스그룹을 위한 NNTP(Network News Transport Protocol) 서비스
    계정 및
    그룹
    IUSR_MACHINE (인터넷으로 접근하는 익명 계정)
    IWAM_MACHINE (out-of-process로 실행되는 웹 애플리케이션이 실행되는 계정)
    폴더 %windir%\system32\inetsrv (IIS 프로그램)
    %windir%\system32\inetsrv\iisadmin (IIS 관리 프로그램)
    %windir%\help\iishelp (IIS 도움말 파일)
    %systemdrive%\inetpub (웹, FTP, SMTP 루트 폴더)
    웹 사이트 기본 웹 사이트(80번 포트) : %systemdrive%\inetpub\wwwroot
    관리 웹 사이트(3693번 포트) : %systemdrive%\system32\inetsrv\iisadmin
    [표 1] IIS의 설치 항목

    [제어판] - [프로그램 추가/제거] - [Windows 구성요소 추가/제거]에서 인터넷 정보 서비스(IIS) 항목을 보면 기본적으로 다음과 같은 구성요소가 설치된 것을 확인할 수 있다. 대다수의 악의적인 공격은 초기 기본 설정으로 IIS 서버가 구성되어 있다고 가정하고 취약점을 노리는 경우가 많으므로 FTP나 NNTP, SMTP, Server Extensions 등의 서비스들은 사용하지 않는 경우에는 설치하지 않는 것이 보안 및 관리적인 측면에서 좋다.


    [그림 1] IIS의 구성 요소


    1.2 웹 사이트의 구성

    IIS를 설치한 후에 [관리도구] - [인터넷 서비스 관리자]를 실행하여 확인해 보면 다음과 같이 '기본 웹 사이트'와 그 하위에 IISHelp, MSADC, Printers, Scripts와 같은 가상 디렉토리가 기본적으로 구성되어 있음을 알 수 있다. 그러나 이러한 기본 구성 또한 악의적인 공격의 대상이 된다. 예를 들면 ADSI 스크립트를 이용해서 기본 웹 사이트에 대한 설정을 변경한다든지 MSADC 가상 디렉토리를 통한 서버 자원 접근 등이 가능하다.


    [그림 2] 기본 웹 사이트에 추가되어 있는 가상 디렉토리들

    물론 이러한 문제점들은 최신 서비스 팩과 보안 패치를 설치함으로써 해결이 되지만, 필자의 경우에는 '기본 웹 사이트'를 중지 또는 제거하고 초기 웹 서버의 루트 경로인 '%system drive%\inetpub\wwwroot'가 아닌 다른 위치에 웹 서버를 위한 루트 폴더를 만들어 사용한다. (위 [그림 2]를 보면 '기본 웹 사이트'가 중지되어 있고 'noenemy'라는 새로운 웹 사이트를 만들어 운영하고 있음을 알 수 있다.)


    2. 최신 패치와 업데이트를 항상 유지한다.

    운영체제의 서비스 팩과 보안 패치를 최신 버전으로 유지하는 것은 보안 사고를 예방하기 위한 기본적인 과제이다. 과거 큰 피해를 입었던 보안 사고들은 주기적인 보안 패치를 통해서 미연에 막을 수 있는 것이 대부분이었다는 점을 기억하자. 이러한 권장 패치에 대한 알림과 자동 업데이트 기능이 운영체제 차원에서 제공되므로 패치 적용에 대한 관리적인 이슈가 많이 감소되었다.

    또한 마이크로소프트에서 제공하고 있는 MBSA(Microsoft Baseline Security Analyzer)라는 툴을 이용하면 중요한 보안 패치의 적용 여부 뿐만 아니라 운영체제나 인터넷 익스플로어, SQL 서버, MDAC 등의 구성요소를 분석하여 보안상 취약한 부분을 손쉽게 확인할 수 있다.


    [그림 3] MBSA를 이용한 취약점 분석 결과


    [관련 사이트]
    - Windows Update 사이트 :
    http://windowsupdate.microsoft.com
    - MBSA 사이트 :
    http://www.microsoft.com/technet/security/tools/mbsahome.mspx

    3. IIS Lockdown 툴을 사용한다.

    3.1 IIS Lockdown 설치 및 구성

    앞서 IIS를 설치할 때에 필요한 구성요소만 설치하라고 언급했었는데 IIS Lockdown 툴은 사용 목적에 따라 권장되는 IIS 웹 서버의 설정으로 구성해주는 도구이다. 즉, 사용 목적에 따라 필요한 구성요소만 활성화 시키고 그외의 구성요소는 비활성 상태로 만든다. IIS Lockdown 툴은
    여기에서 다운로드 받을 수 있다.


    Quick Info

    File Name:

    iislockd.exe

    Download Size:

    285 KB

    Date Published:

    10/10/2002

    Version:

    2.1

    Internet Information Services (IIS) Lockdown Tool 2.1
    English



    잠깐!
    IIS Lockdown 툴은 실행과 동시에 IIS 웹 서버의 하위 서비스나 그 환경설정 내용이 변경되어 적용되므로 주의가 필요하다. 적용 후에 일부 서비스가 정상 동작하지 않을 수 있으며 이를 수정하는 과정이 필요할 수 있기 때문이다. 따라서 실제 사용중인 웹 서버에 바로 적용하기 전에 테스트 서버로 동일한 환경을 구성한 뒤에 정상적으로 서비스가 되는지 테스트한 후에 사용하는 것이 좋다.


    IIS Lockdown 툴은 설치 프로그램이 아니라 단독 실행파일이다. 다운로드 한 후에 실행해보면 다음과 같은 템플릿 선택 화면을 볼 수 있다. 웹 서버가 사용되는 목적에 따라 활성화되는 구성요소와 IIS의 메타베이스 정보가 다르게 설정되므로 올바른 템플릿을 선택하는 것이 중요하다. 각 템플릿 별 세부 설정사항에 대한 내용은 여기 를 참고하기 바란다.


    [그림 4] IIS Lockdown - 템플릿 선택 화면

    다음으로 진행하면 URLScan 필터를 설치할 것인가를 물어보는 화면이 나타난다. URLScan은 ISAPI 필터로서 특정 HTTP 요청을 블록킹함으로써 서버를 보호하는데 사용된다. URLScan에 대해서는 다음 절에 다시 설명하겠다.


    [그림 5] URLScan 필터의 설치 여부 선택

    다음으로 진행하면 선택한 템플릿에 따라 IIS 웹 서버의 보안 설정이 구성된다. 만약 원래의 구성으로 되돌리고 싶으면 IIS Lockdown 툴을 재실행하고 이전 설정 정보로 롤백하면 된다.

    3.2 URLScan ISAPI 필터

    URLScan은 ISAPI 필터로 특정 HTTP 요청을 블록킹함으로써 IIS 서버를 보호하는 역할을 담당한다. 명령 프롬프트에서 'iislockd.exe /q /c'라고 입력함으로써 IISLockdown을 실행하지 않고 URLScan 필터만 설치할 수도 있다. 설치된 URLScan을 삭제하려면 [제어판] - [프로그램 추가/제거]에서 IIS UrlScan Tool을 찾아 삭제하면 된다.

    URLScan 필터는 '%windows directory%\system32\inetsrv\urlscan'에 설치된다. 이 디렉토리에는 URLScan의 실행에 필요한 바이너리 파일과 환경설정 파일이 있으며 로그파일이 저장된다. 이 디렉토리에서 urlscan.ini 파일이 있는데 바로 URLScan 필터의 동작을 설정하는 환경설정 파일이다.


    [그림 6] UrlScan.ini 설정 파일

    UrlScan.ini 파일에는 필터링 하는데 사용되는 여러 섹션과 설정 항목이 존재한다. 각 항목에 대하여 자세한 설명이 있어 직관적으로 구성할 수 있게 되어 있다.

    어떠한 메소드를 허용하고 거부할 것인가는 AllowVerbs와 DenyVerbs를 이용하면 되고, 어떠한 확장자를 허용하고 거부할 것인가는 AllowExtensions와 DenyExtensions 섹션을 이용하면 된다. 서버의 경로 탐색에 대한 거부는 DenyUrlSequences 섹션을, 그리고 전반적인 설정에 사용되는 options 섹션이 있다.

    ISAPI 필터는 IIS 웹 서버가 요청을 받기 전에 해당 요청을 가로채서 먼저 처리하므로 UrlScan 필터에 의해서 거부된 요청은 IIS 웹 서버로 전달되지 않는다. 초기 설정 후에는 로그 파일을 잘 분석하여 어떠한 요청이 거부되는지, 만약 정상적인 요청이 거부되고 있다면 UrlScan.ini 설정파일을 수정하는 과정이 필요하다.
    IIS 웹 서버를 보호하기 위하여 사용되지 않은 프로토콜을 비활성화하고 레지스트리 설정을 통해 TCP/IP 스택을 강화하는 방법을 살펴보도록 하겠다.

    4. 프로토콜 설정으로 웹 서버를 보호한다.

    불필요한 프로토콜을 비활성화시킴으로써 잠재적인 위협요소를 줄일 수 있다. 이러한 프로토콜에는 WebDAV나 NetBIOS, SMB이 있고 TCP/IP 스택을 강화하는 것도 도움이 된다.

    4.1 WebDAV

    WebDAV(Web Distributed and Versioning)는 웹서버 상에 존재하는 파일들을 공동으로 편집·관리하기 위한 도구로서 HTTP와 같은 웹 운영프로토콜의 확장된 형태이다. 2003년 3월에 IIS에서 지원하는 WebDAV에서 버퍼오버플로우 취약점이 발견되면서 주요 공격대상이 되고 있다. IIS 설치시 WebDAV가 기본으로 설치되기 때문에 사용하지 않는 경우 제거하는 것이 좋다. (지난 호에서 살펴본 IISLockdown 도구에서도 WebDAV를 비활성화하기 위한 옵션을 제공한다.)

    레지스트리 편집기(Regedit.exe)를 실행하고, HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters 레지스트리 키를 찾아 DisableWebDAV라는 DWORD 값을 만들어 '1'로 설정한다. 변경된 값을 적용하기 위해서는 IIS를 재시작하면 된다.


    [그림 1] WebDAV 비활성화하기


    4.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를 비활성화하는 방법은 다음과 같다.

    ① 바탕화면 또는 제어판에서 [내 컴퓨터]의 등록정보에서 [하드웨어] 탭을 선택한다.
    ② [장치관리자]를 실행한다.
    ③ [장치관리자]의 [보기] 메뉴에서 [숨김 장치 표시]를 선택한다.
    ④ [장치관리자] 목록에서 [비 플러그 앤 플레이 드라이버]를 선택한다.
    ⑤ 하위 목록에서 [NetBios over Tcpip]를 선택하고 [제거] 한다.


    [그림 2] 장치관리자에서 NetBIOS 프로토콜 제거하기


    4.3 SMB 비활성화 하기

    SMB(Session Message Block) 프로토콜은 Windows에서 디스크와 프린터를 네트워크 상에서 공유하는데 사용된다.

    SMB는 다음과 같은 포트를 사용한다.

  • TCP 139번 포트
  • TCP 445번 포트

    SMB를 비활성화하려면 다음과 같은 방법으로 TCP/IP에서 SMB를 언바인드 시키면 된다.

    ① 바탕화면 또는 제어판에서 [네트워크 환경]의 [등록정보]를 실행한다.
    ② 현재 인터넷에 접속된 연결의 [등록정보]를 선택한다.
    ③ [Microsoft 네트워크용 클라이언트] 항목과 [Microsoft 네트워크용 파일 및 프린터 공유] 항목의 체크를 해제한다.


    [그림 3] SMB 포로토콜 비활성화하기


    4.4 TCP/IP 스택 강화하기

    Windows 2000에서는 TCP/IP을 제어할 수 있도록 많은 매개변수를 제공하고 있는데 기본적으로 제공되는 설정을 변경함으로써 더욱 효과적으로 웹 서버를 보호할 수 있다.

    Windows 운영체제는 레지스트리를 통해 TCP/IP와 관련된 많은 매개변수를 제공하는데 이를 이용해서 SYN Floods나 IMCP, SNMP 공격과 같은 네트워크 레벨에서의 DoS(서비스 거부) 공격을 막을 수 있다.

    잠깐!
    레지스트리로 제공되는 TCP/IP의 매개변수에는 항목별로 허용하는 범위내의 값을 설정해야 하며 최적의 값을 설정해야 한다. 이 값을 잘못 설정할 경우 클라이언트의 연결이 제한되어 정상적인 서비스를 제공하지 못할 수 있으므로 실제 서버에 적용하기 전에 테스트 서버를 통해서 충분한 검증한 한 후에 적용해야 한다.


    참고사이트 : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secmod/html/secmod109.asp

    1) SYN Floods 공격 방어

    SYN 공격은 TCP/IP에서 연결을 맺는 메카니즘의 취약점을 대상으로 하며, 공격자는 TCP의 SYN 요청을 의도적으로 발생시키는 프로그램을 이용해서 서버상의 커넥션 큐를 넘치게 만든다.

    SYN Floods 공격으로부터 웹 서버를 보호하려면 레지스트리 편집기를 이용해서 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 키에 다음과 같은 항목에 대한 값을 지정하면 된다.

    항목명 권장 범위 설명
    SynAttackProtect 2 0(비활성)-2 SYN 공격에 대한 보호 기능을 활성화시킨다. SYN-ACKS의 재전송을 적게 조절함으로써 SYN 공격을 막는다. TcpMaxHalfOpen나 TcpMaxHalfOpenRetried 설정과 함께 사용되어야 한다.
    TcpMaxPortsExhausted 5 0-65535 SYN Floods 공격이 발생했음을 판단하는데 기준이 되는 TCP 연결의 최대값
    TcpMaxHalfOpen 500 100-65535 SYN 공격이 동작하기 전에 SYN_RCVD 상태에서 연결을 허용할 최대값. 이를 적용하려면 먼저 SynAttackProtect가 활성화되어 있어야 한다.
    TcpMaxHalfOpenRetried 400 80-65535 SYN 공격이 동작하기 전에 SYN_RCVD 상태에서 연결을 허용할 최대값. SYN_RCVD는 SYN 공격에 대한 방어가 동작하기 전에 적어도 한번의 SYN 플래그를 재전송한다. 이를 적용하려면 먼저 SynAttackProtect가 활성화되어 있어야 한다.


    이 외에도 TcpMaxConnectResponseRetransmissions, TcpMaxDataRetransmissions, EnablePMTUDiscovery, KeepAliveTime, NoNameReleaseOnDemand와 같은 매개변수가 제공된다. 보다 자세한 내용은 여기를 참조하기 바란다.

    ② AFD.SYS 설정

    FTP 서버 및 웹 서버와 같은 Windows 소켓 응용 프로그램에서는 연결 시도를 Afd.sys에서 처리한다. Afd.sys도 HKLM\System\CurrentControlSet\Services\AFD\Parameters 레지스트리 키에 대하여 많은 매개변수를 제공한다.

    항목명 권장 범위 설명
    EnableDynamicBacklog 1 0(사용안함)
    1(사용)
    많은 양의 SYN_RCVD 연결에 대해서 능동적으로 대처할 것인지에 대한 AFD.SYS 기능의 활성화 여부를 지정한다.
    MinimumDynamicBacklog 20 0-4294967295 Listening endpoint에서 허용하는 접속의 최소 수를 지정한다. 접속수가 설정된 값 이하가 되면 새로운 스레드에서 추가 연결을 생성한다.
    MaximumDynamicBacklog 20000 0-4294967295 Listening endpoint에서 허용하는 'Quansi-free' 연결의 최대 수를 지정한다. 'Quansi-free' 는 SYN_RCVD 상태의 연결과 free connections를 더한 값이다.
    DynamicBacklogGrowthDelta 10 0-4294967295 추가적인 연결이 필요할 때 생성되는 free connections의 수를 지정한다.


    ③ ICMP 공격 방어

    ICMP(Internet Control Message Protocol)는 호스트 서버와 인터넷 게이트웨이 사이에서 메시지를 제어하고 에러를 알려주는 프로토콜이다(RFC 792 참조). 대표적인 예로 ping 명령어는 인터넷 접속을 테스트하기 위해 ICMP를 사용한다. 최근 발생한 윌시아 웜 바이러스는 ICMP 패킷을 무작위로 보내서 패치가 안된 컴퓨터에 침투한다.

    HKLM\System\CurrentControlSet\Services\AFD\Parameters 레지스트리 키에서 다음 항목을 설정한다.

    항목명 권장 범위 설명
    EnableICMPRedirect 0 0(사용안함)
    1(사용)
    이 값을 0으로 설정함으로써 ICMP 리디렉트 패킷을 수신했을 때 호스트 경로를 생성하지 않게 하여 부하를 줄일 수 있다.


    ④ SNMP 공격 방어

    SNMP(Simple Network Management Protocol)는 네트워크를 관리하기 위한 프로토콜로서 망 관리를 위해 SNMP manager와 agent가 서로 통신하는데 사용된다. 그러나 SNMP을 악용하면 네트워크 연결 장비를 무력화시킬 수 있을 뿐만 아니라 장비를 직접 조작하거나 서비스 거부 공격으로 웹사이트를 마비시킬 수 있다.

    HKLM\System\CurrentControlSet\Services\Tcpip\Parameters 레지스트리 키에서 다음 항목을 설정한다.

    항목명 권장 범위 설명
    EnableDeadGWDetect 0 0(사용안함)
    1(사용)
    공격자가 2차 게이트웨이로 스위칭하는 것을 막는다. 이 값을 1로 설정하면 TCP는 dead-gateway 탐지를 수행한다.

    계정 관리, 공유 자원 관리, 감사관리 측면에서 IIS 웹 서버를 보호하는 방법을 알아보도록 하자.

    5. 계정 관리

    서버에서 사용되지 않는 계정들은 공격자가 이 계정을 이용해서 접근할 수 있으므로 제거하는 것이 좋다. 또한 단순하거나 유추하기 쉬운 패스워드는 무차별 대입 공격(brute force)이나 사전 공격(dictionary attack)에 취약하다.

    5.1 사용하지 않는 계정을 제거한다.

    서버상에 사용되지 않는 계정을 이용해서 공격자가 권한을 얻어서 접근할 수 있으므로 이러한 계정은 제거하는 것이 좋다. 실제 서버에 반영하기 전에 테스트 서버에서 계정을 제거한 후에 서비스에 이상이 없는지 먼저 확인하는 것이 좋다.

    5.2 Guest 계정을 비활성화한다.

    Guest 계정은 컴퓨터에 익명 접속을 연결할 때 사용되는데 이를 비활성시킴으로써 익명 연결을 제한할 수 있다. Guest 계정의 활성화 여부는 [컴퓨터 관리] 도구에서 [로컬 사용자 및 그룹]의 [사용자] 메뉴의 목록에서 확인할 수 있다.

    5.3 관리계정의 이름을 바꾸고 복잡한 패스워드를 사용한다.

    기본적으로 관리자에게 지정되는 Administrator 계정은 컴퓨터에 대한 모든 권한을 가지므로 악의적인 목적으로 사용하기 위한 목표가 된다. 따라서 이 계정의 이름을 다른 이름으로 변경하고 유추하기 어려운 복잡한 패스워드를 사용하는 것이 좋다.



    [그림 1] Administrator 계정의 이름 바꾸기

    5.4 기본 익명 계정(IUSR_Machine) 대신 사용자 정의한 계정을 사용한다.

    인터넷으로 익명으로 접근하는 사용자들은 IIS 설치시 기본적으로 생성되는 IUSR_Machine (서버의 NetBIOS명) 계정으로 접근하게 된다. 예를 들어 'WebSvr'라는 이름의 서버에는 'IUSR_WebSvr'이라는 계정이 생성된다. 이 계정을 비활성화하고 웹 서버의 익명 접속에 사용할 계정을 직접 정의하는 것이 좋다.

    웹 애플리케이션의 기능을 제공하는데 필요한 최소한의 권한을 가지는 계정을 만들고, 인터넷 관리자에서 웹 애플리케이션 별로 직접 정의한 계정을 지정하면 서버 상에 여러 개의 웹 사이트를 운영하는 경우 로그 분석에도 용이하다.

    특정 웹 사이트에 대해서 익명 연결에 사용할 계정을 지정하려면 다음 그림과 같이 [인터넷관리자]에서 해당 사이트의 [등록정보]-[디렉토리 보안]-[익명 액세스 및 인증 제어]-[편집]에서 익명 사용자 계정을 지정하면 된다.



    [그림 2] 익명 사용자 계정의 변경

    5.5 강력한 암호 정책을 적용한다.

    계정 암호에 대한 무차별 대입 공격이나 사전 공격을 막기 위해 암호의 최소 길이나 특수문자의 사용여부를 지정하는 등의 보다 강화된 정책을 사용하는 것이 좋다.

    암호 정책 기본 설정 권장 설정
    최근 암호 기억 0개 암호 기억됨 24개 암호 기억됨
    최대 암호 사용 기간 42일 42일
    최소 암호 사용 기간 0일 2일
    최소 암호 길이 0문자 8문자
    암호는 복잡성을 만족해야 함 사용안함 사용함

    암호 정책은 [관리 도구] - [로컬 보안 설정]에서 [계정 정책] - [암호 정책]에서 설정할 수 있다.



    [그림 3] 암호 정책의 설정

    5.6 익명 로그온(널 세션)을 비활성화 한다.

    널 세션(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 로그인 실패 로그를 기록한다.

    시스템에 로그인하는데 실패한 이벤트에 대해서는 반드시 로그를 기록해야 한다. 로그를 통해서 암호에 대한 무차별 대입 공격이나 사전 공격의 흔적을 찾을 수 있으며 공격자가 어떠한 게정으로 접근을 시도했는지도 알 수 있다.

    [관리도구]에서 [로컬 보안 설정] 도구를 실행하고 [로컬 정책]-[감사 정책]에서 '로그온 이벤트 감사' 항목에서 '실패' 로그를 기록하도록 설정하면 된다. 이렇게 설정하면 이후에 발생하는 로그인 실패 이벤트에 대한 내역을 [이벤트 뷰어]의 [보안 로그] 목록에서 확인할 수 있게 된다.



    [그림 4] 로그온 실패에 대한 감사 기록 설정

    7.2 개체 접근 실패에 대한 로그를 기록한다.

    파일이나 폴더 등의 개체에 대한 악의적인 접근 시도에 대하여 감사기록을 하는 방법을 알아보자. 먼저 7.1에서 설명한 것과 동일한 방법으로 감사정책에서 '개체 액세스 감사'에 대하여 '실패'시 로그를 기록하도록 설정한다.

    그리고 감사하려는 대상 폴더나 파일을 탐색기에서 선택하고 [등록정보]의 [보안]탭에서 [고급] 버튼을 누른다. 액세스 컨트롤 설정 창에서 [감사]탭을 선택하고 [추가] 버튼을 클릭한 뒤 'Everyone' 그룹에 대한 모든 실패 이벤트를 기록하도록 감사 항목을 설정하면 된다.



    [그림 5] 개체 액세스 실패에 대한 감사기록 설정하기


    개체 액세스에 대한 감사기능은 해당 디스크 볼륨이 NTFS 파티션일 경우에만 사용할 수 있다. NTFS 파일시스템은 FAT과 비교했을 때 파일 및 폴더 단위의 권한 부여 및 관리가 용이하므로 웹 서버의 자원이 저장되는 파티션은 NTFS를 사용하는 것이 좋다.

    7.3 IIS 로그파일의 위치를 변경하고 NTFS 권한을 적용한다.

    기본적으로 IIS 로그파일은 '%systemroot%\system32\LogFiles'에 사이트별로 저장되는데 이를 다른 폴더에 저장하거나 이름을 변경함으로써 공격자가 로그 파일을 변경하거나 삭제하는 것을 어느 정도 막을 수 있다. 가능하면 이 로그 파일이 저장되는 디렉토리를 웹 사이트가 위치한 디스크와 다른 볼륨을 사용하고 NTFS 권한을 Administrator(모든 권한), System(모든 권한), Backup Operators(읽기)로 지정하여 다른 계정으로 로그 파일에 접근하는 것을 막는 것이 좋다.


    출처 : 안철수 연구소

  • 댓글