TRACE and TRACK HTTP Methods Enabled 취약점 수정

TraceEnable

 

TraceEnable」는 Apache 디폴트로 허가되어 있는 Trace메소드의 온오프를 설정하는 옵션으로 Apache 1.3.34 2.0.55부터 서포트되고 있다.
Trace
메소드는 클라이언트가 송신한 리퀘스트를 그대로 반환하는 것이다.
예를 들어Host: www.test.com」라는 문자열을 송신한 경우.

 

telnet 192.168.0.201 80
TRACE / HTTP/1.0
Host: www.pentest.com

 

HTTP/1.1 200 OK

Date: Tue, 25 Jul 2006 01:39:23 GMT

Server: Apache

Transfer-Encoding: chunked

Content-Type: message/http

 

25

TRACE / HTTP/1.1

Host: www.pentest.com

리퀘스트에 송신한 문자열 Host: www.test.com」이 그대로 반환되었다.

왜 이 메소드가 문제가 되는가 하면 Trace메소드를 사용한 공격 방법에 XST(Cross-Site Tracing)」이라는 것이 있기 때문이다.

다운로드: http://www.cgisecurity.com/lib/WH-WhitePaper_XST_ebook.pdf


이것은 공격자가 클라이언트에 TRACE메소드를 발행하도록 하여, 레스폰스를 취득하는 것으로 Basic인증의 패스워드를 착취하는데 사용되는 공격이다.

이런 이유로 Trace메소드를 무효로 것을 권장하고 있는 것이다.
또한, 취약성 스캐너로 Trace메소드가 유효로 되어 있는서버를 스캔하면 대부분 리스크로 보고하므로, 대책을 취하는 것이 좋다.

 

그럼 실제로 httpd.conf 변경해 보자. 실제로는 매우 간단하다.

httpd.conf 적당한 부분에 다음을 기술하고 Apache를 재기동한다.

 

TraceEnable Off



TraceEnable Off」를 기술하기 전과 후의 Apache 반응을 OPTIONS」메소드를 사용하여 비교해 보자.

 

적용

telnet 192.168.0.201 80
OPTIONS / HTTP/1.0

 

HTTP/1.1 200 OK
Date: Sun, 12 Mar 2006 17:27:26 GMT
Server: Apache/1.3.34 (Unix)
Content-Length: 0
Allow: GET, HEAD, OPTIONS, TRACE
Connection: close


적용

telnet 192.168.0.201 80
OPTIONS / HTTP/1.0

 

HTTP/1.1 200 OK
Date: Sun, 12 Mar 2006 17:28:28 GMT
Server: Apache/1.3.34 (Unix)
Content-Length: 0
Allow: GET, HEAD, OPTIONS
Connection: close

 

「적용 후」에는 Allow」부분에 TRACE」가 삭제되어 있다.
이것으로 대책이 완료되었다.


추가
Apache 1.3.34
2.0.55에는 TraceEnable」가 서포트되고 있어 상기와 같이 간단히 TRACE메소드를 무효로 있지만, 이전 버전(1.3.33 2.0.54) 사용하고 있는 경우에는mod_rewire」를 사용하는 방법이 있다.

방법은 TraceEnable」과는 달리 TRACE메소드가 허가되고 있는 것처럼 보이지만, 내부 처리에 의해 무효화하는 방법이다.

 

우선, mod_rewrite」가 유효하게 되어 있는지 확인한다. 무효로 되어 있다면 유효하게 .
다음의 항목이 httpd.conf 들어 있으면 된다.

 

LoadModule rewrite_module libexec/mod_rewrite.so
AddModule mod_rewrite.c

 

위의 부분이 확인되었다면, 적당한 부분에

 

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
</IfModule>


같이 기술하고, Apache 재기동한다.

이것으로 TRACE메소드는 유효하게 되어 있지만, 클라이언트로부터 송신할 없게 된다.

 

예를 들어 TRACE메소드를 송신한 경우

 

적용

telnet 192.168.0.201 80
TRACE / HTTP/1.1

Host:localhost

 

HTTP/1.1 200 OK

Date: Tue, 11 Jul 2006 10:57:30 GMT

Server: Apache/1.3.12 (Unix)

Transfer-Encoding: chunked

Content-Type: message/http

 

TRACE / HTTP/1.1

Host: localhost


적용

telnet 192.168.0.201 80
TRACE / HTTP/1.1

Host: localhost

 

HTTP/1.1 403 Forbidden

Date: Tue, 11 Jul 2006 10:55:04 GMT

Server: Apache/1.3.12 (Unix)

Transfer-Encoding: chunked

Content-Type: text/html; charset=iso-8859-1

 

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<HTML><HEAD>

<TITLE>403 Forbidden</TITLE>

</HEAD><BODY>

<H1>Forbidden</H1>

You don't have permission to access /

on this server.<P>

<HR>

<ADDRESS>Apache/1.3.12 Server at localhost.localdomain Port 80</ADDRESS>

</BODY></HTML> 

 

「적용 후」를 보면 있듯이 TRACE메소드를 송신할 없게 되어 있다.

 

IIS(Intenet Information Service)의 경우

IIS Lockdown툴에 포함되어 있는 URLScan 사용한다.

1. IIS Lockdown Tool 설치한다.

2. IIS Lockdown Tool 포함되어 있는 URLScan 설치한다.

3. urlscan.ini 다음의 내용을 추가한다.

UseAllowVerbs=1 지정한 경우

 [options]

 UseAllowVerbs=1

 

 [AllowVerbs]

 GET

 HEAD

 POST

 

UseAllowVerbs=0 지정한 경우

 [options]

 UseAllowVerbs=0

 

 [DenyVerbs]

 TRACE

 TRACK

 

[2] IIS Lockdown Wizard

http://www.microsoft.com/korea/technet/security/tools/locktool.asp

 

[3] URLScan 보안

http://www.microsoft.com/korea/technet/security/URLScan.asp

 

[4] KB326444 - URLScan 툴의 구성 방법

http://support.microsoft.com/kb/326444/ko

 

Sun One WebServer (iPlanet6.0SP2이후 버전)

1. /config/obj.conf Default오브젝트안에 다음의 기술을 추가한다.

 

 <Client method=""TRACE"">

   AuthTrans fn=""set-variable""

   remove-headers=""transfer-encoding""

   set-headers=""content-length: -1""

   error=""501""

 </Client>

 

2. 서버를 재기동한다.

 

[5] Sun ONE/iPlanet Web Server Enable HTTP TRACE Method by Default to Emulate the CERT VU

http://sunsolve.sun.com/search/document.do?assetkey=1-26-50603-1