동적분석 : 소프트웨어가 실행 중인 환경 하, 다양한 입/출력 데이터, 사용자 상호작용의 변화들을 점검
1. Process Monitor
1) Process Monitor - windowproject.exe 필터
2) windowproject.exe 파일을 실행 - PID 값 3828 확인
3) RegOpenKey, RegQueryValue, RegCloseKey 등 같은 Operation 반복
4) Operation 중 UDP Receive, UDP Unknown 중요
4-1) 첫 번째 UDP Unknown : ‘114.70.37:10004’에 무언가를 send, UDP Receive를 통해 다시 무언가 recieve
4-2) 두 번째 UDP Unknown : 첫 번째 UDP Unknown을 참고하여 '114.70.37.17:7777' 에 10번 반복 send
2. Process Explorer
1) Process Monitor’를 통해 확인했던 PID가 ‘3828’인 ‘windowproject.exe’이 동작하는 것 확인
2) 속성 - User가 GOWOON-D31936D6 인 것을 확인
2-1) 즉, Procmon 에서 windowprojcet.exe 의 User인 GOWOON-D31936D6 가 ‘114.70.37:10004’에 데이터를 보낸다는 것 확인
3) Build Time 을 통해 파일이 ‘2021.05.13. 23:47:20’에 빌드된 것 확인
4) (정적분석 예상+) User(GOWOON-D31936D6)가 114.70.37:10004에게 데이터 보낼 때 sendto API 함수가 사용되었을 것이라 예상
4-1) recvfrom API 함수를 통해 UDP Receive 한 것으로 예상
5) 두 번째 UDP Unknown 부터 114.70.37.17:7777 에게 데이터를 보내는 것과 정적 함수에서 보았던 inet_addr, htons API 함수들이 사용되는 것을 보아 받은 데이터가 주소인 114.70.37.17:7777 와 관련된 값이라고 예상
3. RegShot
1) windowproject.exe 파일의 실행 전후로 ‘Regshot’을 찍어 비교
2) Values added : 26, Values modified : 39로 Total changes : 65이 기록
3) Values added : Dhcp를 통해 IP를 할당받는데, Default Gateway에 해당하는 192.168.177.2 임을 확인
4) Vaules modified : Dhcp를 통해 2가지 IP를 할당받는데, 192.168,177.135 같은 경우에는 해당 가상머신의 IP인 것 같은데, 나머지 192.168.177.254 는 어디에 해당하는 IP인지 찾지 못함
5) 이외에는 위에 나온 IP주소가 나오는 부분이 반복적으로 나오거나 HEX값으로 나온 ‘Seed’ 등이기 때문에 해석하지 않음
4. Dependency Walker
‘WS2_32.DLL’과 ‘KERNEL32.DLL’두 가지 dll이 존재
1) WS2_32.DLL : 네트워크 연결 및 관련 작업을 수행
2) KERNEL32.DLL : 메모리, 파일, 하드웨어 접근 및 조작을 하는 dll
KERNEL32.DLL - import 함수 : CreateFileW, FindFirstFileExA 등 어떤 파일을 생성하고, 찾고, 복제 등의 동작이 일어날 것으로 예상
WS2_32.DLL - export 함수 : VirusTotal 에서 봤던 함수를 더불어 socket, setsocketopt 등 소켓 관련 함수들을 통해 Windows Socket 통신을 할 것이라고 예상
5. WireShark
1) WireShark 로 분석을 진행하기 위해 가상머신의 IP를 확인
2) IP Address : 192.168.177.135, Default Gateway : 192.168.177.2
3) WireShark를 실행시키자마자 192.168.177.135에서 192.168.177.2로 동작 발생
4) windowproject.exe 실행 시 총 12개(9번~20번)의 동작 발생
5) 가상머신(192.168.177.135)의 1108포트에서 114.70.37.17의 10004포트로 UDP를 사용하여 전송
6) 전송되는 데이터 : IMHACKER_2019111332
7) 114.70.37.17의 10004포트에서 가상머신(192.168.177.135)의 1108포트로 udp를 사용하여 전송
8) 전송되는 데이터 : OKAY_114.70.37.17:7777
9) 가상머신(192.168.177.135)의 1108포트에서 114.70.37.17의 7777포트로 UDP를 사용하여 전송(11~20번 동작)
10) 처음 10004 포트와 다르게 다시 전송된 데이터에 있던 7777포트로 변경되어서 전송
11) Destination Port가 10004 → 7777 로 변경하는 코드가 windowproject.exe 내부에 존재할 것으로 예상
12) 전송되는 데이터 : 2019111332 (Destination : 114.70.37.17:7777)
13) 연속해서 같은 값을 보내므로 UDP Flooding 의심
6. 리버싱
1) 올리디버거로 windowproject.exe 실행
2) F8을 통해 한 줄씩 실행시켜주다 0040150B 위치에서 F7로 00401050으로 들어옴
3) 00401D3 위치에서 명령 프롬프트 창에 Winsoc Init 문구가 뜨는 것 확인
4) 0040112E 위치를 지나면 Socket create 를 통해 소켓이 생성된 것을 확인
5) 00401159 위치에서 EAX에 Arg2인 IMHACKER_2019111332와 Arg1에 해당하는 부분이 push로 스택에 추가
6) 해당 내용을 명령 프롬프트에 출력
7) sendto()를 통해 msg 보냄
8) (성공) Arg1에 해당하는 sendto success 스택에 추가
9) 명령 프롬프트에 성공 메세지 확인
10) recavfrom() 함수를 통해 데이터 받고 내용 저장
11) 0040120A에서 받은 msg 내용 스택 저장
12) 받은 msg : OKAY_114.70.37.17:7777
13) 00401221 에서 '_:' 기준으로 split해서 msg 중 OKAY만 저장
14) 0040124C 에서 자른 문자열인 7777을 스택에 저장
15) 0040126F에서 자른 문자열인 114.70.37.17 확인
16) 004012B9에서 빈 공간으로 인해 오류가 떠 밑 코드가 있는 004012C2로 점프해서 갈 수 있도록 변경
17) 004012E4에서 sendto를 통해 0012D824에 저장된 값을 보내는 것 확인
18) 00401290 ~ 004012F4까지 총 10번(ESI=0000000A까지) 반복
19) 0000000A와 0A와 비교해서 10이면 00401319에서 UDP 플러팅 완료라는 문구 명령 프롬프트에 출력
20) 계속 실행 시 RETN을 통해 종료
'악성코드 분석 > 실습' 카테고리의 다른 글
windowproject.exe - 정적분석 (0) | 2023.12.20 |
---|---|
IDA - idapractice.exe 정적분석 (0) | 2023.12.20 |
[윈도우즈보안과 악성코드기초] PE 파일 (0) | 2021.03.28 |
[윈도우즈보안과 악성코드분석기초] crackme 리버싱 (0) | 2021.03.27 |
[윈도우즈보안과 악성코드분석기초] 문자열 패치 (0) | 2021.03.22 |