버퍼 오버플로우 (Buffer Overflow)

컴퓨터과학·AI
한 줄 정의: 프로그램이 미리 정해둔 메모리 공간(버퍼)보다 더 많은 데이터를 집어넣어 옆 메모리 영역까지 덮어써버리는 현상 또는 이를 악용한 보안 취약점입니다.
버퍼 오버플로우 (Buffer Overflow)버퍼 오버플로우 (Buffer Overflow) 진행 순서: 초과 입력 → 인접 메모리 덮어씀, 인접 메모리 덮어씀 → 반환 주소 변조, 반환 주소 변조 → 공격 코드 실행.초과 입력버퍼 크기보다 큰데이터인접 메모리 덮어씀스택·힙 영역 침범반환 주소 변조스택의 함수 복귀 주소공격 코드 실행원격 실행·권한 상승+스택 카나리: 함수 종료 때 덮어쓰기 탐지 · ASLR: 주소 무작위 배치+DEP/NX: 데이터 영역을 실행 불가로 만들어 심은 코드 실행 차단한계메모리를 직접 다루는 C·C++에서 특히 흔함버퍼 오버플로우 (Buffer Overflow)버퍼 오버플로우 (Buffer Overflow) 진행 순서: 초과 입력 → 인접 메모리 덮어씀, 인접 메모리 덮어씀 → 반환 주소 변조, 반환 주소 변조 → 공격 코드 실행.초과 입력버퍼 크기보다 큰데이터인접 메모리 덮어씀스택·힙 영역 침범반환 주소 변조스택의 함수 복귀 주소공격 코드 실행원격 실행·권한 상승+스택 카나리: 함수 종료 때 덮어쓰기 탐지 · ASLR:주소 무작위 배치+DEP/NX: 데이터 영역을 실행 불가로 만들어 심은코드 실행 차단한계메모리를 직접 다루는 C·C++에서 특히 흔함

쉽게 풀면

컵에 물을 따르는 상황을 생각해봅시다. 컵의 용량은 정해져 있는데 그보다 많은 물을 부으면 물이 넘쳐서 옆에 있는 다른 물건까지 젖게 됩니다. 프로그램의 "버퍼"도 이런 컵과 같습니다. 예를 들어 이름을 저장할 공간을 10글자로 잡아뒀는데, 사용자가 20글자를 입력하면 나머지 10글자가 원래 다른 데이터나 실행 코드가 있던 메모리 영역을 덮어쓸 수 있습니다. 공격자는 이 원리를 악용해서 넘치는 데이터 자리에 악성 코드를 몰래 심어 실행시키기도 하는데, 이것이 버퍼 오버플로우 공격입니다.

왜 중요한가

버퍼 오버플로우는 소프트웨어 보안 분야에서 가장 오래되고 근본적인 취약점 유형 중 하나로, 원격 코드 실행이나 권한 상승 같은 심각한 공격으로 이어질 수 있어 시스템 보안 연구에서 꾸준히 다뤄집니다. 그래서 이를 탐지하는 정적·동적 분석 기법, 취약점을 자동으로 찾아내는 퍼징(fuzzing) 기법, 메모리 안전성을 보장하는 프로그래밍 언어와 런타임 방어 기법 연구가 모두 이 개념과 맞닿아 있습니다. 임베디드 시스템이나 운영체제 커널처럼 성능 때문에 여전히 C/C++을 쓰는 영역에서는 지금도 실무적으로 중요한 문제로 남아 있습니다.

핵심 정리

예시로 보기

방어하는 일한계(논문에서 같이 언급되는 점)
경계 검사·메모리 안전 언어범위를 벗어난 접근을 막거나 오류로 처리해당 언어·라이브러리를 써야 효과가 있음
스택 카나리함수 종료 때 심어 둔 값이 바뀌었는지 검사주로 스택 버퍼 오버플로를 탐지
ASLR주소를 실행마다 무작위로 배치악용을 어렵게 할 뿐 불가능하게 하지는 않음
DEP/NX데이터 영역을 실행 불가로 표시데이터 영역에 심어 둔 코드의 실행을 차단

위 표는 개념 비교용 요약입니다. 취약점 탐지 연구는 정적 분석(실행 없이 코드 검사)과 퍼징(입력을 바꿔 가며 실행)을 서로 보완하는 접근으로 다루는 경우가 많습니다.

자주 하는 오해

오해바로잡기
Java나 Python에는 버퍼 오버플로우가 없다.형식이 엄격하고 메모리 직접 접근을 허용하지 않는 언어는 버퍼 오버플로우를 ‘대부분의 경우’ 막는다고 설명됩니다. ‘전혀 없다’고 쓰면 과장입니다.
ASLR이나 카나리가 있으면 안전하다.이런 방어는 악용을 어렵게 만드는 것이지 취약점을 없애는 것이 아닙니다. 근본 해결은 경계를 지키는 코드 작성과 검사입니다.
SQL 인젝션과 같은 종류의 공격이다.둘 다 입력값 처리 부실에서 오지만, 버퍼 오버플로우는 데이터베이스가 아니라 프로세스 메모리의 경계를 침범하는 문제입니다.
오래된 취약점이라 이제는 연구할 것이 없다.1988년의 악용 사례 이후에도 Szekeres 등의 2013·2014년 논문처럼 메모리 오류를 다루는 연구가 이어졌습니다.

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

실제 논문에서

이 용어를 직접 쓴 국내 논문 문장을 아직 수집하지 못했습니다. 수집되는 대로 출처와 함께 싣겠습니다.

예시 문장

아래는 용어의 쓰임을 보여 주려고 만든 예시로, 실제 논문에서 가져온 문장이 아닙니다.

"제안하는 정적 분석 도구는 C 언어 코드에서 버퍼 오버플로우가 발생할 수 있는 경계 검사 누락 구간을 높은 정확도로 탐지했다."

이 문장은 프로그램 코드를 실행하지 않고도 분석해서(정적 분석), 배열이나 메모리 공간의 크기를 제대로 확인하지 않는 위험한 코드 구간을 자동으로 찾아냈다는 뜻입니다.

"퍼징 기반 취약점 탐지 프레임워크는 임베디드 펌웨어 바이너리에 무작위 입력을 반복적으로 주입하여 스택 기반 버퍼 오버플로우로 이어지는 크래시 지점을 다수 발견했다."

이 문장은 실제로 프로그램을 실행시키면서(동적 분석) 다양한 입력값을 무작위로 넣어보는 방식(퍼징)으로, 임베디드 기기에 들어가는 저수준 프로그램에서 버퍼 오버플로우가 발생하는 지점을 찾아냈다는 뜻입니다.

"본 연구는 Rust의 소유권 시스템을 활용해 컴파일 시점에 버퍼 오버플로우를 유발할 수 있는 메모리 접근 패턴을 원천적으로 차단하는 방법을 제시한다."

이 문장은 프로그램이 실행되기 전인 컴파일 단계에서부터 언어 차원의 규칙(소유권 시스템)으로 메모리를 잘못 다루는 코드 자체를 막아, 버퍼 오버플로우가 일어날 여지를 없애는 접근을 설명한 것입니다.

조금 더 깊게 보면

버퍼 오버플로우는 넘치는 위치에 따라 흔히 스택 오버플로우와 힙 오버플로우로 구분되며, 특히 스택 위에서 함수의 반환 주소를 덮어써 공격자가 원하는 코드를 실행시키는 방식이 고전적으로 많이 연구되었습니다. 이를 막기 위한 방어 기법으로는 스택에 임의의 값(카나리)을 심어두고 함수 종료 시 값이 바뀌었는지 확인하는 스택 카나리, 메모리 주소를 매번 무작위로 배치해 공격을 어렵게 만드는 주소 공간 배치 난수화(ASLR), 데이터 영역을 실행 불가능하게 만드는 실행 방지(DEP/NX) 등이 논문에서 자주 함께 언급됩니다. 취약점 탐지 논문을 읽을 때는 정적 분석과 동적 분석(퍼징)이 서로 다른 장단점을 가진 상호보완적 접근이라는 점을 함께 알아두면 도움이 됩니다.

주의할 점

버퍼 오버플로우는 C, C++처럼 메모리를 직접 다루는 저수준 언어에서 특히 흔하며, Java나 Python처럼 메모리 경계를 자동으로 검사하는 언어에서는 상대적으로 드뭅니다. SQL 인젝션처럼 입력값 검증이 부실할 때 발생한다는 공통점이 있지만, 버퍼 오버플로우는 데이터베이스가 아니라 메모리 공간 자체를 침범한다는 점에서 다릅니다.

헷갈리기 쉬운 용어

취약점 이름과 방어 기법 이름이 한 논문에 같이 나오므로 구분해 두면 편합니다.

용어한 줄 설명성격
버퍼 오버플로우경계를 넘어 인접 메모리를 훼손하는 오류취약점(원인)
버퍼 오버플로우 익스플로잇이 오류를 이용해 프로그램의 동작을 바꾸려는 공격 쪽의 용어공격
스택 카나리반환 주소 앞의 값이 바뀌었는지 검사방어
ASLR메모리 배치 주소를 무작위로 바꿈방어
SQL 인젝션SQL 질의에 악의적 입력을 끼워 넣는 공격다른 종류의 입력 검증 실패

참고 문헌

  1. Shacham, H., Page, M., Pfaff, B., Goh, E.-J., Modadugu, N., & Boneh, D. (2004). On the effectiveness of address-space randomization. Proceedings of the 11th ACM Conference on Computer and Communications Security, 298–307.
  2. Szekeres, L., Payer, M., Wei, T., & Song, D. (2013). SoK: Eternal war in memory. 2013 IEEE Symposium on Security and Privacy, 48–62.
  3. Szekeres, L., Payer, M., Wei, L. T., & Sekar, R. (2014). Eternal war in memory. IEEE Security & Privacy, 12(3), 45–53.

표의 기준값은 위 문헌에 근거한 관례이며, 분야·학술지마다 다른 기준을 쓸 수 있습니다.

관련 용어