정보보안 스터디 - 19주차 7일 - 모르는 악성 파일 분석
어제는 드롭퍼에 대해서 알아봤으니까 오늘은
실습으로 모르는 상태의 악성코드를 분석할 것입니다.
알고 있는 상태라면 어떤 악성코드인지 파악이 쉽지만
모르는 상태에서 분석을 시작한다면 난이도가 확 올라갑니다.
사실상 다운로더, 드롭퍼만 알면
다른 악성코드는 인터넷에 많이 알려진 악성코드로 충분히 악용가능 하기 때문에
유포시키기에 거의 다 알았다고 볼 수 있습니다.
주요 함수 구성과 이 함수들이 IDA, Ollydbg에서 어떤 식으로 작동하는 지 위주로 살펴보겠습니다.
☞ 분석 과정
기초 정적 분석
1. hashcal에서 해시값을 확인합니다.
2. exeinfo 패킹 여부를 확인합니다.
3. PEview로 NT_header > image_file_header > 제작날짜(변조가능)/imagebase/entry point, rdata > IAT(dll, api 확인), data > 문자열, rsrc 여부 등을 확인합니다.
또한 dependency walker로 API를 확인합니다. 여기서 함수이름이 안나오는 경우에는 밑에 부분과 맞춰서 확인합니다.
4. strings 문자열 확인 및 비교
5. virus total 검사하여 해시값, strings, 리소스, 함수 정보 및 디테일 확인합니다.
6. PEstudio로 종합적으로 검사합니다.
기초 동적 분석
일단 실행 전 스냅샷을 찍은 후
별거 안나올 때도 있지만 그냥 실행하는 것보다는 낫기 때문에 SysAnalysis 로 실행합니다.
logging to file,PID/PPID관계, reg monitor 등 확인합니다.
이 때 레지스터의 변형이 있다면 regshot으로 전/후를 스냅샷 찍어 비교합니다. (sysanalysis와 이중비교합니다.)
참고로 다운로더는 네트워크 기반이지만 드롭퍼는 아니기 때문에 wireshark 패킷 캡쳐파일이 안뜹니다.
고급 정적 분석
IDA에서 확인합니다.
제대로 된 분석은 여기서부터 시작이라 애매했던 부분을 깨달을 수 있습니다.
그래프 상에서 함수의 인자값은 어떤 값을 가지며, 어떻게 움직이는 지 파악ㅎ바니다.
고급 동적 분석
IDA에서 확인한 main함수 시작위치를 검색하여 하나씩 실행하면서
어디에서 프로세스가 실행되는지, 함수의 인자값과 함께 정확히 파악합니다.
☞ 분석 시작
Lab01-01.exe 부터 시작합니다.
exe파일 = 옛날 방식의 드롭퍼
findResourceW 현재 파일에서 리소스 영역을 찾습니다. |
SizeofResource 몇 바이트인지 크기를 계산합니다. |
LoadResource 주소값이 exe에 저장됩니다. |
+) lockresource 중간에 있을수도 있고 없을 수도 있는데 리소스 찾기 그만하겠다는 뜻입니다. |
이 3가지 함수가 있으면 드롭퍼로 의심해볼만합니다.
하지만 설치 프로그램도 드롭퍼 개념으로 실행될 수 있기 때문에 무조건은 아닙니다.
GetTempPathW temp디렉토리를 찾습니다. |
wsprintfW 파일생성을 원하는 경로에 이어붙입니다. |
CreateFileW 파일을 만듭니다.(2) (/ 파일을 열거나 (3)) |
WriteFile notepad.exe라는 빈파일에 바이트나 파일정보를 집어넣습니다. |
CloseHandle 확인해보면 비로소 파일이 생성됩니다. |
CreateProcessW / 또는 WinExec 실행합니다. |
movefile 파일을 쓰거나 이동합니다. (Newfilename/ existingfilename의 인자값을 넣습니다.) |
find~nextfile 다음 파일 찾기 |
strings 문자열에서는 다른건 볼거 없고
안에 리소스파일이 있다면 BIN이라고 나옵니다.
참고로 olly에서 Winmain함수는 push4번 후 call입니다.
원래 kernel32.dll 인데
이름을 비슷하게 kerne132.dll 로 추가로 만들어서 분석하는 저도 속았습니다.
dll파일
Lab01-01.dll
확인해보니 exe파일과 내용이 전혀다른 악성파일이였습니다.
분석은 가능하지만 정적 분석 즉, 실행이 불가능하니
Hxd에서 dll파일 확장자 특성으로 되어있는 부분을 2000 > 100으로 바꿔주면서 exe파일로 실행되도록합니다.
또한 저장도 그에 따라 exe확장자로 저장합니다.
정적 분석을 해보면
dll 주목적은 실행파일한테 함수정보 주는 겁니다. 하지만 export table이 없습니다.
mutex 기능은 중복 실행을 막기 위한 장치입니다.
A프로그램을 실행할 때 오픈먼저합니다.
오픈되었는지 체크를 먼저하고 있다면 X, 오픈된 프로세스가 없다면 생성합니다.
mutex 적용/미적용 예시로 카카오톡PC버전과 계산기 프로그램이 있습니다.
ws2_32.dll 즉 소켓 dll에서
WSAstartup
소켓 통신할 때 제일 먼저 사용됩니다.
send, recieve가 있어야 하며 연결 connect도 있어야 합니다.
cleanup
마지막에 사용합니다.
strings를 보면
ip주소와 mutex대문자 문자열, 전송 메세지를 볼 수 있습니다.
대략적으로
외부 ip(url)주소로 연결해서 hello 전송메세지를 보낸 후
프로그램을 받으면서 교환하는 구조입니다.
주는 것에 따라서 동작이 달라지기 때문에 봇넷으로 활용될 가능성이 큽니다.
IDA에서
AF_INET
type1 = tcp
protocol 6 = tcp 한번더
2번 = ipv4
소켓을 만들 때 tcp>ip 통신하려는 인자값이 보입니다.
Lab01-02.exe
createthread 이것도 실행하는 겁니다. |
openSCM~ malservice라는 이름으로 윈도우 서비스 등록합니다. |
systemtimetofiletime 시작 시간을 예약합니다. |
윈도우 서비스 관리자(services.msc)에 로그인마다 자동으로 실행되도록
새로 등록을 한다면 자동으로 레지스트리 RUN에도 등록되게 됩니다.
윈도우 서비스 관리자에 하는 이유는
일정 시간대에 실행되도록 하는 기능이 있기 때문에 봇넷을 이용한 Syn Flooding을 시행하기에 좋으며 많이 그렇게 합니다.
wininet.dll
internetopen 웹사이트에 접속하기 전 openinternet user-agent 를 세팅합니다. (브라우저가 IE인지 firefox인지 세팅합니다.) |
internetopenurl 웹사이트에 연결하는 함수도 넣습니다. |
따라서 이 악성코드는 http: TCP 연결을 이용한 DDOS 공격을 시행하려는 것 같습니다.
Lab01-03.exe
프로텍트 패킹이 되어있습니다.
exeinfo로 봤을 때 심지어 Unknown으로 되어있어서 upx가 아닌 어떤 프로그램으로 패킹되었는지 모릅니다.
그럴 땐 ollydbg로 수동 unpacking을 진행합니다.
처음에 메인 함수의 시작부분이 이상하게 잡힐건데
Dubugging option > SFX 로 들어가 Trace 세번째 옵션을 선택 후 재시작합니다.
그러면 시작함수가 제대로 잡힌 걸 볼 수 있고 그상태에서 Dump 해야합니다.
시작위치는 BP를걸고 제대로 두고 그 위치를 기준으로 dump파일을 생성합니다.
그리고 패킹된 파일이 실행되고 있는 상태에서 importREC로 열고 OEP 시작을 수정하고 fix dump 해줍니다.
그러면 PEView로 봤을 때 dll, api함수들이 보이기 때문에 그제서야 분석이 원활합니다.
strings를 보면
www 주소가 보이고 접속 연결시키려는 것 같습니다.
Lab01-04.exe
패킹이 되어 있지 않고
리소스가 있으며 드롭퍼 관련 함수가 보입니다.
드롭퍼일 확률이 큽니다.
분석 결과 드롭퍼이긴한데 약간 업그레이드 된 느낌입니다.
movefileA을 이용해 기존 파일(wupdmgr.exe)을 temp에 이름을 변경하여 (winup.exe) 이동하고
대신 같은 이름으로 악성파일을 올립니다.
wupdmgr.exe은 업데이트할 때 MS서버에 접속해서 업데이트를 진행하게 해주는 기능입니다.
URLDownloadToFileA로 외부주소의 악성파일을 다운받아 wupdmgr.exe로 저장합니다.
당연히 WinExec으로 실행까지 시킵니다.
리소스 해커로 리소스 부분만 저장한 파일과 드롭퍼로 생성된 파일의 해시값을 비교해보니 같은 값을 가지고 있습니다.