반응형


  안녕하세요. 오늘은 클라이언트가 GET, POST이외의 메소드로 작업 요청을 하였을 경우 문제가 될 수 있는 PUT, DELETE 등의 메소드를 비활성화 시키는 내용에 대해 포스팅 하도록 하겠습니다. 해당 이슈 또한 서버 보안이슈로 보통 주로 사용하는 GET, POST이외의 메소드 이외의 메소드로 인해 서버의 정보가 변조/삭제당하거나 악의적인 파일이 삽입될 수 있는 등 악의적으로 이용 될 수 있습니다. 따라서 불필요한 HTTP 메소드들을 비활성화 시켜주도록 합니다.

문제상황 다음과 같은 그림과 같이 PUT메서드로 해당 URL에 요청을 한 결과 200이 떨어지는 것을 확인 하실 수 있습니다.



참고로 PUT 메소드는 서버에서 포함되어 있는 개체를 저장하는데 사용되며(악성 파일 업로드 등의 악의적으로 이용 가능), DELETE 메소드는 서버에서 리소스를 제거(리소스 삭제 등 악의적 이용 가능)하는데 사용 됩니다. 따라서 해당 메소드들의 사용을 비활성화 시켜줘야 한다.


해결방법 나와 같은 경우에는 대부분의 요청이 tomcat으로 처리되고 있었기 때문에 web.xml에 다음과 같은 security-constraint설정을 통해 해당 문제를 해결해 주었다.

그림을 보면 운영에 필수적인 메소드 외의 PUT, DELETE, TRACE 메소드의 사용을 막게끔 web.xml을 통해 설정하고 있다.아파치를 통해서도 해당 문제를 해결 할 수 있는 방법이 있는데 이 경우에는 다음과 같이 처리해줄 수 있다. 아파치의 httpd.conf에서 처리해준다.

<Directory /home> // 해당 도메인의 경로<Limit PUT DELETE CONNECT OPTIONS> // 차단하려는 메소드allow from IP // 허용하려는 사람의 IPdeny from all // 그 외 모든 접속 차단함</Limit></Directory>


혹은 반대로 허용하는 메소드만 정의해줄 수도 있다.

<Directory /home> // 해당 도메인의 경로    <LimitExcept GET POST> // 허용메소드        Order deny,allow

        Deny from all

    </LimitExcept>

</Directory>



해결후 테스트밑의 그림과 같이 PUT 메소드로 해당 URL을 요청한 결과 응답으로 403 Forbidden이 뜬 모습을 볼 수 있다.



이와 같이 많은 힘이 들지 않고도 우리의 서버를 안전하게 지킬 수 있다. 모두들 한 번 점검해보고 안전한 서버 운영을 위해 불필요한 메소드를 비활성화 해주길 바란다.

최근 숙박앱 '여기 어때'에서  SQL Injection공격으로 인해 개인정보 유출 사건이 있었다. 항상 보안을 염두하도록 하자.








반응형

+ Recent posts