안전하지 않은 역직렬화(Insecure Deserialization), OWASP Top 10 2017 A8

프로그래밍에서는 직렬화(Serialization)와 역직렬화(Deserialization)라는 개념이 사용됩니다. 컴퓨터에 파일을 저장하거나 일련의 데이터를 화면에 출력하거나 네트워크를 통해 전송하는 것을 직렬화라고 이야기합니다. 역직렬화는 이와 반대되는 개념입니다. 파일을 읽어 들이거나 출력되는 데이터를 다시 Object 화하거나 네트워크로부터 전송받은 데이터를 Object화 하는 행위를 일컫습니다.

직렬화와 역직렬화. 사진: https://portswigger.net/web-security/deserialization

역직렬 화가 위험한 이유는 데이터를 메모리상에 로드하여 Object화 하기 때문입니다. Object 화한다는 것의 의미는 프로그램 상에서 사용 가능한 형태로 변환한다는 것이죠. 그래서 악성코드를 역직렬화 할 수 있는 가능성 때문에 신뢰할 수 없는 입력값(Input)으로부터의 역직렬화는 매우 위험합니다.

 

안전하지 않은 역직렬화(Insecure Deserialization)의 예시

아래 코드는 사용자로부터 yaml 파일을 입력받아 그것을 로드하는 간단한 파이썬 코드입니다.

# Import the PyYAML dependency
import yaml

# Open the YAML file
with open('malicious.yml') as yaml_file:

# Unsafely deserialize the contents of the YAML file
contents = yaml.load(yaml_file)

# print the contents of the key 'foo' in the YAML file
print(contents['foo'])

yaml.load() 코드를 통해서 프로그램은 입력받은 yaml파일을 역직렬화 하게 됩니다. 사전에 입력받은 파일에 대한 별도의 검증이 없으므로 이 파일에 악성코드가 들어 있다면 그대로 실행되게 될 겁니다. 그래서 파이썬 yaml 모듈에서는 yaml.safe_load()이라는 안전한 로드 방법을 제공하고 있습니다.

안전하지 않은 역직렬화 공격. 사진: https://portswigger.net/web-security/deserialization

 

안전하지 않은 역직렬화 취약점 대응 방안

안전하지 않은 역직렬화 취약점은 결국 Injection 공격입니다. Injection 공격을 방어 하는 방법은 인젝션(Injection), OWASP Top 10 2017 A1에서 다루고 있습니다. 간단히 개발자가 시큐어 코딩 가이드만 지키더라도 쉽게 예방이 가능합니다.

 

 

참고 자료
Acunetix, What is Insecure Deserialization?

 

 

다른 글 더 보기

인젝션(Injection), OWASP Top 10 2017 A1
취약한 인증(Broken Authentication), OWASP Top 10 2017 A2
민감한 데이터 노출(Sensitive Data Exposure), OWASP Top 10 2017 A3
XML 외부 개체(XML External Entity, XXE) 취약점, OWASP Top 10 2017 A4
취약한 접근 제어(Broken Access Control) 취약점, OWASP Top 10 2017 A5
잘못된 보안 구성(Security Misconfiguration), OWASP Top 10 2017 A6
크로스 사이트 스크립팅(Cross-Site Scripting , XSS), OWASP Top 10 2017 A7
728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">