티스토리 뷰


 

Adobe 사에서 패치를 적용한다고 발표한 것 같은데... 나왔을라나..... --;;;

패치가 발표되기 전에 정리해서 올리려 했으나 꽤 시간이 흘러 버렸구낭.....

 

디버깅이 잘 되지 않아서 삽질 좀 했는데... 알고보니 버전 문제... --;;;

완벽한 분석은 아니지만 최근 발표되었던 CVE-2010-3654 Adobe Reader & Flash 제로데이 취약점 샘플에 대해서 정리해보자꾸나..... ^^;;; (<--- "역전의 여왕" 김남주 버전)

  

악성 PDF 파일은 전체적으로 다음과 같은 구성을 갖는구나~

 

 

malicious PDF
(cve-2010-3654)

obj

파일

역할

3

 noharm10608.swf

Unknown

4

obj(4) ooo17035.swf

Vulnerability

5

x (data)

PE dropped

28

JavaScript

shellcode

 

 

여기서 아직 해결되지 않은 부분이 있는데... 이 부분에 대해서는 아낌없이 조언 주셔도 좋~구나~~~ ^^;;;

 

 1) noharm10608.swf 의 역할???

 2) Flash 기반의 직접적인 취약점 원인 ....  <--- flash 공부더 하기.. ^^;;;

 3) Dropped PE 파일의 압축해제 사이즈 문제...

 

위의 부분을 제외한 밝혀진 부분에 대해서 말해보자꾸나~~~

 

일단 해당 파일 안에 삽입된 heap_spray 자바스크립트 코드는 여느 코드와는 쪼금 달라 보이더구나.... 그러나, 이전 PDF 또는 Flash 취약점에서 사용된 적이 있던 코드이더구나~~  ==;; 공부 좀 더하자~~

 

그럼 우선 heap에 채워지는 쉘코드의 형태를 정확히 파악하기 위해서 자바스크립트를 메모리에 올려보자꾸나~.

 585858 NOP 와 shellcode가 메모리 주소 0x58585858 번지를 포함하여 쫘악~~~ 잘 채워지더구나~.

 

 

4번 오브젝트 swf 파일을 떼어서 실행해본 결과, Crash가 발생하는 것으로 보아 해당  flash 파일에 취약점이 있다는 것을 알수 있구나~~.. swf 를 decompile 해서 취약점 부분을 집요하게 찾아보면 좋겠지만.. 이번 swf는 AS 코드도 길고 복잡하고 시간도 없어서 이번엔 그냥 skip 해야되겠구낭... T.T 

 

추가적인 디버깅과 테스트 결과, swf 파일을 렌더링하는 authplay.dll 파일의 다음 call edi 지점을 거쳐 최종적으로 다음 call eax  에서 점프하는 구나~~~

 



마지막 코드를 잠깐 보자면,  

  esi = [edx+8]가 바로 0x206567BD 주소이고, 이 주소는 이미 58585858로 채워진 heap  메모리 공간이구나....

  다음 코드 esi = [edx+70h] 또한 0x58585858

  다음 코드 eax = [esi]  는  0x58585858 번지의 값을 eax로 전달하고

최종적으로 해당 취약점은 0x58585858 heap 주소안에 있는 주소를 호출하게 되는구낭.....

 

call  [0x58585858]

 

앞서 살펴본 바대로 메모리에 올려진 heap을 살펴보면, 

0x58585858 번지에는 쉘코드의 첫 부분 58585858 뒤에 오는 07002FE1 값으로 채워져있고,  가만히 보면  이 주소는 BIB.dll 파일의 다음 코드를 가리키는 구낭..... 

 

 

in BIB.dll

------------------------------------------------------

07002fe18b5618          mov     edx,dword ptr [esi+18h]
07002fe4 85d2            test    edx,edx
07002fe6 7412            je      BIB+0x2ffa (07002ffa)
07002fe8 8b460c          mov     eax,dword ptr [esi+0Ch]
07002feb 8b4e04          mov     ecx,dword ptr [esi+4]
07002fee 50              push    eax
07002fef 51              push    ecx
07002ff0 56              push    esi
07002ff1 ffd2            call    edx
07002ff3 83c40c          add     esp,0Ch
07002ff6 85c0            test    eax,eax
07002ff8 7507            jne     BIB+0x3001 (07003001)
07002ffa 8bce            mov     ecx,esi
07002ffc e81afeffff      call    BIB+0x2e1b (07002e1b)
07003001 5e              pop     esi
07003002 c9              leave
07003003 c20400          ret     4

------------------------------------------------------

 

눈치가 빠르신 분들은 아시겠지만 해당 쉘코드는 일반적 쉘코드가 아닌 Return Oriented Exploitation(ROP)  쉘코드더구나~  따라서, ASM 코드로의 해석이 아니라 BIB.dll 의 주소값에 따른 코드로 해석해야겠구나...

 

 

07002FE1 에서는 

EDX = [ESI+18] 쉘코드가 채워진 곳에서 18 옵셋뒤에 0x070048EF .... 

.... 중략...

CALL [EDX] = 0x070048EF ...

0x070048EF 에서는

XCHG EAX, ESP  (EAX= 0x58585868) 

              RET      

 EIP는 다음 위치인 0x5868FACE 를.... 

 

 블라..블라...블라...

 

이런식으로 셀코드를 수행하면서 결국은 좌~~~악 거쳐서 ROP 코드 뒤에 붙어 있는 다음 코드에 다다르겠구나...

해당 코드는 오브젝트 5번에 존재하는 데이터를 읽어서 XOR 7B 하여 새로운 ~.exe를 생성하고 실행하는 구조로 되어있겠구나~~ 쉘코드 분석은 추후 더 정리되면 업데이트하는 걸로 하자꾸나~~ ^^;;;

 

 





------------------------------------

그래두 어느 정도는 PDF 를 안다고 생각했는데...

오늘 웹서핑하면서 또 모르는 내용을 발견했다...

해외 아니 지구 저~~쪽 어느 곳에서는

벌써 이런내용을 다 알고 연구하고 있구나~

무릎을 또한번 치는 순간이었다...

 

PDF 파는 거 이제 고만하고 다른 걸로 넘어가려햇는데

불안해지는 순간이다....

Adobe사의 PDF 가상화가 정착된다면.......

 

내가 너무 자만한 거겠지...

다 안다는 게 어떻게 존재하니 T.T

공부할 게 이렇게 많으면

소는 누가 키우냐고요~~~~

여러분 바바이~~~

----------------------------

 

 

댓글
댓글쓰기 폼