Format String 공격

00SNU3K·2021년 8월 6일
0

Format String취약점(F S Bug)

  • C 언어의 printf()등의 함수에서 사용되는 문자열의 입,출력 형태를 정의하는 문자열로 Format String이라 표현한다.

  • printf(buf) 와 같은 형태로 사용하면 출력할 buf의 값이 format string이면 buf를 문자로 취급하는게 아닌 format string으로 취급하여 취약점이 일어남.

    • buf 배열을 가르키는 주소의 다음 4바이트 위치를 참조하여 그 서식 문자의 기능대로 출력함
  • Format String을 인자로 하는 함수의 취약점을 이요한 공격으로 외부로부터 입력된 값을 검증하지 않고 입출력 함수의 format string을 그대로 사용하는 경우 발생하는 취약점

  • 공격자는 format string을 이용하여 취약한 프로세스를 공격, 메모리 read 또는 write를 할 수 있음

    • %n directive를 이용하여 공격

    • %n은 현재까지 출력된 값들을 count해서 그 다음 메모리 주소값에 그대로 대입하는 서식문자

  • 프로세스의 권한을 획득하여 임의의 코드 실행 가능

Format String attack 대응방안

  • 취약한 사용 예시
#include <stdio.h>

int main(int argc, char **argv){
    printf(argv[1]);
}
  • 안전한 사용 예시
#include <stdio.h>

int main(int argc, char** argv){
    printf("%s", argv[1])
}
profile
네트워크 전문가를 꿈꾸며

0개의 댓글