시스템 보안 이론 8
포맷 스트링
- 개념
- printf, fprintf, sprintf 등의 함수에서 사용되는 출력 형식 지정 문자열
- 데이터를 어떤 모양으로 출력할지 결정하는 규칙
- 일반 텍스트와 함께 서식 지정자를 포함
- % 기호로 시작하며 뒤에 오는 문자에 따라 데이터의 출력 형식이 결정됨
- 종류
- %d : 10진수 정수 형태로 출력
- %x : 16진수 정수 형태로 출력
- %s : 문자열 형태로 출력
- %c : 문자 형태로 출력
- %f : 부동 소수점 숫자 형태로 출력
- %n : 출력된 문자 개수를 변수에 저장
- 문제점
- 사용자 입력을 검증 없이, 포맷 스트링으로 직접 사용 시
- 악의적인 포맷 스트링을 입력하여 프로그램의 동작 조정 가능
- 공격자는 %x, %n 등의 특수한 포맷 스트링을 이용하여 아래의 행위 가능
- 메모리 내용 읽기
- %x는 메모리 주소의 값을 16진수로 출력
- 공격자는 이를 이용하여 프로그램의 메모리 공간에 저장된 중요 정보를 취득할 수 있음
- 메모리 내용 덮어쓰기
- %n은 출력된 문자 개수를 지정된 메모리 주소에 작성
- 공격자는 이를 이용하여 프로그램의 실행 흐름을 변경하거나 악성코드를 삽입 가능
- 프로그램 충돌 유발
- 잘못된 포맷 스트링은 프로그램을 비정상적으로 종료 시킬 수 있음
- 메모리 내용 읽기