본문 바로가기

Information Security/Hacking

포맷 스트링 공격 (Format String Attack)

반응형

포맷 스트링(서식 문자열) : 특정 함수에서 사용되는 문자열의 입.출력 형태를 정의하는 문자열

* 포맷 스트링 공격 : 외부로부터 입력된 값을 검증하지 않고, 입출력 함수의 포맷 스트링을 그대로 사용하는 경우, 공격자가 권한을 획득하거나, 메모리 내용을 확인(%x) 및 원하는 위치(RET 영역) 이동, Return Address 를 악성 코드 주소로 변조(%n)하여, 임의 코드를 실행 하는 등의 공격이 가능

 

 

 

* 포맷 스트링 주요 함수

주요 함수 기능
printf(서식문자열, 인자1,..인자N) 인자값을 포맷 스트링 표준으로 출력
fprintf(서식문자열, 인자1,...인자N) 인자값을 포맷 스트링으로 지정한 파일(fp)에 출력
sprintf(서식문자열, 인자1,...인자N) 인자값을 포맷 스트링으로 지정한 버퍼(buf)에 출력

 

 

 

* 포맷 스트링 대응 방안 : 서식문자열을 함수의 입력 파라미터로 직접 사용하지 않아야 함

// 포맷 스트링 사용 함수(printf등)에 입력 파라미터를 직접 지정한 취약한 사용 예
#include <stdio.h>
int main(int argc, char **argv){
	printf(argv[1]);
}




// 포맷 스트링 사용 함수(prinft등)에 서식 문자열 지정으로 입력 파라미터가 간접적으로 참조된 안전한 사용 예
#include <stdio.h>
int main(int argc, char **argv){
	printf("%s", argv[1]);
}

- 즉 포맷스트링 지정 없이, 입력값을 필터링 없이 받아 들일 시, 설계와 다른 의도로 동작할 수 있기때문에, 정확한 포맷스트링의 지정이 필요

반응형