본문 바로가기

단순용어정리

[단순용어] 스택 오버플로우/정수 오버플로우/버퍼 오버런

반응형

스택 오버플로우(Stack Overflow)

스택 오버플로우(Stack Overflow)는 컴퓨터 프로그램에서 스택 메모리 공간을 넘어서는 현상을 말합니다. 스택은 함수 호출과 반환을 관리하고 지역 변수를 저장하는 데 사용되는 메모리 공간으로, 이는 프로그램이 실행될 때 자동으로 할당됩니다.

스택 오버플로우는 일반적으로 재귀 함수에서 발생합니다. 재귀 함수는 자기 자신을 반복적으로 호출하므로, 스택 메모리에 임시 데이터가 저장됩니다. 그러나 함수 호출이 지나치게 많거나, 각 호출에서 사용되는 데이터가 너무 많은 경우, 스택 메모리가 가득 차서 오버플로우가 발생합니다.

스택 오버플로우는 보안 취약점으로서도 이용될 수 있습니다. 악의적인 공격자는 스택 오버플로우를 이용하여 프로그램의 실행 흐름을 조작하거나 악성 코드를 실행시키는 등의 공격을 수행할 수 있습니다.

스택 오버플로우를 방지하기 위해서는 프로그램에서 스택 메모리를 적절하게 관리해야 합니다. 재귀 함수를 사용할 때는 호출의 깊이를 제한하거나, 동적 할당 메모리를 사용하는 등의 방법을 사용하여 스택 메모리를 최적화할 수 있습니다. 또한, 입력값 검증 등의 방법을 사용하여 악성 공격을 방지할 수 있습니다.


정수 오버플로우(Integer Overflow)

정수 오버플로우(Integer Overflow)는 컴퓨터에서 사용되는 정수 데이터 타입의 값이 최대치를 넘어설 때 발생하는 현상입니다. 이러한 상황은 연산자가 값을 다룰 때 발생할 수 있습니다.

예를 들어, 8비트 부호 있는 정수 데이터 타입을 사용한다고 가정해봅시다. 이 경우, 이 데이터 타입은 -128부터 127까지의 값을 저장할 수 있습니다. 만약 127에 1을 더하면, 결과는 -128이 됩니다. 이는 오버플로우가 발생한 결과입니다.

정수 오버플로우는 보안 취약점을 일으키는 경우도 있습니다. 예를 들어, 금액을 나타내는 변수에 매우 큰 값을 할당하면, 오버플로우가 발생하여 음수 값을 저장할 수 있습니다. 이러한 상황은 악의적인 공격자가 시스템을 조작하는 데 사용될 수 있습니다.

따라서 프로그래머들은 정수 오버플로우를 방지하기 위해 올바른 데이터 타입을 선택하고, 입력값 검증 등의 방법을 사용하여 예외 처리를 수행해야 합니다.


버퍼오버런(Buffer Overrun)

버퍼 오버런(Buffer Overrun)은 컴퓨터 프로그램에서 배열 또는 버퍼의 경계를 초과하여 데이터를 쓰거나 읽는 것을 말합니다. 이는 일반적으로 프로그램에서 할당된 버퍼 크기보다 많은 데이터를 저장하려고 할 때 발생합니다.

버퍼 오버런은 프로그램 충돌, 잘못된 결과, 보안 취약점 등을 초래할 수 있습니다. 예를 들어, 악성 코드가 버퍼 오버런을 이용하여 시스템 메모리에 악성 코드를 주입하는 것이 가능합니다.

버퍼 오버런은 보통 배열 인덱스의 범위를 벗어나 데이터에 접근하는 것으로 발생합니다. 예를 들어, 배열이 크기가 10인 경우, 0부터 9까지의 인덱스만 유효합니다. 그러나, 배열에 인덱스 10 이상의 값을 저장하려고 하면, 이는 버퍼 오버런으로 인식됩니다.

버퍼 오버런을 방지하기 위해서는, 프로그램에서 사용되는 배열과 버퍼의 크기를 검사하여 범위를 벗어나는 접근을 방지해야 합니다. 또한, C/C++과 같은 언어에서는 함수 인자의 크기를 검사하는 라이브러리 함수를 사용하거나, 안전한 대체 함수를 사용하여 버퍼 오버런을 방지할 수 있습니다. 또한, 배열과 버퍼의 크기를 동적으로 할당하는 경우에는, 할당된 크기를 적절하게 검사하여 버퍼 오버런을 방지해야 합니다.

반응형