[정보보안기사] 시스템 보안위협 및 대응책
-버퍼 오버플로우 : 프로세스가 사용가능한 메모리 공간을 초과해 발생되는 공격
-스택 오버플로우 : 스택에 저장되어 있는 복귀주소가 지역변수에 의해 침범
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
2. 스택 오버플로우(Stack Overflow)
1) Stack Overflow란 무엇인가?
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
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=neos_rtos&logNo=220315252519