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파일이 생성된 것도 확인할 수 있다
'악성코드 분석' 카테고리의 다른 글
Windows Message Hooking ( 키보드입력 후킹 실습 ) (0) | 2018.05.10 |
---|---|
Windows Message Hooking ( KeyLogger 실습 ) (0) | 2018.05.10 |
악성코드 분석 실습 ( Lab07_02 ) [ COM Object ] (0) | 2018.05.03 |
악성코드 고급 정적 분석 ( Lab07_01 ) [ DOS Attack ] (0) | 2018.05.02 |
악성코드 기초 동적분석 ( Lab07_01 / SysAnalyzer ) (0) | 2018.05.02 |