
Java 역직렬화 취약점의 탐지 및 악용을 위한 Burp Suite 올인원 플러그인
Java Deserialization Scanner는 Java 역직렬화 취약점을 탐지하고 악용하기 위한 Burp Suite 플러그인입니다. HN Security의 수석 보안 분석가인 Federico Dotta가 작성했습니다.
이 플러그인은 서로 다른 세 가지 구성 요소로 이루어져 있습니다:
플러그인의 다양한 구성 요소를 사용하는 방법에 대한 간단한 미니 워크스루가 포함된 짧은 문서는 다음 URL에서 확인할 수 있습니다: https://web.archive.org/web/20201130104913/https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/
Java Deserialization Scanner는 Java 역직렬화 취약점을 탐지하기 위해 frohoff와 gebl이 만든 "ysoserial" 도구의 수정 버전으로 생성된 사용자 지정 페이로드를 사용합니다. 원본 도구(https://github.com/frohoff/ysoserial)는 Runtime.exec 함수를 사용하여 시스템에서 명령을 실행하기 위한 페이로드를 생성합니다. 그러나 일반적으로 명령의 출력을 볼 수 없기 때문에 이러한 종류의 함수에 기반한 스캐너를 작성하는 것은 간단하지 않습니다. 이러한 이유로 ysoserial의 수정 버전을 사용하여 공격(exploitation) 대신 문제 탐지에 유용한 다양한 유형의 페이로드를 생성합니다:
현재 Java Deserialization Scanner의 수동 검사는 HTTP 요청에서 직렬화된 Java 객체의 존재를 보고하며, 능동 검사는 다음 취약한 라이브러리의 존재와 함께 취약한 역직렬화 함수의 존재를 적극적으로 스캔합니다:
또한, URLSNDS 페이로드가 도입되어 취약한 라이브러리 없이 Java 역직렬화를 능동적으로 탐지할 수 있습니다. 플러그인이 URLDNS 문제만 찾고(취약한 라이브러리가 없는 경우) 공격자는 DoS 공격은 실행할 수 있을지 모르지만 원격 코드 실행을 달성하려면 더 많은 노력이 필요합니다. 자세한 내용은 이 링크를 참조하십시오.
플러그인의 모든 구성 요소는 다음 인코딩을 지원합니다:
test 폴더에는 플러그인을 테스트하는 데 사용할 수 있는 몇 가지 간단한 Java 서버 애플리케이션이 있습니다. 각 애플리케이션은 서로 다른 취약한 Java 라이브러리를 사용합니다.
플러그인은 이상한 진입점으로 인해 스캐너로 탐지할 수 없는 특수한 상황에서 Java 역직렬화 취약점을 확인하기 위해, 사용자 지정 삽입 지점에 sleep 및 DNS 페이로드를 사용하여 탐지를 실행할 수 있는 전용 탭을 제공합니다. 수동 테스터의 결과는 Burp Suite 스캐너 결과 사이에 삽입할 수 있습니다.
수동 테스터는 추가 탐지 방법인 CPU 탐지를 제공합니다. CPU 탐지 방법은 Wouter Coekaerts의 SerialDOS 연구(https://gist.github.com/coekie/a27cc406fc9f3dc7a70d)를 기반으로 하며, 역직렬화 작업에 많은 CPU 사이클을 사용하는 객체를 사용하고 응답 시간을 확인하여 취약한 라이브러리 없이도 역직렬화 문제를 탐지할 수 있습니다. CPU 탐지 방법은 주의해서 사용해야 하므로 기본적으로 능동 스캔 검사에 포함되지 않습니다. 많은 수의 "가벼운" SerialDOS 페이로드를 보내면 오래되었거나 부하가 높은 시스템에서 여전히 문제를 일으킬 수 있기 때문입니다.
Java 역직렬화 취약점이 발견된 후에는 전용 "Exploiting" 탭을 통해 해당 문제를 능동적으로 악용할 수 있습니다. "Exploiting" 탭은 역직렬화 취약점을 악용할 수 있는 편리한 인터페이스를 제공합니다. 이 탭은 ysoserial 도구를 사용하여 악용 벡터를 생성하고 생성된 페이로드를 HTTP 요청에 포함합니다. ysoserial은 취약한 라이브러리와 명령을 인수로 받아 대상 시스템에서 명령을 실행하기 위해 취약한 애플리케이션으로 보낼 수 있는 이진 형식의 직렬화된 객체를 생성합니다(물론 대상 애플리케이션이 취약한 경우). Exploiting 탭은 플러그인의 탐지 섹션과 동일한 인코딩 형식을 지원합니다.

이 확장 기능을 개선하기 위해 플러그인에서 발견된 문제를 보고해 주시기 바랍니다. 또한 이 약점을 악용하는 데 유용한 공개된 Java 라이브러리를 알려주시면, 시간이 될 때 제 플러그인에 이에 대한 능동 검사를 추가하겠습니다.
이 소프트웨어는 순수하게 학술 연구와 효과적인 방어 기술 개발 목적으로 만들어졌으며, 명시적으로 승인된 경우를 제외하고 시스템을 공격하는 데 사용하기 위한 것이 아닙니다. 프로젝트 유지관리자는 이 소프트웨어의 오용에 대해 책임을 지지 않습니다. 책임감 있게 사용하십시오.
Copyright (c) 2020 Java Deserialization Scanner
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.