본문 바로가기

System Security/Theory

Chapter 12. Format String Attack

Chapter 12. Format String Attack
1. FSB(Format String Bug)

 - 서식문자(Format Sequence)
  · 입출력 함수에서 사용되는 인자 값으로 값의 형식을 지정해주는 문자
  · 종류

문자

기능

문자

기능

%c

 단일 문자

%x

 부호 없는 16진 정수, 소문자 사용

%d

 부호 있는 10진 정수

%X

 부호 없는 16진 정수, 대문자 사용

%i

 부호 있는 10진 정수, %d와 같다

%e

 e 표기법에 의한 실수

%f

 부호 있는 10진 실수

%E

 E 표기법에 의한 실수

%s

 문자열

%g

 값에 따라서 %f,%e 둘 중 하나를 선택

%o

 부호 없는 8진 정수

%G

 값에 따라서 %f,%E 둘 중 하나를 선택

%u

 부호 없는 10진 정수

%p

 포인터의 번지(값의 주소값) 출력

%%

 %기호 출력

%n

 앞서 사용된 인자의 Byte의 수를 출력 

 - FSB(Format String Bug)
  · printf와 같은 문자열 입력 Format을 잘못된 형태로 입력하는 경우 나타나는 Bug
  · printf와 같은 출력 함수에서 출력 Format을 결정짓는 서식문자(Format Sequence)가 원인이 된다.
  · Bug 발생원인

  ◦ 출력함수는 큰따옴표(") 안의 서식 문자의 형식을 통해 변수 값을 전달하는데 큰따옴표가 없을 시 변수의 형식에 따라 출력한다.
  ◦ 출력할 변수 값을 Input Stream으로부터 입력 받을 시 서식 문자가 포함되어 있으면 이를 변수 값이 아닌 서식 문자로 인식해 해당 변수의 주소로부터 값을 가져오려한다.(pop)
  ◦ 하지만 해당 변수에 서식문자와 Matching되는 값이 없을 경우 현재 Memory 주소(printf가 쓰인 주소)로부터 4Byte씩 주소를 높이며 읽어오려 한다.
  ◦ 따라서 해당 Program의 Stack Memory 주소를 읽어 들여오기 때문에 Stack Memory의 구조를 파악할 수 있게 되어 해당 Program의 취약점으로 작용할 수 있게 된다.


2. Format String Attack
 - Format String Bug를 이용한 Program 취약점 공격을 말한다.
 - 서식 문자가 사용되지 않은 출력 함수(Ex. printf(buf);)가 존재하는 Program이 취약점을 포함하게 된다.
 - '%x'를 통하면 4Byte 씩 Stack Memory를 확인할 수 있다.

 - '%n'을 통해서는 Stack Memory를 변조 할 수 있다.
 - 공격 방법
  · RTL
  ◦ Reversing을 통해 분석 시 Symbol을 없애지 않아 Main 함수의 구조를 파악할 수 있을 시 사용한다.
  ◦ Main 함수의 구조를 파악하면 RET의 주소를 파악해 RET의 값을 바꿀 수 있어 다른 Program이나 함수, Library를 실행할 수 있게 된다.
  · .dtors 이용
  ◦ Linux의 GNU Compiler를 이용해 Compile된 Program은 File Header의 Table에 생성자(.ctors)와 소멸자(.dtors)를 생성하게 된다.
  ◦ .ctors & .dtors
   ▹ .ctors
    ▸  Program의 생성자로 Process가 Memory 상에 Load되는 것을 관여한다.
    ▸  해당 Program이 실행되기 전에 호출된다.
   ▹ .dtors
    ▸  Program의 소멸자로 Process가 Memory 상에서 종료되는 것을 관여한다.
    ▸  해당 Program이 exit 함수를 통해 종료되기 직전에 호출된다.
  ◦ Reversing을 통해 분석 시 Symbol이 삭제되어 있어 RET 주소를 파악하기 힘들 때 사용한다.
  ◦ 취약점을 가진 Program이 종료되면 .dtors가 실행되고 그 뒤에 Retrun Address 대신에 실행할 Program의 주소나 Shell Code의 주소를 넣어 다른 Program이나 함수, Library를 실행한다.
 

'System Security > Theory' 카테고리의 다른 글

Chapter 11. Shared Memory  (0) 2015.08.18
Chapter 10. Race Condition Attack  (0) 2015.08.18
Chapter 9. 취약점 분석  (0) 2015.08.18
Chapter 7. BOF(Buffer OverFlow) III  (0) 2015.08.18
Chapter 6. BOF(Buffer OverFlow) II  (0) 2015.08.18