본문 바로가기
서버 보안/보안

[정보보안기사] 시스템 보안위협 및 대응책

by 어깨 :) 2023. 5. 18.
728x90

-버퍼 오버플로우   : 프로세스가   사용가능한   메모리   공간을   초과해   발생되는   공격

 

-스택 오버플로우   : 스택에   저장되어 있는   복귀주소가   지역변수에   의해   침범
1) 비권고   함수   : strcpy, strcat, getwd, gets, scanf, sprint 
2) 권고   함수      : strncat, strncpy, fgets, fscanf, vfscanf, snprintf


-힙 버퍼 오버플로우: 동적으로 할당되는 공간이  힙에  저장되어 경곗값을 검사하지  않고 사용 시 메모리가 경계를 초과

 

 

 

1. 버퍼 오버플로우(Buffor Overflow)

 

Buffor Overflow는 길이값 검증을 제대로 하지 않아서 할당된 메모리 공간을 넘어서 다른 메모리까지 덮어쓸 수 있는 취약점이다. 줄여 BOF라고 부른다.

- 버퍼 오버플로우 공격은 데이터 길이에 대한 불명확한 정의를 악용해서 덮어쓸 때 발생

 

- 버퍼 오버 플로우의 종류 :

1) Stack Buffer Overflow : 스택 구조 상 할당된 버퍼들이 정의된 버퍼의 한계치를 넘는 경우 복귀 주소를 변경하여 공격자가 임의의 코드를 수행하도록 하는 공격

 

2) Heap Buffer Overflow : 힙 구조 상, 최초 정의된 힙 메모리 사이즈를 초과하는 문자열들이 힙 버퍼에 할당될 때, 공격자가 데이터 변경, 함수주소 변경으로 임의의 코드를 수행하는 공격

 

주로, pwnable을 풀 때 bof 공격은 쉘코드를 다양한 방식으로 삽입하여 권한이 높은 사용자의 쉘로 접속하도록 하는 게 목표이다.

 

https://jennana.tistory.com/571

 

[시스템 해킹] Buffer OverFlow 공격 (BOF, 버퍼 오버플로우)

[시스템 해킹] Buffer OverFlow 공격 (BOF, 버퍼 오버플로우) Buffor Overflow는 길이값 검증을 제대로 하지 않아서 할당된 메모리 공간을 넘어서 다른 메모리까지 덮어쓸 수 있는 취약점이다. 줄여 BOF라고

jennana.tistory.com

 

 

 

 

2. 스택 오버플로우(Stack Overflow)

 

1) Stack Overflow란 무엇인가?

스택 오버 플로우를 들으면 우리가 먼저 드는 생각은 개발 커뮤니티인 스택오버플로우이다. 하지만 여기서 이야기하는 스택 오버 플로우는 지정한 스택 메모리 사이즈보다 더 많은 스택 메모리를 사용하게 되어 에러가 발생하는 상황을 일컫는다.

 

 
2) 버퍼 오버 플로우와 스택 오버 플로우는 비슷한 개념인가?
아니다. 버퍼 오버 플로우는 보통 데이터를 저장하는 과정에서 그 데이터를 저장할 메모리 위치가 유효한지를 검사하지 않아 발생한다. 단어를 더 풀이해보자면 버퍼는 데이터가 저장될 수 있는 가용 메모리 공간이고, 오버플로우는 데이터가 지정된 크기의 공간보다 커서 해당 메모리 공간을 벗어 나는 경우를 말한다.

 

 
3) 그렇다면 스택 메모리에는 어떤 데이터들이 저장될까?
스택 메모리는 보통 원시 타입이나 힙 메모리에 저장되는 데이터의 메모리 주소를 저장한다. 메소드 영역 내에서 생성된 스택 메모리 데이터는 메소드 종료시 메모리가 해제된다. 스택 영역은 LIFO의 구조를 갖고 변수에 새로운 데이터가 할당되면 이전 데이터는 지워진다. 쓰레드 생성시 고유의 스택 메모리가 생성된다. 그러므로 쓰레드 간의 스택 메모리 데이터를 공유할 수는 없고 공유하기 위해서는 static 영역이나 heap 영역을 사용해야 한다.
 
 

스택 오버 플로우(SOF) - Incheol's TECH BLOG

함수를 호출할 때 함수의 파라미터, 리턴 값, 복귀 주소 등을 스택에 저장한다. 재귀 함수를 사용하면 호출한 함수가 종료되지 않은 채 새로운 함수를 호출하므로 스택에 메모리가 계속적으로

incheol-jung.gitbook.io

 

 

3. 힙 버퍼 오버플로우(Heap buffer overflow)

힙 오버플로(heap overflow)는  데이터 영역에서 발생하는 버퍼 오버플로의 한 종류이다. 힙 오버플로는 스택 기반 오버플로와는 다른 방식으로 익스플로잇 가능하다. 힙에서의 메모리는 런타임 시에 애플리케이션에 의해 동적으로 할당되며 일반적으로 프로그램 데이터를 포함한다. 익스플로잇은 애플리케이션이 링크드 리스트 포인터 같은 내부 구조체를 겹쳐 쓰는 것 같이 이 데이터를 특정한 방식으로 오염시킴으로써 수행된다. 고전적인 힙 오버플로 기법은 동적 메모리 할당 연결(malloc 메타 데이터 같은)을 겹쳐 쓰고 프로그램 함수 포인터를 겹쳐쓰기 위해 결과로 나온 포인터를 교환하는 기법이다.

옛날 버전의 리눅스에서의 전형적인 예시는 힙에서 두 버퍼가 각각 나란히 할당되고, 첫 번째 버퍼의 경계 외부에 쓰는 것이 두 번째 버퍼의 메타 데이터를 겹쳐 쓰게 되는 것이다. 두 번째 버퍼의 사용 비트를 0으로 설정하고 널 바이트들이 복사되게 하기 위해 작은 음수 값을 길이로 설정한 후에, 첫 번째 버퍼에서 프로그램이 free() 함수를 호출할 때 프로그램은 이 두 버퍼를 단일 버퍼로 통합하려는 시도를 할 것이다. 이 상황이 벌어지면 free 될 버퍼는 이전에 할당된 버퍼의 첫 8 바이트에 포워드와 백이라는 두 포인터를 갖게 된다.

https://ko.wikipedia.org/wiki/%ED%9E%99_%EC%98%A4%EB%B2%84%ED%94%8C%EB%A1%9C

 

힙 오버플로 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 힙 오버플로(heap overflow)는 힙 데이터 영역에서 발생하는 버퍼 오버플로의 한 종류이다. 힙 오버플로는 스택 기반 오버플로와는 다른 방식으로 익스플로잇 가능

ko.wikipedia.org

 

 

 

 

 

 

 

 

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=neos_rtos&logNo=220315252519 

 

Heap 메모리 버퍼 오버플로우 디버깅 팁

이번 글은 Heap 메모리 버퍼 오버플로우가 발생하는 경우 간단한 디버깅 팁을 알려드리겠습니다...

blog.naver.com

 

728x90