Information Security ˗ˋˏ ♡ ˎˊ˗

Security/Reversing

[UDP Flooding] UDP Flooding Malware 정적/동적 분석

토오쓰 2020. 7. 28. 17:32

 

 

UDPFlooding Malware를 제작하여 정적/동적 분석

https://t-okk.tistory.com/59

 

[UDP Flooding] UDP Flooding Malware 제작

1. 전체 Flowchart 순서 1) 악성코드는 서버에 10004번 포트로 'IMHACKER_10자리 숫자' 메시지를 UDP 통신으로 전송한다. 2) C&C 서버로 부터 공격 대상자 IP와 PORT 번호를 받고 공격지에 UDP Flooding 공격을..

t-okk.tistory.com

 

*악성코드 분석하는 과정에서는 패킹하지 않은 파일을 가지고 분석하였다.

 

 

1. 정적분석

1.1 Virustotal(https://www.virustotal.com/gui/home)

악성 여부를 판단하는 안티바이러스 도구

악성코드 탐지에서 패턴 매칭 분석, heuristic(변조, 신종 등)을 탐지

 

71개의 항목 중에서 6개의 악성코드의 시그니처를 탐지하였다.

- Cylance, eGambit에서 Unsafe을 발견할 수 있었다.

 

해당 파일이 연결되어 있는 IP주소가 나오는 것을 확인할 수 있다.

 

 

1.2 PEiD/UPX

패킹은 악성코드를 은폐할 목적을 가지고 있으며, 문자열 검색이 안된다.

패킹과 난독화를 탐지하기 위해서 PEiD를 이용한다.

언패킹한 파일을 PEiD를 이용하여 확인한다.

- EP Section이 .text로 설정되어 있는 것을 볼 수 있다.

 

 

1.3 WinMD5Free SW

해시를 이용하여 악성코드와 정상코드의 고유 값을 비교하여 검증한다.

virustotal에 나온 MD5 해시 값을 이용하여 해당 파일이 실제 분석하고자 하는 파일이 맞는지 검증한다.

 

 

1.4 Dependency Walker

동적 링크 함수를 탐색할 수 있는 tool이다.

여기서 동적 링크 함수는 프로그램이 링크된 라이브러리 함수를 호출하면 라이브러리 내의 함수를 실행한다.

- 임포트(import) 함수: PE 파일 헤더에 실행 파일이 사용하는 특정 함수 정보를 포함한다.

- 익스포트(export) 함수: PE 파일에 익스포트 함수 정보가 포함되고, DLL이 가장 많이 존재한다.

KERNEL32.DLL

함수 이름 설명
WriteConsole function 현재 커서 위치에서 시작하여 콘솔 화면 버퍼에 문자열을 쓴다.
CreateFileA function 파일 또는 I/O 장치를 작성하거나 연다.
SetFilePointerEx function 지정된 파일의 파일 포인터를 이동한다.
HeapAlloc function 힙에서 메모리 블록을 할당한다. 할당된 메모리는 움직일 수 없다.
TerminateProcess function 지정된 프로세스와 모든 스레드를 종료한다.
IsProcessorFeaturePresent function 지정된 프로세서 기능이 현재 컴퓨터에서 지원되는지 확인한다.
GetCurrentProcessId function 호출 프로세스의 프로세스 식별자를 검색한다.
GetCommandLineA function 현재 프로세스의 명령 줄 문자열을 검색한다.
GetProcessHeap function 호출 프로세스의 기본 힙에 대한 핸들을 검색한다.
GetConsoleCP function 호출 프로세스와 연관된 콘솔에서 사용된 입력 코드 페이지를 검색한다. 콘솔은 입력 코드 페이지를 사용하여 키보드 입력을 해당 문자 값으로 변환한다.

 

바이러스토탈에 나온 값

WS2_32.DLL

함수 이름 설명
WSAStartup function WS2_32.DLL을 사용할 수 있도록 초기화 하는데 사용하는 함수이다.
WSACleanup function WS2_32.DLL을 종료한다.
recvfrom function 소켓으로부터 자료를 수신한다.
inet_addr function 네트워크 주소 변환한다.
sendto function 특정 목적지로 데이터를 전송한다.
htons function 변환 함수를 u_short (빅 엔디안) TCP / IP 네트워크 바이트 순서 값

 

 

1.5 Strings

문자열 검색을 통하여 악성코드에 어떤 문자열이 있는지 확인할 수 있다. 패킹이 되어있는 악성코드는 본래의 악성코드가 가지고 있는 문자열을 검색할 수 없다.

- CompareStringEx 함수: 두 개의 유니코드 문자열을 비교한다.

- GetCurrentPackageId 함수: 호출 프로세스의 패키지 식별자(ID)를 가져온다.

- LCMapStringEx 함수: 이름으로 지정된 locale 경우 지정된 변환을 사용하여 입력 문자열을 다른 문자열로 매핑하거나 입력 문자열에 대한 정렬 키를 생성한다.

- LocaleNameToLCID 함수: locale 이름을 locale 식별자로 변환한다.

-> locale: 단순히 메시지 뿐만 아니라 숫자 표현법, 날짜 또는 시간 표현법 등 여러 가지에 사용될 수 있다

 

심볼파일(.pdb): C나 C++ 프로그램을 빌드한 후 생성되는 파일인데, 생성된 실행 파일을 디버깅할 수 정보를 제공해준다.

 

 

1.6 PeView

PE 파일 헤더 내 주요 정보를 확인할 수 있다.

.text 실행 코드를 담고 있다
.rdata 프로그램 내의 전역에서 접근 가능한 읽기 전용 데이터를 담고있다.
앞에 보았던 API 함수가 이 섹션에 존재하는 것을 알 수 있었다.
.data 프로그램을 통해 접근 가능한 전역 데이터를 저장한다.
.rsrc 실행 파일에 필요한 리소스를 저장한다.

 

 

2. 동적분석

동적 분석이란 악성코드가 실행되는 시점을 모니터링하거나 악성코드가 수행된 이후 시스템 변화를 모니터링하는 것을 말한다.

기초 정적 분석이 완료된 후에 수행한다.

동적 분석을 하는 이유는 난독화나 패킹이 되었을 경우 분석가가 정적 분석 기법으로 한계에 이르렀을 때 수행한다.

 

2.1 ProcMon

프로세스 모니터(특정 레지스트리, 파일 시스템, 네트워크, 프로세서와 스레드 행위를 모니터링), 동작과 동시에 모든 시스템 호출을 감시한다.

 

 

2.2 Process Explorer

프로세스 익스플로러는 시스템에서 동작하는 프로세스를 모니터링할 수 있도록 도와주며 부모 자식 관계를 트리 구조로 화면에 출력한다.

 

2.3 Regshot

코드 실행 전후의 레지스트리 스냅샷을 찍고 비교하는 레지스트리 비교 도구

 

2.4 ApateDNS

네트워크 기반 행위 탐지하여 악성코드의 DNS 요청을 가장 신속히 볼 수 있다

 

2.5 Wireshark

패킷 스니핑을 이용하여 네트워크 트래픽을 잡아 로깅하는 패킷 캡처 도구이다.

 

 

3. UDP Flooding 공격

DoS(Denial of Service) 공격의 일종으로 대량의 UDP 패킷을 이용하여 대상 호스트의 네트워크 자원을 소모시키는 공격을 말한다.

 

 

4. 결론

첫 번째 정적 분석에서 안티바이러스 스캐닝인 VirusTotal, PEiD, UPX, Strings, WinMD5Free SW 그리고 Dependency Walker를 통해서 실행 파일 직접 실행시키지 않고 분석을 해보았다.

- 해당 파일에 대한 다양한 문자열도 알 수 있었고 EXE 파일이 포함하고 있는 DLL속의 Win API함수도 찾을 수 있었다.

 

두 번째 동적 분석에서는 정적 분석 기법으로 한계에 이르렀을 때 수행하여 해당 파일을 직접 실행시켜서 실행되는 시점을 모니터링하여 시스템에 대한 변화를 파악할 수 있다.

- 정적 분석을 통해서는 UDP Flooding 공격을 하고 있는지 몰랐지만 WireShark의 패킷 분석을 통해서 IP, PORT번호의 주소까지도 알아낼 수 있었다.

- 또한 동적 분석에서 나온 문자열들이 정적 분석에서 많이 나온 것을 보아 정적 분석을 통해서도 악의적인 행위를 하는지에 대한 예측도 중요한 것 같다.