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