본문 바로가기
분석해보까?

[분석문서] 시스템파일(Comres.dll)을 감염 시키는 악성코드

by 잡다한 처리 2011. 4. 17.
반응형

<해당 악성파일은 2011년 1월달에 발견 된 샘플이나, 기록을 위해 포스팅!!>


1. 개요
최근의 악성코드들이 시스템 Dll파일을 변조 또는 교체하는 방식을 많이 사용하고 있다.
이러한 방식을 쓰는 이유는 시스템 Dll 파일을 조작하면 악성코드는 사용자의 눈을 피해 시스템에 오래 살아남을 수 있기 때문이다.
하지만 윈도우 운영체제는 WFP(Windwos File Protection)이라는 기법으로 시스템 Dll을 보호하고 있다.
이번 악성코드 분석에서는 WFP기법을 해제하는 방법과 악성파일의 행위에 대해 알아보자.


2. 악성코드 분석
2-1. 유포경로
- 변조 된 사이트에서 전파 되는 것으로 확인되며, 사용자 PC에 취약점이 존재하면 악성파일을 다운로드 한다.
사용 된 취약점은 CVE-2010-0806 IE취약점으로 2010년 3월 9일에 0-Day로 발견되어 2010년 3월 31일 MS10-018으로 긴급업데이트
되었다. 다운로드 되는 파일은 hxxp://www.37xxxx.com:5656/01.exe이다.

(그림. 실행단계 도식화 화면) 

해당 취약점은 아래와 같이 보안업데이트를 통해 방지할 수 있다.

2-2. 파일분석(V.DWN.OnlineGames.xaot – 01.exe)
- 프로세스 종료
동작 중인 프로세스 중 AYAgent.aye, SkyMon.exe 프로세스가 존재하면 종료시킨다.

(그림. 프로세스 강제종료 화면)

- WFP(Windows File Protect) 보호모드 해제
Sfc_os.dll의 Ordinal 5에 존재하는 unnamed API(SfcFileException)를 사용하여 보호모드를 해제할 수 있다.
WFP 보호모드 해제 대상파일은 C:\Windows\System32폴더에 존재하는 Comres.dll 파일이다.

Ordinal 5:

DWORD WINAPI SfcFileException(DWORD dwUnknown0, PWCHAR pwszFile, DWORD dwUnknown1);

dwUnknown0

Unknown. Set to 0

pwszFile

Filename

dwUnknown1

Unknown. Set to -1

(Ordinal 5 unnamed API(SfcFileException) 구조체)

(그림. WFP 무력화 코드 화면)

- 파일 이동
WFP 보호모드가 해제되면 감염PC에 ComResA.dll 파일이 존재하는지 확인 후, 존재하지 않으면 정상적인 Comres.dll를
ComResA.dll로 파일명을 변경시킨다.

(그림. ComResA.dll 파일 생성 화면)

(참고사항)
해당 악성파일는 중복체크를 하지 않기 때문에 파일이 재실행하게 될 경우, WFP 보호모드 해제 후 감염PC ComResA.dll
파일이 존재하면 현재 존재하는 ComRes.dll ComRes.dll(랜덤7자리).tmp 파일로 이동시킨 후 다시 ComRes.dll 파일을
생성시킨다.

(그림. 중복 실행 시 변경되는 ComRes.dll 파일이동 화면)

(그림. 파일 중복실행에 따른 파일변경 순서도)


- 파일 생성
자신이 리소스로 가지고 있던 파일을 C:\WINDOWS\system32\ComRes.dll로 생성한다.

(그림. 리소스에 저장 된 내용을 로드시키는 화면)

- 파일 삭제
ComRes.dll 파일의 생성이 완료되면, 자기자신을 삭제한다.

Format = "%s /c del "%s""
<%s> = "C:\WINDOWS\system32\cmd.exe"
<%s> = "C:\(파일이 실행 된 위치)\01.exe"

C:\WINDOWS\system32\cmd.exe /c del C:\(파일이 실행 된 위치)\01.exe



2-3. 파일분석(S.SPY.OnlineGames.xaot – ComRes.dll)
- 프로세스 종료
자신을 로드시킨 프로세스가 AyAgent.aye, ALYac.aye, SkyMon.exe 일 경우 종료 시킨다.

 (그림. 프로세스 강제종료 화면)

- 스트링 복호화
차후에 이용 될 스트링을 “XOR(95)”을 이용하여 복호화 시킨다.
복호화 된 스트링 내용은 다음과 같다.

다운로드 주소 : hxxp://ddd.37xxxx.com:7878/dd.txt
맥 전송 주소 : hxxp://ddd.37xxxx.com:7878
맥 전송 시 버전정보 : 3838


- 스레드 생성
생성 된 스레드에서는 파일 다운로드, 파일복사, 맥&버전 전송, 파일로드의 역할을 수행한다.

1) 복호화 된 스트링을 참고로 파일을 다운로드 한다.
hxxp://ddd.37xxxx.com:7878/dd.txt를 systemInfo.ini 파일이름으로 다운로드 한다.
이후 hxxp://ddd.37xxxx.com:7878/3.exe 파일을 다운로드 후 실행한다.

(그림. 다운로드 된 dd.txt 파일내부 화면)

2) 다운로드 된 systemInfo.ini파일을 systemInfomations.ini 이름으로 복사시킨다.

3) 특정 서버로 감염 된 PC의 MAC&버전정보를 전송한다.

URL : hxxp://ddd.37xxxx.com:7878/clcount/count.asp?mac=(Mac Adress)&ver=3838
UserAgent : Google

 
4) nt32.dll 파일을 로드한다.

(그림. 악성파일 nt32.dll을 로드시키는 화면)

- ComResA.dll 로드
ComResA.dll은 정상적인 시스템파일 Comres.dll이 변경 된 파일이다. 감염 된 ComRes.dll가 원본파일의 기능을 수행하기 위해서는 ComResA.dll을 로드해야 한다. 해당 악성코드에서는 Export Table(IMAGE_EXPORT_DIRECTORY)를 이용하여 ComResA.dll을
로드시킨다.

1) IMAGE_EXPORT_DIRECTORY의 구조체

typedef struct _IMAGE_EXPORT_DIRECTORY {
    DWORD   Characteristics;
    DWORD   TimeDateStamp;          
    WORD    MajorVersion;
    WORD    MinorVersion;
    DWORD   Name;                   // address of library file name
    DWORD   Base;                   // ordinal base
    DWORD   NumberOfFunctions;      // number of functions
    DWORD   NumberOfNames;          // number of names
    DWORD   AddressOfFunctions;     // address of function start address array
    DWORD   AddressOfNames;         // address of functino name string array
    DWORD   AddressOfNameOrdinals;  // address of ordinal array
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;


2) 해당 악성코드의 경우 AddressOfFunctions 인 ComResA.COMResModuleInstance 필드를 참조하게 된다.

Modul name : DLL.dll
TimeDateStamp: 4D1B6A18
Version: 0.00
Ordinal base: 00000001
Number of functions: 00000001
Number of Names: 00000001
COMResModuleInstance rva: 0000358F ord : 1 [forwarder RVA : ComResA.COMResModuleInstance]


3. 결론
이와 같이 악성파일이 시스템 Dll을 변경했을 경우, 백신프로그램 업체에서는 변경 된 시스템 Dll을 삭제하기 보다는 감염방식을
분석하여 역으로 치료루틴을 추가하는 것이 최선이라 볼 수 있다.


댓글