티스토리 뷰
윈도우 시스템에는 전통적인 스택 오버플로우 공격과 약간 다른 취약점이 있습니다.
이 공격은 smashing the Structured Exeception Handler라고 합니다. 윈도우에서는 일관성있는 예외처리를 위해 SEH라는 것을 제공합니다. 예를 들어 스레드에서 예외가 발생한다면 스레드는 예외를 처리할 수 있는 기회를 얻는데 이 예외 처리를 담당하는 핸들러(함수)는 링크드 리스트로 구성되어 있고 가각 노드에 할당되게 됩니다. 리스트의 헤드는 TEB(Thread Environment Block) 의 초기에 위치한 포인터에 의해서 알 수 있으며 새로운 예외 처리가 생성된다면 새로운 노드가 리스트의 헤드에 추가되고 TEB는 새로운 노드를 가리키게 됩니다.
각가의 노드는 EXCEPTION_REGISTRATION_RECORD 타입을 가지며 핸들러의 주소와 리스트의 다음 노드 포인터를 갖고 마지막 노드의 다음 포인터는 0xfffffff 입니다.
TEB는 어셈 상에서 dword ptr fs:[00000000h] 형식
그런데 윈도우 시스템의 SEH는 예외 처리기 등록 구조체가 스택에 위치하기 때문에 공격자가 쉽게 스택 버퍼오버플로우 취약점 공격을 할 수 있다. APP는 스택에 있는 오염된 SEH 값을 사용하고 임의의 주소로 점프하게된다. 그러므로 예외가 발생된 시점에 스택 버퍼 오버플로우를 발생시키면 된다.
safeSEH 라는 방어기법이 적용되면서 exception_handler가 스택의 범위에 있을 경우 호출하지 않게 되었다. 하지만 이러한 safeSEH는 컴파일시 safeSEH가 적용될 경우 작동된다.
SEH Overwrite의 공격 과정
1. SEH구조체가 있는 곳까지 쓰레기 값을 채운다.
구조체는
nseh
SE handler(예외를 처리할 함수의 주소)
순서대로 되어있는데
2. nseh 부분에 short jmp 명령어를 넣는다.
3. exception handler에는 safeSEH가 적용되지 않는 모듈의 pop pop ret 주소를 적는다.
그러면 pop pop ret 을 통해서 nseh 부분으로 갈 것이고 jmp short를 통해 쉘코드로의 점프가 가능하다.
'시스템 보안 > 취약점' 카테고리의 다른 글
힙 오버플로우 (0) | 2016.09.27 |
---|---|
off by one 에러 (0) | 2016.09.26 |
버퍼 오버 플로우란? (0) | 2016.09.26 |
Internet Explorer epm(Enhanced Protected Mode) 이란? (0) | 2016.09.25 |
2 취약점 발견 방법 (0) | 2016.09.25 |
- Total
- Today
- Yesterday
- gdb명령어
- 변환
- Intel
- 백도어
- 레거시 드라이버
- 리눅스 모듈
- breakpoint
- backdoor
- BP
- DriverEntry
- vmware 오류
- 모듈
- gdb intel
- gdb 명령어
- gdb intel 변환
- 드라이버
- 루트킷
- module
- vmware cannot connect to the virtual machine
- VMware
- PNP 드라이버
- rootkit
- IRP
- GDB
- LKM
- 디바이스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |