본문 바로가기

Computer Security

Buffer Overflow

# 버퍼 오버플로우 (Buffer Overflow - BOF 공격)

 

  - 메모리 오류를 이용하여 시스템의 프로그램 실행 흐름을 공격자가 원하는 방향으로 제어하거나, 공격자가 원하는 악성코드를 실행 시키는 공격 방법이다.

 

1. 스택 오버플로우

 

정의

  - 메모리 영역 중 local value나 함수의 return address 가 저장되는 스택 영역에서 발생하는 오버플로우이다. 스택은 스택프레임을 통해 처리가 되는데 스택프레임에 할당된 버퍼(변수)의 크기 보다 더 큰 데이터가 입력될 경우 인접한 메모리의 데이터가 삭제 되거나 공격자가 원하는 코드를 실행할 수 있다. 스택 메모리 상에서 이러한 오류를 이용한 공격방식을 스택 오버플로우 공격이라 한다.

 

해결방법

  - 데이터의 크기를 검사하지 않는 라이브러리 함수를 사용하지 않는다. (C언어: strcpy(), gets() 등)   

  - 스택가드(Random Canary - Canary 값을 스택프레임에 삽입하여 이 값이 변경되었는지 조사), 스택쉴드, 페이지가드(Page Guard) (스택의 임계영역 사이에 Gap을 두어 오버플로우가 발생하면 프로그램을 중지) , Address 난수화 

 

2. 힙 오버플로우 

 

정의

  - 메모리의 heap 영역에 할당된 버퍼(변수) 크기보다 더 큰 데이터가 입력될 때 발생하는 버퍼 오버플로우이다. 인접한 메모리(Linked-list)의 데이터가 삭제될 수 있으며, 해당 위치에 특정 함수에 대한 포인터 주소가 있으면 이를 악용하여 관리자 권한 파일에 접근하거나, 공격자의 특정 코드를 실행하게 된다.

 

해결방법

스택 오버플로우와 마찬가지고 입력 데이터의 크기를 검사하지 않는 라이브러리 함수를 사용하지 않는다.