OWASP(Open Web Application Security Project), 행정안전부, KISA에서 정의한 웹 취약점 점검 항목에 "취약한 메소드 설정"이라는 항목이 존재하고 실제로 취약점 진단 시 많이 나오는 부분 중 하나이므로 포스팅을 하게 되었다.

 

Method는 일반적으로 많이 알고있는 GET, POST 외에 HEAD, PUT, DELETE, OPTIONS, TRACE 등으로 분류된다.

 

그 중 PUT, DELETE Method는 임의로 서버 내 파일의 생성 및 삭제가 가능하기 때문에 비인가 사용자에 의한 조작의 위험이 있고 TRACE Method 같은 경우는 클라이언트가 송신한 리퀘스트를 그대로 반환하게 되는데 이때 쿠키 및 세션값이 그대로 반환되게 되며 XST(Cross-Site Tracing)이라는 공격에 사용되어지기도 한다.

 

자세한 Method별 설명은 아래의 표와 같다.

 

메소드 설명
GET 요청받은 URI의 정보를 검색하여 응답한다.
POST Request body 내용에 데이터를 담아 전송하는데 사용하며, 생성이나 수정 용도로 사용된다.
HEAD GET 방식과 동일하지만, 응답에 BODY가 없고 응답코드와 HEAD만 응답한다.
PUT POST방식과 유사하게 데이터를 전송하고 요청된 자원을 수정한다.
DELETE 요청된 자원을 삭제할 것을 요청한다.
OPTIONS 웹 서비스에서 지원되는 메소드의 종류를 확인할 경우 사용
TRACE 원격지 서버에 루프백 메시지 호출하기 위해 사용
CONNECT 동적으로 터널 모드를 교환, 프록시 기능을 요청시 사용

 

기본적으로 권고하기를 GET, POST, HEAD, OPTIONS를 제외한 기타 Method를 비활성화하는 것을 권고하고있다.


실습

1.OPTIONS를 사용하여 지원되는 메소드의 종류를 확인

OPTIONS 메소드를 사용시 Respons 값으로 Allow 된 메소드 들을 확인 할 수 있는데 그 중 불필요한 TRACE 메소드가 설정되어 있음을 확일 할 수 있다.

 

2.TRACE 메소드 사용

 

마찬가지로 위의 표의 설명대로 TRACE 메소드를 사용하면 서버에 루프백 메시지를 호출하여 쿠키 및 세션값이 그대로 서버에서 전달 되는 것을 확인 할 수 있다.


해결방안

각 사용하는 서버마다 해결방안이 조금씩 차이나기 때문에 나눠서 설명해보도록 하겠다.

1. Apache

아파치 경우 Apache 홈 디렉토리/config/httpd.conf 파일에 <LimitExcept> 지시어를 추가하여 불필요한 메소드를 차단 할 수 있도록 한다.

<LimitExcept GET POST HEAD OPTIONS>
	order deny,allow
 	Deny from all
</LimitExcept>

 

****

추가

TRACE메소드를 제한하기 위해서 Apache 2.0.55 이후 버전부터 httpd.conf파일 안에 추가 명령어 필요

TraceEnable Off (명령어가 On으로 되어있다면 수정)

****

 

2. Apache Tomcat

Apache Tomcat 홈 디렉토리/conf/web.xml 파일안 <web-app> 필드 내에 설정을 추가하여 메소드를 차단한다.

<security-constraint>
  <display-name>Forbidden</display-name>
  <web-resource-collection>
    <web-resource-name>Protected Context</web-resource-name>
    <url-pattern>/*</url-pattern>
    <http-method>PUT</http-method>
    <http-method>DELETE</http-method>
    <http-method>TRACE</http-method>
    <http-method>CONNECT</http-method>
  </web-resource-collection>
  <auth-constraint></auth-constraint>
</security-constraint>

 

3. IIS

IIS 홈 디렉토리의 web.config파일안 필드 내에 설정을 추가하여 메소드를 차단 (IIS 7.0, 7.5, 8.0, 8.5, IIS 10)

<configuration>
   <system.webServer>
      <security>
         <requestFiltering>
            <verbs>
               <add verb="PUT" allowed="false" />
               <add verb="DELETE" allowed="false" />
               <add verb="TRACE" allowed="false" />
               <add verb="CONNECT" allowed="false" />
            </verbs>
         </requestFiltering>
      </security>
   </system.webServer>
</configuration>

 

3. ngnix

ngnix 홈 디렉토리의 ngnix.conf 파일안 수정을 통하여 메소드를 차단

server{
   listen          80;
   server_name   abc.co.kr;
   access_log     log/access.log;
   location / {
      limit_except GET POST {
      deny all;
          }
      }

 

4. WebtoB

WebtoB 홈 디렉토리/config/환경파일 파일안 Method를 수정하여 메소드를 차단한다.

webmain WEBTOBDIR = "/usr/local/webtob",
SHMKEY = 69000,
DOCROOT = "/usr/local/webto/docs",
User = "nobody",
Group = "nobody",
IndexName = "Index.html",
UserDir = "public_html",
DirIndex = "Index",
Method = "-PUT, -DELETE, -TRACE, -CONNECT",
LanguagePrio = "kr"

 

5. Resin

Resin 홈 디렉토리/resisn.conf 파일안 <web-app> 필드 내에 설정을 추가하여 메소드를 차단한다.

<security-constraint>
 <web-resource-collection>
    <http-method>PUT</http-method>
    <http-method>DELETE</http-method>
    <http-method>TRACE</http-method>
    <http-method>CONNECT</http-method>
 </web-resource-collection>
 <auth-constraint role-name='user'/>
</security-constraint>

실제로 위 설정과 같이 설정해주면 아래 사진과 같이 Allow 메소드와 특정 메소드가 차단됨을 확인 할 수 있다.

 

 


참조

 

https://javaplant.tistory.com/18

 

HTTP 응답코드 메소드 정리 GET, POST, PUT, PATCH, DELETE, TRACE, OPTIONS

HTTP Request 정보  GET /index.html HTTP/1.1  요청 URL정보 (Mehotd /URI HTTP버젼)  user-agent: MSIE 6.0; Window NT 5.0  사용자 웹 브라우져 종류  accept: test/html; */*  요청 데이터 타입 (응답..

javaplant.tistory.com

https://jully215.tistory.com/111

 

Apache TRACE Method 제어

TRACE,PUT,DELETE 등 보안에 취약한 Method는 사용 금지되어야 한다. 1. 해결방법 Apache 서버의 httpd.conf 파일에 설정을 추가한다. TraceEnable Off * Apache 2.0.55 이후 버전부터 support. (버전별 확인 필요..

jully215.tistory.com

 

'기술보안 > Web' 카테고리의 다른 글

SQL Injection 공격 공부(1)  (0) 2021.10.26
CSRF(Cross-site request forgery) 취약점  (0) 2021.09.05
[Node.JS] Web Shell 테스트  (0) 2021.07.31
SSTI 실습  (0) 2021.07.16
SSTI 개념 정리  (0) 2021.07.16
복사했습니다!