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 |