1. 분석 환경
1.1. 분석 환경
l Windows 10 l Windows XP (vmware) |
1.2. 분석 도구
정적 분석 | l Virustotal l PEID l Dependency Walker l PeView l BinText l ResourceHacker l IDA l OllyDbg |
동적 분석 | l Sysanalyzer l wireshark |
1.3. 분석 샘플
Practical Malware Analysis Labs - Lab01-04.exe |
1.4. 질문
- 파일을 http://www.VirusTotal.com/에 업로드하고 보고서를 확인하십시오. 기존의 안티바이러스 시그니처와 매치되는 파일이 있나요?
- 이 파일이 패킹되었거나 난독화된 흔적이 있는지 확인하십시오. 그렇다면, 어떤 특징이 있는지 알려주세요. 파일이 패킹되었다면 가능하다면 언패킹 하십시오.
- 이 파일들이 언제 컴파일 되었는지 알 수 있습니까?
- 어떤 import가 이 악성코드의 기능을 나타내는지 확인할 수 있습니까? 그렇다면, 어떤 import 인가요?
- 감염된 시스템에서 찾을 수 있는 다른 호스트 또는 네트워크 기반의 특징은 무엇인가요?
- 이 파일에는 리소스 섹션에 하나의 리소스가 있습니다. 리소스 해커를 사용하여 해당 리소스를 조사하고, 그런 다음 리소스를 추출하세요. 리소스에서 어떤 정보를 얻을 수 있나요?
2. 분석 과정
2.1. 파일을 http://www.VirusTotal.com/에 업로드하고 보고서를 확인하십시오. 기존의 안티바이러스 시그니처와 매치되는 파일이 있나요?
Virustotal에 lab01-04.exe를 업로드한 결과로 72개 엔진에서 63개 엔진이 악성코드라 진단했다.
2.2. 이 파일이 패킹 되었거나 난독화 된 흔적이 있는지 확인하십시오. 그렇다면, 어떤 특징이 있는지 알려주세요. 파일이 패킹 되었다면 가능하다면 언패킹 하십시오.
Lab01-04.exe는 패킹되지 않았다.
2.3. 이 파일들이 언제 컴파일 되었는지 알 수 있습니까?
2019/08/30 22:26:59 에 컴파일 되었다.
2.4. 어떤 import가 이 악성코드의 기능을 나타내는지 확인할 수 있습니까? 그렇다면, 어떤 import 인가요?
Dependency Walker로 확인한다.
CreateFileA : 파일을 생성하거나 열 때 사용된다.
MoveFileA : 파일을 이동시키거나 이름을 바꿀 때 사용된다.
WriteFile : 파일에 데이터를 쓰기 위해 사용된다
GetTempPathA : 디렉토리의 경로를 얻을 때 사용된다.
GetWindowsDirectoryA : windows 디렉토리의 경로를 얻기위해 사용된다.
FindResourceA : 실행파일 또는 dll에서 리소스를 찾을 때 사용된다.
SizeofResource : 리소스의 크기를 얻을 떄 사용된다.
OpenProcess : 시스템에서 현재 실행중인 프로세스에 대한 핸들을 여는데 사용된다. 연 프로세스의 메모리를 읽고 쓰거나 코드를 주입한다.
CreateRemoteThread : 원격 프로세스에서 새로운 스레드를 생성할 때 사용되는 함수이다. 주로 코드 주입이나 원격 코드 실행과 같은 특정 작업을 수행할 때 사용된다.
GetCurrentProcess : 현재 실행 중인 프로세스에 대한 핸들을 얻을 때 사용되는 함수이다.
GetModuleHandleA : 현재 프로세스나 다른 프로세스의 모듈 핸들을 얻을 때 사용되는 함수이다.
GetProcAddress : 지정된 DLL에서 내보낸 함수의 주소를 반환한다. 해당 함수를 호출할 때 사용된다.
WinExec : 외부 프로그램을 실행할 때 사용된다.
AdjustTokenPrivileges : 특정 접근 권한을 활성화하거나 비활성화하는 데 사용된다.
LookupPrivilegeValueA : 특정 특권(Privilege)의 LUID(Local Unique Identifier) 값을 검색하는 데 사용된다.
OpenProcessToken : 특정 프로세스에 대한 접근 토큰을 열기 위해 사용된다.
2.5. 이 악성코드를 감염된 기기에서 찾기 위해 사용할 수 있는 호스트 또는 네트워크 기반 표시가 무엇인가요?
DependencyWalker 로 확인했을 때 없었던 URLDownloadToFileA 함수가 있었다.
이 함수는 인터넷에서 파일을 다운로드하여 로컬에 저장하는 데 사용된다.
Winlogon.exe는 windows 사용
자 로그인과 로그온 프로세스를 관리하는데 사용된다.
\system32\wupdmgr.exe : windows 업데이트 관리자 실행파일이다.
Winup.exe : windows 업데이트 실행파일이다.
Wupdmgrd.exe : 위에서 보았던 wupdmgr.exe와 철자 하나가 다르다. 해당파일은 악성코드를 위장하는데 사용될 것으로 추측한다.
http://www.practicalmalwareanalsys.com/updater.exe 해당주소로 방문해 updater.exe를 실행할 것이라 추측한다.
2.6. 이 파일에는 리소스 섹션에 하나의 리소스가 있습니다. 리소스 해커를 사용하여 해당 리소스를 조사하고, 그런 다음 리소스를 추출하세요. 리소스에서 어떤 정보를 얻을 수 있나요?
BIN101이라는 리소스 파일이 하나 발견되었다. MZ, This is program cannot be run in DOS mode 라는 문자열로 보아 실행파일로 추측된다. 이를 추출하여 PEview로 확인 해 본다.
BinText로 확인했던 URLDownloadToFileA를 확인 할 수 있었다.
3. 실행해보기
3.1. Sysanalyzer로 Lab01-04.exe 실행
ProcWatch.log에서 wupdmgr.exe, winup.exe 인터넷 익스플로러가 실행된 것을 볼 수 있다.
그러나 Bintext로 확인한 문자열 중 wupdmgrd.exe는 보이지 않았다.
Api Log를 보면 순서대로 winlogon.exe에 접근하고, C:\Windows\system32\wupdmgr.exe을 생성했으며, wupdmgr.exe 와 winup.exe를 실행하였다.
그러나, http://www.practicalmalwareanalsys.com/updater.exe 에서 파일을 다운받아 오는 것은 실패하였다. 그러므로 wupdmgrd.exe가 로그에 남지 않았던 것이다.
Directory Watch Data
Wupdmgr.exe가 삭제되고, Temp\winup.exe이 생성되며 수정된다.
그리고 4000size의 wupdmgr.exe가 새로 생성되는 것을 확인할 수 있다.
- 정리하면, winlogon.exe에 접근한 뒤, 기존에 있던 wupdmgr.exe를 삭제하고 winup.exe를 생성한다. 그리고 wupdmgr.exe를 새로 생성한 뒤 wupdmgr.exe, winup.exe를 실행시킨다.
3.2. Wireshark로 capture.log를 확인
각각 windowsupdate.microsoft.com, www.practicalmalwareanalysis.com에 DNS질의를 한다.
windowsupdate.microsoft.com과 연결된 쪽은 이곳저곳 리디렉션 되다 ‘서버를 찾을 수 없어’ tcp 세션이 종료된다.
www.practicalmalwareanalysis.com 쪽은 updater.exe 요청을 하나, 404 Not Found로 다운로드에 실패했다. 이쪽은 인터넷 익스플로러를 사용하지 않아 보이지 않는다.
3.3. 디렉토리 확인
Sysanalyzer 에서 본대로 winlogon에 접근 한 것과, winup.exe , wupmgr.exe가 생성된 것을 확인했다. *현재 windowsXP는 지원이 종료된 운영체제라 <만든 날짜>가 제대로 나오지 않을 수 있다.
주목할 점은 winup.exe의 수정날짜는 2008년 4월 14일로 바뀌지 않았다는 점이다. 기존에 있던파일을 이름만 변경한 것 일 수 있다.
4. IDA, Ollydbg로 확인하기
악성코드의 구조를 더 자세히 알기 위해 IDA로 Lab01-04.exe를 분석한다.
GetCurrentProcess – OpenProcessToken – LookupPrivileageValueA – AdjustTokenPrivileges 함수를 거쳐서 권한 획득을 한다.
그 후 sfc_os.dll ordinal 2 를 호출한다.
sfc_os.dll ordinal 2 이 무엇인지 PeView 에서 확인 해보았지만 export ordinal table의 내용이 일부 잘려있었다. Ida로 sfc_os.dll을 업로드 해 확인 해보았다. 이름이 보이지 않지만 더블클릭하게 되면....
Ordinal 2는 SfcTerminateWatcherThread임을 알 수 있다.
SfcTerminateWatcherThread 는 winodws file protection (WFP) 를 무력화 시키며
\windows\system32 의 파일에 접근 할 수 있도록 한다
이제 \system32\wupdmgr.exe의 이름을 winup.exe로 바꾸어 \temp로 moveFile 한다.
그후 sub_4011FC를 호출한다.
sub_4011FC는 BIN101 리소스를 불러와 \system32\wupdmgr.exe로 둔갑시킨다.
FindResourceA - LoadResource - CreatefileA - WriteFile
그러므로 Bin101 리소스의 크기와 악성코드가 생성한 \system32\wupdmgr.exe의 크기가 같다.
그 후 위장한 wupdmgr.exe(BIN101)를 WinExec로 실행한다.
올리디버거로 본 BIN101의 행위는 다음과 같다.
- \temp로 이동시켜 놓았던 winup.exe(본래 wupdmgr.exe)를 WinExec로 실행한다.
- http://www.practicalmalwareanalsys.com/updater.exe 주소를 방문하여
- updater.exe를 다운로드하여 \system32\wupdmgrd.exe로 저장한다.
- 그 후 wupdmgrd.exe를 WinExec로 실행시킨다.
5. 결론
Lab01-04.exe는 <드롭퍼> 이며, wupdmgr.exe(BIN101)을 system32 디렉토리에 ‘드롭’한다
- 권한 획득 후 WFP를 무력화
- Wupdmgr.exe의 이름을 winup.exe으로 변경시켜 temp 디렉터리로 이동
- BIN101 리소스를 추출해 wupdmgr.exe로 위장
- Wupdmgr.exe를 실행
wupmgr.exe(BIN101)는 <다운로더>이며 악성 사이트에 접속하여 updater.exe라는 악성코드를 다운로드해 실행시킨다.
- 정상적인 프로그램이 실행 중인 것처럼 위장하기 위해 winup.exe를 실행 시킴
- http://www.practicalmalwareanalsys.com/updater.exe 에 접속하여 악성코드를 다운로드하여 wupmgrd.exe로 위장함. 그리고 wupmgrd.exe를 실행
현재 http://www.practicalmalwareanalsys.com/updater.exe 사이트가 접속되지 않아 updater.exe의 상세 내용은 확인할 수 없었다.
갑자기 난이도가 확 올라간 느낌이었는데 sysanalyzer을 활용한 것이 많이 도움이 되었다.