현재 선택한 정보보안 과정

정보보안기사 필기 이론 학습

이론 목록으로 돌아가기

메모리 취약점과 방어

버퍼 오버플로의 스택·힙 차이와 Canary·DEP/NX·ASLR의 역할·한계를 구분합니다.

예상 읽기 4

1. 프로세스 메모리의 기본 구조

프로세스의 가상 주소 공간은 개념적으로 다음 영역으로 나눌 수 있다.

영역대표 내용
코드 영역실행 명령
전역·정적 데이터프로그램 전체에서 사용되는 변수
실행 중 동적으로 할당한 메모리
스택함수 호출 정보, 매개변수, 지역 변수
메모리 매핑공유 라이브러리, 매핑 파일 등

실제 주소 방향과 배치는 운영체제·CPU·컴파일러에 따라 달라질 수 있다. 시험에서는 각 영역의 역할을 중심으로 이해한다.

2. Buffer overflow의 정의

Buffer overflow는 버퍼가 저장할 수 있는 범위를 넘어서 데이터를 기록하는 취약점이다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
버퍼 크기: 8바이트
기록하려는 데이터: 12바이트
→ 4바이트가 버퍼 밖의 메모리를 침범할 수 있음

원인은 단순히 입력이 길다는 사실만이 아니다.

  • 입력 길이 검사 누락
  • 종료 문자 공간 미고려
  • 바이트 수와 요소 수 혼동
  • 잘못된 크기 계산
  • 변환·압축 해제 후 데이터 증가 미고려
  • 안전하지 않은 메모리 복사

3. 스택 기반 버퍼 오버플로

스택 기반 버퍼 오버플로는 스택에 놓인 지역 버퍼의 유효 범위를 넘어 쓰는 문제다. 주변의 다른 지역 변수, 함수 호출 관련 정보, 보호값 등이 손상될 수 있다.

가능한 결과는 다음과 같다.

  • 프로그램 비정상 종료
  • 변수·권한 판단 값 변조
  • 제어 흐름 변경
  • 공격자 코드 실행 가능성

지역 버퍼 바로 옆에 항상 반환 주소가 놓인다고 단정하지 않는다. 실제 배치는 컴파일러와 보호기법에 따라 다르다.

4. 힙 기반 버퍼 오버플로

힙 기반 버퍼 오버플로는 동적으로 할당한 객체의 경계를 넘어 쓰는 문제다. 인접 객체와 메모리 관리 정보가 손상될 수 있다.

스택과 힙은 메모리 영역, 할당·관리 방식, 대표 손상 대상이 다르다.

구분스택 기반힙 기반
대표 대상지역 변수·함수 호출 정보동적 객체·인접 데이터
관리 방식함수 호출과 함께 생성·해제프로그램이 필요할 때 할당·해제
공통 영향비정상 종료·변조·코드 실행 가능성비정상 종료·변조·코드 실행 가능성

5. 관련 메모리 오류와 구분

오류핵심 의미
경계 밖 읽기허용 범위 밖 데이터를 읽음
Use-after-free해제된 메모리를 다시 사용
Double free같은 메모리를 중복 해제
정수 오버플로크기 계산 값이 표현 범위를 넘어 잘못된 메모리 할당으로 이어짐
스택 고갈과도한 재귀 등으로 스택 공간을 소진

이들은 모두 메모리 안전 문제지만 Buffer overflow와 같은 개념은 아니다.

6. 포맷 문자열 취약점

포맷 문자열 취약점은 외부 입력을 출력 함수의 형식 문자열로 직접 사용할 때 발생할 수 있다. 입력이 단순 데이터가 아니라 메모리 읽기·쓰기 동작을 지시하는 형식으로 해석될 수 있다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
안전하지 않은 개념: 사용자 입력을 형식 문자열로 사용
안전한 개념: 고정된 형식 문자열에 사용자 입력을 데이터로 전달

포맷 문자열 취약점은 버퍼의 크기를 넘는 쓰기가 없어도 발생할 수 있으므로 Buffer overflow와 구분한다.

7. 대표 방어기법

안전한 구현

  • 입력·출력 길이와 버퍼 용량 확인
  • 종료 문자와 인코딩 변환 후 크기 고려
  • 안전한 라이브러리와 메모리 안전 언어 사용
  • 권한이 높은 프로그램의 입력을 더 엄격히 검증

Stack Canary

함수의 스택 보호값이 변경됐는지 확인해 일부 스택 손상을 탐지한다. 취약점의 원인을 제거하는 것은 아니며 힙 오버플로를 직접 막지 않는다.

DEP/NX

데이터 영역을 실행 불가능하게 표시해 스택·힙에 주입된 코드를 직접 실행하기 어렵게 한다. 기존 코드 재사용 공격이나 데이터 변조까지 모두 막는 것은 아니다.

ASLR

프로그램·라이브러리·스택·힙의 주소를 무작위화해 주소 예측을 어렵게 한다. 경계 밖 쓰기 자체는 남아 있다.

최소권한과 격리

취약한 프로세스가 침해되더라도 사용할 수 있는 파일·계정·네트워크 권한을 줄여 피해 범위를 제한한다.

좌우로 이동해 그림을 확인하세요.그림 크게 보기
버퍼 경계와 메모리 방어
버퍼 경계와 메모리 방어

8. 방어기법의 역할 비교

방어주된 목적한계
길이·경계 검사취약점 원인 예방모든 코드 경로에 정확히 적용해야 함
Stack Canary일부 스택 손상 탐지모든 메모리 손상 탐지 불가
DEP/NX데이터 영역 코드 실행 제한코드 재사용·데이터 변조는 남을 수 있음
ASLR주소 예측 어렵게 함정보 노출이나 우회가 있으면 약화 가능
최소권한침해 후 영향 축소취약점 자체를 제거하지 않음

하나의 방어기법만으로 메모리 취약점이 사라지는 것은 아니다.

스스로 확인하기

개념 확인 문제

문제를 누르면 바로 아래에서 정답과 해설을 확인할 수 있습니다.

01DEP/NX와 ASLR의 차이는?
정답 및 해설

DEP/NX는 데이터 영역에서 코드가 실행되는 것을 제한한다. ASLR은 메모리 주소 예측을 어렵게 한다. 둘 다 경계 밖 쓰기 자체를 고치는 기능은 아니다.

02포맷 문자열 취약점은 반드시 버퍼보다 긴 입력에서만 발생하는가?
정답 및 해설

아니다. 외부 입력을 형식 문자열로 직접 해석하는 것이 원인이다. 고정된 형식 문자열과 입력 데이터를 분리해야 하며 버퍼 오버플로와 구별한다.