2008년 04월 28일
New olly bug
올리의 새로운 버그가 발견됐다는 소식입니다.
올리 디버거로 SEH/VEH 기반 프로그램을 디버깅하여 트레이싱시킬 때
새로운 버그가 발견됐다고 하는데.....
포럼에 윈도우 자체 취약점이라는 걸로 의견이 분분합니다.
그런데 결국 올리 제작자가 취약점이 맞다고 해서 이 버그는 제거될거라고 전했습니다.
테크니컬 디테일즈:
xor eax, eax ---> eax = 0x00000000
mov eax,[eax]
이 두 어셈 명령은 eax가 0의 주소를 참조하여 exception을 발생시키는데 이때 커널은
TRAP FLAG 와 같은 레지스터 콘텍스트를 저장하고 제어권을 NTDLL.DLL!KiUserExceptionDispatcher
에게 넘긴다. 이 함수는 exception 이 발생할 때의 처음의 유저레벨 함수이다.
올리는 보통 NTDLL.DLL!KiUserExceptionDispatcher 함수를 브레이킹하고
shift+f7/f8/f9 키로 다음의 코드로 넘길 수 있다. 제어가 다시 exception이 일어난 곳으로
오면 trap flag 가 클리어 되어야 하는데 올리는 이것을 잊어버린다고 나온다. TF-bit가 셋팅
되어 있기 때문에 새로운 exception이 발생하고 또 다시 SEH-VEH 핸들러를 호출한다.
이것이 반복되어 exception이 누구의 소유인지 모르게되어 SEH-VEH 핸들러는 트레이스의
부당한 요구를 처리하는 걸 기대할 수 없게 된다. 바로 정의되지 않는 행동이여 크래쉬된다고
전하고 있다.
또 다른 디버깅 툴인 w32dasm와 비교해봤을 때 디버깅해보면 exception이 한번 발생하고
제어권을 코드로 넘기기 때문에 이것은 올리의 버그인걸 확인할 수 있다.
reference : a)http://nezumi.org.ru/olly-bug-776.zip
b) https://www.openrce.org/forums/posts/775
# by | 2008/04/28 10:43 | [x86]assem | 트랙백





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]