[OWASP TOP 10 2017]
◎ A8. 안전하지 않은 역직렬화(Insecure Deserialization)
종종 원격 코드 실행으로 이어집니다. 역직렬화 취약점이 원격 코드실행 결과를 가져오지 않더라도 이는 권한 상승 공격, 주입 공격과 재생 공격을 포함한 다양한 공격 수행에 사용될 수 있습니다.
[OWASP(The Open Web Application Security Project)]
◎ 오픈소스 웹 애플리케이션 보안 프로젝트입니다. 주로 웹에 관한 정보노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구하며, 10대 웹 애플리케이션의 취약점 (OWASP TOP 10)을 발표했습니다.
OWASP TOP 10은 웹 애플리케이션 취약점 중에서 빈도가 많이 발생하고, 보안상 영향을 크게 줄 수 있는 것들 10가지를 선정하여 2004년, 2007년, 2010년, 2013년, 2017년, 2021년을 기준으로 발표되었고, 문서가 공개되었습니다.
[JAVA Object Deserialization]
◎ 자바 역직렬화 취약점
안전하지 않은 역직렬화는 신뢰할 수없는 데이터가 애플리케이션의 논리를 악용하거나 서비스 거부 (DoS) 공격을 가하거나 역직렬화 과정에서 악의적으로 객체 또는 변수를 추가 작성하여 악성코드를 실행하는데 사용되는 경우 발생하는 취약점입니다. 또한 OWASP TOP 10 2017 목록에서 8 위를 차지했습니다. OWASP TOP 10 2021 목록에서는 A8. 소프트웨어 및 데이터 무결성 오류(Software and Data Integrity Failures)가 새로 등장했고 이 범주에 이전 자바 역직렬화 취약점을 포함합니다.
> 직렬화(Serialization) : Java 프로그램에서 특정 Class의 현재 인스턴스 상태를 다른 서버로 전달하기 위해서 그 Class의 인스턴스 정보를 Byte Code로 복사하는 작업입니다. 즉, 메모리상에서 실행되고 있는 객체의 상태를 전송/저장 가능한 데이터로 만드는 것입니다.
> 역직렬화(Deserialization) : 저장된 Byte Code로부터 객체를 불러오는 작업입니다.
> 자바 바이트 코드(Java Byte Code) : 자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드입니다.
> 클래스(Class) : 객체(Object)를 코드로 구현한 것으로 연관되어 있는 변수와 메소드의 집합입니다. 사용자 정의 데이터 타입을 만드는 것과 같은 의미입니다.
> 인스턴스(instance) : 객체(Object), 외부에서 클래스를 자유롭게 호출하기 위해 new 연산자를 사용하여 생성된 객체입니다.
- 변수명 = new 클래스명(); // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장합니다.
- new : 클래스 타입의 인스턴스(객체)를 생성해주는 역할을 담당합니다.
> 메소드(method) : 코드를 재사용할 수 있게 해주는 함수입니다.
- 정의와 호출 : 직접 메소드를 만드는 것을 정의라고 하고, 만들어진 메소드를 실행하는 것을 호출(전달 된 값은 인자(argument)) 이라고 합니다.
- 입력과 출력 : 입력 값은 매개변수(parameter)를 통해서 이루어집니다. 들어온 값이 함수 안에서 처리되고 출력을 통해 값을 내보내는 형태입니다.
[History of Deserialization]
◎ First Deserialization Vulnerability (CWE-502)
> CVE-2007-1701
- 4.4.5 이전의 PHP 4 및 5.2.1 이전의 PHP 5에서 원격코드 실행 취약점
- CWE(Common Weakness Enummeration) : 소프트웨어나 하드웨어에서 흔하게 발생할 수 있는 다양한 취약점의 원인이 되는 보안 약점 정보이며, 소스코드의 결함을 파악할 때 이용하는 도구의 기준이 되어 개발자는 해당 약점을 제거함으로써 안전한 소프트웨어를 개발할 수 있습니다.
- CVE(Common Vulnerabilities and Exposures) : 정보보안 취약점 표준 코드의 약자로 공개적으로 알려진 보안 위협에 대한 식별 코드를 뜻합니다.
◎ First “Gadget Based” Vulnerability
> CVE-2011-2894
- Spring framework에 대한 원격코드실행 취약점
- Gadget : 역직렬화 과정에서 호출되어 잠재적인 위험한 동작을 수행하는 메서드를 가젯(gadget) 이라고 합니다.
- Gadget Chain : 여러개의 가젯을 함께 사용한다는 표현입니다.
'분석 > 취약점' 카테고리의 다른 글
Log4j 보안 취약점 업데이트 및 대응 방안 정리 (0) | 2021.12.29 |
---|