본문 바로가기
리버싱(Reversing)/'악성코드 분석 시작하기' 정복

[악성코드 분석]#3 동적 분석 - part(1/2)

by 아기미믹 2023. 6. 20.

책 '악성코드 분석 시작하기' 표지

이 글의 모든 내용은 책 '악성코드 분석 시작하기'를 스스로 공부하며 정리한 내용임을 밝힙니다.

 

동적 분석의 개요 및 분석 도구

1. 동적 분석

 동적 분석은 의심 바이너리를 직접 실행하고, 이로부터 얻은 데이터를 기반으로 실행 파일을 분석하는 행위를 말한다. 이를 위해 분석 환경 구축 시, [악성코드 분석]#1 Lab 환경 구축하기를 참고하면 된다. 간단하게 설명하자면, 호스트 PC(내 실제 컴퓨터) 위에 VMware를 활용해 가상 머신 Windows 10, Ubuntu 16.04 를 구축하였다.

 

2. 활용 도구(Tool)

동적 분석을 진행 시 주요 모니터링 대상은 다음과 같다.

● 프로세스: 프로세스 활동을 모니터링하고 악성코드가 실행되는 동안 생성한 결과 확인

● 파일 시스템: 악성코드가 특정 파일을 생성, 변경, 삭제하는 지 확인

● 레지스트리: 레지스트리의 키값을 변경하거나 새로 작성하는 지 확인

● 네트워크: 시스템으로 유입되거나 외부로 나가는 트래픽을 확인

 

1) 프로세스

- 프로세스 해커: 해당 시스템에서 어떤 프로세스가 동작하는지 보기 쉽게 보여주고, 각 프로세스의 세부정보도 확인할 수 있다.

 

프로세스 해커 실행 화면

- 프로세스 모니터: 프로세스의 활동을 바탕으로 파일 시스템, 레지스트리 등과 상호작용한 내용을 로깅한다.

이때, 노리벤을(Noriben) 활용하면 불필요한 정보를 로깅하지 않고, 악성코드와 관련된 지표를 수집하는데 도움을 준다.

노리벤 스크립트(Python) 다운로드 URL: https://github.com/Rurik/Noriben 

해당 스크립트를 다운 후, 프로세스 모니터가 설치된 경로에 설치해주면 된다. 모니터링을 시작하려면 Noriben.py 파일을 실행 시켜주면 된다.

Noriben 을 활용한 프로세스 모니터 실행 화면

- 와이어샤크: 잘 알려진 네트워크 트래픽 캡쳐 프로그램이다. 분석 환경을 살펴보면 Windows의 게이트웨이가 Ubuntu 리눅스이므로, Ubuntu에서 와이어샤크를 실행하면 Windows로부터 발생한 모든 패킷을 모니터링할 수 있다.

Ubuntu에서 다음 명령어를 통해 와이어샤크를 실행하자.

$ sudo wireshark

와이어샤크 실행 화면

 

- InetSim: 대부분의 악성코드는 로컬에서만 동작하지 않고, 외부와의 상호작용이 일어난다. 예를 들면, 공격자가 미리 구축해 둔 C&C서버와의 통신을 통해 새로운 악성 파일을 다운로드하는 등의 행위가 있다. 일반적인 분석 환경에서는 외부 인터넷이 차단된 상태이기때문에 이러한 행위를 관찰하고 추가 분석하기 힘들다. 하지만, InetSim이 있다면 가능하다! InetSim은 놀랍게도 악성코드가 이러한 상호작용이 이루어진 것처럼 착각하도록 HTTP(S), DNS, SMTP, NTP 등 다양한 서비스를 사전에 구축하여 시뮬레이션할 수 있도록 도와준다. 정말 대단한 기술이다...

 InetSim은 다음 명령어로 서비스 상태를 확인 및 시작할 수 있다.

$ sudo service inetsim status // InetSim 서비스 작동여부 확인
$ sudo service inetsim restart

 

동적 분석 - 샘플

이제 직접 악성 샘플을 대상으로 동적 분석을 해보자!

사용된 샘플은 책에서는 sales.exe로 파일 해시(md5)값 51d9e2993d203bd43a502a2b1e1193da 을 가진다.

 

1. 정적 분석

앞서 배운 몇 가지 정적 분석 기법을 활용해 파일을 대략적으로 살펴보자.

file과 md5sum 명령어를 활용해 샘플이 PE32(32비트 Windows 실행 파일)이란 것과 파일 해시 값을 확인할 수 있다.

정적 분석

strings 명령어를 활용하면 '_melt.bat', 'Software\Microsoft\Windows\CurrentVersion\Run', 'WriteFile', 'CreateFileA', 'ShellExecuteA' 등의 문자열을 확인할 수 있다. 곧 어떤 배치(.bat)파일을 실행하고 레지스트리 키값을 수정하며, 파일 시스템에 새로운 파일을 생성하거나 새로운 프로그램을 실행시키는 등의 행위를 함을 짐작할 수 있다.

strings 명령어 결과의 일부

2. 동적 분석

동적 분석 과정

1) 윈도우, 리눅스 VM 모두 클린 스크린샷 복원

2) 윈도우 VM에서 프로세스 해커, 노리벤 파이썬 스크립트(프로세스 모니터) 실행

3) 리눅스 VM에서 INetSim 실행, 와이어샤크 실행

4) 악성코드를 관리자 권한으로 실행 후 약 40초간 모니터링

5) 모니터링 도구 종료 후 로그 분석

 

- 악성코드 샘플(sales.exe) 실행 후, 프로세스 해커에서 4768 PID(매번 달라짐)의 새로운 프로세스가 생긴 것을 확인할 수 있다. 세부 정보를 살펴보면 실행 파일은 %Appdata% 디렉토리에 존재하며 iexplorer.exe라는 이름을 가진다. 악의적인 바이너리들은 정상적인 실행 파일(iexplore.exe, 인터넷 익스플로러 브라우저)과 이름을 비슷하게 가져 그 행위를 은닉하고자 한다.

프로세스 해커 내 새로운 프로세스 식별

- 노리벤을 활용해 프로세스 모니터 로그를 분석하면 다양한 정보를 얻을 수 있다.

sales.exe가 iexplorer.exe 프로세스를 생성, 스레드를 할당

sales.exe가 MDME4.tmp_met.bat 파일을 생성 (사전에 정적 분석을 통해 확인한 정보이다.)

cmd.exe 를 활용한 .bat 파일 실행 (사진에서 보이지는 않지만, Detail 값 확인 시 .bat 파일 실행임을 알 수 있다.)

추후 지속적인 공격을 위해 시작 프로그램 등록

마지막으로 어디론가 통신을 시도하는 것까지 확인할 수 있다.

 

- 와이어샤크를 활용해 캡쳐된 네트워크 패킷을 확인해보자

악성 서버로 추정되는 도메인을 질의하고, 80번(HTTP) 통신을 시도한 것을 볼 수 있다.

이때, 80번 포트로 통신을 시도한 패킷을 보면 표준 HTTP 가 아님(와이어샤크는 정상적인 HTTP 패킷은 Porotol 값을 HTTP로 표기한다.)을 알 수 있다. 이는 곧 해커가 악성 파일로 하여금 커스텀 프로토콜 또는 암호화 통신을 사용했다는 것을 알 수 있다.


여러가지 도구를 활용해 실행 한 번 해보는 것만으로도 굉장히 다양한 정보를 얻을 수 있다는 것에 놀라웠다.

특히, 프로세스 모니터는 쉽게 파일 시스템, 레지스트리, 네트워크 등의 정보를 한 눈에 볼 수 있다는 점에서 실무에서도 굉장히 많이 활용될 것 같다는 생각이 든다.

다음 포스팅은 다양한 방법을 활용해 동적 링크 라이브러리(DLL)을 분석하는 내용을 작성할 예정이다.