반응형
**Insecure Deserialization(취약한 역직렬화)**란
애플리케이션이 **신뢰할 수 없는 데이터(입력값)**를 그대로 역직렬화(deserialize)할 때 발생하는 취약점이야.
즉, 공격자가 조작한 직렬화 데이터를 서버가 풀어 읽으면서 임의 코드 실행, 권한 상승, 데이터 변조 등이 일어날 수 있어.
🔍 직렬화 / 역직렬화란?
✔ 직렬화(Serialization)
데이터(객체)를 파일·네트워크 전송용으로 문자열/바이트 형태로 변환하는 과정
✔ 역직렬화(Deserialization)
직렬화된 데이터를 다시 객체로 복원하는 과정
문제는…
역직렬화 시 데이터가 신뢰할 수 없는 출처라면, 공격자가 악의적인 객체를 넣을 수 있다는 것!
⚠ Insecure Deserialization은 왜 위험해?
서버는 역직렬화를 할 때 객체 내부의 함수나 생성자, 메소드 호출을 자동으로 실행할 때가 많아.
이 틈을 이용해 공격자는 다음을 할 수 있어:
🔥 가능한 공격
- RCE(Remote Code Execution)
→ 서버에서 명령어 실행 - 권한 상승
- 데이터 변조/삭제
- 세션 탈취
- Dos 공격 (무거운 객체를 통해 서버 자원 고갈)
🧨 공격 예시 (개념)
서버가 쿠키를 직렬화된 객체로 저장한다고 가정하자:
eyJ1c2VyTmFtZSI6ICJpc2FrIn0= # 정상 base64 데이터
공격자는 객체 구조를 알고 있다면 이렇게 바꿀 수 있음:
악성 payload 를 담은 직렬화 데이터(base64)
서버가 이것을 그대로 역직렬화하면
→ 공격자의 악성 객체 안 메소드가 자동 실행될 수 있음
→ 결과적으로 서버에서 명령이 실행되기도 함.
특히 Java의 Serializable,
PHP의 unserialize(),
Python pickle,
Ruby Marshal.load,
.NET BinaryFormatter 등이 취약한 대표적 사례.
🛡 방어 방법
✔ 1) 역직렬화 대상은 반드시 신뢰된 데이터만
- 사용자 입력값을 절대 역직렬화하지 않기
✔ 2) 직렬화를 JSON, JWT 등 안전한 포맷으로 변경
- 객체 기반 직렬화 사용하지 않기
✔ 3) 허용된 클래스만 역직렬화
- “화이트리스트” 기반
✔ 4) 역직렬화 전에 입력값 검증
- 크기 제한
- 비정상 패턴 필터링
✔ 5) 라이브러리 취약점 패치
- Java Commons Collections, Jackson 등의 취약점 패치 중요
✔ 6) WAF 정책 적용
- 직렬화 Payload(예: Java gadget chain signatures) 차단
반응형
'2. 보안 > 2. 보안 관제' 카테고리의 다른 글
| [보안_GPT] TTP 헤더 조작(HTTP Header Manipulation)이란? (0) | 2025.11.14 |
|---|---|
| [보안_GPT] API 취약점 공격이란? (0) | 2025.11.14 |
| [보안_GPT] Broken Access Control이란? (0) | 2025.11.14 |
| [보안_GPT] Broken Authentication이란? (0) | 2025.11.14 |
| [보안_GPT] XXE(XML External Entity)란? (0) | 2025.11.14 |