< 버퍼오버플로우란? >
사용자가 입력한 데이터의 크기가 너무 과해서 제한된 버퍼의 용량에서 벗어나는것을 의미한다.
제한된 버퍼 영역을 벗어나면 다른 메모리 영역을 침범하면서
프로그램에 문제를 일으킬 수 있다.
이 특성을 이용해서 패스워드 인증을 통과한다든지 , 더 높은 권한을 획득한다든지 ,
다른 PC로의 접근권한을 획득할 수도 있다.
< 버퍼오버플로우 취약 함수 >
•strcpy(char *dest, const char *src)
•strcat(char *dest, 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)
위에 함수들은 사용자 입력값길이에 대한 검증이 이루어지지 않는다.
< 버퍼오버플로우공격 대응 함수 >
잘못된 함수 사용
void function(char *str) {
char buffer[20] , buffer2[20];
strcpy(buffer, str);
scanf("%s",buffer2);
return;
}
올바른 함수 사용 // strcpy 함수는 입력 값에 대한 검사가 이뤄지도록 한다.
void fuction(char *str) {
char buffer[20] , buffer2[20];
strncpy(buffer, str, sizeof(buffer-1);
buffer[sizeof(buffer)-1]=0;
scanf("%20s",buffer2); // 입력되는 문자개수 20글자로 한정
return;
}
'OS-서버' 카테고리의 다른 글
컴퓨터 부팅 과정 (0) | 2018.12.09 |
---|---|
곰플레이어 닷지 리버싱 (0) | 2018.12.09 |
어셈블리어 개념 정리 (0) | 2018.12.09 |
VirtualBox NAT 포트포워딩 (0) | 2017.12.20 |
[운영체제보안] 레이스컨디션 공격의 이해 (0) | 2017.05.31 |