본문 바로가기
about Security/SECURE CODING

[입력 데이터 검증 및 표현] 정수형 오버플로우 (4등급)

by saniii 2021. 8. 7.

 

0. 개요 

 

정수형 오버플로우는 정수형 크기는 고정되어 있는데 저장할 수 있는 범위를 넘어선 큰 값을 저장하였을 때,

실제 저장되는 값이 의도치 않게 아주 작은 수 혹은 음수가 되어 프로그램이 의도치 않게 동작하는 경우를 야기한다.

 

특히 반복문 제어, 메모리 할당, 메모리 복사 등을 위한 조건으로 사용자가 제공하는 입력값을 사용하고

그 과정에서 정수형 오버플로우가 발생하는 경우 보안상 문제를 유발할 수 있다.

 

 

 

1. 보안 대책

 

- 언어 / 플랫폼별 정수 타입의 범위를 확인하여 사용한다.

 

- 정수형 변수를 연산에 사용하는 경우, 결과 값의 범위를 체크하는 모듈을 사용한다.

 

- 외부 입력값을 동적 메모리 할당에 사용하는 경우, 변수 값이 적절한 범위 내에 존재하는 값인지 확인한다.

 

- 외부 입력값을 보안기능을 수행하는 함수의 인자로 사용하는 경우,

  입력값에 대한 검증 작업을 수행한 뒤 제한적으로 사용한다.

 

 

 

2. 진단 방법

 

 - 배열 크기에 변수를 사용하여 동적 생성하는지 확인한다.

 

 - 입력받는 변수가 의도한 범위의 값인지 검증하는 단계가 있는지 확인한다. 

 

 - 보안 기능 수행에 외부 입력값을 사용해야만 하는 구조인지 확인하고 왠만하면 내부에서 처리가능하도록 설계한다.

 

 

 

3. 코드 예시

 

# 1  -  정수형 오버플로우 - 안전하지 않은 코드 예시(JAVA)

소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원

이런 경우  tmp에 정수형 고정 범위보다 작거나 큰 수가 들어오면

param_ct 에 개발자가 의도하지 않은 값이 들어가 시스템에 문제가 발생할 수 있다.

입력받는 정수 값을 검증하고 사용하도록 하자.

 

# 1  +  정수형 오버플로우 - 안전한 코드 예시(JAVA)

소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원

 

 

# 2  -  제거되지 않고 남은 디버그 코드 - 안전하지 않은 코드 예시(JAVA)

 

# 2  +  제거되지 않고 남은 디버그 코드 - 안전한 코드 예시(JAVA)  

https://wiki.wikisecurity.net/guide:java_%EA%B0%9C%EB%B0%9C_%EB%B3%B4%EC%95%88_%EA%B0%80%EC%9D%B4%EB%93%9C

 

JAVA 보안 개발 가이드 -

JAVA 보안 개발 가이드 1절. 입력 데이터 검증 및 표현 1. 크로스 사이트 스크립트 공격 취약점(XSS) 가. 정의 외부에서 입력되는 검증되지 않은 입력이 동적 웹페이지의 생성에 사용될 경우, 전송된

wiki.wikisecurity.net

 

 

 

4. 해당 취약점 CASE

 

- 외부 입력값을 검증하지 않고 배열의 동적 할당에 사용하는 경우

 

- 정수형 연산에서 범위 제한없이 반복적으로 증가하거나 감소하는 경우

 

 

 

댓글