본문 바로가기

보안/웹 해킹_보안

HTTP의 기본 method들

** Request Line(요청 라인)의 Method 종류 **

 

GET - 지정된 URL 정보를 요청한다.(이때 전달해야 하는 파라메터를 URL에 포함시켜서 전달한다.)

 

POST - 지정된 URL 정보를 요청한다. (이때 전달해야 하는 파라메터를 메시지 본문(Request Message Body)을 통해서 전달한다.)

 

HEAD - HTTP Header 정보만 요청한다.

 

TRACE - 클라이언트의 요청을 그대로 응답한다. (Request의 Loop Back 테스트)

 

DELETE - 요청하는 URL의 자원을 삭제한다.

 

OPTIONS - 응답 가능한(서버에서 지원하는) HTTP 메소드를 요청

 

PUT - 요청하는 URL의 자원을 생성한다.   예를 들면  파일 업로드가 가능하다.

 

CONNECT - 터널링의 목적으로 연결 요청


 

** HTTP 버전별 지원 Method **

 

HTTP/0.9 - GET

 

HTTP/1.0 - GET, POSTHEAD

 

HTTP/1.1 - GET, POST, HEAD, OPTIONSPUTDELETETRACECONNECT

[출처] HTTP Request Message|작성자 유상윤


** GET 과 POST를 제외한 대부분의 메서드는 사용하지 않는것이 권장사항이다. 불필요한 메서드를 허용하므로 해서 웹서버는 공격에 취약할 수 있다. 그러므로 불필요한 메서드는 제거한다.



XST(Cross-Site Tracing)」는 Trace메소드를 사용한 공격 방법이다.

다운로드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

 

 

 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

 


Apache PHP 에서 PUT 허용


httpd.conf  파일에 다음 라인 추가

<Directory /var/www/test>
    <Limit GET POST PUT DELETE HEAD OPTIONS>
        Order allow,deny
        #You might want something a little more secure here, this is a dev setup
        Allow from all
    </Limit>
    <LimitExcept GET POST PUT DELETE HEAD OPTIONS>
        Order deny,allow
        Deny from all
    </LimitExcept>
    Script PUT /var/www/test/put.php
    Script DELETE /var/www/test/put.php
</Directory>


마지막으로  .htaccess 에 추가

RewriteEngine On RewriteBase /test RewriteRule ^/?(api)/? put.php [NC] RewriteCond %{REQUEST_METHOD} (PUT|DELETE) RewriteRule .* put.php


Tomcat 에서 PUT 이나 DELETE  허용

출처: http://www.codereye.com/2010/12/configure-tomcat-to-accept-http-put.html


Tomcat은 디폴트로 PUT 메서드가 허용되지 않는다. 

<servlet>
   <servlet-name>default</servlet-name>
   <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>

<init-param>

        <param-name>debug</param-name>
        <param-value>0</param-value>

</init-param>

   <init-param>
        <param-name>listings</param-name>

<param-value>false</param-value>

   </init-param>
   <init-param>
        <param-name>readonly</param-name>
        <param-value>false</param-value>

</init-param>

   <load-on-startup>1</load-on-startup>
</servlet>


tomcat-users.xml 파일에서 PUT 메서드를 허용할 사용자를 등록한다.

<?xml version='1.0' encoding='cp1252'?>
<tomcat-users>
    <user name="admin" password="admin" roles="admin" />
</tomcat-users>


web.xml 파일에서 PUT 메서드를 허용하고자 하는 웹 애플리케이션에 대해 security constraint을 설정한다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<security-constraint>
   <web-resource-collection>
   <web-resource-name>Demo App</web-resource-name>
       <url-pattern>/*</url-pattern>

<http-method>PUT</http-method>

   </web-resource-collection>
   <auth-constraint>
       <role-name>admin</role-name>
   </auth-constraint>
</security-constraint>
<login-config>
   <auth-method>BASIC</auth-method>
   <realm-name>Demo App</realm-name>
</login-config>
<security-role>

<description>Role for restricted resources</description>

   <role-name>admin</role-name>
</security-role>
</web-app>