문제풀이/실전 악성코드와 멀웨어 분석

[실전 악성코드와 멀웨어 분석] 실습 문제 1-4

알 수 없는 사용자 2017. 9. 12. 16:36

[실전 악성코드와 멀웨어 분석] 책의 실습 문제1-4(Lab01_01.exe)를 분석한다. 분석 환경은 윈도우XP이다.

 

 

기초 정적 분석


 

그림 1 virustotal.com

 

Virustotal.com 사이트로 Lab01-01.exe을 검사하면, 60개의 백신 중 33군데에서 악성코드로 판별했다 (그림1 참조). 그리고 해당 악성코드는 트로젠(Trojan)으로 추측된다.

 

다음은 Stirngs.exe을 이용하여 문자열을 검사하자.



 

그림 2 strings.exe


 

그림 3 의심스러운 문자열

 

그림3은 Lab01.0.exe의 의심스러운 문자열이다. 1번은 wupdmgr.exe 파일을 실행할 것으로 추측된다. 2번은 리소스 섹션(.rsrs)에 바이너리 파일이 있는데, 아마 멀웨어일 것으로 추측된다. 3번은 wimup.exe 파일을 실행할 것으로 추측된다. 4번은 사이트에서 updater.exe을 다운받을 것으로 추측된다.

 

다음은 dependency walker로 사용된 dll 함수를 확인한다.



 

그림 4 kernel32.dll


 


그림 5 advapi32.dll

 

해킹에 자주 사용되는 CreateRemoteThread, WinExec, WriteFile, FindResource 와 권한을 설정하는 OpenProcessToken, AdjectTokenPrivileges, LookupPrivilegeValueA 함수를 발견했다 (그림4와 그림5 참조)

 

다음은 Resource Hacker로 리소스 섹션을 확인한다.

 


그림 6 Resource Hacker

 

그림6에서 한 개의 리소스인 BIN#101가 보인다. 해당 리소스는 그림3의 문자열 검사에서도 발견됐다. 그런데 BINE#101 리소스의 가장 첫 바이트에 MZ 시그니쳐가 있는 것으로 보아 PE 파일이다. 일반적으로 리소스 섹션에는 PE 파일이 없으므로 악성 코드로 추측 된다.

다음은 PEID로 패킹 여부를 확인한다. 그림7에서 Lab01_01.exe은 패킹은 되지 않았고 Visual C++ 6.0 버전으로 컴파일 됐다.  




그림 7 PEID

 

 

기초 동적 분석

 

기초 동적 분석는 Procexp , Procmon, Regshot, Wireshark 프로그램을 사용한다. 기초 동적 분석을 할 때는 모든 분석 프로그램을 실행 후에 악성 코드를 실행해야 한다.

 


그림 8 Procexp

 

Procexp 은 프로세스 목록을 자세하게 분석하는 프로그램이다. 그림8에서 Lab01_04.exe가 실행되면 연달아 wupdmgr.exe와 winup.exe가 실행된다. 그리고 나서 종료된다. 해당 파일은 그림3의 문자열 검색에서도 발견됐다.

 

다음은 Procmon 프로그램을 이용하여 프로세스가 하는 모든 행위를 확인하자.

 


그림 9 필터링 적용 (Filter -> Filter...)

 

그림9와 같이 필터링을 적용하면 Lab01_04.exe만 분석이 된다. 만약 필터링을 적용하지 않으면 모든 프로세스가 나타나서 분석이 어려워 진다. 그래서 Procmon은 필터링을 잘 이용해야 한다.

 


그림 10 Process Name : lab01_04.exe 필터링 적용

 

그림10에서 Process Name을 Lab01_04.exe로 적용했다. 하지만 너무나 많은 정보들이 보여서 분석하기 힘들다. 다시 한번 필터링을 적용하자.



그림 11 Path 필터링 적용

 

그림11와 같이 Path 필터링을 적용하면 Path에 winup.exe나 wupdmgr.exe가 포함된 동작만 보여준다.

 



그림 12 Path 필터링 적용

 

그림12에서 CreateFile과 WriteFile은 wupdmgr.exe을 생성하고 저장한 것을 알 수 있다. 해당 부분은 고급 정적 분석이나 고급 동적 분석에서 더 자세하게 살펴볼 것이다.

 

다음은 Regshot 프로그램으로 악성 코드 실행 전과 후의 레지스트리 변화를 샬펴보자.

 




그림 13

 

사용 방법은 악성 코드를 실행 하기 전에 첫 번째샷(1st shot)를 누르고 실행 후에 두 번째 샷(2nd shot)를 누른다. 그러면 어떤 레지스트리가 변화했는지 나타난다. 확인해보면 Lab01_04.exe는 중요한 레지스트리를 변경하지 않는다 (그림 생략).

 

다음은 와이어샤크를 이용하여 패킷 분석을 하자



 

그림 14 http.request.uri contains ".exe"

 

그림4에서 "http://www.practicalmalwareanalysis.com/updater.exe" 문자열을 발견했었다. 그래서 그림14와 같이 필터링을 적용하면 uri에 ".exe" 문자열이 포함된 패킷만 나타난다. 4번, 11번 패킷은 www practicalmalwareanalysis.com 사이트에. updater.exe을 GET 요청한다. 즉 고급 동적 분석 시에 updater.exe를 잘 살펴봐야 한다.

 



고급 정적 분석

 

고급 정적 분석할 때 아이다 프로(IDA Pro)를 잘 사용한다. IDA는 어셈블리어를 c언어로 바꿔주는 디컴파일러 기능을 제공하기 때문이다.

 



그림 15 lab01_04.exe의 main

 

그림15는 IDA로 살펴본 Lab01_04.exe의 메인 함수의 일부분이다. 먼저 sub_401174 내부(1번)를 살펴보자.

 



그림 16 sub_401174 내부

 

sub_401174 함수에서 SeDebugPrivilege, sfc_os.dll, CreateRemoteThread를 주목하자 (그림16 참조). 먼저 SeDebugPrivilege 권한으로 변경하고 sfc_os.dll의 두 번째 함수 주소(Ordinal 2)를 lpStartAddress 변수에 저장한다. 다음은 CreateRemoteThread를 호출하여 특정 프로세스에 sfc_os.dll의 두 번째 함수를 실행시킨다. 해당 부분은 고급 동적 분석을 할 때 자세히 살펴보겠다.

 

다시 그림15를 보면 "\\system32\\wupdmgr.exe" 문자열(2번)은 그림3에서 살펴봤다. MoveFileA를 이용하여 Wupdmgr.exe을 어디론가 이동하고 sub_4011FC 함수(3번)를 호출한다. 해당 함수의 내부를 살펴보자.

 



그림 17 sub_4011FC 내부

 

Sub_4011FC 함수는 wupdmgr.exe 이름을 가진 파일을 생성한다. 그리고 리소스 섹션의 BIN 파일을 불러와서 wupdmgr.exe에 저장하고 실행한다. 즉 리소스 섹션에 있는 악성 파일을 wupdmgr.exe로 복사하는 것이다. Lab01_04.exe에서 sub_4011FC 함수가 핵심부분이므로 고급 동적 분석 시에 자세하게 살펴보자.

 

 

고급 동적 분석

 

올리 디버거로 그림16과 그림17에서 살펴본 부분을 분석하자.

 



그림 18 PID가 25C에 접근

 

그림16에서 sfc_os.dll의 두 번째 함수를 특정한 프로세스에 실행시킨다고 살펴봤다. 그 특정한 프로세스는 어떤 것일까? 바로 PID가 25C인 프로세스이다 (그림18 참조).

 



그림 19 winlogon.exe

 

Procexp 프로그램으로 PID가 25C(십진수 : 604)인 프로세스는 winlogon.exe이다 (그림19 참조). 그러면 왜 sfc_os.dll의 두 번째 함수를 winlogon.exe에 원격으로 실행하는 것일까? 먼저 WFP(Windows File Protection)의 개념을 알아야 한다.

 

WFP은 프로그램에 의해 중요한 윈도우 시스템 파일이 변경되지 않도록 하기 위한 기능이다. 두 개의 DLL(%system%sfc.dll, %system%sfc_os.dll로 구현된 WFP는 주요 폴더에 대하여 ReadDirectoryChangesW 함수를 사용하여 변경 여부를 검사한다. 예를 들어 사용자 혹은 바이러스가 시스템 폴더의 calc.exe를 삭제한다고 하자. 시스템에서는 이 변경을 감지해서, 손상된 파일은 WFP 캐쉬폴더(c:\WINDOWS\system32\DLLCACHE)에서 복원을 시도한다. 일반적으로 WFP를 해제하기 위해 자기 자신의 프로세스 토큰의 특권을 SeDebugPrivilege로 설정한다. 그리고 CreateRemoteThread 함수를 이용하여 winlogon.exe에 sfc_os.dll의 두 번째 함수 인SfcTerminatewatcherThread를 원격으로 실행하여 SFC Watcher Thread를 강제 종료시킨다. 그 이후로 재부팅 전까지 시스템파일에 대한 액세스 권한을 가지게 된다. (sfc_os.dll의 첫 번쨰 함수 SfcInitProt는 SFC Watcher Thread를 생성한다)

 

이렇게 WFC Watcher Thread를 강제 종료시켜 시스템 폴더(%system32)에 있는 파일들을 변경시키기 위해 sfc_os.dll의 두 번째 함수를 winlogon.exe에 원격으로 실행시키는 것이다. 다음은 그림17에서 살펴본 부분을 동적으로 분석한다.

 



그림 20 c:\\windows\\system32\\wupdmgr.exe 실행

 

그림17에서 리소스 섹션의 BIN 파일을 wupdmgr.exe 파일에 저장하고 실행한다고 했다. 그림20에서 wupdmgr.exe을 실행하면 어떻게 되는지 살펴보자.

 



그림 21 www.update.microsoft.com 오픈

 



그림 22 백신의 실시간 접근 차단

 

wupdmgr.exe를 실행하면 www.update.microsoft.com 사이트가 열리고 www.pricaticalmalwareanalysis.com 사이트에서 악성 파일인 updater.exe을 받아온다 (그림21, 그림22 참조). Updater.exe는 악성 파일이기 때문에 백신의 실시간 감지에 의해서 차단된다.

 

지금까지 Lab01_04.exe 의 악성 코드 분석은 마쳤다. Lab01_04.exe는 wupdmgr.exe를 배달하는 드로퍼이기 때문에 wupdmgr.exe를 다시 분석해야 한다. 지금까지 해온 방식으로 wupdmgr.exe을 분석하길 바란다 (매우 쉬우므로 혼자서도 가능하다).