1 분 소요

프로세스 구조

Pasted image 20230630182437

CODE

  • TEXT 영역이라고도 한다.
  • 실행할 프로그램의 코드가 저장되어 있다.
  • CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다.

DATA

  • 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역이다.
  • 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다.

HEAP

  • 사용자가 직접 관리할 수 있는 메모리 영역이다.
  • 사용자에 의해 동적으로 메모리 공각이 할당되고 해제된다.
  • 메모리의 낮은 주소에서 높은 주소로 할당된다.
  • c 언어의 malloc

STACK

  • 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
  • 함수의 호출과 관계된 지역변수와 매개변수가 저장된다.
  • 메모리의 높은 주소에서 낮은 주소로 할당된다.

STACK 할당 예시

Pasted image 20230630202730

Buffer Overflow

  • 할당된 버퍼의 크기를 초과한 데이터가 입력되어 인접한 다른 메모리 정보를 덧쓰는 현상이다.
  • 프로세스가 데이터를 버퍼에 저장할 때 프로그래머가 지정한 곳 바깥에 저장하는 것을 의미한다.
  • 할당받은 공간보다 더 많은 입력을 받아 발생한다.
  • return address 를 변경하여 악의적인 코드를 실행시킬 수 있다.

BoF 발생 예시

  • 32 bit 시스템이라고 가정한다.
int main(){
	char buf[10];
	scanf("%s",buf);
	...
}
  • 입력 전.
    Pasted image 20230630211112
  • AAAAAAAAAAAAAAAAAA 입력을 한다

  • 입력 후.
    Pasted image 20230630211134

  • 할당 받은 버퍼 크기를 넘는 입력을 받아 인접한 메모리의 정보가 덧씌워졌다.
  • Buffer Overflow 공격을 통해 리턴 주소를 공격자 마음대로 수정할 수 있다.

포맷 스트링 ( FSB )

  • Format String Bug
  • 입력 값에 포맷 스트링을 넣으면 문자로 취급하는게 아닌, 서식 문자로 취급하여 취약점이 일어날 수 있다.
  • 포맷팅 문자열에서 발생한다.
  • 메모리 안의 정보를 누출시킬 수 있다. 즉 스택 메모리의 정보를 얻을 수 있다.
  • 잘못된 메모리 주소에 접근을 시도하여 프로그램을 중단시킬 수 있다.
  • %n 을 이용하여 스택 값을 변조할 수 있다. 즉 리턴 주소 값을 수정하여 악의적인 코드를 실행시킬 수 있다.

예시

  • 코드
int main(int argc, char **argv){
	printf(argv[1]);
}
  • 입력
./example "%s%s%s%s"
  • 스택에 있는 메모리 정보를 노출 시킨다.

  • 입력

./example "%p%p%p%p"
  • 실행하는 순간의 스택에 있는 메모리 주소를 출력해준다.

참고 사이트

태그: ,

업데이트:

댓글남기기