포맷 스트링 버그

위키백과, 우리 모두의 백과사전.
(형식 문자열 공격에서 넘어옴)
이동: 둘러보기, 검색

포맷 스트링 버그(format string bug)는 printf 등의 함수에서 문자열 입력 포맷을 잘못된 형태로 입력하는 경우 나타나는 버그이다. 이 버그는 상황에 따라 보안 버그로 취급되며, 경우에 따라서는 루트 권한을 획득하는 것도 가능할 수 있다.

포맷 스트링의 종류에는 여러가지가 있는데 그중 C언어에서 일반적으로 Data(변수)를 입출력문에서 일정한 형태로 받아들이거나 출력하기 위하여 사용하는 기호는 다음과 같은 것들이 있다. Ex) %d, %f, %c, %s, %x, %p ...
%d : 정수형 10진수 상수
%f : 실수형 상수
%lf : 실수형 상수
%c : 문자값
%s : 문자 스트링
%u : 양의 정수(10진수)
%o : 양의정수 (8진수)
%x : 양의 정수 (16진수)
%n : 쓰인 총 바이트수
%n 은 Format String Bug에서 핵심이다. %n 은 이전까지 입력되었던 문자열의 길이(Byte)수 만큼 해당변수에 저장시키기 때문에 메모리의 내용도 변조 가능하기 때문이다.

이를 이용해 문자열의 길이를 내가 변조시키고싶은 값의 길이만큼 만든후 %n을 써주게 되면 메모리상에 내가 원하는 값을 넣을수 있게 되는 것이다.

방지책[편집]

많은 컴파일러에서는 문자열 입력 포맷에 대한 자체적인 검사를 내장하고 있다. 예를 들어, GCC에서는 문자열 입력 포맷과 실제 입력이 맞지 않는 경우에 대해 경고를 주는 옵션이 존재한다. 하지만, 이 방식은 컴파일 시간에 문제를 발견할 수 있는 경우에 한해 검증이 가능하다.

런타임 상황에서는 퍼지 테스트를 이용할 수 있다. 이 테스트는 프로그램의 입력값으로 임의의 값을 넣어서 프로그램을 예외 상황으로 빠뜨려 이러한 경우에 버그가 없는지를 확인하는 방식이다.

바깥 고리[편집]