본문 바로가기

블로그

LG CNS 기술블로그 DX Lounge에서 최신 IT 소식을 만나보세요!

보안

[RED팀] 역직렬화 취약점, 이렇게 하면 극복 가능!

2021.03.26

최근 마이크로소프트가 익스체인지 서버(Exchange Server)에 알려지지 않은 네 가지 취약점에 대해 긴급 패치를 발표했습니다. 이번 패치에는 서버에서 시스템 권한으로 원격 코드를 실행할 수 있는 역직렬화(Deserialization) 취약점(CVE-2021-26857)이 포함됐는데요. 역직렬화는 국제적인 웹보안 분야의 비영리기구 ‘OWASP’가 발표한 ‘OWASP TOP 10’에도 올라 있는 취약점으로, 발생빈도와 위험도가 높은 것이 특징입니다.

역직렬화 취약점이란?

역직렬화 취약점을 이해하기 위해서는 먼저 직렬화가 무엇인지 알아야 합니다. 직렬화란 객체를 전송 가능한 형태로 변형하는 것을 의미하는데요. 역직렬화는 직렬화와 반대 개념으로, 직렬화된 데이터를 다시 객체 형태로 만드는 과정입니다.

자바(Java) 시스템에서 직렬화는 특정 클래스의 인스턴스 상태를 다른 서버로 전달하기 위해서 JVM(Java Virtual Machine) 메모리 상에서 실행되고 있는 인스턴스 정보를 바이트 코드로 복사하는 과정을 말합니다. 만약 전송받은 데이터를 역직렬화하는 과정에서 데이터 무결성을 검증하지 않고 그대로 서버로 전달한다면, 원격 코드 실행이나 인젝션, 권한 상승과 같은 공격이 발행될 수 있습니다. 역직렬화의 취약점은 자바, 파이썬(Python) 라이브러리, 상용소프트웨어 등 다양하게 발견됩니다.

아래 예제는 자바 기반의 제이보스(JBoss) 5.0.0 GA를 WAS(Web Application Server)로 구성한 환경에서 역직렬화 취약점을 시연한 것입니다.

프록시 도구를 사용하여 ‘/invoker/JMXInvokerServlet’ 경로의 응답 패킷을 확인해보면 ‘content-type’이 ‘application/x-java-serialized-object’으로 직렬화된 데이터가 전달된 것을 알 수 있습니다.

Deserialization Scanner를 사용해서 요청 패킷의 ‘HTTP method’를 ‘POST’로 변경하고 body 부분에 파라미터를 지정한 후 스캔하면 해당 부분에 취약점이 존재한다는 걸 알 수 있습니다.

파라미터에 ‘CommonCollections1 실행할 명령어’를 공격 구문으로 입력합니다. 여기서는 ‘calc’를 입력해보겠습니다. ysoserial 도구를 이용하여 전송할 공격 구문을 직렬화합니다.

대상 서버에 요청 패킷을 전송하면 서버에서 명령어가 실행되어 계산기 프로그램이 실행되는 것을 확인할 수 있습니다. 공격자는 이러한 방식으로 원격 코드를 실행하거나 악성 파일을 업로드할 수 있습니다.

역직렬화 취약점의 대응 방안은?

1.입력 값 유효성 검사
웹 애플리케이션에서 자체적으로 역직렬화를 수행하는 경우, 공격자가 전송한 임의의 객체를 역직렬화하지 못하도록 화이트리스트 또는 블랙리스트 방식으로 입력 값을 검증해야 합니다.

(검증 로직 예시)

  • 바이트 수를 제한한 입력 스트림 생성
  • 클래스 체크 및 개체 수를 제한하여 오브젝트 생성
  • 검증을 통과한 오브젝트를 읽어 객체로 변환 후 리턴

2.송수신 데이터 암 복호화 또는 서명 추가
송신 측에서 데이터를 암호화하고, 수신 측에서 복호화하거나 데이터에 대한 서명을 추가합니다. 이를 확인하는 과정을 통해 무결성 검증을 거치면 중간자에 의한 객체 변조를 어렵게 할 수 있습니다.

3.지속적인 보안 패치
취약점에 대한 보안 패치가 발표되었을 때 이를 빠르게 적용하는 것이 중요합니다. 그러므로 보안 권고 사항을 지속적으로 관리하는 것이 필요한데요. 늘 최신 버전의 소프트웨어를 사용하는 것이 안전합니다.

(패치 필요한 CVE 예시)

  • CVE-2021-27213: pystemon 역직렬화 취약성
  • CVE-2021-26857: Microsoft Exchange Server 원격 코드 실행 취약성
  • CVE-2020-22083: jsonpickle 역직렬화 취약성

글 ㅣ  LG CNS  RED팀

챗봇과 대화를 할 수 있어요