악성코드 분석/실습

windowproject.exe - 정적분석

レ(゚∀゚;)ヘ=З=З=З 2023. 12. 20. 15:55
728x90

정적분석 : 소스 코드의 실행 없이 정적으로 프로그램의 문제를 찾는 과정

1. VirusTotal

1) 68개의 기존 안티바이러스 중에 5개가 일치
2) ‘DETECTION 부분에서 ‘Program:Win32...’을 통해 ‘win32’에서 동작이 되고, ‘Trojan’이라는 단어가 나오는 것을 통해 ‘Trojan’ 형태로 은닉되어 있다가 활동한다고 유추 가능
3) 'Malware' 이라는 단어가 반복적으로 나오는 것을 확인

2. PEID

1) EP Section 부분 - '.text’
2) ‘Nothing found *'
3) 결론 - 패킹, 난독화 되지 않음

3. WinMD5Free

1) VirusTotal 사이트에서 나온 MD5 해시값과 해당 파일의 해시값(고유값)을 비교
2) 두 해시값이 같으므로 ‘windowproject.exe’파일의 무결성 확인 완료

4. PEview

1) ‘IMAGE_FILE_HEADER’‘Time Date Stamp’를 통해 파일 생성 날짜 :  ‘2021/05/13’ 
2) 'VirusTotal’‘History’에 있는 ‘Creation Time’ :  ‘2021-05-13’  ==> 두 값 동일
3) ‘PEview’에서 맨 처음에 나오는 값이 ‘MZ’ : PE파일임을 확인

5. Strings

1) api-ms-win, ext-ms-win : 라이브러리를 사용 가능하게 해줌
2) 'windowproject.exe' 파일 실행 - 출력되는 메시지(‘IMHACKER ... sendto() failed!!!'부분, main()함수에 해당)를 확인
3) '
windowproject.pdb' 파일의 경로 : 컴파일 중에 생성되는 파일

더보기

※ windowproject.pdb

디버깅 정보를 저장하기 위한 파일이며, 심볼 파일이라고 부르기도 하며 HEX 형태로 함수 이름, 변수의 이름과 타입, 소스 파일, 소스 행 번호 등의 정보가 포함되어 있어 오류를 찾거나 기능을 테스트하는데 유용하게 사용

- VirusTotal 에 나와있는 Importdll파일

1) KERNEL32.dll, WS2_32.dll 파일 import
2)
그 외, 동적 링크 라이브러리 파일 중 하나인 Advapi32.dll 포함
3) 윈도우 user 구성 요소를 구현하는 USER32.dll 포

더보기

※ 그 밑에 나온 함수들이 하는 역할

- CompareStringEx : 두 개의 유니코드 문자열을 비교
- FlsAlloc, FlsFree : FLS 인덱스를 할당, 재사용할 수 있도록 해제
- FlsGetValue, FlsSetValue : 지정된 FLS 인덱스에 대해 호출된 FLS 슬롯 값을 검색, 저장
- GetCurrentPackageId : 호출 프로세스의 패키지 식별자(ID)를 가져옴
- InitializeCriticalSectionEx : 스핀 수 및 옵션 플래그를 사용하여 중요 섹션 개체를 초기화
- LCMapStringEx : 이름으로 지정된 locale 경우 지정된 변환을 사용하여 입력 문자열을 다른 문자열로 매핑하거나 입력 문자열에 대한 정렬 키를 생성
- LocaleNameToLCID : locale 이름을 locale 식별자로 변환

VirusTotal DETALS -  Imports -  KERNEL32.DLL 부분에 나와 있는 주요 함수들

1) WriteConsole : 현재 커서 위치에서 시작하는 콘솔 화면 버퍼에 문자열를 씀
2) CreateFileA : 파일 또는 I/O 장치 생성 또는 열기
3) SetFilePointerEx : 지정된 파일의 파일 포인터를 이동
4) HeapAlloc : 힙에서 메모리 블록을 할당
5) TerminateProcess : 지정된 프로세스와 프로세스의 모든 스레드를 종료
6) IsProcessorFeaturePresent : 지정한 프로세서 기능이 현재 시스템에서 지원되는지 여부를 결정
7) GetCurrentProcessId : 호출 프로세스의 프로세스 식별자를 검색
8) GetCommandLineA : 현재 프로세스에 대한 명령줄 문자열을 검색
9) GetProcessHeap : 호출 프로세스의 기본 힙에 대한 핸들을 검색
10) GetConsoleCP : 호출 프로세스와 연결 된 콘솔에서 사용 하는 입력 코드 페이지를 검색

VirusTotal DETALS -  Imports - WS2_32.DLL 부분에 나와 있는 주요 함수들

1) recvfrom : 소켓으로부터 데이터그램을 수신하고 소스 주소를 저장
2) inet_addr : IPv4 10진수 주소를 포함하는 문자열에 대한 적절한 주소로 변환
3) WSACleanup : Winsock 2 DLL(Ws2_32.dll)의 사용을 종료
4) WSAStartup : WS2_32.dll을 사용할 수 있도록 프로세스에 의한 Winsock DLL 사용을 개시
5) sendto : 특정 목적지로 데이터를 전송
6) htons : 변환 함수를 u_short (빅 엔디안)를 호스트에서 TCP / IP 네트워크 바이트 순서로 변환 (빅 에디안 -> 리틀 에디안)

 

정적분석 결론

WS2_32.DLL 에 나와 있는 함수들이 WSACleanup 을 통해 Winsock DLL을 사용할 수 있도록 하고 서버에게 sendto로 특정 데이터를 보낸 다음, recvfrom 으로 데이터를 수신하는 과정을 거칠 것이라고 예상된다. 그 와중에 inet_addr 가 존재하는 것을 보아, 주소와 관련된 데이터를 다룰 것이라고 예상할 수 있다.