▷ 작성자 : Hong10 (hong10@a3sc.co.kr)
▷ 편집자 : 니키 (ngnicky@a3sc.co.kr)


[A3AID08-04]
MS Internet Explorer XML Parsing Remote Buffer Overflow(MS08-073) 공격 보안 권고안

 


최초 발표일 : 2008.12.10

문서 작성일 : 2008.12.11

위험등급:
긴급

현재 상태(패치 여부) : 미패치

벤더: Microsoft Windows


대상 시스템 :

- Windows XP 서비스 팩 2 및 Windows XP 서비스 팩 3
- Windows 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 기반 시스템용)


 

-
취약점 개요:
조작된 HTML 문서는 XML Parsing 구간의 취약점을 이용하여 임의의 코드를 실행 합니다. 조작 된 HTML 은 HeapSpray 역할로써 사용되며 취약한 XML Parsing 이 실행 될 때 메모리상에 뿌려진 코드에 접근하여 실행하게 됩니다. 해당 취약점에 대한 패치는 아직 이루어 지지 않은 상태입니다. IE 6 버전에서는 공격 코드가 실행 되지 않으며 IE 7에서 공격코드가 실행 됨을 확인 할 수 있었습니다. 현재 이 취약점을 사용하는 악성코드들이 전파 되고 있는 상황입니다.

 
- 심각도 및 취약점 확인

취약점 영향

MS Server Service Code Execution

비정상 실행 및 원격 코드 실행

긴급





취약점 세부 분석 :

 1. 취약점 내용
상기 취약점의 공개 공격 코드는 2개의 파일로 이루어 져 있습니다. 하나는 heap spray 역할을 하는 코드로써 메모리 상에 “0x0a0a0a”,”0x90”,”쉘 코드” 을 뿌리는 역할을 하며 나머지 한 파일을 xml parsing 할 때 overflow을 발생하는 exploit 코드입니다.
Exploit 공격 코드를 보면 image 태그 값에 “&#2570” 값이 할 당 되어 있으며 이것을 16진수로 표현하면 “0x0a0a” 값이 됩니다. Heap spray 에 의해 메모리 상에 “0x0a” 값들이 채워 져있으며 Exploit 코드에 의하여 다음과 같이 mshtml.dll 모듈에서 call 루틴의 포인터 값으로 0x0a0a 값으로 할당되어 0x0a0a0a0a 주소로 실행이 됩니다. 다음은 milw0rm 에 포스팅 된 공격 툴 주소입니다.

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

 2. 공격 분석
다음 루틴은 mshtml.dll에 존재하는 루틴인데 여기서 명령어 실행 주소가 공격자가 원하는 쉘 코드 주소 공간으로 변조됩니다.
mov     ecx,dword ptr [eax]
push     edi
push     eax
call      dword ptr [ecx+84h]


위의 루틴에서 eax 포인터 값에는 “&#2570” 값을 포함 하고 있으며 그 값을 ecx 에 담습니다. 마지막에 call을 할 때 ecx 의 값의 0x84 offset의 값으로 콜 하기 때문에 결국 ecx에 저장되는 값을 변조 하여 0x0a0a0a0a 값을 담게 끔 하여 임의의 코드를 실행 하게 할 수 있습니다. 앞서 heap spray 코드가 “0x0a0a0a0a” 메모리 주변에 “0x0a”를 뿌려 놨기 때문에 결국 포인터 값들은 무수히 많은 “0x0a” 값을 가리키게 됩니다. 그래서 ecx+84h 가 콜 되는 주소는 0x0a0a0a0a 으로 설정이 됩니다. 다음은 heap spray 가 이루어 질 때 메모리 값입니다.
 




다음은 위 heap spray 코드들이 실행 되는 화면 입니다. 



다음 그림은 위에서 설명한 mshtml.dll 의 취약점 구간에서 eax 포인터 값이 0x0a0a0a0a를 가리키는 장면입니다.
 




실제로 위의 루틴 공간에 break point 를 잡기 위해서는 공격코드를 실행 한 상태에서 attach 하여 잡아야 합니다. 왜냐면 해당 루틴이 실행 될 때 많은 thread 들이 생성 되며 파일을 오픈 하여 실행 했을 때는 해당 thread 부분이 잡히지 않고 종료 되기 때문입니다. 다음은 공격코드가 정상적으로 실행 되어 계산기를 띄우는 화면입니다.
 




3. 위험 분석
상기 취약점을 이용하면 공격자는 조작된 HTML 파일을 희생자로 하여금 접근하게 유도 한 다음 임의 명령어를 실행하여 시스템 장악이 가능하게 됩니다. 또한 현재 MS 측에서 해당 패치를 내놓지 못한 상황 입니다. 또한 현재 이 취약점을 이용한 악성 코드들이 국내 몇 사이트에 감염이 되어 있음을 확인이 되었습니다. 다음은 악성코드 전파 사례입니다.

baidu.bbtu01. cn/c0x.htm
baidu.bbtu01. cn/ie07.htm
baidu.bbtu01. cn/104.htm
baidu.bbtu01. cn/a0s.htm
baidu.bbtu01. cn/c0e.htm

대응 방안:

1. 보안 대책

현재 패치가 없으므로 사용자는 수동으로 패치를 실행 하여야 합니다. 패치 방법은 IE 7의 데이터 실행 방지(DEP) 을 활성화 하는 방법입니다. IE 7에는 디폴트로 이 옵션이 비활성화 되어 있습니다. 다음은 IE 7 에서의 위치입니다.




2. 관련 사이트

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

http://www.microsoft.com/korea/technet/security/bulletin/ms08-073.mspx
http://www.breakingpointsystems.com/community/blog/patch-tuesdays-and-drive-by-sundays
http://www.milw0rm.com/exploits/7403

Copyright(c) 1998-2008 A3 Security ,LTD


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