관리 메뉴

ARTIFEX ;)

# 버퍼 오버플로우(Buffer Overflow) 취약점 본문

# License/정보보안기사

# 버퍼 오버플로우(Buffer Overflow) 취약점

Artifex_Ethan_ 2020. 5. 20. 18:23
반응형

# 버퍼 오버플로우(Buffer Overflow)

프로세스 메모리 영역 중 버퍼에 초과 값을 입력하여 시스템을 중지시키거나 원하는 동작을 하도록 조작할 수 있다.

 

# 종류

스택 버퍼 오버플로우(Stack Buffer Overflow)

: 주로 SetUID가 설정된 프로그램들이 타겟이 된다. 입력 값에 수용 가능한 버퍼보다 큰 값을 입력하여 임의의 공격을 루트 권한으로 실행시킬 수 있도록 한다.

 

ㄴ 원리:

  • 프로그램에서 특정 함수를 실행시키면 스택에 돌아가기 위한 주소가 기록된다. (함수에서 return이 호출되면 그 값과 함께 돌아갈 주소)
  • 버퍼에 큰 값을 넣게 되면 이 스택 영역을 침범하게 된다.
  • 리턴 주소가 들어갈 곳에 쉘코드나 다른 프로그램의 주소를 넣으면 그것이 실행되게 한다.

 

힙 버퍼 오버플로우(Heap Buffer Overflow):

  • 힙 데이터 영역에서 일어나는 버퍼 오버플로우이다.
  • 스택 오버플로우만큼 흔히 사용가능한 공격은 아님.
  • 동적 메모리 할당 연결(malloc 상위 수준 데이터)를 덮어씀으로써 프로그램 함수 포인터를 조작한다.

 

# 보안

* 시큐어코딩 : 

- 버퍼 오버플로우에 취약한 언어 : C, C++

- 버퍼 오버플로우에 취약한 함수 : 

  • strcat()
  • strcpy()
  • gets()
  • scanf()
  • sscanf()
  • vscanf()
  • vsscanf()
  • sprinf()
  • vsprintf()
  • gethostbyname()

대신 사용이 권장되는 함수:

  • strncat()
  • strncpy()
  • fgets()
  • fscanf()
  • vfscanf()
  • snprintf()
  • vsnprintf()

* 스택 가드 

* 스택 쉴드 :

  • 함수 시작 시 복귀주소를 Gloval RET이라는 특수 스택에 저장해둔다.
  • 함수 종료 시 저장된 값과 스택의 RET값을 비교해 다를 경우 오버플로우로 간주하고 프로그램 실행을 중단.

* ASLR : 

  • 메모리 공격을 방어하기 위해 주소 공간 배치를 난수화한다.
  • 실행 시 마다 메모리 주소를 변경시켜 버퍼 오버플로우를 통한 특정주소 호출을 차단한다.
  • 리눅스에서 다음과 같이 설정할 수 있다.
  • # echo 2 > /proc/sys/kernel/randomize_va_space

* 실행 불가능 영역 : 

  • Solars 2.7 이상 버전에서 /etc/system 파일에 noexec_user_stack, noexec_user_stack_log 를 1로 set.
  • 스택과 힙을 실행 불가능한 영역으로 만든다.

* 대응 수단 정리

1. 스택상에 있는 공격자의 코드가 실행되지 못하게 한다.

2. 함수의 진입과 종료 코드를 조사하고 함수의 스택 프레임에 대해 있는지를 검사한다.

3. 변수 타입과 그 변수에 허용되는 연산들에 대해 엄격하게 제한하는 고급 프로그래밍 함수를 사용한다. 

반응형

'# License > 정보보안기사' 카테고리의 다른 글

VPN 정리  (0) 2020.05.21
운영체제 OS Part.1  (0) 2020.05.21
ARP 스푸핑 기본과 과정  (0) 2020.05.19
포트 스캔 OpenScan + Stealth Scan 설명  (0) 2020.05.19
APT 특징 및 관련 유형  (0) 2020.05.19