SkypeDLLInjector 에 의한 VoIP 도청 가능성 분석


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


* 본 연구 문서는 신규 취약점 또는 보안 기술 우회 기법에 관한 문서로써 악용될 우려가 있는 상세 공격 코드 및 내용을 제한 합니다.

1. SkypeDLLInjector 개요
2009년 8월 27일에 소개된 “Skype Malware”는 Skype 프로그램을 사용하고 있는 사용자들간의 음성 데이터 통신 (VoIP) 여부를 판단할 수 있고 도청이 가능하다. "SkypeDLLInjector"를 분석함으로써, 해당 바이러스의 흐름을 상세히 파악하였다.

 Skype malware참고 URL
http://blog.ahnlab.com/asec/105
http://www.internetnews.com/security/article.php/3836751

                                                                    [표 1] Skype Malware 참고 URL


가. skype
Skype는 전 세계인을 대상으로 하는 인터넷 폰 및 메신저 프로그램 이다. Skype를 설치한 시스템에서는 국내외를 막론하고 전 세계인들과 무료로 전화를 할 수 있으며, 채팅기능이 있어 많은 사용자에게 인기 있는 프로그램이다.
 

나. 흐름도

Skype Malware의 개략적인 흐름 입니다.


                                       [그림1] Skype Malware 흐름


Skype Malware는EXE파일형태의 DLL Loader와 DLL파일형태의 Executor로 구성되어 있다. 현재 분석한 바이너리는 POC형태이기 때문에 직접 실행 시켜줘야 DLL이 Injection 되면서 본 기능을 수행하게 된다.

DLL이 로드되면 하는 중요한 일은 크게 2가지 이다.

첫번째로 DLL Injection을 수행한다. 현재 시스템에서 동작하고 있는 모들 프로세스들에게 DLL Injection을 실행하여 Skype의 실행여부를 확인한다.

두번째로Skype가 실행되어 있다면, Send(), Recv() API를 Detour Hooking 을 한다. 두 API를 Detour Hooking을 함 으로써 Skype Malware에서 관심을 받았던 도청기능을 수행 할 수 있다.


다. 대응방안


1) 관련 악성코드는 각 백신에서 이미 치료가 가능한 상태이지만 백신을 항상 최신 버전으로 유지해야 한다.

2) 그리고 관련 악성코드가 e-mail, web등으로 전파가 도리 수 있기 때문에 방화벽프로그램 등 이에 대비할 수 있어야 하며, 윈도우를 최신버젼으로 유지해야 한다.

※ 그리고 분석 중 Skype가 자동으로 종료되 로그오프 되어버리는 증상이 있었으므로, 만약 그런 증상이 나타난다면 의심을 해 볼 수 있다.


3. 세부내역

Skype Malware는 앞에서도 이야기 했듯이 EXE파일의 형태인 Loader와 Executor인 DLL파일로 구성되며, Loader와 Executor를 분석해 보며 Skype Malware의 동작과정 및 시스템에 미치는 영향을 알아보도록 하겠다.

---해당 상세내역은 악용할 우려가 있어 생략합니다---

가. Loader
EXE파일 형태의 Loader는 SkypeDLLInjector.cpp 파일에 관련 코드가 있다. 이는 Console프로그램으로 실행할 때 인자로 Inject할 DLL의 경로를 받고 있다.

                                                        [그림2] Loader 시작부


---해당 상세내역은 악용할 우려가 있어 생략합니다---

이 코드를 통해 Loader가 로드된 후 Skype를 종료시키고 다시 실행시킴으로써 Loader가 Skype를 자식프로세스로 두고, 로그인을 담당하던 skypePM.exe가 실행되지 않는 것이다. 실제 시스템상의 사용자가 확인할 수 있는 Skype의 상태이다.

                                                                 [그림3] Skype Malware 흐름

이 상황을 보고 사용자는 Skype상의 연결이 끊어진 줄 알고 별일 아니라는듯 다시 로그인을 시도 할 것이다.

나. Executor

DLL형태의 Executor는 DLLToInject.cpp파일에 관련 루틴이 있다. Executor는 로드된 후 전역훅을 통해 모든 프로세스에 DLL Injection을 실행하고, Skype의 실행여부를 확인하여 실행되고 있으면, Detour Hook을 감행한다.

패치 가능한 크기가 구해졌다면, 그 크기만큼 패치할 Instruction덩어리를 만든다. FillMemory()를 이용하여 할당 된 메모리에 NOP(0x90) 으로 초기화한 후 GenJmp를 이용하여 JMP Instruction을 삽입한다.


                                                                   [그림 4] JMP Instruction 삽입 후 루틴

---해당 상세내역은 악용할 우려가 있어 생략합니다---

즉 send(), recv()를 호출하면, MySend(), MyRecv()가 호출되며 그 함수에서 특정 작업을 수행한 후 send(), recv()가 호출되는 형식으로 동작하게 된다.

MySend(), MyRecv()에서는 Send(), Recv()를 통해 오가는 데이터의 내용을 출력한 후 원래 함수를 호출하는 루틴으로 구성되어 있다.

                                                                   [그림 5] printDebug()

printfDebug()를 통해 SkypeMalware가 수행한 history를 남긴다. 실제로 Skype Malware가 악의적인 목적을 가지고 실행된다면 이런 기능은 없을 것이다. 하지만, 이 코드는 POC형태이기 때문에 DLL이 Load되면 debug.txt파일을 생성해 주고, 관련 작업들을 debug.txt파일에 기록한다.

DLL이 injection되고, 통화버튼을 눌러 DLL이 작업한 결과를 보도록 하겠다.


                                                                    [그림 6] debug.txt 생성

DLL이 Injection되면 debug.txt가 생성 되었다.

                                                              [그림 7] Skype로 전화거는 중


Skype로 전화걸기를 시도했을 경우 네트워크 전송으로 패킷이 전송되어야 하기 때문에 send()와 recv()를 사용 할 것이다. 전화걸기 중에 debug.txt파일을 확인해 보았다.

                                                                    [그림 8] debug.txt 내용

send(), recv()가 호출될 때 마다 DetourHooking된 MySend(), MyRecv()가 호출되어 debug.txt에 내용을 출력하는 것을 확인 할 수 있다. 이렇게 VoIP관련 해서 도청도 가능하리라 생각된다.



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