posted by 구름너머 2013. 4. 8. 09:50

1. 설 명
지정된 버퍼의 크기보다 큰 데이터를 저장함으로써 실행 시 오류를 발생시키는 취약성을 말한다

2. 발생원인
▪ 외부로부터 입력된 데이터(사용자 입력, 홖경변수, Command-line 파라미터, 파읷 등)를 버퍼에 곧바로 입력할 경우
▪ 입력값을 큰 버퍼에서 작은 버퍼로 복사할 경우

3. 영향도
▪ 프로그램이 버퍼 오버플로우를 내재하고 있을 경우, 해커는 이 공격을 이용하여 자싞이 원하는 실행코드를 수행할 수 있고, 이 취약점을 이용해 쉘 코드를 실행함으로써 원격에서 Shell을 얻을 수 있게 된다.
▪ 웹 서비스나 웹 서버 자체에 심각한 영향을 초래할 수도 있으며, telnet과 같은 원격 접속 프로그램에 적용된다면, 암호가 틀려도 접속이 가능하게 되는 현상이 발생할 수 있다

4. 조치방법
▪ 입력 값에 대한 검증 (범위 및 유효성 검사)
▪ 경계값 체크를 하는 적젃한 함수 사용 (strncpy(), strncat(), snprintf(), fgets() 등)
▪ 웹 서버와 웹 애플리케이션 서버 제품굮 혹은 읶터넷 홖경 상에서 사용되는 제품들에 대해 최싞의 버그 리포트를 지속적으로 참고하여, 해당 제품굮의 최싞 패치를 적용하여야 한다.

5.코드 예

아래는 Pro*C에서의 예입니다.

취약한 함수 사용 예 ====> 안전한 함수 사용 예

--------------------------------------------------------------------------
void func(char *str) {
char buffer[256];

strcpy()

return;
}

void func(char *str) {
char buffer[256];
strcpy(buffer, str);
return;
}
--------------------------------------------------------------------------

void func(char *str) {
char buffer[256];
strcat(buffer, str);
return;
}

void func(char *str) {
char buffer[256];
strncat(buffer, str, sizeof(buffer)-1);
return;
}

--------------------------------------------------------------------------

void func(char *str) {
char buffer[256];
sprintf(buffer, "%s", str);
return;
}

void func(char *str) {
char buffer[256];
if(snprintf(target, sizeof(target)-1, "%s", string) > sizeof(target)-1)
/*....*/
return;
}

--------------------------------------------------------------------------

void func(char *str) {
char buffer[256];
gets(buffer);
return;
}

void func(char *str) {
char buffer[256];
fgets(buffer, sizeof(buffer)-1, stdin);
return;
}

--------------------------------------------------------------------------

* scanf() ,sscanf(),fscanf() *

void func() {
char buffer[256];
int num;
num = fscanf(stdio, "%s", buffer);
return;
}

void func() {
char buffer[256];
int num;
num = fscanf(stdio, "%255s", buffer);
return;
}

--------------------------------------------------------------------------

'UNIX' 카테고리의 다른 글

cp 파일복사  (0) 2013.06.07
Shared Memory vs Semaphore  (0) 2013.04.26
wc cat awk 의 조화  (0) 2013.02.28
UNIX 1회성 작업 예약하기 : at  (0) 2013.02.28
보안 & 트랙킹  (0) 2012.12.27