개요
프로세스 메모리 영역 중 버퍼에 초과값을 입력하여 시스템을 중지시키거나 원하는 동작을 하도록 조작할 수 있다.
종류
스택 버퍼 오버플로우(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)한 영역으로 만든다.
- 프로세스 주요 공간에 있는 데이터의 위치를 예측하기 힘들도록 조작하는 방법도 있다.
'IT 이론 > 정보보호' 카테고리의 다른 글
윈도우 레지스트리 루트키 (0) | 2018.03.24 |
---|---|
패스워드 크래킹 툴 (0) | 2018.03.24 |
FTP(File Transfer Protocol) 보안 (0) | 2018.03.22 |
OTP(One-Time Password)의 동기화 방법 (0) | 2018.03.21 |
포트 스캔 분류 (0) | 2018.03.21 |
댓글