이 문서는 Google Cloud Translation API를 사용해 자동 번역되었습니다.
어떤 문서는 원문을 읽는게 나을 수도 있습니다.
버퍼 오버플로는 프로그램이 의도한 것보다 더 많은 데이터를 버퍼에 저장하는 소프트웨어 취약점 유형입니다. 이런 일이 발생하면 프로그램이 충돌하거나 불안정해지거나 악성 코드가 실행될 수 있습니다.
버퍼는 데이터를 임시로 저장하는 데 사용되는 메모리 영역입니다. 데이터가 버퍼에 기록되면 프로그램이 끝날 때까지 메모리에 저장됩니다. 저장하도록 설계된 것보다 더 많은 데이터가 버퍼에 기록되면 버퍼에 저장된 데이터가 메모리의 다른 부분을 덮어쓰게 되어 잠재적으로 충돌 또는 기타 예기치 않은 동작이 발생할 수 있습니다.
버퍼 오버플로는 모든 프로그래밍 언어에서 발생할 수 있지만 특히 C 및 C++에서 일반적입니다. 이는 C 및 C++에 범위 검사 기능이 내장되어 있지 않기 때문입니다. 즉, 프로그래머가 명시적으로 버퍼 오버플로를 검사하지 않으면 프로그램이 쉽게 취약해질 수 있습니다.
버퍼 오버플로는 악의적인 행위자가 시스템에 대한 액세스 권한을 얻기 위해 악용할 수 있습니다. 이것은 프로그램에 의해 실행될 수 있는 버퍼에 악성 코드를 작성하여 수행할 수 있습니다. 이를 통해 공격자는 민감한 정보에 액세스하거나 임의 코드를 실행하거나 시스템을 제어할 수도 있습니다.
버퍼 오버플로의 개념은 적어도 1970년대부터 Bob Morris의 논문에서 처음 설명되었습니다. 1988년, 해커가 finger 데몬의 버퍼 오버플로를 악용하여 시스템에 액세스할 때 버퍼 오버플로 악용의 첫 번째 알려진 사례가 발생했습니다.
그 이후로 버퍼 오버플로는 주요 보안 문제가 되었습니다. 1990년대에 악명 높은 Morris 웜을 포함하여 다수의 유명한 버퍼 오버플로 취약점이 발견되었습니다. 최근 몇 년 동안 Microsoft Office, Adobe Reader 및 Linux 커널을 포함하여 널리 사용되는 여러 프로그램에서 버퍼 오버플로우가 발견되었습니다.
버퍼 오버플로는 다음과 같은 특징이 있습니다.
버퍼 오버플로의 일반적인 예는 명령줄에서 사용자 입력을 읽는 프로그램입니다. 사용자가 버퍼가 보유하도록 설계된 것보다 더 많은 데이터를 입력하면 프로그램이 충돌하거나 악성 코드가 실행될 수 있습니다.
버퍼 오버플로의 주요 이점은 시스템에 대한 액세스 권한을 얻는 데 사용할 수 있다는 것입니다. 그러나 중요한 정보에 대한 액세스 권한을 얻거나 시스템을 제어하기 위해 악의적인 행위자가 버퍼 오버플로를 악용할 수 있기 때문에 이는 주요 단점이기도 합니다.
버퍼 오버플로는 보안 커뮤니티에서 논란의 대상이 되어 왔습니다. 한편으로 버퍼 오버플로는 악의적인 행위자가 시스템에 대한 액세스 권한을 얻기 위해 악용할 수 있습니다. 반면 버퍼 오버플로는 퍼징 또는 리버스 엔지니어링과 같은 합법적인 목적으로 사용될 수 있습니다.
버퍼 오버플로는 스택 오버플로, 힙 오버플로 및 형식 문자열 취약성과 같은 다른 유형의 소프트웨어 취약성과 관련이 있습니다. 또한 기본 제공 범위 검사가 없는 C 및 C++와 같은 프로그래밍 언어와 관련이 있습니다.
버퍼 오버플로는 수십 년 동안 보안 취약점의 주요 원인이었습니다. 그 결과 스택 카나리아, ASLR(Address Space Layout Randomization) 및 DEP(Data Execution Prevention)와 같은 버퍼 오버플로를 감지하고 방지하기 위해 여러 기술이 개발되었습니다.
버퍼 오버플로는 감지하고 방지하기 어려울 수 있습니다. 결과적으로 오늘날에도 여전히 주요 보안 문제입니다. 버퍼 오버플로의 위험을 줄이려면 경계 검사 사용 및 안전하지 않은 함수 방지와 같은 보안 프로그래밍 방법을 사용하는 것이 중요합니다.