관리 메뉴

지식잡식

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

IT 이론/정보보호

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

아이들링 2018.03.24 11:20

개요


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



종류


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

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


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

할당된 힙 공간이 함수에 대한 포인터를 포함하고 있다면 공격자는 이 주소를 변경하여 겹쳐 쓴 버퍼에 있는 공격코드를 가리키도록 할 수 있다. 스택 오버플로우만큼 흔히 사용가능한 공격은 아니다.




방어 기업


스택가드(Stackguard)

- 카나리(canary)라고 불리는 무결성 체크용 값을 삽입하여 스택에 변조가 발생했는지 확인한다.

- gcc등 각종 컴파일러에 이 기법이 반영되어 업데이트 되었다.

- Stackguard, ProPolice, -fstack-protector, -fstack-protector-all, -fstack-protector-strong, PointGuard 등으로 발전되어 왔다.


안전한 언어, 함수 사용

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

- 버퍼 오버플로우에 취약한 함수 : strcat(), strcpy(), gets(), scanf(), sscanf(), vscanf(), vsscanf(), sprintf(), vsprintf(), gethostbyname()

- 대신 사용이 권장되는 함수 : strncat(), strncpy(), fgets(), fscanf(), vfscanf(),snprintf(), vsnprintf()


운영체제에서 제공하는 주소 방어 사용

- Solaris 2.7이상 버전에서 /etc/system 파일에 noexec_user_stack, noexec_user_stack_log를 1로 set하여 활성화시킨다

- 스택과 힙을 실행 불가능(No Executable)한 영역으로 만든다.

- 프로세스 주요 공간에 있는 데이터의 위치를 예측하기 힘들도록 조작하는 방법도 있다.

0 Comments
댓글쓰기 폼