반응형
<해당 악성파일은 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이다.
되었다. 다운로드 되는 파일은 hxxp://www.37xxxx.com:5656/01.exe이다.
(그림. 실행단계 도식화 화면)
해당 취약점은 아래와 같이 보안업데이트를 통해 방지할 수 있다.
[MS10-018 보안업데이트]
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로 파일명을 변경시킨다.
(그림. 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;
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을 삭제하기 보다는 감염방식을
분석하여 역으로 치료루틴을 추가하는 것이 최선이라 볼 수 있다.
분석하여 역으로 치료루틴을 추가하는 것이 최선이라 볼 수 있다.
'분석해보까?' 카테고리의 다른 글
[강좌] 쉘코드(ShellCode)를 OllyDbg로 쉽게 디버깅 해보자 (18) | 2010.11.06 |
---|---|
[PDF 취약점]Adobe Acrobat Reader 0-day 취약점(CVE-2009-4324) (3) | 2009.12.17 |
[Ollydbg]올리디버거 버그(Float 처리 실패) (0) | 2009.12.03 |
[정보보호21C]3부 웹 서버 해킹을 통한 악성코드 대량 배포 유행 (2) | 2009.09.10 |
[강좌] UCS2를 Hex로 변환해보자!! (6) | 2009.08.03 |
댓글