실습 1-1)
1. http://www.VirusTotal.com/에 파일을 업로드한후 보고서를 보자. 기존 안티바이러스 시그니처에 일치하는 파일이 존재하는가?
- 이 글을 작성한 시점에서는 이미 여러 안티바이러스에 악성파일로 인식되었다.
2. 이 파일은 언제 컴파일됐는가?
- 2010. 12. 19에 컴파일된 것으로 보인다.
3. 이 파일이 패킹되거나 난독화된 징후가 있는가? 그렇다면 무엇으로 판단했는가?
- Exeinfo PE로 분석한 결과 패킹이 되어있지 않아 보인다.
4. 임포트를 보고 악성코드 행위를 알아낼 수 있는가? 그렇다면 어떤 임포트인가?
- 자세한 것은 동적분석도 해야 알겠지만, 정적분석만으로 보았을 때 01.exe 파일에서는 CopyFileA가 그나마 악성코드 행위와 관련 있어 보인다. 5번 질문에서 답할 내용이지만, kernel132.dll을 만들 때 사용할 것으로 보인다.
01.dll 파일에서는 ws2_32.dll의 import 함수들이 악성코드 행위와 관련되어 보인다. ws2_32.dll은 "윈도우 소켓"과 관련된 라이브러리로, 네트워크 통신에 사용된다. 6번 질문의 답인 특정 IP 주소와 통신을 할 때 해당 라이브러리의 함수를 사용할 것으로 보인다.
(ws2_32.dll 에서 사용된 함수들)
3 closesocket
4 connect
9 htons
11 inet_addr
16 recv
19 send
22 shutdown
23 socket
115 WSAstartup
116 WSAcleanup
+) WS2_32.dll 함수들 참고
5. 감염된 시스템에서 검색할 수 있는 다른 파일이나 호스트 기반이 증거가 존재하는가?
- 정상파일인 kernel32.dll과 이름이 유사한 kerne132.dll 파일을 만들어내는 것으로 보인다.
6. 감염된 장비에서 이 악성코드를 발견하기 위해 사용한 네트워크 기반의 증거는 무엇인가?
- dll 파일에서 통신대상으로 보이는 IP(127.26.152.13) 주소를 확인할 수 있었다.
7. 이 파일의 목적은 무엇이라고 판단했는가?
- exe 파일은 dll 파일을 생성하고 실행하기 위한 목적으로 보인다. 본격적인 악성행위는 dll 파일에서 실행되는 것으로 보이며, dll 파일은 특정 서버와 통신하기 위한 목적으로 보인다.
실습 1-2)
1. http://www.VirusTotal.com/에 파일을 업로드하자. 기존 안티바이러스 시그니처에 일치하는 파일이 존재하는가?
- 이 글을 작성한 시점에서는 이미 여러 안티바이러스에 악성파일로 인식되었다.
2. 이 파일이 패킹되거나 난독화된 징후가 있는가? 그렇다면 무엇으로 판단했는가? 파일이 패킹돼 있다면 언패킹 해보자.
- Exeinfo PE를 이용해 분석한 결과 upx로 패킹된 것을 알 수 있었다.
PEview로 분석한 결과 패킹되어 있을 때는 "UPX"로 표시되었던 section 이름이, 언패킹 후에는 "text", "rdata", "data"의 정상적인 PE 파일 섹션의 이름으로 변경된 것을 볼 수 있었다.
3. 임포트를 보고 악성코드의 기능을 알아낼 수 있는가? 그렇다면 어떤 임포트를 보고 알 수 있었는가?
- 위의 사진에서 고른 함수들이 악성행위에 사용될 법한 함수들로 보인다.
함수 분류 | ||
기능별 | 함수 이름 | 함수 설명 |
서비스 | CreateServiceA | 서비스 개체를 만들고 지정된 서비스 제어 관리자 데이터베이스에 추가합니다. |
StartServiceCtrlDispatcherA | SCM(서비스 제어 관리자)에 연결하고 컨트롤 디스패처 스레드를 시작합니다. | |
OpenSCManagerA | 이 함수는 지정한 컴퓨터의 SCM과 연결하며 해당 컴퓨터의 서비스 DB에 연결한다. | |
뮤텍스(다중 실행 방지용) | OpenMutexA | 기존의 이름 뮤텍스 오브젝트를 오픈하고, 그 핸들을 취득합니다. |
CreateMutexA | 이미 있거나 만들어지지 않은 뮤텍스 개체를 만들거나 엽니다. | |
스레드 생성 | CreateThread | 호출 프로세스의 가상 주소 공간 내에서 실행할 스레드를 만듭니다. |
인터넷 연결 | InternetOpenUrlA | 전체 FTP 또는 HTTP URL로 지정된 리소스를 엽니다. |
InternetOpenA | 애플리케이션의 WinINet 함수 사용을 초기화합니다. |
4번에서 서술한 증거들을 토대로 보았을 때 일종의 악성행위를 하는 서비스(MalService)를 등록 및 실행하고, 특정 주소(http://www.malwareanalysisbook.com)에 연결하는 프로그램으로 보인다.
정확한 악성행위의 흐름은 동적분석을 해야 파악될 것으로 보인다.
4. 감염된 시스템에서 악성코드를 인식하는 데 어떤 호스트 기반이나 네트워크 기반의 증거를 사용했는가?
호스트 기반의 증거로는 서비스 이름으로 보이는 "MalService"와 위의 정보만으로는 뭔지 모르겠지만 특정 값으로 보이는 "HGL345"가 있다. 네트워크 기반의 증거로는 "http://www.malwareanalysisbook.com" 이라는 url 주소가 있다.
실습 1-3)
1. http://www.VirusTotal.com/에 파일을 업로드하자. 기존 안티바이러스 시그니처에 일치하는 파일이 존재하는가?
- 이 글을 작성한 시점에서는 이미 여러 안티바이러스에 악성파일로 인식되었다.
2. 이 파일이 패킹되거나 난독화된 징후가 있는가? 그렇다면 무엇으로 판단했는가? 파일이 패킹돼 있고 가능하다면 언패킹해보자.
- Exeinfo PE를 통해 확인한 결과, 알 수 없는 파일이지만 100% 패킹이 되었다는 문구를 볼 수 있었다. 해당 파일은 수동 언패킹을 해야 할 것으로 보인다.
필자는 x32dbg을 통해 언패킹을 하고 플러그인인 Scylla를 이용해 덤프 파일을 만들었다. 언패킹 한 파일은 3번 질문에서 이어서 분석한다.
3. 임포트를 보고 악성코드의 기능을 알아낼 수 있는가? 그렇다면 어떤 임포트를 보고 알 수 있었는가?
- 솔직하게 필자는 이 함수들로는 어떤 악성행위를 할 수 있는지 감이 잡히지 않는다. 다른 챕터들을 진행하다 보면 알게 되지 않을까 싶어 지금은 넘어가려 한다.
4. 감염된 시스템에서 악성코드를 인식하는 데 어떤 호스트 기반이나 네트워크 기반의 증거를 사용했는가?
strings를 확인해 본 결과 의도는 모르겠지만 악성 주소로 보이는 "http://www.malwareanalysisbook.com/ad.html"을 볼 수 있었다.
실습 1-4)
1. http://www.VirusTotal.com/에 파일을 업로드하자. 기존 안티바이러스 시그니처에 일치하는 파일이 존재하는가?
- 이 글을 작성한 시점에서는 이미 여러 안티바이러스에 악성파일로 인식되었다.
2. 이 파일이 패킹되거나 난독화된 징후가 있는가? 그렇다면 무엇으로 판단했는가? 파일이 패킹돼 있고 가능하다면 언패킹해보자.
- ExeinfoPE를 이용해 확인한 결과 패킹이 되어있지 않는 것으로 보인다.
3. 이 프로그램은 언제 컴파일됐는가?
- Time Data Stamp를 보아 2019. 08. 30에 컴파일된 것으로 보인다.
4. 임포트를 보고 악성코드의 기능을 알아낼 수 있는가? 그렇다면 어떤 임포트를 보고 알 수 있었는가?
- 악성행위와 관련되어 보이는 임포트 함수들을 정리하면 다음과 같다.
함수 분류 | ||
기능별 | 함수 이름 | 함수 설명 |
권한 취득 및 상승 | OpenProcessToken | 프로세스와 연결된 액세스 토큰을 엽니다. |
LookupPrivilegeValueA | 지정된 권한 이름을 로컬로 나타내기 위해 지정된 시스템에서 사용되는 LUID(로컬 고유 식별자)를 검색합니다. | |
AdjustTokenPrivileges | 지정된 액세스 토큰 의 권한을 활성화하거나 비활성화합니다. | |
함수 및 스레드 실행 | GetProcAddress | 지정된 DLL(동적 연결 라이브러리)에서 내보낸 함수(프로시저라고도 함) 또는 변수의 주소를 검색합니다. |
LoadLibraryA | 지정된 모듈을 호출 프로세스의 주소 공간에 로드합니다. 지정된 모듈로 인해 다른 모듈이 로드될 수 있습니다. | |
GetCurrentProcess | 현재 프로세스에 대한 의사 핸들을 검색합니다. | |
CreateRemoteThread | 다른 프로세스의 가상 주소 공간에서 실행되는 스레드를 만듭니다. | |
프로그램 실행 | WinExec | 지정된 응용 프로그램을 실행합니다. |
경로 탐색 | GetWindowsDirectoryA | Windows 디렉터리의 경로를 검색합니다. |
GetTempPathA | 임시 파일에 대해 지정된 디렉터리의 경로를 검색합니다. | |
파일 생성 및 수정 | WriteFile | 지정된 파일 또는 I/O(입/출력) 디바이스에 데이터를 씁니다. |
CreateFileA | 파일 또는 I/O 디바이스를 만들거나 엽니다. | |
MoveFileA | 자식을 포함하여 기존 파일 또는 디렉터리를 이동합니다. | |
리소스 추출 | SizeofResource | 지정된 리소스의 크기(바이트)를 검색합니다. |
FindResourceA | 지정된 모듈에서 지정된 유형 및 이름을 가진 리소스의 위치를 결정합니다. | |
LoadResource | 메모리에서 지정된 리소스의 첫 번째 바이트에 대한 포인터를 가져오는 데 사용할 수 있는 핸들을 검색합니다. |
함수들의 기능으로 보았을 때, 위 프로그램은 기본적으로 권한을 상승시켜서 행위를 하는 것으로 보인다. (악성파일로 추정되는) 리소스 파일을 추출하여 새로운 파일을 만들고, 특정 경로로 이동시켜서 실행할 것으로 보인다.
5. 감염된 시스템에서 악성코드를 인식하는 데 어떤 호스트 기반이나 네트워크 기반의 증거를 사용했는가?
- 6번의 질문과 연관된 내용이라 해당 질문에서 답하였다.
6. 이 파일은 리소스 섹션에 하나의 리소스가 있다. Resource Hacker를 이용해 리소스를 점검하고 리소스를 추출해보자. 리소스로부터 무엇을 알 수 있는가?
- Resource Hacker를 통해 보니, 리소스로 PE파일이 들어가 있는 것을 알 수 있었다. 해당 파일을 따로 추출해서 분석했다.
- 리소스 파일의 import 함수와 strings를 보니, 리소스 파일은 "http://www.practicalmalwareanalysis.com/updater.exe"라는 주소(네트워크 기반의 증거)의 파일을 URLDownloadToFileA 함수를 이용해 접근해서 다운로드하고 이를 실행하는 악성파일로 보인다.
- 또한 strings에서 볼 수 있는 "winup.exe", "wupdmgrd.exe"는 그럴싸한 실행파일로 보이지만 인터넷에 검색해 본 결과 실제로 사용되는 파일로 보이지 않는다. 해당 파일들(호스트 기반의 증거)은 이름을 위장한 악성코드 파일로 보이며, 이 리소스 파일은 해당 파일들을 생성 및 실행할 것으로 보인다.
'악성코드 분석 > Practical Malware Analysis 실습' 카테고리의 다른 글
[Practical Malware Analysis] Lab 07-03 (0) | 2023.05.21 |
---|---|
[Practical Malware Analysis] Lab 07-01, 02 (0) | 2023.05.14 |
[Practical Malware Analysis] Lab 06 (0) | 2023.05.08 |
[Practical Malware Analysis] Lab 05 (0) | 2023.05.06 |
[Practical Malware Analysis] Lab 03 (0) | 2023.05.06 |