시스템 보안 - 버퍼 오버플로우(Buffer Overflow) 취약점
본문 바로가기

시스템 보안 - 버퍼 오버플로우(Buffer Overflow) 취약점

액트 2019. 8. 27.

시스템 보안 - 버퍼 오버플로우(Buffer Overflow) 취약점


다음 중 C언어 함수 중에서 버퍼 오버플로우 취약점이 발생하지 안도록 하기 위해 권장하는 함수가 아닌 것은?   4

① strncat() 
② strncpy()
③ snprintf( )
④ gets()


개요

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

 

 

종류

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

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

 

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

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

 

 

방어 기업

스택가드(Stackguard)

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

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

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

 

안전한 언어, 함수 사용

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

 - 버퍼 오버플로우에 취약한 함수

   strchar(), strcpy(), gets(), scanf(), sscanf(), vscanf(), vsscanf(), sprintf(), vsprintf(), gethostbyname()

 - 대신 사용이 권장되는 함수

   strncat(), strncpy(), fgets(), fscanf(), vfscanf(), snprintf(), vsnprintf()

 

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

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

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

 

 

 

 

 

댓글