악성코드 분석 실습 ( Lab07_03 ) [ DLL 변조]

2018. 5. 3. 19:41악성코드 분석




[ 기초 정적분석 ] 

Lab07-03.exe

패킹의 흔적은 없고, KERNERL32.dll 과 MSVCRT.dll을 import한다


File과 관련된 메서드들을 사용하고 있다


의심스러운 문자열로는 " kerne132.dll " , " Lab07-03.dll " , " C:\* " 이 확인된다


Lab07-03.dll

KERNEL32.dll 과 WS2_32.dll을 임포트하고 있다

WS2_32.dll : 소켓통신과 관련된 dll



[ 기초 동적분석 ]

Lab07-03.exe를 실행시키고 변경되어지는 시스템들을 확인해보자

API에서 특별히 이상한 낌새를 보이는 부분은 보이지 않는다

디렉터리에 접근하는 부분도 특별히 이상은 없었다




[ 고급 정적분석 ]

Lab07-03.dll 분석

OpenMutexA & CreateMutexA()

"SADFHUUF" MutexObject 를 사용하여 중복실행을 방지한다


socket( AF_INET, SOCK_STREAM, IPPROTO_TCP) 

소켓 생성

inet_addr("127.26.152.13")

통신할 아이피 주소 설정

htons(80)

통신할 포트 오픈

connect( socketObject, name, namelen )

소켓객체를 통해서 통신을 실행


send( socketObject, buf, len, flags )

데이터 전송

shutdown( socketObject, 1 )

send종료

recv( socketObject, buf, len, flags )

데이터 수신 대기

 

악성파일은 recv()함수를 통해서 전달받은 데이터를 strncmp함수를 통해서 문자열 검사를 실시한다

처음 5글자가 " sleep " 인지 처음 4글자가 "exec" 인지 검사해서 루틴이 나뉘어진다

" sleep " 인 경우 프로세스는 Sleep(60000h) 함수를 실행한다


수신받은 문자열의 처음 4글자가 " exec " 인 경우는 CreateProcessA() 함수가 실행한다


=> Lab07-03.dll은 공격자가 포트80에서 응답패킹을 전송해 시스템에서 실행파일을 시작하게 하는 백도어 기능을 구현 !


Lab07-03.exe 분석

처음에는 악성파일 실행 시 인자값을 제대로 입력해야 파일이 실제 감염을 실행합니다

그래서 이전 동적분석 시 아무런 감염 상태를 확인할 수 없었습니다

인자값 검사 루틴을 통과하면 감염을 진행합니다


CreateFileA ( Kernel32.dll )

Create or open a file or I/O device

RETURN VALUE : Handle used to access file or device

CreateFileMappingA

Creates or opens a named or unnamed file mapping object for a specified file

RETURN VALUE : Handle to newly created file mapping object

MapViewOfFile

Maps a view of a file mapping into the address space of a calling process

CreateFileA ( Lab07-03.dll )

Kernel32.dll content => Lab07.03.dll


CreateFileMappingA & MapViewOfFile => Lab07-03.dll Mapping 정보를 가져온 다음,


CopyFileA( ExistingFileName, NewFileName )

ExistingFile => NewFile 복사

Lab07-03.dll파일을 kerne132.dll 파일로 위장한다

그리고 "C:\\*" 를 인자로 하여 함수 sub_4011E0이 실행된다


Stack offset aC


해석하기 어려운 여러 코드가 진행되다가 아래 코드를 발견했다

( 제일 먼저 FindFirstFileA함수를 통해서 시스템의 파일을검색하고, 이후에는 FindNextFileA사용 )


stricmp( pointer, ".exe" )

문자열을 비교하다가 ".exe" 문자열을 찾으면 sub_4010A0 함수를 실행한다


.exe실행파일을 찾고 해당 실행파일을 첫번째 인자로 사용하는 함수 - sub_4010A0


CreateFileA & CreateFileMappingA & MapViewOfFile

exe실행파일의 Mapping정보를 가져온다


그 이후 다시 stricmp함수가 실행되었고 " kernel32.dll " 문자열을 검색한다

이후에 " kerne132.dll " 문자열과 rep movsd, rep movsb함수가 확인되지만 확실한 정보는 알 기 어려웠다

동적분석을 통해서 kernel32.dll => kerne132.dll 로 변경되어짐을 확인할 수 있었다

해당 변조가 수행되고, 시스템의 모든 파일을 감염시키기 위해서 FineNextFileA()함수를 통해서 반복실행한다


FindFirstFileA( ipFileName, IpFineFileData << A pointer to the WIN32_FIND_DATA structure)

If the function succeeds, the return value is a search handle used in a subsequent call to FindNextFile or FindClose

FindNextFile ( hFindFile, IpFindFileData )

If the function succeeds, the return value is nonzero and the lpFindFileData parameter contains information about the file or directory found.


시스템의 모든 실행파일의 kernel32.dll을 kerne132.dll로 변조시킨 다음 프로그램을 종료된다


=> 시스템의 모든 exe실행파일이 kernel32.dll 대신 kerne132.dll 을 임포트하도록 감염한다



[ ProcMonitor 동적 분석 ] 

[1] 인자값을 넣어주고 Lab07-03.exe파일을 실행한다


[2] ProcMonitor를 통해서 프로세스들의 변화를 확인했다

CreateFile ( kernel32.dll ) & CreateFile( Lab07-03.dll ) : 해당 파일들을 오픈

ReadFile( kernel32.dll ) * 5 : kernel32.dll파일에 대한 정보를 가져온다

CreateFile( kerne132.dll )

WriteFile( kerne132.dll ) : kerne132.dll파일에 해당 정보들을 복사한다


CreateFile( C:\* ) 시스템내의 모든 파일들을 검사하고 exe실행파일을 찾고 있는 과정이다



악성코드 실행결과 exe파일 PEView확인 결과, kernel32.dll이 아닌 kerne132.dll로 변조되어 있다

IDA에서 해석못한 kernel32.dll , kerne132.dll 문자열을 사용한 결과로 보인다


또한, Lab07-03.dll 악성파일은 KERNEL32.dll을 임포트하고 있고, 해당 내용을 그대로 export하고 있다

즉, kerne132.dll이라는 이름으로 exe실행파일들에게 필요함수들을 export해주고 특정 악성행위를 몰래 실행한다


CopyFile( Lab07-03.dll , kerne132.dll )함수의 실행결과로 C:\windows\system32\ 경로에 kerne132.dll파일이 생성된 것도 확인할 수 있다



=> IDA를 통해서 분석했던 것처럼 시스템의 모든 exe실행파일의 kernel32.dll 임포트 부분을 변조하여 kerne132.dll을 임포트하도록 감염시켰다