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

이번 호에서는 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 탐지를 수행한다.

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