본문 바로가기


64. 포맷 스트링 공격이란 무엇인가요?
64. 포맷 스트링 공격이란 무엇인가요?
원광대학교 정보전산원2014-09-16

64. 포맷 스트링 공격이란 무엇인가요?

포맷 스트링(Format string)이란 일반적으로 사용자로부터 입력을 받아들이거나 결과를 출력하기 위하여 사용하는 형식입니다. 예를 들어, printf() 함수에서 숫자, 문자 등을 출력할 때 %d, %f, %c, %x, %p, %n과 같은 포맷 스트링이 사용됩니다. 즉, printf(“%d”, i)와 같이 사용하면 변수 i의 값을 출력할 수 있습니다.

하지만, printf(“%x”)처럼 변수없이 쓰게 되면 메모리의 값들을 순서대로 출력하게 되어 메모리 구조를 파악하는데 악용될 수 있습니다. 더구나, %n이나 %hn를 이용하면 특정 메모리 위치의 값을 다른 것으로 변경할 수도 있습니다. 이렇게 포맷 스트링 사용시의 오류를 이용하여 시스템의 권한을 획득하는 기법을 포맷 스트링 공격이라 합니다.

포맷 스트링 공격은 printf() 등의 C함수뿐 아니라 함수간에 값을 전달하는 선언이 있는 경우(예 : function(format, args…))에 대해서도 발생할 수 있습니다.