Post

시스템 보안 이론 8

포맷 스트링

- 개념

  • printf, fprintf, sprintf 등의 함수에서 사용되는 출력 형식 지정 문자열
  • 데이터를 어떤 모양으로 출력할지 결정하는 규칙
  • 일반 텍스트와 함께 서식 지정자를 포함
  • % 기호로 시작하며 뒤에 오는 문자에 따라 데이터의 출력 형식이 결정됨

- 종류

  • %d : 10진수 정수 형태로 출력
  • %x : 16진수 정수 형태로 출력
  • %s : 문자열 형태로 출력
  • %c : 문자 형태로 출력
  • %f : 부동 소수점 숫자 형태로 출력
  • %n : 출력된 문자 개수를 변수에 저장

- 문제점

  • 사용자 입력을 검증 없이, 포맷 스트링으로 직접 사용 시
  • 악의적인 포맷 스트링을 입력하여 프로그램의 동작 조정 가능
  • 공격자는 %x, %n 등의 특수한 포맷 스트링을 이용하여 아래의 행위 가능
    • 메모리 내용 읽기
      • %x는 메모리 주소의 값을 16진수로 출력
      • 공격자는 이를 이용하여 프로그램의 메모리 공간에 저장된 중요 정보를 취득할 수 있음
    • 메모리 내용 덮어쓰기
      • %n은 출력된 문자 개수를 지정된 메모리 주소에 작성
      • 공격자는 이를 이용하여 프로그램의 실행 흐름을 변경하거나 악성코드를 삽입 가능
    • 프로그램 충돌 유발
      • 잘못된 포맷 스트링은 프로그램을 비정상적으로 종료 시킬 수 있음