brunch

You can make anything
by writing

C.S.Lewis

by 복지CEO 조정원 Feb 07. 2016

리버스 엔지니어링 방법(제 1부: 가상머신 분석 환경)

보안프로젝트 매거진 - 악성코드 분석 투트리얼


※ 주의사항

아래 공격 코드는 연구 목적으로 작성된 것이며, 허가 받지 않은 공간에서는 테스트를 절대 금지합니다.

악의 적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신한테 있습니다. 이는 해당 글을 열람할 때 동의하였다는 것을 의미합니다.


이 문서는 http://fumalwareanalysis.blogspot.kr/p/malware-analysis-tutorials-reverse.html 문서 기반으로 번역을 하며, 실습하면서 다시 정리한 것입니다. 보안프로젝트 풋내기님이 진행하신 프로젝트입니다.


1. 리버스 엔지니어링 방법(제 1부: 가상머신 기반의분석 환경)

(원본: http://fumalwareanalysis.blogspot.kr/2011/08/malware-analysis-tutorial-reverse.html)

 

학습목표

1. 악성코드 분석을 위한 가상 머신 기반의 실습 환경 구성

2. 기초 네트워크 스니핑/모니터링스킬 습득

관련분야

1. 컴퓨터 네트워크와 통신 프로토콜

2. 운영체제

 

오늘의 문제

Max++ 악성코드를 실행하고 네트워크 활동을 서술하라.

 

다운로드 주소

오펜시브 컴퓨팅(Offensive Computing)에서 샘플을 다운로드 받기어려움을 겪는 사람들을 위한 또 다른 링크는 아래에 있다.

http://contagiodump.blogspot.com/2010/11/zeroaccess-max-smiscer-crimeware.html

또 Bonfa의 튜토리얼에서 다운로드 할 수 있다. Bonfa의 튜토리얼은 완벽한 Max++의 소개/분석을 제공한다.

1. 개요

이 튜토리얼들은 악성코드 분석에 흥미를 가진 사람들을 위해 제작했다. ZeroAccess라 불리는 악성코드를 분석하기 위해 단계적으로 나아간다. Giuseppe Bonfa는 여기에 악성코드의 훌륭한 분석을 제공하고 있다. 이 미니시리즈는 스스로 실습하는 분석 경험을 얻게 해준다. x86 어셈블리, 디버깅, 운영체제그리고 프로그래밍 원리를 기본적으로 이해하고 있다고 가정한다. 본 튜토리얼을 강의 자료로 사용하고자 한다면 이 사이트에 댓글과 함께 본 튜토리얼에 도움이 되도록 강의에 관한 정보를 제공해준다면 고맙겠다.

이번 장의 목적은 가상 머신 기반의 분석환경 구축이다. 진행하기 전에 아래 사항이 준비돼었는지 확인해야 한다.


1. 윈도우 XP SP2 설치 디스크

2. 리눅스 Ubuntu 설치 디스크(튜토리얼에서 사용하는 버전은 Ubuntu 10.04 lucid LTS지만 버전은 별 문제가 되지 않는다.)

3. 하드디스크여유공간 50GB (후에 이 컴퓨터를 “호스트 XP”로 참조한다.)

4. 고속 인터넷

5. 오펜시브컴퓨팅 계정(http://www.offensivecomputing.net/)

해상도가 너무 작다면 XP 게스트를 시작한 뒤 “게스트 확장 설치”를 설치하고 XP 게스트를재 부팅해 해상도를 조절하면 된다.

 

2. 소프트웨어 설치

많은 오픈 소스 또는 무료 소트프웨어 도구를 다운로드 받아야 한다. 설치 과정은이 문서에서 자세하게 설명하지 않는다. 설치 과정은 대략 5시간정도 걸린다.

1. Oracle Virtual Box v4.04(http://www.virtualbox.org/)

2. Windows XP 게스트 생성(Windows XP SP2, 최소 256MB의 램과 10GB의 하드디스크 공간을 할당한다.)

1. 파이선 2.7(http://www.python.org/download/ ) – 이뮤니티디버거를 설치하면 Python 2.7.1 버전이 설치된다.

2. 이뮤니티디버거(http://www.immunityinc.com/products-immdbg.shtml)

3. IDA Pro Debugger Free Version(http://www.hex-rays.com/idapro/idadown.html)

4. HxD(http://mh-nexus.de/en/hxd)

5. * OffensiveComputing.net에서Max++ 악성코드 다운로드(설명은 여기에있다. 파일 이름은 "Max++ downloaderinstall_2010"다. 실행하지 마라!!!)

6. 이 모든걸 설치한 후 스냅샷을 만든다. 스냅샷은 시스템 본래 상태로 빠르게 복구하게 한다.

3. WinDBG(http://msdn.microsoft.com/en-us/windows/hardware/gg463009) 호스트에 전체 XP 디버깅심볼을 다운로드 할지 선택해야 한다(디버깅 속도를 조금 높여준다.).

4. 리눅스 게스트 생성 (Ubuntu 10.04 설치 디스크를 사용한다. 적어도 512MB 램과 10GB 디스크공간을 할당한다.) 다음을 설치한다. ("apt-get"또는 "System -> Administration -> SynapticPackage Manager"를 사용할 수 있다.)

1. 와이어샤크

2. GDB(GNUdebugger)

3. g++(c++compiler)

4. Python

리눅스 게스트의 현재 해상도는 너무 작다. Linux Format Forum의 설명을 따라 하면 화면 해상도를 변경할 수 있다.


3. 구성

XP,Ubuntu 가상 머신 게스트들은 인터넷 접근이 가능해야 한다. 다음에 할 일은 XP 게스트의 모든 트래픽은 리눅스 게스트를 통해서만인터넷에 접근하도록 구성한다. 리눅스 게스트는 악성코드를 실행했을 때 XP 게스트의 네트워크 트래픽을 감시하기 위해 와이어샤크를 사용한다.


3.1 XP게스트

XP 게스트의 전원을 끄고 VM VirtualBox 관리자에서 XP 게스트를 우 클릭해 “설정”을선택한다. 이제 XP 게스트의 네트워크 어댑터를 설정한다.


네트워크에서 “어댑터 1” 탭 선택

(1) “네트워크 어댑터 사용하기(E)” 체크박스 클릭

(2)“내부 네트워크” 선택(주의: VirtualBox 관리자가 부여한 기본 네트워크 이름인 “intnet”을 사용해야 한다.).


이건 XP 게스트를 외부와 격리하고 VBox가 관리하는 내부 네트워크에 연결되게 한다.

그림 1. 윈도우 게스트 어댑터 설정


이제 WinDBG를 위한 직렬 포트를 활성화 한다. 설정은 아래와 같다. 포트/파일 경로에“\\.\pipe\com_11”과 포트 모드를 “호스트 파이프”로 만드는 것은 중요한 설정이니 주의해야 한다.

그림 2. WinDBG를 위한 윈도우 게스트 직렬 포트 설정


VT-x는 특별한 가상화를 지원하기 위한 CPU 기술이다. Virtual Box에서 이를 활성화해야 하며 활성화하지 않으면 하드웨어 브레이크포인트가 동작하지 않는다. 이 다음에Max++ 악성코드를 분석할 때 시스템 콜과 의존성을 알아볼 때 하드웨어 브레이크포인트를 이용해야 한다. VT-x를 아래와 같이 활성화 시켜준다.

그림 3. 윈도우게스트 VT-x 설정

 

3.2 리눅스 게스트

이제 리눅스 게스트를 내부 네트워크의 게이트웨이 컴퓨터로 설정한다(먼저 전원을 꺼라.). 두 개의 네트워크 어댑터가 필요하다. 하나는 내부 네트워크 용이고 다른 하나는 외부 네트워크 용이다.

다음 그림은 "어댑터 1"(내부네트워크)의 설정을 보여준다. "어댑터 2"에서, 네트워크 유형("AttachedTo")을 "NAT"로 설정한다. 알고 있겠지만 NAT(Network Address Translation)는네트워크 주소 변환을 의미한다. 이건 VM 인스턴스의 다계층 보안을 제공한다.

주의: 고급탭을 클릭해서, “어댑터 1”의 어댑터 종류를 “Intel Pro/1000 MT Desktop(82540EM)”으로 선택한다. 또한 MAC 주소의 마지막 두 자리를 “01”로변경해줘야 한다(이는 후에 “어댑터 1”을 쉽게 알아보기 위함이다.). 유사하게 “어댑터 2”의 MAC 주소의마지막 2자리를 “02”로 변경한다. 만약 VirtualBox 4.1.0이나 그 후의 버전을 사용 중이라면, “무작위모드(Promiscuous mode)”라는 체크박스가 있는데, 모든 트래픽을 가로채기 위해 “모두 허용”을 선택한다.

그림 4. 리눅스 게스트 "어댑터 1" 설정

 

그림 5. 리눅스 게스트 "어댑터 2" 설정


이제 리눅스 Ubuntu게스트를 재부팅해 XP 게스트 컴퓨터의 게이트웨이로 동작하기 위한 설정을 할 필요가 있다. 아래의 설명을 따라 한다.


1. 터미널 창을 열어 “ifconfig”를 입력해 사용 가능한 모든 네트워크 어댑터 정보를 확인한다.아마 세 개의 사용 가능한 네트워크 어댑터가 보일건데, 저자의 경우엔  “eth0”, “eth2”, 그리고 “lo”(local loophole interface)가 있다. MAC 주소를보면, VirtualBox 관리자가 설정한 장치를 구별할 수 있다. eth0이 “어댑터 1”의 “xx:….:01” 그리고 eth2가 “어댑터 2”의 “xx:….:02”와 일치한다고 가정한다.


2. “시스템>속성>네트워크 연결”을 클릭한다. 먼저 모든 장치를 제거한 후, 첫 번째 유선 연결을 아래 그림과 같게 설정한다. 게이트웨이는 반드시 “0.0.0.0”(세번째 셀에 0.0.0.0을 입력하는 걸 완료하고 "Save"를 클릭한다 – 우분투의 GUI는 몇 가지 문제를 가지고 있다. – 만일 Enter를 입력하지 않는다면, 추가 사항을 적용되지 않는다.)으로 설정한다. 왜냐하면 이 링크는 로컬 내부 네트워크이고 그 컴퓨터 자체가 게이트웨이기 때문이다. 비슷하게 두 번째 유선 네트워크(NAT 연결을 위한)를 설정한다. 이번에는 DHCP를사용해서 IP 주소를 할당 받도록 한다..

그림 6: eth0 설정


그림 7: eth2 설정


3. 이제 IP를 포워딩하기 위한 설정한다. “network.sh” 이름의 파일을 하나 만들고 “chmod 755 network.sh” 권한을 준다. 그리고 아래 보이는 세 개의 명령어로 구성된 셀 스크립트를 만든다.


sudo sysctl –wnet.ipv4.ip_forward=1

sudo iptables –P FORWARD ACCEPT

sudo iptables –t nat –APOSTROUTING –o eth2 –j MASQUERADE

첫 번째는 리눅스 커널에서 ipv4의 ip_forward 기능 활성화이다. 두 번째는 내부 방화벽이라 불리는“iptables”이 패킷 포워딩하는 걸 허용하게 설정한다. 세번째는 POSTROUTING을 추가해 모든 패킷을 eth2(주의: eth2는 어댑터 2로 설정한 외부링크다. 독자의 시스템에서는 다른 이름일 수 있다.)로 보낸다.


3.3 XP 게스트 재구성

이제 XP 게스트로 돌아와서 리눅스 게스트를 통해 인터넷에 접근 가능하도록 XP 게스트를 재구성한다. 리눅스 게스트에서 “nslookup www.google.com”을 실행해 DNS 서버를 사용할 수 있는지 확인한다. 그런 다음 XP 게스트로 가서 “제어판 > 네트워크 연결 > 우클릭(속성) > TCP/IP(속성)”으로들어가 "수동 IP로 설정"을 선택하고 정적 IP로 169.254.236.200 그리고 게이트웨이 컴퓨터는 169.254.236.100으로 설정한다. DNS 서버는 리눅스 게스트와 동일하게 설정한다. 브라우저를 실행해도아직 인터넷에 접근할 수 없다.


그림 8: 윈도우 게스트 TCP/IP 설정


이제 리눅스 게스트로 돌아와서 “sudo ./network.sh” 을 실행한다. 이제 XP 게스트가 인터넷에 접근 할 수 있다.

그림 9: 윈도우 게스트 인터넷 접속


“sudo wireshark” 를 실행하면 XP 게스트로 향하는 모든 트래픽을 가로챌 수 있다. (주의: 와이어샤크를 실행 할 때, 나타나는 대화창을 클릭해야 한다. 그렇지 않으면 와이어샤크는 동작하지 않는다.)


4. 오늘의 문제 및 결론

이제 Max++를 간단하게 분석하기 위한 환경을 성공적으로 구축했다. 리눅스 Ubuntu 게스트를 사용하면, 악성코드가 보낸 모든 패킷을 가로챌 수 있다. 가상 머신 기술은 어떤 시스템이 망가지면 빠르게 복구 할 수 있는 큰 장점이 있다.


이제 윈도우와 리눅스 게스트 시스템의 스냅샷을 만들어야한다.

마지막으로, 오늘의 문제

Max++ 악성코드를 실행하고 그에 따른 네트워크활동을 설명할 수 있는가??

참고문헌

[1] Guiseppe Bonfa,"Step-by-Step Reverse Engineering Malware: ZeroAccess / Max++ / SmiscerCrimeware Rootkit", Available at http://resources.infosecinstitute.com/step-by-step-tutorial-on-reverse-engineering-malware-the-zeroaccessmaxsmiscer-crimeware-rootkit/

[2] udroomla , "How To Increase ScreenResolution with VirtualBox and Ubuntu", Available at http://www.linuxformat.com/forums/viewtopic.php?t=6438 

매거진의 이전글 2016년 2월 보안프로젝트 강의 소식
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari