연구 목적이 아닌 악의적인 목적으로 이용하여 발생할 수 있는 법적인 책임은 모두 본인에게 있습니다.

 정보통신망 이용촉진 및 정보보호 등에 관한 법률
  - (제48조 1항) 누구든지 정당한 접근권한 없이 또는 허용된 접근권한을 넘어 정보통신망에 침입하여서는 아니 된다.
  - (제48조 2항) 누구든지 정당한 사유 없이 정보통신시스템, 데이터 또는 프로그램 등을 훼손·멸실·변경·위조하거나

                      그 운용을 방해할 수 있는 프로그램(이하 "악성프로그램"이라 한다)을 전달 또는 유포하여서는 아니 된다.
  - (제48조 3항) 누구든지 정보통신망의 안정적 운영을 방해할 목적으로 대량의 신호 또는 데이터를 보내거나

                      부정한 명령을 처리하도록 하는 등의 방법으로 정보통신망에 장애가 발생하게 하여서는 아니 된다.
  - (제70조의2)  제48조제2항을 위반하여 악성프로그램을 전달 또는 유포하는 자는 7년 이하의 징역 또는 7천만원 이하의 벌금에 처한다.

  - (제 71조)      제48조제1항, 제3항을 위반한 자는 5년 이하의 징역 또는 5천만원 이하의 벌금에 처한다.

 

안녕하세요 Triumph 입니다.

 

최근 중국에서 국내 웹사이트를 공격, deface하는 사례가 발생했습니다.

주로 Apache Struts2 원격코드실행 취약점(CVE-2017-5638)을 통해 공격 했다고 알려져 취약한 환경을 구성하여 원격코드를 실행해 보았습니다.

 

취약점 개요

 - Jakarta Multipart Parser 기반의 파일 업로드 처리 시 원격에서 임의의 코드를 실행할 수 있는 취약점으로, 공격자는 HTTP Request 헤더의 Content-Type값을 변조하여 원격 코드실행을 가능하게 합니다.

 

취약한 버전

 - Struts 2.3.5 - Struts 2.3.31

 - Struts 2.5 - Struts 2.5.10

 

취약한 환경구성

 - Windows 7

 - JDK 1.8

 - Tomcat 7.0.76

 - Struts 2.5

 

1. 필요 파일 다운로드

 - JDK 다운로드 페이지(http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)에서 JDK를 다운로드합니다.

 

 

 - Tomcat 다운로드 페이지(http://tomcat.apache.org/download-70.cgi)에서 톰켓을 다운로드 합니다.

 

 

 - Struts 이전 버전 다운로드 페이지(https://dist.apache.org/repos/dist/release/struts/2.5/)에서 struts-2.5-apps.zip를 다운로드합니다.

 

2. 필요파일 설치

 - JDK설치 후 Tomcat을 설치합니다.(설치파일 실행 후 다음만 누르면 됨)

 

3. Struts2 샘플 환경 구성

 - Struts2 2.5.zip의 압축해제 후 struts2-rest-showcase.war파일을 Apache Tomcat 설치 디렉터리 내 webapps폴더에 복사 또는 이동합니다.

 

 - Apache Tomcat을 실행합니다.

 

 - http://127.0.0.1:8080/struts2-rest-showcase/ 로 접속하면 정상적으로 접속되어 Struts2 샘플 환경구성이 끝났습니다.

 

4. PoC

 - Python 코드이며, Python 설치 후 requests 모듈을 추가로 설치해야 사용 가능합니다.

 

 - 아래와 같이 취약한 환경에 대해 PoC Code를 실행한 결과 취약한 것으로 확인하였습니다.

 

5. Exploit 

- Exploit을 제작하여 실제 시스템 명령이 사용 가능함을 확인하였습니다.

 

대응방안

 - 취약점이 해결된 버전으로 업데이트 수행

 - Content-Type에 엄격한 필터링 적용 및 ognl표현식과 사용 금지

 - commons-fileupload-x.x.x.jar 파일 삭제 (임시 조치)

   * 해당 파일 삭제 시 업로드 기능 사용 불가

 - 보안 솔루션 사용

   * 탐지패턴

alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"F-INV-APP-170307-ApacheStruts_remote_codeexecution_attempt"; flow:to_server,established; content:"Content-Type: %"; content:"com.opensymphony.xwork2.ActionContext.container"; nocase; content:"POST"; offset:0; depth:4;metadata:impact_flag red, service http; classtype:attempted-admin; rev:1;)

 

 

감사합니다.

 

* Reference

 - http://blog.alyac.co.kr/1002

 - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5638

'Web' 카테고리의 다른 글

OWASP Top 10  (0) 2017.02.15

+ Recent posts