본문 바로가기
보안관리

[보안취약점] 웹 서비스 메소드 설정 공격 조치방안

by ojava 2020. 10. 26.
반응형

웹 서비스 메소드라하면 생소하게 느껴질 수 있지만, 익숙한 단어로 얘기하자면 HTTP METHOD이다.

Request를 보낼 때, method로 지정하는 GET과 POST가 가장 많이들 접해봤을 방식인데, RESTful 형태를 많이 사용하는 요즘은 PUT, DELETE 등도 익숙하지 않을까 싶다.

 

보안취약점 중 '웹 서비스 메소드 설정 공격'은 해당 사이트에서 허용된 웹 서비스 메소드가 어떤 것들이 있나 확인해서 이를 이용한 공격을 할 수 있는 취약점이다.

기본적으로 웹 서비스 메소드에 어떤 메소드가 있는지 알아보고, 이를 막기 위해서 어떤 조치를 하면 되는지 살펴보자.

 

 

1. 웹 서비스 메소드 종류

 

익숙한 GET, POST, PUT, DELETE 외 아래와 같은 대상들이 있다. 정리하는 김에 표로 만들어서 정리한다.

웹 메소드명 특징
GET 요청하는 내용이 URL에 노출되는 형태이며, Request-URI 뒤에 붙는 query string에는 길이 제한이 있다. 요청을 보내고 응답을 받는 형태로 검색 등에 사용된다.
HEAD GET과 유사하지만, Response로 BODY를 반환하지 않고 응답코드만 있다.
응답내용이 필요없이 정상 호출 여부를 확인할 때 사용하는 Health-Check 페이지 등에 사용한다.
POST Request body 내용에 데이터를 담아 전송하는데 사용하며, 생성이나 수정 용도로 사용된다.
PUT POST 방식과 유사하게 데이터를 전송하는 용도이지만, Update의 성격이 더 강하다.
DELETE 요청하는 대상에 대해 삭제하도록 하는 메소드
이름만 봐도 느껴지지만 안전상의 이유로 해당 메소드는 사용하지 못하게 차단하는 것을 권고한다.
OPTIONS 웹서버에서 지원되는 메소드의 종류를 확인하기 위해 사용된다.
웹 서비스 메소드 공격을 위해서 해당 메소드로 허용가능 대상을 확인 후 진행할 수 있으니, 막아두는 것이 좋다.  
TRACE 요청을 보내면 클라이언트의 요청 메시지를 그대로 반환하여 응답하는 'loop-back' 형태의 메소드
TRACE 메소드를 사용 시, 클라이언트의 쿠키정보 및 다양한 정보가 포함될 수 있는데 이걸 가로채는 공격을 시도할 수 있다고 하니 해당 메소드도 막는 것이 좋다.
CONNECT 요청한 리소스에 대해 양방향 연결을 할 수 있도록 하는 메소드로, CONNECT을 통해 터널을 열어줄 수 있다.

 

위와 같은 메소드들이 있고, 현재 본인의 사이트에서 사용할 필요가 없는 메소드가 있다면 사전에 막아두는 것이 안전하다. 기본적으로 GET, POST 이외의 다른 메소드는 차단하는 것이 좋고 RESTful 방식을 사용하고 있다면 PUT, DELETE, HEAD까지는 열어둬야한다.

 

[참고]
w3c http method types www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
HTTP 요청 메소드 developer.mozilla.org/ko/docs/Web/HTTP/Methods

 

 

2. 웹 서비스 메소드 제한 방법 

 

메소드 종류를 알아봤으니, 제한 방법도 살펴보자. java 기반의 사이트를 운영한다는 가정하에, 웹서버에서 조치하는 방법과 어플리케이션 단에서 조치하는 방법이 있다.

 

어플리케이션 설정인 web.xml을 수정해서 제어하는 방법은 아래와 같다.

<web-app>
.
.
<!-- 중략 -->
.
<security-constraint>
  <web-resource-collection>
    <web-resource-name>Web Service Method type </web-resource-name>
    <url-pattern>/*</url-pattern>

	<!-- 차단하고 싶은 메소드 타입 아래에 기술 -->
    <http-method>PUT</http-method>
    <http-method>DELETE</http-method>
    <http-method>OPTIONS</http-method>
    <http-method>TRACE</http-method>

	</web-resource-collection>
  <auth-constraint />
  </security-constraint>
</web-app>

 

웹서버 설정은 apache를 기준으로 httpd.conf를 수정하여 제한하는 방법을 소개한다.

<!-- 특정 메소드를 제외한 나머지는 모두 차단 -->
<Location /*>
  <LimitExcept GET POST>
      Order allow.deny
      Deny from all
  </LimitExcept>
</Location>

<!-- 또는 특정 메소드만 차단 -->
<Location /*>
  <Limit PUT DELETE OPTIONS TRACE>
      Order allow.deny
      Deny from all
  </Limit>
</Location>

 

 

위 방식 중 LimitExcept로 TRACE가 적용되지 않는 경우도 있다고 하여, 추가 설정을 하기도 한다.

TraceEnable off

https 프로토콜 사용 시 httpd-ssl.conf 파일에도 동일한 설정 필요하다고 한다.

 

메소드 제한 내역이 잘 적용되었는지를 확인해보고 싶다면, Burp suite를 이용하여 직접 메소드를 변조하여 전송해보면 정상적으로 적용되었는지를 확인해볼 수 있다.

해당 툴은 한 번 깔아두고 사용법을 알아두면 향후에도 보안취약점 조치 내역이 정상 적용되었는지를 체크하는데 많은 도움이 된다. Burp suite 말고도, Fiddler나 wireshark 등 본인에게 맞는 툴을 이용하시기를.

 

웹 서비스 메소드 제한방법에 대해서는 아래 블로그에 너무 잘 정리되어 있는 관계로 참고 링크를 들어가보시면 더 많은 도움이 될 것으로 생각된다.

[참고]
웹 서비스 메소드 제한방법 hello-nanam.tistory.com/75

 

 

반응형