MS Internet Explorer 7 Memory Corruption(MS09-002)

취약점 분석/2009년 이후 2009. 3. 3. 13:52 Posted by 알 수 없는 사용자

▷ 작성자 : nohpro (nohpro@a3sc.co.kr)
▷ 편집자 : nohpro (nohpro@a3sc.co.kr)


MS Internet Explorer 7 Memory Corruption
(MS09-002)

취약점 보안 권고안


By
nohpro@a3security.com
(A.K.A nohpro)

I. 취약점 개요

취약점

MS Internet Explorer Memory Corruption (MS090-002)

A3SC Advisory ID

A3AID09-

위험 등급

긴급

최초 발표일

2009.02.18

문서 작성일

2009.02.27

벤더

Microsoft

현재상태(패치여부)

패치

1. 요 약
본 취약점은 2009년 2월 18일 PoC 가 공개되었으며 2월 20일 Exploit 이 공개되었습니다. Internet Explorer 7을 사용하는 시스템에서 해당 취약점을 이용한 공격이 이루어질 수 있습니다. 취약점이 존재하는 Explorer을 사용하는 사용자가 조작된 페이지에 접근 할 경우 임의의 코드를 실행 합니다. 해당 취약점으로 인해 원격코드 실행이 가능합니다.
본 보안 권고는 Windows XP 서비스 팩 2 한글버전(Internet Explorer 7)을 대상으로 분석하였으며, 현재 해당 취약점을 이용한 악성코드들이 전파되고 있고, 현재 bindshell을 맺을 수 있는 exploit이 공개된 상태입니다.


2. 대상시스템
해당 취약점에 영향을 받는 시스템 목록은 아래와 같으며, Windows XP 서비스 팩2 한글 버전(Internet Explorer 7)에서 임의의 코드실행 취약점이 확인되었습니다. 

Internet Explorer 7

-         Windows XP 서비스 2 Windows XP 서비스 3

-         Wikdows XP Professional x64 Edition Windows XP Professional x64 Edition 서비스 2

-         Windows Server 2003 서비스 1 Windows Server 2003 서비스 2

-         Windows Server 2003 x64 Edition Windows Server 2003 x64 Edition 서비스팩 2

-         Windows Server 2003 SP1(Itanium 기반 시스템용) Windows Server 2003 SP2(Itanium 기반 시스템용)

-         Windows Vista Windows Vista 서비스 1

-         Windows Vista x64 Edition Windows Vista x64 Edition 서비스 1

-         Windows Server 2008(32비트 시스템용)

-         Windows Server 2008(x64 기반 시스템용)

-         Windows Server 2008(Itanium 기반 시스템용)



3. 심각도 및 취약점 확인

취약점 영향

취약점 위험도

비정상 실행 원격코드실행




II. 취약점 세부분석

1. 취약점 내용
해당 취약점은 Internet Explorer 7을 사용하는 시스템에서 발생하는 취약점입니다. Internet Explorer가 CollectGarbage() 에 의해 삭제된 객체에 접근할 경우 원격코드 실행이 가능합니다. heap spray를 이용하여 메모리 상에 nopslide인 0x0c0c0c0c를 채워서 EIP가 shellcode 주소를 가리키게 하여 원격코드를 실행할 수 있는 취약점입니다.


2. 공격 분석
다음은 milw0rm에 공개된 MS09-002 취약점 PoC 코드 일부입니다.

URL) http://www.milw0rm.com/exploits/8077

다음의 PoC코드를 보면, 변수 c 에는 문자열이 입력되어 있습니다(exploit code 에서는 변수 c에 shellcode를 입력하게 됩니다). Heap영역에 spray할 size(val ls)를 정해주고, heap 영역에는 lh(nopslide) + c(shellcode)를 할당하게 됩니다. 



[그림 1] PoC 코드

다음의 코드를 보게 되면, o1객체를 생성하고 이를 cloneNode 메서드를 사용하여 o2로 복사를 합니다. o1.clearAttributes()에 의해 o1객체의 모든 값을 제거합니다. o1=null 에 의해 o1객체를 null로 초기화 시키고, collectGarbage()를 호출하여 o1객체를 삭제하게 되면 해당 메모리를 계속 사용 가능하게 됩니다. 이로 인해 heap영역에 nopslide가 채워지게 되고 최종적으로 shellcode가 실행됩니다.  


[그림 2] PoC 코드

 다음은 heap spray에 의해 메모리 영역이 nopslide인 0x0C 값으로 채워진 화면입니다.

[그림 3] heap spray

다음은 heap spray 코드가 실행된 화면입니다.

[그림 4] shellcode가 실행되는 메모리 영역

다음은 변수 c에 계산기를 실행하는 shellcode를 삽입한 exploit입니다. 

[그림 5] 계산기가 실행되는 shellcode

다음과 같이 Heap 영역에 nopslide + shellcode를 할당하여 최종적으로 EIP가 shellcode를 가리켜서 계산기가 실행됩니다.

[그림 6] shellcode로 인해 계산기 실행


다음은 2월 20일 milw0rm에 공개된 exploit입니다. 해당 exploit은 변수 c에 TCP 28876 port로 bindshell을 맺는 shellcode가 포함되어 있습니다.

URL) http://www.milw0rm.com/exploits/8079

[그림 7] bindshell을 맺는 shellcode


다음은 해당 exploit을 실행하기 전 사용자의 네트워크 상태입니다.

[그림 8] 사용자의 네트워크 상태

다음은 MS09-002 취약점을 이용한 시스템에 접근하는 화면입니다.  
 
[그림 9] MS09-002 공격

해당 URL 에 접근 할 경우 bind shell을 맺어 TCP 28876 port로 LISTENING되는 화면입니다.
 
[그림 10] 28876 port로 bindshell

다음은 사용자의 시스템에 28876 port로 접속을 시도하는 화면입니다.

[그림 11] 28876 port로 Telnet 접속


다음은 사용자의 시스템으로 28876 port로 접속한 화면입니다.
 


[그림 12] Telnet 접속 성공



3. 위험 분석
MS09-002 취약점을 이용한 웜/바이러스가 유포 중이기 때문에, Internet Explorer 7을 사용중인 일반사용자 및 서버관리자 중 윈도우 패치를 하지 않은 사용자는 시스템이 장악 당할 수 있습니다.



III. 대응 방안

1. 보안 대책
현재 MS09-002 취약점에 대한 패치가 공개된 상태이기 때문에 최신의 패치를 권고합니다.

2. 관련 사이트
본 취약점에 대한 추가적인 정보를 확인할 수 있는 관련 사이트는 다음과 같습니다.

http://www.microsoft.com/korea/technet/security/Bulletin/MS09-002.mspx
http://www.milw0rm.com/exploits/8077
http://www.milw0rm.com/exploits/8079


※ 현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다.