본문 바로가기

WEB Security/Vulnerability

[Insecure Deserialization] 역직렬화 취약점이란 ?

 

 

 

 

https://portswigger.net/web-security/deserialization

 

Insecure deserialization | Web Security Academy

In this section, we'll cover what insecure deserialization is and describe how it can potentially expose websites to high-severity attacks. We'll highlight ...

portswigger.net

 

 

 

Serialization 이란 ?

직렬화, 객체를 저장 및 전송 가능한 스트림 형태로 변환하는 것.

어떤 객체를 직렬화할 때, 자동으로 각 속성을 할당된 값과 함께 보존됨 (Private 필드 포함).

직렬화를 방지하고 싶은 필드가 있다면, 클래스 선언에서 해당 필드에 'transient' 명시.

  • 직렬화 결과

    • Java : Binary

    • Python : String

  • 사용 함수

    • Java : ObjectInputStream() / ObjectOuputStream()

    • Python : serialize() / unserialize()

 

 

 


 

 

 

Deserialization 이란 ?

역직렬화, 이런 직렬화된 객체를 다시 객체 형태로 변환하는 것.

역직렬화 과정에서 객체로 다시 변환하기 때문에 이를 이용한 공격이 이루어짐.

이것이 Insecure Deserialization 취약점.

 

 


 

 

 

Insecure Deserialization 이란 ?

보통의 역직렬화를 이용한 공격은 역직렬화가 완료되기도 이전에 이미 완료.

  1. 취약점 발생 이유 ?

    • 웹사이트 소유자들이 역직렬화된 데이터를 검사하는 것으로 안전하다고 생각.

    • 개발자들이 역직렬화된 객체가 바이너리로 변환될 경우, 해독이 어려울 것이라고 생각.

    • 웹 사이트 각각의 고유 종속성으로 인해 악의적 데이터의 입력 및 호출 예측이 어려움.

  2. 방지 방법 ?

    • 절대적으로 필요한 사항이 아니라면 사용자의 입력을 역직렬화의 입력으로 사용하지 말 것.

    • 반드시 역직렬화 이전에 무결성 검사.

    • 노출 여부를 조절할 수 있도록 커스터마이징된 직렬화 메소드 사용.

 

 

 


 

 

 

      Lab      

관련 실습은 다음 포스팅에서 !