직렬화와 역직렬화
직렬화 (Serialization)
객체나 데이터를 저장하거나 전송하기 위해 문자열이나 바이트 형태로 변화하는걸 말합니다.
json이나 pickle, dill 같은 모듈이 python 객체를 직렬화 해주는 모듈들 입니다.
역직렬화(Deserialization)
직렬화의 반대로, 직렬화된 데이터를 다시 원래 객체 형태로 복원하는 과정을 말합니다.
서버에서 json파일이나 pickle 파일을 다시 데이터로 복원하는 과정이 역직렬화입니다.
역직렬화의 취약점
역직렬화에는 보안 취약점이 생길 수 있습니다.
신뢰할 수 없는 사용자가 제공한 직렬화 데이터를 검증 없이 역직렬화 할 경우 악성 코드가 서버내에서 실행되면서
임의의 코드 실행, 임의 객체 생성 및 조작, 인증 우회 등의 취약점이 가능해집니다.
#예시
import pickle
import os
class Evil:
def __reduce__(self):
return (os.system, ("ls -al",))
payload = pickle.dumps(Evil())
pickle.loads(payload) # "ls -al" 실행됨
JSON, pickle, dill
JSON
- 문자열을 기반으로 한 직렬화 도구입니다.
- 파이썬 기본 자료형만 직렬화가 가능합니다.
- dict, list, str, int, float, bool, None
- 언어간의 호환이 좋다는 장점이있습니다.
pickle
- 파이썬의 기본 직렬화 모듈입니다.
- 파이썬 객체 대부분을 직렬화 가능합니다.
- 리스트나 튜플, 딕셔너리 와 내장 타입 등도 가능합니다.
- .pkl , .pickle 확장자로 파일을 저장합니다.
- 직렬화하는것을 피클링, 반대로 역직렬화 하는 것을 언피클링 이라고합니다.
dill
- 파이썬 객체를 직렬화 하는 도구입니다.
- pickle보다 더 많은 객체를 지원합니다.
- 함수나 클래스, 인스턴스, 모듈 등 다양한 직렬화를 제공합니다.
- 다양한 객체를 직렬화 하고, 역직렬화 하는 만큼 악의적인 데이터가 받아들여졌을 때 심각한 보안 이슈가 발생할 수 있습니다.
'보안 > 이론 정리' 카테고리의 다른 글
| 웹 해킹 - XSS Filter Bypass (0) | 2025.10.15 |
|---|---|
| 스프링부트 - URL 매핑과 컨트롤러 (0) | 2025.10.03 |
| 웹 해킹 - URL 필터 우회 (0) | 2025.09.23 |
| Java - 어노테이션(@) (0) | 2025.09.22 |
| 웹 해킹 - SVG 파일과 취약점 (0) | 2025.09.19 |