티스토리 뷰


아주 오랜만에 블로깅을 하는 군요.. 헤헤헤 .. 
연이은 이슈... 사건..... 출장까지 ....

지난 번 제로데이 취약점은 짬이 없어서 확인도 제대로 못했었는데, 오늘 또 유사한 제로데이 취약점 나왔다고 떠들썩 하네요... ^^;;;  
작년까지만 해도 플래쉬 파일은 PDF 파일을 타고~~~ 왔었는데... ㅋㅋㅋ
올해에는 아무래도 MS Word 문서로 갈아 탔나봅니다... Silverbug는 "바람둥이 flash" 라는 표현을..... --;;;  

그럼 쪼매 살펴볼까요???

이번 제로데이 취약점을 이용하고 있는 Word 문서파일은 다음과 같은 구조를 갖습니다...

새빨간 거짓말 1장 1절에 이르기를....

MS Word(.doc) 파일Flash(.swf) 파일을 낳고.......
Flash (F01.swf) 파일취약점 Flash(.swf) 파일 과 쉘코드(Shellcode)를 낳고.... ^^;;

 

# 관련 파일 목록 :

        - MS Word(doc) : 96CF54E6D7E228A2C6418ABA93D6BD49  (사회공학적 방법으로 사용자에게 전달~~)

        - F01(.swf) : 79B1C0ED2DF4977D70C7D21817213FA6 (문서파일 내부에 삽입된 플래쉬 파일)

        - F02(.swf) : A7435D599A0B7E9FFD5F94338412A93D (F01 에 의해서 동적으로 로딩되는 취약점 플래쉬 파일)

        - shellcode : Flash_01 (F01에 의해서 메모리상에 채워짐)

# 개별 파일 내부 :

MS Word(doc) :  
가장 빠르고 단순하게 Flash 파일을 찾는 건 시그니처(FWS or CWS)를 검색하는 거겠쬬...
자~~ 나오네요... 



잠깐,,,,
여기서 어떻게 문서파일에 플래쉬 파일을 삽입할 수 있는 지 궁금하지 않으세요??
예전 PDF에서는 상용버전에 멀티미디어 파일을 삽입할 수 있는 기능을 이용해서 삽입할 수 있었죠..
실제로 잠깐 테스트해봤을 때,  MS Word 실행 ->  개체삽입 -> 파일로부터 만들기  를 통해서 취약점 파일을 삽입해 봤습니다... 근데 첨에는 실행도 잘 되지 않고, 내부에 FWS 컨텐츠도 존재하질 않더군요... --;;
 
하지만, 다음과 같이 설정을 변경해주면 내부에 컨텐츠 삽입도 되고, 실행도 잘 됩니다.. 
정적분석을 통해서 취약점 플래쉬 파일을 찾으셨다면, 이 방법을 이용해서 디버깅하시면 더 편하실껄요? ㅋㅋ




F01(swf) : 
문서파일로부터 이제 떼어낸 플래쉬 파일을 좀 들여다봅시다.. 
헐~~ 해당 파일은 AS를 이용해서 frame1() 함수 안에서 내부적으로  쉘코드를 메모리 상에 올린 후, 또 다른 플래쉬 파일(swf)을 동적으로 올리고 있는 구조네요...




그럼 데이터를 조합해서 swf 랑 shellcode를 뽑아내 봅시다... 


F02(.swf) :
아무래도 이 녀석이 취약점 발생 원인인 것 같죠??? ^^;;
플래쉬 취약점은 찾기가 참~~~~ 난감한데.... 행운을 빌어 보아요..  

해당 플래쉬 파일을 찬찬히 살펴보면, 다음 같은 비교부분이 있습니다..
그런데 다른 부분은 모두 다 참(True) 인데, 이 부분만 거짓(False) 이더군요... 먼가 냄새가 나지 않습니까???
 
    

그래서 해당부분의 조건을 True 로 변경하고 테스트를 해 보았더니 일명 뻑~ (Crash)나지 않더군요...
그럼, 역으로 값은 다르게 하고 False 조건이 되도록 변경해 보았더니 이번에는 픽~~ 하고 Crash가 나더라구요.... ^^;;
아마도 이 부분이 취약점의 원인이 된 것 같습니다... 

여기서, 잠깐...!!! 
가끔... 왜 "새빨간 거짓말" 이냐고 물으시는 분들이 있습니다.. 
바로 이런 부분때문이죠,,,, 이렇게 맘대로 시나리오 짜서 추리하고 ,,,, 
제가 테스트해보고 ,,,,
그래서 어쩜 모두 다 거짓말일 수 있다는.... ㅋㅋㅋㅋㅋ


ShellCode :  요 부분은 일단 안 볼라구요.. ^^;;

 
# 동적 디버깅 : 

실제 악성컨텐츠를 내포하고 있는 SWF 파일을 직접 디버깅하는 것은 복잡하기도 하고, 위험성도 있기 때문에 정적분석을 통해 획득된 취약점 플래쉬파일(F02) 을 가지고 PoC 수준에서 디버깅을 하는 것이 편할 것 같습니다. 

OllyDbg로 디버깅을 했더니 올리자체의 Exception handling 때문인지 해당 위치에서 걸리지가 않더군요..
그래서 저 같은 경우에는 WinDbg를 사용하였습니다..

딱 걸렸엉~~~ ^^;; 
플래쉬 취약점이라고 해서 authplay.dll 파일에서 문제가 발생했을 거라 예상했는데 
이번에는 다음 위치에서 오류가 발생합니다. 

ModLoad:  C:\WINDOWS\system32\Macromed\Flash\FlDbg10e.ocx


아래와 코드 상에 볼 수 있듯이 EDI 레지스터가 가리키는 주소번지 안의 값을 ECX 레지스터로 옮기고, ECX+8 주소번지  안의 값을 호출하도록 되어 있습니다. 테스트 해보면 아시겠지만, 항상 0x11111118 메모리 주소값을 호출하도록 되어 있습니다.. ㅋㅋㅋ



따라서, 앞서서 ShellCode 부분에서 WriteByte(17) 즉 0x11  * 1024 블럭을 1023번 채우는 부분이 있는데
바로 0x11111118 번지를 0x11111111 로 채우기 위함이였지요...


  아래 부분은 제가 테스트 삼아 계산기를 실행하도록 만든 코드입니다. 쉘코드 부분까지 잘 뛰어갑니다.. ^^;;;;





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

간만에 분석 하니 잼나여~~ ^^;;
이번엔 운이 좋아서
대충  필요한 부분은 분석된 것 같은데...
방문자 여러분들에게도 도움이 좀 되셨으면..

저작권은 보호해주실꺼죠???? ^^V
----------------------------

댓글
  • 프로필사진 BlogIcon Sun2Day 감사히 잘 보고 갑니다 +_+ 2011.04.13 09:12 신고
  • 프로필사진 BlogIcon redhidden ^^ 감사합니다... 2011.04.13 16:08 신고
  • 프로필사진 비밀댓글입니다 2011.04.14 12:38
  • 프로필사진 BlogIcon redhidden ^^;;; 2011.04.18 16:41 신고
  • 프로필사진 비밀댓글입니다 2011.04.16 23:33
  • 프로필사진 BlogIcon redhidden 제 글을 통해 도움을 조금이라도 얻으신다면 저에게 참 보람된 일입니다.. ^^;;;
    궁금하신 사항에 대해서 잠깐 언급드리도록 하겠습니다...

    --- 분석로그 ----------------------------------------

    eax=11111110 ebx=00000000 ecx=070a51f8 edx=00000007 esi=051af86c edi=070a51f8
    eip=05aa5ff2 esp=051af6b0 ebp=051af7b0 iopl=0 nv up ei pl nz na po nc
    cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202

    05aa5ff2 ff5008 call dword ptr [eax+8] ds:0023:11111118=11111111

    eax=11111110 ebx=00000000 ecx=070a51f8 edx=00000007 esi=051af86c edi=070a51f8
    eip=11111111 esp=051af6ac ebp=051af7b0 iopl=0 nv up ei pl nz na po nc
    cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
    <Unloaded_Ed20.dll>+0x11111110:
    11111111 1111 adc dword ptr [ecx],edx ds:0023:070a51f8=11111110

    eax=11111110 ebx=00000000 ecx=070a51f8 edx=00000007 esi=051af86c edi=070a51f8
    eip=11111113 esp=051af6ac ebp=051af7b0 iopl=0 nv up ei pl nz na pe nc
    cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000206
    <Unloaded_Ed20.dll>+0x11111112:
    11111113 1111 adc dword ptr [ecx],edx ds:0023:070a51f8=11111117

    -- flash 안의 heap_spray 코드 일부 ----------------------


    while (this.i < 1024)
    {
    // label
    this.s3.writeByte(17);
    var _loc_1:String;
    _loc_1.i = this.i++;
    }// end while
    this.i = 0;
    while (this.i < 1023)
    {
    // label
    this.s.writeBytes(this.s3, 0, this.s3.length);
    var _loc_1:String;
    _loc_1.i = this.i++;
    }// end while


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

    위의 로그는 제가 IE를 통해 디버깅할 때의 로그입니다...

    보시는 바대로 1111 코드는 EDX의 값을 ECX 안의 값과 더해서 다시 ECX 주소값 안에 저장하는 함수이지요..

    11111113 1111 adc dword ptr [ecx],edx ds:0023:070a51f8=11111117

    마지막 점프 CALL을 통해 heap의 위치에 도달했을 때, EDX 값은 0x00000007이고 [ECX]의 값은 0x11111111이기 때문에 ECX 레지스트리가 가리키는 주소의 값만 계속 증가를 시키겠지요..
    아시겠지만, 이렇게 heap_spray에서 NOP Sled 는 명칭 그대로 진짜 쉘코드가 있는 위치까지 CALL의 흐름에 전혀 영향을 주지 않고 다다르도록 하는 역할을 수행하기 때문에 이번 코드에서도 call 흐름에는 영향을 주지는 않았습니다.

    저는 IE를 통해서 디버깅을 해서 heap_spray 양을 제가 임의로 조정했지만, 실제 위의 flash를 이용한 heap_spray에서 코드를 보면 0x11값을 1024 크기의 블락을 1023번 반복시킨 후 쉘코드를 붙였기 때문에
    실제로 쉘코드까지 다다랐을 때 최대 [ECX]=0x11111111 + 0x00000007*(1024/2 *1023)= 0x11490311 .... 값까지 증가될 것이고..... 글로 설명할려니 좀 복잡하네요.. ㅋㅋㅋ
    따라서, call 흐름에 전혀 영향없이 쉘코드에 다다를 것으로 판단됩니다...


    말씀하신, 정확히 무한반복이라는 게 어떤 상황인지 몰라서 여기까지만 답변을 드릴 수밖에 없네요.. ^^;;
    혹시, 제가 잘못 답변 드렸다면 다시 질문하셔도 됩니다..
    2011.04.18 19:02 신고
  • 프로필사진 비밀댓글입니다 2011.04.20 13:31
  • 프로필사진 비밀댓글입니다 2011.04.19 23:03
  • 프로필사진 BlogIcon Anster 안녕하세요! 평소 블로그를 자주 찾아오는 학생입니다.
    버퍼 오버 플로우에 관해서 실험을 하던 도중 문제가 생겨 해결책을 찾고있는데
    잘 안풀려서 개인적으로 질문드리고자 하는데 괜찮으시다면 메일 주소를 알려주실 수 있으신지요 ^^;;

    읽어주셔서 감사합니다. 좋은하루 되십시오.^^
    2011.05.01 07:29 신고
  • 프로필사진 BlogIcon redhidden 안녕하세요.. 쥔장입니다.
    제가 도움이 될 수 있을지는 모르겠지만... 가능하다면 문제에 대해서 함께 고민해드리도록 하겠습니다. redhidden00@gmail.com 으로 메일주시면 됩니다.
    2011.05.02 09:43 신고
  • 프로필사진 BlogIcon Anster 안녕하세요~~ 메일 드렸습니다.^^ 감사합니다. 2011.05.12 10:03 신고
  • 프로필사진 BlogIcon redhidden 훈님.. ^^ 저도 답변 드렸습니다.. 2011.05.16 17:37 신고
댓글쓰기 폼