취약한 HTTP 메소드 설정방법(feat. 서버별 설정방법)
작성자 - 호롤로롤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
'Season 1 > 기술 보안' 카테고리의 다른 글
OpenSSL 취약점 (0) | 2021.08.31 |
---|---|
CVE-2021-26855 : Exchange Server SSRF Vulnerability (0) | 2021.08.19 |
[Node.JS] Web Shell 테스트 (0) | 2021.07.31 |
CVE-2021-21389 POC Test (0) | 2021.07.29 |
snort byte_test (0) | 2021.07.29 |