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 이란 ?
보통의 역직렬화를 이용한 공격은 역직렬화가 완료되기도 이전에 이미 완료.
-
취약점 발생 이유 ?
-
웹사이트 소유자들이 역직렬화된 데이터를 검사하는 것으로 안전하다고 생각.
-
개발자들이 역직렬화된 객체가 바이너리로 변환될 경우, 해독이 어려울 것이라고 생각.
-
웹 사이트 각각의 고유 종속성으로 인해 악의적 데이터의 입력 및 호출 예측이 어려움.
-
-
방지 방법 ?
-
절대적으로 필요한 사항이 아니라면 사용자의 입력을 역직렬화의 입력으로 사용하지 말 것.
-
반드시 역직렬화 이전에 무결성 검사.
-
노출 여부를 조절할 수 있도록 커스터마이징된 직렬화 메소드 사용.
-
Lab
관련 실습은 다음 포스팅에서 !