NOTICE


=== 목  차 ===



1. 소 개


2. EXP.HTML

    2.1. 암호화 되어 있는 데이터 복호화

    2.2. VSLAY.DLL 다운로드 및 로드


3. VSLAY.DLL

    3.1. 파일 생성

    3.2. AHNSVR.SYS / NTFSNY.SYS 실행

    3.3. MIDISAPPE.DLL 강제 인젝션


4. AHNSVR.SYS

    4.1. INLINE HOOKING 과정

    4.2. NTMAPVIEWOFSECTION 후킹 코드


5. NTFSNY.SYS

    5.1. SSDT HOOKING 과정

    5.2. NTENUMERATEKEY 후킹

    5.3. NTENUMERATEVALUEKEY 후킹

    5.4. NTQUERYDIRECTORYFILE 후킹

    5.5. NTQUERYSYSTEMINFORMATION 후킹


6. MIDISAPPE.DLL

    6.1. EXPLORER.EXE에 로드 되는 경우

        6.1.1. AV 제품 무력화

        6.1.2. 추가 파일 다운로드

        6.1.3. 부록 (AV 제품 무력화 테스트)


    6.2. IEXPLORE.EXE에 로드 되는 경우

        6.2.1. API 후킹

        6.2.2. HttpSendRequest 함수 후킹 코드

        6.2.3. mshtml.dll 후킹 코드

        6.2.4. mkd25ie.dll 후킹 코드 (AOS 관련 모듈)

        6.2.5. Send 함수 후킹 코드 (피망 개인 암호)

        6.2.6. 탈취 정보 전송


7. 마무리

    7.1. 동작 확인

    7.2. 치 료



1. 소 개

 2011년 7월 전후로 취약한 웹 사이트를 통해 VSLay.dll로 알려진 악성코드가 유포되었다. 국내 온라인 게임 계정 탈취를 목적으로 제작되었으며 넥슨, 한게임, 피망 등 주요 게임 웹 사이트나 클라이언트 프로그램에서 접속을 시도할 때 정보를 훔친다.


[그림 1.1.] 악성코드 동작 과정


 [그림 1.1.]은 온라인 게임핵 악성코드의 전체적인 흐름을 보여준다. 사용자가 변조된 웹사이트에 접속하면 악성코드에 감염된다. 그 과정을 살펴보면 다음과 같다.


 1. iexplore.exe: 웹사이트에 삽입된 쉘코드로 인해 사용자 컴퓨터에 VSLay.dll이 다운로드 된다. 이후 Loadlibrary 

API를 호출해서 VSLay.dll을 iexplore.exe에 로드한다.

 2. VSLay.dll: ahnsvr.sys, ntfsny.sys, midisappe.dll 등 총 8개의 파일을 Drop 한다.

 3. VSLay.dll: SCManager에 ahnsvr.sys와 ntfsny.sys를 등록하고 실행시킨다.

 4. ahnsvr.sys: NtMapViewOfSection API를 후킹한다. 이로 인해 iexplore.exe, Maplestory.exe df.exe 등 타깃이 되는

   프로세스에 midisappe.dll이 실시간으로 강제 인젝션된다.

 5. ntfsny.sys: NtQuerySystemInformation, NtQueryDirectoryFile, NtEnumerateKey 등 4개의 API를 후킹해서 악성코

  드를 보호한다.

 6. midisappe.dll: explorer.exe에 로드 되는 경우 동작하고 있는 AV 제품을 찾아서 무력화시키고 웹사이트에서 파일

 을 추가적으로 다운로드 한다.

 7. midisappe.dll: 게임 웹사이트나 클라이언트 프로그램에서 사용자가 입력하는 ID, PW를 탈취한다.



2. exp.html


[그림 2.1.] exp.html 동작 과정


 상세 분석에 앞서 exp.html 파일의 전체적인 흐름을 간략하게 살펴보도록 한다.


1. 악성 파일을 다운로드 하기 전에 Temp 폴더에 같은 이름을 가진 파일이 있는지 확인하고 삭제한다.

    VSLay.dll파일이 확실하게 다운로드 되도록 환경을 만들어 주는 것이다.

2. 특정 경로에서 Temp 폴더로 VSLay.dll 파일을 다운로드 한다.

3. 암호화 되어 있는 VSLay.dll 파일을 0xDC 값으로 XOR 연산해서 복호화한다.

4. VSLay.dll 파일을 로드한다.


2.1. 암호화 되어 있는 데이터 복호화

 exp.html에는 악성코드 유포에 사용되는 악성 스크립트 코드가 삽입되어 있다. ShellCode를 Hex 값으로 변환하고 OllyDBG로 분석해보도록 한다.


[그림 2.2.] exp.html 파일 코드


 앞서 [그림 2.2.]에서 보듯이 스크립트 코드는 암호화 되어 있다. 이는 자신의 정체를 숨기고 분석을 어렵게 하기 위한 방법이지만 초반 16 Byte는 복호화 코드로 이루어져 있다.


[그림 2.3.] 악성 스크립트 복호화 과정


 암호화 데이터 마지막 위치 주소를 구하고 끝에서 1 Byte 씩 읽어와서 0x96과 XOR 연산을 한다. 데이터 크기만큼 반복하면 복호화 된 코드가 나타난다.


[그림 2.4.] 악성 스크립트 복호화


2.2. VSLay.dll 다운로드 및 로드

 악성 스크립트는 사용자 컴퓨터의 Temp 폴더 경로를 알아내고 그곳에 VSLay.dll 파일이 있는지 확인한 후 삭제한다. 악성 파일을 확실히 다운로드 하기 위해 환경을 만들어주는 것이다.



[그림 2.5.] VSLay.dll 파일 삭제


 환경 설정이 끝나면 “http://kd6.in/s/b.exe”에서 VSLay.dll 파일을 다운로드 한다. 그러나 현재 해당 서버는 막혀 있기 때문에 정상적으로 파일을 받아오지 못한다. 필자가 가지고 있는 동일 파일로 대체해서 분석하도록 한다.


[그림 2.6.] VSLay.dll 파일 다운로드


[그림 2.7.] VSLay.dll 파일 Hex 값


 VSLay.dll 파일은 [그림 2.7.]에서 보는 것과 같이 PE 파일의 형태를 갖추고 있지 않다. 암호화 되어 있는 것이다. 악성 스크립트 코드를 조금 더 따라가다 보면 VSLay.dll 파일의 값을 읽어와서 XOR 연산으로 복호화하고 끝나면 복호화 된 데이터를 VSLay.dll에 다시 쓰는 것을 알 수 있다.


[그림 2.8.] VSLay.dll 파일 복호화


[그림 2.9.] VSLay.dll에 복호화 된 값 입력


 VSLay.dll 파일을 다시 확인해보면 정상적인 PE 구조를 이루고 있다.


[그림 2.10.] VSLay.dll 파일 복호화


 이후 LoadLibrary를 호출해서 VSLay.dll을 로드한다. 현 분석 환경에서는 OllyDBG 프로세스의 하위 모듈로 동작을 하게 된다. VSLay.dll 파일에 대한 자세한 분석은 다음 장에서 다루도록 한다.


[그림 2.11.] VSLay.dll 파일 로드


※ 본 포스트는 분석 문서 내용의 일부만 담고 있습니다.


  1. no picture 2015.05.09 23:36

    비밀댓글입니다