취약점 정보
- MS # : MS12-063 (Critical) Internet Explorer 누적 보안업데이트(2744842)
- CVE # : CVE-2012-4969
- 취약점 종류 : used-after-free
- 취약점 발생 지점 : mshtml.dll – CMshtmlEd::Exec()
분석 Back-Story
- IE 취약점 분석은 그 내부 구조에 대한 지식을 갖추지 못한 상태에서 정확한 원인 분석은 힘들다. 또한, 크래쉬가 발생하는 PoC 코드를 가진다고 하더라도 어떠한 코드를 추가해서 EIP 를 사용자 입력에 맞게 변경시킬 수 있는 지를 찾는 것도 어렵다. 이번 취약점에 대한 정확한 원인 분석정보를 게시한 대부분의 블로그는 중국 사이트였다. 부럽다.. ㅠ_ㅠ [참고] http://blog.vulnhunt.com/index.php/2012/09/17/ie-execcommand-fuction-use-after-free-vulnerability-0day/
- 이번 분석에서는 Flash(swf) 분석이 추가적으로 필요하다. 또한, 최근에 발견되는 악성 Flash 파일들은 대부분이 doSWF 파일과 같은 난독화/암호화 툴을 사용하고 있다. 따라서, 이를 해제한 후 내부 코드를 파악할 수 있는 분석기술이 필요하다. 악성 Flash(swf) 파일 분석 방법론에 대해서는 추후 게시하도록 하겠다.
취약점 분석
document.exeCommand(“selectAll”)
-> CEditRouter__ExecEditCommand 함수 호출 -> CEditRouter__SetInternalEditHandler 함수 호출 -> CHTMLEditor::AddCommandTarget 함수 호출해서 이벤트 등록 : 함수 안에서 CMshtmlEd 오브젝트 생성
<body onload=’funcB();’ onselect=’funcA()’>
-> selectAll 이벤트가 트리거 -> 이벤트에 등록된 funcA() 함수 실행 function funcA() { document.write(“R”);
-> mshtml!CHTMLEditor::DeleteCommandTarget 함수 호출 -> CMshtmlEd::Release 오브젝트 해제
parent.arrr[0].src=”YMjfu0c08u0c0cKDogisilejengNEkoPD……..”;
-> 힙(heap) 상의 주소로 해제된 메모리 주소가 refilled -> mshtml!CMshtmlEd::Exec 함수가 호출되면 다시 채워진 잘못된 메모리 주소를 참조.
[그림] mshtml@CMshtmlEd::Exec 함수 안에서 크래쉬
공격코드
1) Metasploit 코드 :
– [링크] www.metasploit.com/modules/exploit/windows/browser/ie_execcommand.uaf – [대상] Windows XP, Windows Vista, Windows 7 – IE7, IE8, IE9 – [쉘코드] ROP(msvcrt), ROP(jre) 사용
2) ERIC ROMANG BLOG
[링크] http://eromang.zataz.com/2012/09/16/zero-day-season-js-really-not-over-yet/ [대상] Windows XP – IE7, IE8 [쉘코드] : Flash ActionScript를 통해 힙스프레이(heap spray) 코드 구현 : ROP 기법으로 제작된 언어별(zh-tw,en,ja,ru) 쉘코드 ( www.nod__.com/test.__ 다운로드)
3) 정당 홈페이지 침해사고
[대상] Windows XP – IE7, IE8 (EN, ZH,JA,KO) [쉘코드] : Javascript 를 통해 힙스프레이(heap spray) 코드 구현 : ROP(msvcrt) 기법으로 제작된 쉘코드 ( www.__rea.or.kr/html/inst.__ 다운로드)
창과 방패(DEP vs.ROP)
- 자동 크래시 복구 사용 *
- 온라인 공격 방지를 위해 메모리 보호 사용*
: 특히 “온라인 메모리 보호 기능”은 시스템의 DEP(데이터 실행방지) 기능과 연결되어 있기 때문에 시스템 상에서 DEP를 해제한 후에야 브라우저 상의 해당 기능이 On/Off 로 설정 변경할 수 있다. 특히, 앞서 설명한 1)/2)/3) 공격 코드에서 사용되는 ROP(Return Oriented Programming) Exploit 방식을 사용할 경우 DEP에 전혀 영향을 받는다. ROP를 사용한 메모리 보호기법 우회에 관한 상세 정보는 다음 사이트를 참고하라. [참고] http://teamcrk.tistory.com/332