0. 개요
정수형 오버플로우는 정수형 크기는 고정되어 있는데 저장할 수 있는 범위를 넘어선 큰 값을 저장하였을 때,
실제 저장되는 값이 의도치 않게 아주 작은 수 혹은 음수가 되어 프로그램이 의도치 않게 동작하는 경우를 야기한다.
특히 반복문 제어, 메모리 할당, 메모리 복사 등을 위한 조건으로 사용자가 제공하는 입력값을 사용하고
그 과정에서 정수형 오버플로우가 발생하는 경우 보안상 문제를 유발할 수 있다.
1. 보안 대책
- 언어 / 플랫폼별 정수 타입의 범위를 확인하여 사용한다.
- 정수형 변수를 연산에 사용하는 경우, 결과 값의 범위를 체크하는 모듈을 사용한다.
- 외부 입력값을 동적 메모리 할당에 사용하는 경우, 변수 값이 적절한 범위 내에 존재하는 값인지 확인한다.
- 외부 입력값을 보안기능을 수행하는 함수의 인자로 사용하는 경우,
입력값에 대한 검증 작업을 수행한 뒤 제한적으로 사용한다.
2. 진단 방법
- 배열 크기에 변수를 사용하여 동적 생성하는지 확인한다.
- 입력받는 변수가 의도한 범위의 값인지 검증하는 단계가 있는지 확인한다.
- 보안 기능 수행에 외부 입력값을 사용해야만 하는 구조인지 확인하고 왠만하면 내부에서 처리가능하도록 설계한다.
3. 코드 예시
# 1 - 정수형 오버플로우 - 안전하지 않은 코드 예시(JAVA)
이런 경우 tmp에 정수형 고정 범위보다 작거나 큰 수가 들어오면
param_ct 에 개발자가 의도하지 않은 값이 들어가 시스템에 문제가 발생할 수 있다.
입력받는 정수 값을 검증하고 사용하도록 하자.
# 1 + 정수형 오버플로우 - 안전한 코드 예시(JAVA)
# 2 - 제거되지 않고 남은 디버그 코드 - 안전하지 않은 코드 예시(JAVA)
# 2 + 제거되지 않고 남은 디버그 코드 - 안전한 코드 예시(JAVA)
4. 해당 취약점 CASE
- 외부 입력값을 검증하지 않고 배열의 동적 할당에 사용하는 경우
- 정수형 연산에서 범위 제한없이 반복적으로 증가하거나 감소하는 경우
'about Security > SECURE CODING' 카테고리의 다른 글
[에러 처리] 오류 상황 대응 부재 (4등급) (0) | 2021.08.07 |
---|---|
[보안 기능] 취약한 암호화 알고리즘 사용 (4등급) (0) | 2021.08.07 |
[입력 데이터 검증 및 표현] 위험한 형식 파일 업로드 (3등급) (0) | 2021.08.07 |
[입력 데이터 검증 및 표현] HTTP 응답분할 (3등급) (0) | 2021.08.07 |
[캡슐화] 제거되지 않고 남은 디버그 코드 (3등급) (0) | 2021.08.07 |
댓글