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 codexb | 2008/04/28 10:43 | [x86]assem | 트랙백

트랙백 주소 : http://leony.egloos.com/tb/4321548
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

◀ 이전 페이지          다음 페이지 ▶