Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

웹개발

이제 웹 기반 응용개발 지식은 거의 필수적으로 요구되는 시대입니다. 구체적인 웹 사이트 개발은 아니더라도 거시적인 웹 기반 서비스에 대한 지식 배양을 위해 할 것이 참 많네요 ^^

IIS 6.0 웹 서버 보호

작성자 : 박종명
최초 작성일 : 2008-06-20 (금요일)
최종 수정일 : 2008-06-20 (금요일)
조회 수 : 3705

1. 웹 사이트를 시스템 파티션이 아닌 다른 파티션에 위치시킨다
   IIS 설치시에 기본적으로 설정되는 루트 디렉터리인 \inetpub\wwwroot 디렉터리를 사용하지 않는다 

   /scripts/..%5c../winnt/system32/cmd.exe 와 같은 url 로 시스템 자원 접근 등의 디렉터리 탐색 공격에 의한
  위험성 제거

2. 상위 경로 사용을 제거한다
    스크립트나 어플리케이션에서 MapPath와 같은 함수의 호출시 ".."를 사용해서 상위 경로로 접근하는 것을 거부하도록
    설정한다
 
3. 잠재적으로 위험한 가상 디렉터리를 제거한다
    IISSamples나 IISAdmin, IISHelp와 같은 샘플 어플리케이션의 가상 디렉터리를 제거하는 것이 좋다 

4. RDS를 제거하거나 보안을 강화한다
   RDS(Remote Data Services)는 IIS를 통해 원격에서 데이터 자원에 접근이 가능하도록 기능을 제공하는 구성요소이다.
   RDS의 인터페이스는 Program Files\Common Files\System\Msadc 디렉터리에 있는 Msadcs.dll에 정의되어 있다.
   웹 어플리케이션에서 RDS 기능을 사용하지 않는다면 이를 제거하는 것이 좋다. RDS를 제거하는 방법은 다음과 같다.

   ① '/MSADC' 가상 디렉터리를 IIS에서 제거한다.
   ② '\Program Files\Common Files\System\Msadc' 디렉터리를 삭제한다.
   ③ 'HKLM\System\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch' 레지스트리 키를
      제거한다.

5. 계정관리를 철저히 한다
    - 사용하지 않는 계정을 제거한다
    - Guest 계정을 비활성화한다 
    - 기본 익명 계정(IUSR_Machine) 대신 사용자 정의한 계정을 사용한다 
      웹 애플리케이션의 기능을 제공하는데 필요한 최소한의 권한을 가지는 계정을 만들고, 인터넷 관리자에서
      웹 애플리케이 션 별로 직접 정의한 계정을 지정하면 서버 상에 여러 개의 웹 사이트를 운영하는 경우 로그 분석에도
      용이하다

   -  강력한 암호 정책을 적용한다 

   - 익명 로그온(널 세션)을 비활성화 한다
     널 세션(Null Session) 접속은 인증을 받지 않은 상태에서 해당 컴퓨터에 접근하는 것을 의미하며 해커들은 이를 이용해
     서 원격 컴퓨터의 정보를 제공 받을 수 있고, 특정 권한으로 승격하거나 DoS 공격을 수행할 수도 있다.
     널 세션 접속을 허용하지 않으려면 레지스트리 편집기를 이용해서
    'HKLM\System\CurrentControlSet\Control\LSA' 키의 RestrictAnonymous 값을 '1'로 설정하면 된다.

6. 공유 제거
    관리목적에서 사용되는 C$, ADMIN$와 같은 관리 공유를 사용하지 않는다면 제거하는 것이 권장된다.
    관리 공유를 사용하지 않으려면 레지스트리 편집기를 이  용해서
    HKLM\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters 키에 AutoShareServer와
    AutoShareWks 값을 REG_DWORD로 만들고 '0'으로 설정하면 된다  

7. 감사 관리
     로그인 실패 로그를 기록한다 
     개체 접근 실패에 대한 로그를 기록한다

- 자료 참조 : 안철수 연구소 ?
 
8. TCP/IP 스택 강화하기

 
① 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가 활성화되어 있어야 한다.
 
 
 
② 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 탐지를 수행한다.
 
 
- 자료 참조 : 안철수 연구소 ?
 
 
 
기타
1. 방화벽 사용하기
    - ISA 서버 나 하드웨어 기반 방화벽을 사용하여 사용하지 않는 모든 포트를 막는다
      FTP:20,21 , SMTP:25, DNS:53, HTTP:80,443 , NNTP:119,563
2. 웹을 통한 원격관리 사용 안 함으로 설정하기
   - 브라우저를 통해 원격으로 관리할수 있는 관리 웹사이트를 중지한다
3. 디렉터리 검색 사용안함으로 설정하기
4. 사용하지 않는 응용 프로그램 매핑 제거하기
5. 첨부파일이 저장되는 경로는 웹 경로와 분리하고 만일 웹 경로에 존재한다면 해당 폴더의 실행권한을 제한하기
6. 편집툴의 자동 백업 파일 생성으로 인한 소스 노출에 주의 하기

이름
비밀번호
홈페이지
YV <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요