[컴퓨터 보안] 버퍼 오버플로우(Buffer overflow)의 개념과 예방법

버퍼 오버플로우(Buffer overflow)의 개념과 예방 버퍼 오버플로우 개념 버퍼 오버플로우는 버퍼 오버런(buffer overrun), 버퍼 오버라이트(buffer overwrite)라고도 불린다. 버퍼 오버플로우의 개념은 버퍼에 할당된 저장 영역에 할당된 영역보다 더 많은 자료를 입력하여 데이터를 변경 할 수 있는 조건이다. 공격자는 조건을 이용하여 시스템 먹통으로 만들거나 코드를 삽입해서 시스템의 제어를 가진다. 버퍼 오버플로우는 스택 버퍼 오버플로우, 힙 버퍼 오버플로우 2 가지가 있다. 버퍼 오버플로우 예제 1. 아래 코드를 실행 해보자. #include <stdio.h> #include <string.h> void vulnerableFunction ( char* input) { char buffer [ 10 ]; strcpy_s ( buffer, 20 , input ) ; //4 copy하기 printf ( "입력값: %s\n" , buffer ) ; //공백"\n" 포함 10자가 넘으면 오류 발생 } int main () { char userInput [ 20 ]; printf ( "문자열을 입력하세요: " ) ; // 1. 문자 입력 gets ( userInput ) ; //2. 문자열 입력 받기(공백"\n" 포함 ) vulnerableFunction ( userInput ) ; //3. 함수 가기 return 0 ; } 2. 1234567891 을 입력하면 총 11글자다.(gets 함수는 문자열을 입력하는 함수인데 공백(\n)을 포함 한다.) 3. ...