기초 정적 분석 → 기초 동적 분석 → 고급 정적 분석 → 고급 동적 분석

 

기초 정적 분석

프로그램 기능 파악 (코드나 프로그램의 구조 분석)

 

① 악성 여부 판단 by VirusTotal

 

② 악성코드 판별 해시 사용 (악성코드 ID) by MD5 & SHA1

: 해시를 이름으로 사용, 악성코드 식별을 위해 해시 공유, 식별 여부를 위해 해시 검색

 

③ 파일의 문자열, 함수, 헤더에서 개략적 판단 by strings

: 프로그램 메세지 출력, URL 접속, 특정 위치로 파일 복사 등을 확인

 

④ 패킹 여부 확인 by PEiD

: 패킹 여부 확인하고 언패킹하여 리버싱을 보다 쉽게 하기 위한 단계

 

⑤ PE 세부 구조 확인 by PEview

: Size of Raw Data(원래 데이터 크기)보다 Virtual Size(가상 크기)가 월등히 크다면 다른 파일을 올리기 위함으로 의심해 볼 수 있음, 섹션의 이름 변경 여부를 확인

 

⑥ DLL 의존성 조사 by Dependency Walker

- Kernel32.dll : 메모리, 파일 ,하드웨어 접근과 조작

- Ntdll.dll : 윈도우 커널 인터페이스

- Advapi32.dll : 서비스 관리자, 레지스트리 같은 추가 윈도우 핵심 컴포넌트

- User32.dll : 유저 인터페이스(버튼, 스크롤바, 사용자 행위 제어, 반응 컴포넌트)

- Gdi32.dll : 그래픽 보기 및 조작

- WS2_32.dll : 윈도우 소켓 네트워크 (네트워크 통신)

- Wininet.dll : FTP, HTTP, NTP와 같은 상위 수준 프로토콜 구현 (네트워크 통신)

 

⑦ 리소스 확인 by Resource Hacker

: 아이콘/메뉴/대화상자/버전정보 섹션, 문자열 테이블

+) Dropper : 리소스에 실행 파일이 들어가 있음(프로그램이 이를 같이 실행하게 됨)

 

 

<Lab01-01.exe, Lab01-01.dll 기초정적분석>

1.  기존 안티바이러스 시그니처에 일치하는 파일이 존재하는가?

- Yes

 

 

2. 이 파일은 언제 컴파일 되었는가? 

- Lab01-01.exe의 컴파일 시점은 2010/12/19 16:16:19 이다같은 방법으로 Lab01-01.dll을 확인한 결과, 컴파일 시점은 2010/12/19 16:16:38 이었다.

둘의 컴파일 시간차이가 별로 안나는 것으로 보아 같이 동작하는 것으로 예상된다. (exe가 dll 파일을 동적으로 호출하는 방식일 것이다.)

 

 

3. 이 파일이 패킹되거나 난독화 징후가 있는가? 무엇으로 판단했는가?

- VirusTotal과 PEiD에서 확인한 결과, 두 파일 모두 Microsoft Visual C++ 6.0 버전에서 정상적으로 컴파일된 것을 확인할 수 있고, EP Section 정보도 .text로, 따로 파일이 패킹되거나 암호화되지 않았음을 알 수 있다.

 

 

왼(Lab01-01.exe), 오(Lab01-01.dll)
Lab01-01.dll의 Import - VirusTotal에서 확인

4. 임포트를 보고 악성코드 행위를 알아낼 수 있는가? 그렇다면 어떤 임포트인가?

- ① Lab01-01.exe

CopyFile, FindFirstFile, FindNextFile, FindClose, CreateFile, CreateFileMapping, MapViewOfFile 등의 함수가 쓰인 것으로 보아...

(예측) 파일을 복사한 후, 해당 파일이 존재하는지 찾은 뒤 찾는 행위를 그만두고, 복사한 파일을 복제하기 위한 파일을 하나 생성하는 행위를 하는 것 같다. (정상적 파일을 복사한 후, 악성코드를 심은 다음 다시 배포하는 게 아닐지 예상)

 

② Lab01-01.dll

Sleep, CreateProcess, CreateMutex, OpenMutex, CloseHandle 등의 함수가 쓰인 것으로 보아...

(예측) 잠시 프로세스를 멈춘 후, 새로운 프로세스를 만들고, 동일 프로그램의 중복실행을 막기위해 Mutex를 생성하고 실행하는 것 같다. (백도어로 작용할 것 같다)

 

그리고 PEview에서는 보이지 않던 WS2_32.dll(네트워크 통신을 하는 윈도우 소켓 네트워크)에 쓰인 Import 함수의 내용을 VirusTotal 사이트에서 볼 수 있었다.

 

socket, closesocket, inet_addr, send, connect 등의 함수가 쓰인 것으로 보아...

(예측) 호스트에서 외부 네트워크와 소켓으로 연결한 후 백도어로 작용하여 외부 네트워크에 정보를 전송할 것이다.

 

 

strings 툴을 이용한 파일 문자열 확인

5. 감염된 시스템에서 검색할 수 있는 다른 파일이나 호스트 기반의 증거가 존재하는가?

- Lab01-01.exe를 자세히 보면 kernel32.dll이 아닌 kerne132.dll 파일이 사용된 것이 보인다. Import 함수를 통해 예측한 것을 바탕으로 생각해보면 kernel32.dll의 내용을 복사하여 kerne132.dll이라는 악성코드가 담긴 파일을 생성할 것으로 예상된다. 또한 Lab01-01.dll에서 발견된 127.26.152.13 문자열이 쓰였기 때문에 호스트와 연관된 것으로 보인다.

 

 

6. 감염된 장비에서 이 악성코드를 발견하기 위해 사용한 네트워크 기반의 증거는 무엇인가?

- WS2_32.dll을 사용

 

 

7. 이 파일의 목적은 무엇이라고 판단했는가?

- Lab01-01.exe 는 C:/windows/system32/kerne132.dll 생성하며, kernel132.dll가 Lab01-01.dll파일로 보이며, 이 dll파일은 백도어로 작용해 외부와 통신하며 시스템 정보등을 전송할 것이다.

 


+) <Lab01-04.exe 기초정적분석>

이 파일은 리소스 섹션에 하나의 리소스가 있다. Resource Hacker를 이용해 리소스파일을 점검하고 리소스를 추출해보자. 리소스로부터 무엇을 알 수 있는가?

Resource Hacker에 Lab01-04.exe 올리기

리소스인데 실행 파일(exe)의 패턴(4D 5A, MZ)을 발견할 수 있었다.

이는 리소스에 실행 파일을 숨긴 후 실행 시 숨겨진 exe를 함께 배포하는 것으로 보인다. Dropper의 전형적인 예시같다.



기초 동적 분석

- 프로그램을 직접 실행하며 분석

- 프로그램의 영향 쉽게 파악

- 악성코드 실행 전후 상태를 조사 및 분석

 

1. 악성코드 실습 시 발생하는 호스트/네트워크 환경 구성

2. 파일, 프로그램 실행, 레지스트리, 서비스 등 관련 항목 변경 사항 확인

3. 실행 시 발생하는 네트워크 트래픽 분석

 

동적 분석에 사용하는 도구?

1. 프로세스 모니터(procmon.exe)

: 특정 레지스트리, 파일 시스템, 네트워크, 프로세스, 스레드 행위를 모니터링

+) 한계 : 특정 GUI와 I/O 제어를 통한 루트킷 탐지 불가, 네트워크 행위에 대해 일관성 있는 탐지 불가

 

 

2. 프로세스 익스플로러(procexp.exe)

: 프로세스(EPROCESS 구조체)에 관련된 많은 내용을 확인 가능

: 분석에 아주 유용한 도구

: 다양, 정확

 

 

3. RegShot

: 두 레지스트리의 스냅샷을 찍고 비교

: 악성코드는 자동실행을 위해 레지스트리를 자주 건드림

 

 

4. INetSim

: 맬웨어에게 가짜 서비스를 제공하기에 최고의 도구! 

: 알려지지 않은 맬웨어 샘플의 네트워크 동작에 대한 런타임 분석을 수행하기 위한 도구

: 실험실 환경에서 맬웨어가 일반적으로 사용하는 인터넷 서비스를 시뮬레이트

: HTTP, HTTPS, FTP, IRC, DNS, SMTP 등 서비스를 실행

 

 

5. WireShark 

: 네트워크 분석 프로그램

: 네트워크상 캡처한 데이터에 대한 네트워크/상위 레이어 프로토콜의 정보를 제공

: 패킷 캡처를 위해 pcap 네트워크 라이브러리를 사용

 

 

<Lab03-01.exe 기초동적분석>

VirusTotal에 올렸을 때

VirusTotal 올렸을 시 Import 함수도 제대로 안 보이고, Packer가 쓰인 듯 하여 PEiD로 확인하였다

 

PEiD

역시나 PEncrypt 라는 패킹 툴로 패킹이 되어 있다.

 

strings를 통한 파일 문자열 확인

1. 악성코드의 임포트 함수의 문자열은 무엇인가?

- 패킹되어 ExitProcess 밖에 확인할 수 없다.

strings로 확인 시 여러 레지스트리가 보이지만, 특히 Run 레지스트리에 들어가는 것들은 부팅시에 실행되는 것들이기 때문에 의심할 필요가 있으며, 중간에 보이는 url 주소는 악성코드가 실행되면서 이에 접근할 것이라고 예측할 수 있다.

 

 

2. 악성코드임을 의미하는 호스트 기반 표시자는 무엇인가?

동적 분석을 위한 툴을 모두 준비시킨 후 Lab03-01.exe 실행

RegShot, Procmon, Procexp, Wireshark 준비!

 

RegShot 결과

결과를 보면 레지스트리에 5개의 값이 추가되었고, 2개의 값이 수정이 되었다.

특히, HKLM\SOFTWARE\Microsoft\CurrentVersion\Run에 해당하는 레지스트리 키 값은 부팅 시 자동으로 시작하게 하는 역할을 한다. 따라서 사용자가 부팅할 때마다 이 악성코드가 실행되게 하는 목적이 있는 것 같다.

(strings에서 봤던 VideoDriver는 Run 레지스트리에 자기 자신을 등록하기 위한 키 이름이라는 것을 이제서야 알게 됨)

 

ProcMon

ProcMon에서 확인한 결과, strings에서 봤던 vmx32to64.exe는 C:\Windows\system32\아래에 생성하기 위한 파일 이름이라는 것을 알게 되었다.

 

C:\Windows\system32에 생성된 vmx32to64.exe 확인
왼(vmx32to64.exe), 오(Lab03-01.exe)

WinMD5로 확인한 결과, 두 파일은 정확히 일치했다

따라서 Lab03-01.exe파일이 자기 자신을 복사해서 C:\Windows\system32\아래에 vmx32to64.exe라는 이름으로 파일을 생성함을 알 수 있다.

 

 

 

3. 악성코드를 인식할 수 있는 유용한 네트워크 기반의 시그니처가 존재하는가? 있다면 무엇인가?

- strings에서 봤던  www.practicalmalwareanalysis.com 를 통해 네트워크를 사용한다는 것을 예상할 수 있지만 더 분석해보겠다.

strings에서 본 url로 접속을 하고 이후에는 443포트를 통해 어떤 행동을 하는 것을 확인했다

아래에도 계속 사이트에 접속 후 이러한 데이터를 보내는 것을 알 수 있었다.

 

 

 

 

 

+ Recent posts