악성코드 분석

LAB1-2 (악성코드분석)

JNU 2023. 1. 12. 21:34
반응형

이번 챕터부터 실제 악성코드 실행파일을 직접 정적분석해 보고
정적분석과 동시에 난독화를 수동으로 푸는 unpacking을 진행해 보도록 할게
LAB1-2 exe 파일은 악성코드 파일이고 악성코드 파일을 하나씩 풀어보면서 분석해 보자
 
 
 
 
 
먼저 peid와 peview를 통한 pe 분석을 진행해 볼게
 

virtual size와 size of raw data와의 크기 차이가 꽤 많이 차이나네...???

 
 
pe view 분석을 통해서 난독화가 되어 있음을 알 수 있지?
+upx0를 보면 virtual size는 data 할당이 되었으나 size of raw data는 0으로 아무것도 없음을 볼 수 있다. 
가상 영역의 공간만 할당되었음..!!
upx로 난독화되어 anti-reversing 기법이 들어가 있음을 볼 수 있었다..!!
 
 
peid 분석도 같이 해볼까??

 
peid 분석을 해보니 upx로 packing 되어 난독화가 되어있네...!!
자 그렇다면 upx로 packing 된 것을 확인했으니 이제 upx를 unpacking 하는 작업을 해봐야겠지?
여기서 해볼 것은 수동 unpacking을 해보도록 할게
Ollydbg를 실행시켜서 분석해 보자
 
 

 
virtual size와 size of raw data 차이 큼  + pushad / pophad
여기서 오른쪽에 register에 적힌 주소들을 보면 ESP를 한 번 보도록 하자
ESP는 stack이 쌓이고 나중에 함수가 return 될 때 돌아가는 주소를 담고 있어
 

 

해당 주소(12FFA4)로 Follow in dump를 수행하고 하단에 보면 주소별로 
주소별 data를 담고 있는 것을 볼 수 있는 이제 여기에 breakpoint를 걸어볼 거야
여기서 hw, on access -> byte를 클릭하여 byte 별로 hw에 접근하도록 해볼게
그리고 f9를 누르면 다음과 같이 넘어간다..!
 

breakpoint를 잡아주고....

 
 

f9을 누르면 다음과 같이 넘어가고 실행 코드로 넘어가도록 jmp 명령을 실행

 
 
해당 주소로 jmp로 수정해 주고 jmp를 통해 f8로 넘어가면..!

바로 55 8B --> exe 파일의 시작지점으로 넘어가게 된다!! 
이제 이 지점을 프로그램 시작 지점으로 잡아주자!
 

 
 
ollydump -> dump debugged process 실행
rebuild import는 해제..!
실행하면 modify 1190을 잘 봐두자..!!
그리고 dump 실행!
 

 
lab1-2-1로 새로운 실행파일 저장하고..!
importREC를 실행해서 초기 파일을 아까 dump 한 파일과 같이 dump 시켜서
수동으로 unpacking을 실시한다.
 

 
 
 

 
oep(Origin Entry Point)를 5410 --> 1190으로 
 
** (OEP) =  프로그램을 실행시켰을 때 프로그램이 시작되는 point, 즉 프로그램의 시작점을 잡아주는 부분이야

autosearch를 누르면 다음과 같이 나오고
get imports를 실행해서 imports를 가져와서... fix dump로 마무리!
dump를 실행한 02-1 파일을 선택 후 finish 그러면 다음과 같이 02-1_ 파일이 하나 생긴다
이것이 바로 수동 unpacking..!!
 

수동 unpacing되고 Lab01-02_1_ 이 만들어진 것을 볼 수 있지...?

 
이제 이걸로 다시 pe 분석을 해볼게
 
- peid 분석 --> kernel32.dll을 보니 아까랑 달리 더 많은 함수(api)들이 나온 것을 볼 수 있지?
 
- peview 분석 --> virtual size와 size of raw data 간의 차이가 전혀 없음을 볼 수 있지?
 

peid에서 kernel32.dll에 대한 API 분석

 

PEview에서 size of raw data와 virtual size 간의 크기가 차이 안나는 것을 볼 수 있지?

 
이제 PEid에서 dll을 통해서 어떤 API들이 들어있는지 하나하나씩 확인해 보면
악성코드로 의심되는 부분들이 보이는데...!!
 
CreateService
InternetOpen
InternetOpenURL
 
 
advapi32.dll에서 createservice api를 통해서 서비스를 생성하고
wininet.dll에서 internet을 통해 URL 접속을 하게 되는 형식이야
그렇다면 특정 URL이 string 내에 남겨져 있을 수 있고 해당 URL로 해당 악성코드 파일이 유도한다는 것도 알 수 있지
 

 
 

 
 
string 분석을 통해서 좀 더 상세하게 분석해 보자
해당 exe 파일에 어떤 string들이 있는지 분석..!!
 

 
http://www.malwareanalysisbook.com  --> 이 주소를 통해서 malservice 작업을 하고 있네..?
HOST 인터넷 기반에서 이와 같이 API가 진행되었음을 볼 수 있다..!
 
 

 
 
KERNEL32.DLL
ADVAPI32.dll
WININET.dll
LoadLibraryA
GetProcAddress
CreateServiceA
exit
InternetOpenA

 
여기서 가장 중요한 부분은 바로 위에 쓴 DLL과 API라고 볼 수 있어
kernel32.dll을 통해서 해당 DLL의 API 함수를 사용하여 라이브러리를 가져와서 process를 등록하고 
이후, 서비스를 실행시킨 후 wininet dll의 API 함수인 internetopena를 실행시켜 malware 사이트 접속을 하도록 
코드가 짜여있음을 알 수 있지
 
현재 우리가 배운 정적분석으로는 여기까지 분석이 가능해......! 
좀 더 세부적으로 분석하기 위해서는 동적분석을 배워야 되는데 이제 다음 시간부터 동적분석에 대해 알아보도록 할게
 
오늘은 여기까지~
 



 

 
 

반응형