취약점 코드
CVE-2018-2628
Vendor
CVE-2018-2628Oracle Weblogic
취약점 요약
2018년 4월 Oracle WebLogic 서버의 RMI 레지스트리를 역직렬화로 원격 코드를 실행할 수 있는 취약점이 확인.
4월 정기 보안 업데이트를 통해 패치가 되었으나 우회 가능한 방법이 공개되었음.
영향받는 버전
Oracle Weblogic 10.3.6.0 / 12.2.1.2 / 12.1.3.0 / 12.2.1.3
취약점 설명
자바 직렬화 란?
- JVM의 메모리에 상주된 객체 데이터를 바이트 형태로 변환하는 기술
- 자바 직렬화 형태의 데이터 교환은 자바 시스템 간의 데이터 교환을 위해서 존재 (Servlet 세션, 캐시, Java RMI 등에 이용)
자바 역직렬화 란?
- 직렬화된 바이트 형태 데이터를 객체 데이터로 변환하는 기술
- OWSAP 2017 TOP 10 에서 '안전하지 않은 역직렬화' 항목 존재
Java RMI 란?
- 원격 시스템 간의 메시지 교환을 위해서 사용하는 기술
- 원격에 있는 시스템의 메서드를 로컬 시스템의 메서드인 것처럼 호출
- 원격 시스템의 메서드를 호출 시에 전달하는 메시지(보통 객체)를 자동으로 직렬화 시켜 사용
- 전달받은 원격 시스템은 메시지를 역직렬화를 통해 변환하여 사용
Weblogic T3 프로토콜
- WebLogic Server의 RMI 통신은 T3 프로토콜을 사용하여 WebLogic Server와 클라이언트 및 기타 WebLogic Server 인스턴스를 포함한 다른 Java 프로그램간에 데이터 를 전송
Oracle Weblogic RCE 역직렬화 취약점
- 공격자는 Weblogic 서버에서 오픈된 T3 프로토콜과 소켓 통신을 맺고, 조작된 페이로드를 전송하여, 원격 서버가 전송받은 페이로드를
역직렬화 하므로써 원격코드 실행이 가능한 취약점
취약점 공격 매커니즘
취약점 공격 코드 분석
취약점 공격 코드를 확인해보면 6가지 인자를 입력 받습니다.
각 인자는 '희생자 서버', '희생자 IP', 'ysoserial 경로', '공격자 IP', '오픈할 RMI 포트(1099)', 'JRMPClient2 클래스' 입니다.
그 후 입력받은 6개의 인자를 exploit 함수에 대입합니다.
인자를 대입받은 exploit 함수는 희생자 서버와 소캣 연결 후 t3 통신, 공격 페이로드 생성, 페이로드 전송을 시도합니다.
공격 페이로드가 생성이 완료되면 아래와 직렬화된 데이터를 보여줍니다.
위와 같은 직렬화된 공격 페이로드를 수신 받은 희생자 서버는 페이로드를 역직렬화하여 공격구문을 실행 가능합니다.
취약점 공격 시연
공격자 | 공격대상 |
Kali Linux / 192.168.219.145 (Ncat 설치) ysoserial (안전하지 않은 직렬화 페이로드 생성 툴) |
Win 10 / 192.168.219.100 (Ncat 설치) Oracle Weblogic 10.3.6 |
1) 공격대상 Weblogic 10.3.6 서버 포트 오픈
- Weblogic 의 Default Port : 7001
2) 리버스 텔넷을 위한 공격자 포트 오픈
3) ysoserial 을 이용하여 RMI Connection 포트(1099) 오픈 및 nc 페이로드를 생성
- cp 옵션을 통해서 사용하고자 하는 라이브러리를 선택할 수 있으며, 공격을 위해 Jdk7u21 을 사용
4) 공격 코드를 통해서 소켓 연결 후 공격 페이로드를 전송하여 원격 명령을 실행
5) 공격 성공시 희생자 서버에 대한 원격 제어 가능
패킷 확인
희생자 서버(192.168.219.100)와 공격자(192.168.219.145) RMI Connection 이 성공하면
희생자 서버에 아래와 같은 직렬화된 공격 페이로드를 전송
이후 희생자 서버에서 직렬화된 페이로드를 역직렬화하여 명령어를 실행
대응 방안
1) 취약버전 10.3.6.0 / 12.2.1.2 / 12.1.3.0 / 12.2.1.3 에 대한 상위 버전 업데이트 필요
2) Weblogic Default Port 7001 변경 조치
탐지 Rule Set
* IPS 장비 사용시 직렬화 작업시 발생하는 |ac ed 00 05| 페이로드에 대한 차단 필요
alert tcp $EXTERNAL_NET any ->$HOME_NET 7001 (msg: CVE-2018-2628 Attack Attempt Detected;flow:to_server,established; content:”|AC ED 00 05|”;
content:”Registry”;fast_pattern:only;sid:200000;)
alert tcp $EXTERNAL_NET any ->$HOME_NET 7001 (msg: CVE-2018-2628 Attack Attempt Detected;flow:to_server,established; content:”|AC ED 00 05|”;
content:”InvocationHandler”; fast_pattern:only;sid:200001;)
유사 취약점
CVE-2019-2890
(상세분석 출처 : 이글루시큐리티)
Weblogic 관련 클래스 (출처 : 이글루시큐리티)
- java.rmi.activation : RMI 객체 기동을 지원
- java.lang.reflect.Proxy : 동적 프록시 클래스를 만들기 위한 정적 메소드를 제공
- java.lang.reflect.InvocationHandler : Java 원격 메소드 호출 (Java RMI)로 사용되는 인터페이스
- java.rmi.server.RemoteObjectInvocationHandler : Java 원격 메소드 호출 (Java RMI)로 사용되는 InvocationHandler 인터페이스 구현
- java.rmi.server.RemoteObject : 원격 객체를 JRMP를 사용해 export 하여 원격 객체와 통신하는 Stub를 취득하기 위해서 사용
- UnicastRef : 상대 측 IP주소를 목적지로 하는 1:1 통신 방식
*****
20.3.5 - 유사취약점 추가
'IT Security > Vulnerability' 카테고리의 다른 글
취약점) CVE-2020-0796 SMB 취약점 (0) | 2020.03.17 |
---|---|
취약점) CVE-2018-7600 Drupal 원격 코드 실행 취약점 (0) | 2020.03.10 |
취약점 ) CVE-2018-1273 Spring Remote code execution (0) | 2019.10.11 |
취약점 ) CVE-2019-16759 vBulletin 제로데이 취약점 (0) | 2019.10.10 |
취약점 ) CVE-2015-8562 Joomla 원격 코드 실행 (0) | 2019.05.20 |