[Malware Analysis Tutorial] 1st - VM Based Analysis Platform
# Learning Goals
1. 악성코드 분석을 위한 Virtual Machine을 설정하기
2. 네트워크 스니핑/모니터링 기술의 기본 익히기
# This Lesson Can be Used as a Lab Module in :
1. Computer Networks & Communication Protocols
2. Operating Systems
# Challenge of the day :
" Max++이라는 악성코드를 실행시켜보고, 어떤 네트워크 활동을 하는지 확인해보기 ! "
- 다운로드 링크
http://contagiodump.blogspot.com/2010/11/zeroaccess-max-smiscer-crimeware.html
위 링크에서 다운이 잘 안 될경우에는, 'Bonfa's tutorial'에 있는 Max++의 설명서를 참고하기 바랍니다.
(Bonfa's tutorial : http://resources.infosecinstitute.com/step-by-step-tutorial-on-reverse-engineering-malware-the-zeroaccessmaxsmiscer-crimeware-rootkit/)
1. Introduction
이 튜터리얼은 악성코드 분석에 관심 있는 사람을 위한 글이다. 이 튜터리얼에서는 ZeroAccess라는 악성코드를 단계별로 분석할 것이다. Giuseppe Bonfa는 악성코드 분석에 대해 굉장히 설명을 잘해놓았다. 이 튜터리얼은 직접 악성코드를 분석할 수 있게끔 해줄 수 있다. 이 튜터리얼에서는 공부를 하는 독자가 X86 assembly, debugging, operating systems, programming language 원리에 대해 기본적이 이해를 하고 있다고 가정할 것이다.
이 튜터리얼을 이용해서 Computer Architecture나 Operating Systems 같은 수업에 사용을해도 된다. 만약 이 자료들을 수업시간에 사용할 경우, 사이트에 강의에 대한 간단한 내용을 댓글로 달아주면 감사하겠습니다.
이번 장에서는 Virtual Machine을 악성코드 분석 환경으로 설정할 것이다. 본격적으로 시작하기에 앞서, 다음의 내용을 준비를 해야한다.
1) Windows XP SP2 installation disk (Note : 반드시 SP2이어야 한다.)
2) Linux Ubuntu installation disk
(이 튜터리얼에서 사용한 버전 : Ubuntu 10.04 lucid LTS. 이 버전에서는 튜토리얼을 진행하는데 아무런 문제가 없었음)
3) XP는 최소 50GM 이상의 디스크 공간이 필요하다. (이 XP를 'host XP'라고 명칭하겠다)
4) 고속 인터넷
5) OffensiveComputing.net 의 계정 (http://www,offensivecomputing.net)
스크린 해상도가 너무 낮은 경우, XP Guest를 시작하여 "Install Guest Additions"를 클릭한 후, XP Guest를 재부팅하여 스크린 해상도를 조절해준다. ( '오른쪽 마우스 클릭' -> '속성' -> '설정')
2. Software Installation
이 튜터리얼을 진행하기 위해서는 오픈 소스와 무료 소프트웨어 툴들을 다운해야만 한다. 설치 과정은 다음과 같긴 하지만, 자세한 설명은 생략하겠다. 설치 과정은 대략 5시간 정도 걸린다.
1) 'host XP'에 'Oracle Virtual Box v4.04' 설치하기 (http://www.virtualbox.org)
2) VBox manager에 Windows XP Guest 생성하기 (SP2 설치 디스크를 이용해서 생성하기. VM은 최소 256MB이상의 RAM과 10GB이상의 디스크 공간이 필요)
Guest XP에 다음 순서에 따라 설치하기
a. Python 2.7
b. Immunity Debugger
- http://www.immunityinc.com/products-immdbg.shtml
c. IDA Pro Dubugger 무료 버전
- http://www.hex-rays.com/idapro/idadown.htm
- Note : 평가버전이 아닌 무료 버전을 다운해야함! (평가버전은 dbg database가 저장이 안되기 때문)
d.HxD
- 바이너리 편집기
- http://mh-nexus.de/en/hxd/
e. OffensiveComputing.net에서 Max++이라는 악성코드를 다운하기
- 설명서 : 참고 링크
- 파일 이름 : Max++ downloader install_2010
- 절대로 실행하지 말기 !!!!!!!!!
f. 위의 내용을 모두 다 완료했으면, VBox의 guest SP를 스냅샷으로 저장한다.
- 스냅샷 : 시스템의 원래 상태로 복원 시켜줌
3) 'host XP'에 WinDbg를 설치한다(http://msdn.microsoft.com/en-us/windows/hardware/gg463009).
'host XP'에 XP debugging symbols 전체를 다운해야한다. (debugging의 속도를 조금이라도 높여줌.
4) VBox에 Linux Ubuntu Guest를 생성한다. (Ubuntu 10.04 설치 디스크를 이용하기. 최소 512MB 이상의 RAM과 10GB이상의 디스크 공간이 필요)
다음을 설치하기 바랍니다.
(apt-get이나 GUI의 System->Administration->Synaptic Package Manager 로도 설치 가능)
a. Wireshark (Sniffer, 명령어를 통해서도 설치 가능 'sudo apt-get install wireshark')
b. GDB (GNU debugger)
c. g++ (C++ compiler)
d. Python
Linux guest의 최근 해상도가 굉장히 낮습니다.
해상 조절은Linux Format Forum에 있는 설명을 통해 할 수 있습니다.(참고 링크)
3. 설정
지금까지 했을 경우, 설정한 VM guest들 2개 모두 인터넷이 가능해야 한다. 다음으로는 XP guest의 트래픽들을 Linux guest를 통해 갈 수 있도록 설정할 것이다. 악성코드가 XP guest에서 실행되고 있을 때 XP guest에서 발생하는 네트워크 트래픽을 Linux guest에서 Wireshark를 통해 모니터링 할 것이다.
다음 순서에 따랄 디자인하면 됩니다.
3.1 XP Guest
XP Guest의 power를 off 해준다. VBox 관리자(Manager)의 XP Guest에서 오른쪽 마우스를 클릭하고 '설정(Setting)'을 선택한다. XP Guest의 네트워크 어댑터를 설정해준다.
네트워크 -> 'Adapter 1' 탭으로 들어간다.
1) "Enable network adapter" 체크박스를 설정해준다.
2) "Internal Network"를 "Attached To"로 선택하기(VBox 관리자에서 default network name을 'intnet'으로 설정한다.)
위의 방법을 통해 VBox를 이용하여 망이 분리된 XP Guest를 내부망과 연결시킬 수 있다.
이제 WinDbg의 serial port를 활성화 시킬 것이다. 설정방법은 아래와 같다.
Note : Port/File 의 경로를 '\\.\\pipe\com_11' 으로 설정하고, port를 'Host Pipe'로 시뮬레이터해야한다! 꼭!
Vt-x는 가상화(Virtualization)을 지원하는 CPU 기술이다. Virtual Box에서 이 기능을 활성화 시키고, hardware breakpoint는 비활성화 시켜야한다. 이후 Max++ 악성코드가 시스템콜을 hijacking하기 위해 Hardware Breakpoint를 어떻게 사용하는지 확인 할 수 있을 것인데, 이를 제대로 확인 하려면 Vt-x를 다음과 같이 활성화 시켜야한다.
3.2 Linux Guest
이제는 Linux guest를 내부 네트워크의 gateway 컴퓨터로 설정을 할 것이다.(먼저 Vbox를 power off 해야한다.) Linux guest는 내부 네트워크를 위한 연결과 외부 네트워크를 위한 연결 2가지를 설정할 것이다. 다음 내용은 첫번째 adapter, 즉, 내부 네트워크를 설정하는 내용이다. adapter 2, 즉, 외부 네트워크 타입은 'NAT'로 변경해준다. (NAT : Network Address Translation) This provides a further layer protection of our VM instances
Note : 'Advanced'를 클릭하고 'Adapter Type'을 'Inter Pro/1000'로 설정한다. 그리고 MAC address의 마지막 2개의 숫자를 '01'로 변경해준다(이를 통해 Adapter 1이 무엇인지 쉽게 파악할 수 있다). 같은 방법으로 두번째 adapter (외부 네트워크)의 Mac address의 마지막 2개의 숫자도 '02'로 변경해준다. 본인의 VBox의 버전이 4.1.0이거나 그 이상으 ㅣ버전인 경우에는, 'Advanced' 탭에서 추가적으로 'Promiscuous' 모드가 있는데 'allow for all'로 선택해준다. (이를 통해 모든 트래픽은 intercept 된다)
이제 Linux Ubuntu guest를 재부팅한다. Linux Ubuntu guest를 gateway 컴퓨터로 사용해야 할 것인데, 다음과 같이 설정해주면 된다.
1) terminal을 실행시키고 'ifconfig'라는 명령어를 입력하여, 사용 가능한 adapter들의 정보를 확인한다. 'eth1', 'eth2', 'lo(the local lophole interface)' 같은 내용들을 확인 할 수 있을 것이다. MAC address 확인해보면, VBox 관리자를 통해서 설정했던 것이 있을 것이다. 'eth1'에 대한 adapter의 MAC address가 'xx...:01'인 경우, 'eth2'에 대한 adapter의 MAC address는 'xx..:02' 같은 식으로 나와 있을 것이다.
2) System->Preference->Network Connections. 먼저 현재 작동하고 있는 모든 네트워크 연결들을 제거하고, 다음과 같이 첫번째 무선 연결을 설정해준다(고정 IP로 169.254.236.100를 사용한다). gateway를 '0.0.0.0'으로 설정해야하는데, 이렇게 설정된 이유는 이 link가 내부 네트워크를 위한 것이고 컴퓨터 자체가 gateway로써 쓰이고 있기 때문이다. 같은 방법으로 2번째 유선 연결(NAT connection을 위한 것)을 설정할 것인데, 이번에는 DHCP를 통해 IP 주소를 할당할 것이다. 좀 전에 한 것처럼 'ifconfig' 명령어를 통해서도 할 수 있지만 아래와 같이 GUI를 통해서도 설정할 수 있다.
3) 이제 IP forwarding을 설정할 것이다. 'network.sh'라는 이름의 파일을 생성하고, terminal에 'chmod 755 network.sh' 명령어를 입력해준다. 'network.sh'의 내용은 다음과 같이 한다.
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -P FORWARD ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
첫 번째 줄의 내용 : Linux 커널에 있는 ipv4 stack을 ip_forward로 활성화
두 번째 줄의 내용 : iptables이라는 내부 방화벽을 packet을 fowarding 할 수 있게 설정
세 번째 줄의 내용 : post routing 울을 추가하고 모든 packet들을 eth2로 forward 되도록 설정
(Note: eth2는 adpater2(외부 네트워크, NAT)에 대한 outlink다. 시스템마다 eth2이 아니라 다른 이름일 수도 있음)
3.3 Reconfigure XP Guest
이제 다시 되돌아가서 XP Guest를 다시 설정하여 Ubuntu guest를 통해 인터넷에 접속되게 할 것이다. Ubuntu guest에서 'nslookup www.google.com' 이라는 명령어를 입력하고 서버가 사용한 DNS를 찾는다. 그리고 'XP Guest->Control Panel -> Network Connections -> 오른쪽 마우스 클릭(속성) -> TCP/IP(속성) -> static IP : 169.254.236.200, gateway computer : 169.254.235.100'으로 설정한다. DNS 서버를 마찬가지로 설정한다. 브라우저를 시작해보면 인터넷 접속이 아직 안 되는 것을 알 수 있다!
다시 Ubuntu guest로 돌아것 'sudo ./network.sh' 명령어를 입력해준다. 그러면 XP Guest에서 이제 인터넷 접속이 된다는 것을 확인 할 수 있다. 'sudo wireshark' 명령어를 입력하면 XP에서 오고가는 모든 트래픽을 확인 할 수 있다.
(Note : wireshark를 실행시키면, 팝업창일 뜨면 반드시 클릭을 해야함. 클릭하지 않을 경우, 작동을 안 할 것임)
4. Challenge of the Day and Conclusion
Max++를 분석하기 위한 간단한 환경은 이제 모두 구축 완료 되었다. Linux Ubuntu Guest를 이용해서 악성코드에서 나오는 pakcet들을 모두 intercept 가능하다.
모든 구축이 완료 됐으므로 이제 XP와 Ubuntu guest system의 스냅샷을 만들어두자!
(복구가 필요할 때 이 스냅샷을 이용하여 복구할 수 있기 때문!)
# Refrences
[1] Guiseppe Bonfa, "Step-by-Step Reverse Engineering Malware: ZeroAccess / Max++ / Smiscer Crimeware Rootkit", Available at http://resources.infosecinstitute.com/step-by-step-tutorial-on-reverse-engineering-malware-the-zeroaccessmaxsmiscer-crimeware-rootkit/
[2] udroomla , "How To Increase Screen Resolution with VirtualBox and Ubuntu", Available at http://www.linuxformat.com/forums/viewtopic.php?t=6438
- End of this class -
※주의
이 글은 http://fumalwareanalysis.blogspot.kr/p/malware-analysis-tutorials-reverse.html 에서 참고 및 번역을 한 것입니다.
'Study > Malware Analysis Tutorial' 카테고리의 다른 글
[Malware Analysis Tutorial] 2 - Ring3 Debugging (0) | 2015.07.28 |
---|