정수오버플로우 취약점 (Integer Overflow Vulnerability)

정보보안학
한 줄 정의: 프로그램이 정수형 변수에 저장할 수 있는 범위를 초과하는 계산 결과를 처리할 때 값이 예기치 않게 순환하거나 작아져 발생하는 취약점입니다.

쉽게 풀면

정수를 담는 변수는 자동차 계기판의 주행거리 숫자판처럼 표현할 수 있는 자릿수가 정해져 있습니다. 최댓값을 넘어서면 다시 0부터 시작하듯이, 정수형 변수도 표현 범위를 넘는 계산을 하면 값이 갑자기 작아지거나 음수로 뒤집히는 현상이 발생합니다. 이 예상치 못한 값 변화를 악용하면 프로그램의 조건 검사를 통과시키거나 메모리 크기 계산을 잘못되게 만들 수 있습니다.

왜 중요한가

정수오버플로우 취약점은 이후 버퍼 크기 계산이나 배열 접근에 영향을 미쳐 힙오버플로우나 스택오버플로우 공격 같은 더 심각한 메모리 손상 취약점으로 이어질 수 있기 때문에, 정보보안학의 시스템 및 소프트웨어 보안 연구에서 중요하게 다루어집니다.

논문에서는 이렇게 쓰입니다

"해당 함수는 사용자 입력 값을 곱셈 연산에 사용하는 과정에서 정수오버플로우 취약점이 존재하여 버퍼 크기 계산이 왜곡될 수 있음을 확인하였다."

정수오버플로우가 버퍼 크기 오류로 이어지는 전형적 시나리오를 설명하는 예문입니다.

"정적 분석 도구는 산술 연산 전후의 값 범위를 추적하여 정수오버플로우 취약점을 자동으로 탐지한다."

정적 분석을 통한 취약점 탐지 연구 문맥입니다.

조금 더 깊게 보면

정수오버플로우는 값이 최댓값을 넘어 순환하는 경우뿐 아니라, 부호 있는 정수와 부호 없는 정수 간 변환 과정에서 값이 잘못 해석되는 경우도 포함합니다. 이러한 취약점은 흔히 크기 계산 이후 메모리 할당이나 복사 연산과 결합될 때 실질적인 보안 문제로 이어지며, 컴파일러의 산술 검사 기능이나 정적/동적 분석 도구가 탐지에 활용됩니다.

주의할 점

모든 정수오버플로우가 곧바로 심각한 보안 취약점으로 이어지는 것은 아니며, 그 값이 어떻게 이후 로직에 사용되는지에 따라 위험도가 달라집니다. 언어와 컴파일러에 따라 오버플로우 발생 시의 동작 방식이 다를 수 있습니다.

관련 용어