버퍼 오버플로우

Programming/Security | 2011. 12. 4. 03:38
Posted by 신이내린프로그래머

1. 버퍼 오버플로우 공격

 버퍼(Buffer)에 일정 크기 이상의 데이터를 입력하여 프로그램을 공격하는 하는 방식을 말한다.


2. 스택 버퍼 오버플로우 공격

 입력 값을 확인하지 않는 입력 함수에 정상적인 크기보다 큰 입력 값을 입력하여 RET 값을 덮어 씌움으로써 임의의 코드를 실행하는 공격을 스택 버퍼 오버플로우 공격이라 한다.



3. segmentation fault 란 무엇인가?

 공격을 하기전에 무작위로 값을 많이 입력해본다. 그러면 여러분은 segmentation fault가 출력되는 것을 볼 수가 있다. 이는 나중에 실습화면에서도 확인할 수 있을 것이다. 이는 프로그램의 ret 주소가 변조 되었음을 나타내는 것이다. 이 오류를 통해 ret주소의 위치를 역으로 확인이 가능해진다. 따라서, segmentaion fault가 발생했다면, 스택 버퍼 오버플로우 공격이 가능함을 말한다.



4. 힙 퍼퍼 오버플로우 공격

힙에 저장되는 데이터를 변조하거나, 함수에 대한 포인터 값을 변조함으로써 ret값을 변조하여 임의의 코드를 실행하기 위한 공격을 말한다.
 

5. 버퍼 오버플로우 공격에 취약한 함수

 - strcpy(char *dst, const char* src)

- strcat (char *dst, const char* src)

 - getwd(char * buf) , gets( char* s)

 - fscanf(FILE *stream, const char *format,..)

 - scanf(const char *format,...)

 - realpath( char *path, char resolved_path[])

 - sprintf( char *str, const char *format)



 6. RTL(Return to libc) 공격

 스택에 있는 ret 주소를 실행 가능한 임의의 주소로 돌력 원하는 함수를 수행하도록 만드는

 기법을 말한다.



 7. 보안 방안

 버퍼오버플로우가 일어나는 이유는 버퍼의 크기를 검사하지 않아서 일어나게 된다. 따라서 프로그래머의 경우는 버퍼의 크기를 체크하는 함수(strncpy)를 사용하여 프로그래밍을 하도록하며 OS내부적으로 버퍼오버플로우를 일으키는 취약점이 존재한다. 따라서 보안패치를 바로바로 하여 이러한 취약점을 이용한 버퍼오버플로우 공격에 당하지 않도록 한다.

'Programming > Security' 카테고리의 다른 글

스니핑과 스푸핑 그리고 그에 따른 방어법  (0) 2011.12.04
IDS, IPS, 방화벽, 웹방화벽 구분  (0) 2011.12.04
웹메소드 중 Get방식과 Post방식  (0) 2011.12.04
FTP의 Active Mode 와 Passive Mode  (0) 2011.12.04
DES  (0) 2011.11.29
 

블로그 이미지

신이내린프로그래머

카테고리

Category (22)
Programming (19)
... (1)