시큐어코딩
- home
- 보안소식
- 시큐어코딩
12. [입력 데이터 검증 및 표현] 정수형 오버플로우
2018.05.10 10:41
안녕하세요, 지에스인포입니다.
이번에는 행자부 개발보안 가이드라인 47개 항목 중 입력 데이터 검증 및 표현의 12번째 항목인 '정수형 오버플로우'에 대해 알아보겠습니다.
정수형 오버플로우는 행정자치부에서 발표한 '소프트웨어 개발보안 가이드'에 속해있는 주요 항목입니다. 분석, 설계 단계의 보안 요구항목에서는 '입력 데이터 검증 및 표현'의 '보안 기능 동작에 사용되는 입력값 검증'이라는 항목으로, 구현 단계 보안약점에서는 '입력 데이터 검증 및 표현'의 '정수형 오버플로우'라는 항목으로 명시가 되어있습니다.
#정수형 오버플로우란?
정수형 오버플로우란 정수 값이 증가하면서 허용된 가장 큰 값보다 커져서 실제 저장되는 값이 의도치 않게 아주 작은 수 또는 음수가 되는 보안약점입니다. 특히 반복문 제어, 메모리 할당, 메모리 복사 등을 위한 조건으로 사용자가 제공하는 입력 값을 사용하고, 그 입력 값에 대해 허용 범위를 지정하지 않을 경우 정수형 오버플로우가 발생할 수 있고, 보안상 문제를 유발할 수 있습니다.
예를 들어 살펴보겠습니다.
위 소스 코드는 외부 입력 값을 배열의 크기로 사용하는 JAVA 소스 코드입니다.
2번째 줄에서 getParameter 메서드를 이용해 "slf_msg_param_num"이라는 외부 입력 값을 tmp 변수에 저장하고, 7번째 줄에서 "tmp" 변수의 값을 Integer 형태로 "param_ct" 변수에 저장합니다. 그리고 8번째 줄에서 "param_ct"의 값만큼 배열의 크기를 지정하고 있습니다.
배열의 크기는 음수가 되면 안 되므로 "param_ct" 변수의 값은 음수가 들어올 수 없습니다. 하지만 위 소스 코드에서는 "param_ct" 변수의 값의 허용범위를 지정하지 않고 사용하고 있어, 외부 입력으로부터 계산된 "param_ct" 변수가 음수 값이 되면 시스템에 문제가 발생할 수 있습니다.
#정수형 오버플로우를 막기 위한 보안 대책은?
정수형 오버플로우를 방어하기 위한 대책은 소프트웨어 개발 생명 주기에 따라 크게 두 가지로 나눌 수 있습니다.
소프트웨어 개발보안 가이드에서 제시하는 "정수형 오버플로우"에 대한 보안대책은 위와 같으며, 각각의 상황에 맞게 적절히 시큐어코딩을 적용하기를 권장하고 있습니다.
오늘은 "정수형 오버플로우"에 대해 살펴봤습니다.
다음은 시큐어코딩 13번째 항목, "보안 기능 결정에 사용되는 부적절한 입력 값"에 대해 알아보도록 하겠습니다.
댓글 0
본사주소 : 서울특별시 금천구 가산디지털1로 181, 가산더블유센터 1508호 COPYRIGHT ⓒ ALL RIGHT RESERVED.