Cuckoo Sandbox – 설치 및 구축(2/2)

‘Cuckoo Sandbox – 설치 및 구축(1/2)’ 문서에 작성된 설치 방법에 따라 정상적으로 ‘Cuckoo Sandbox’ 구성 프로그램을 설치하였다면, 실제 악성코드를 분석하게 될 가상 환경을 구축한다.

가상 머신 Guest PC OS의 경우 ‘Windows 7 Professional K x64’로 설치가 진행되며, 해당 OS 설치 파일은 본 문서에서 제공하지 않으므로 별도로 설치 파일을 준비하여 가상 환경을 구축한다.

설치를 진행하기 이전에 ‘Cuckoo Sandbox – 설치 및 구축(1/2)’ 문서에 작성된 [1] 구성 환경 및 설치 프로그램 목록을 참고하여 버전 및 설치 환경을 가급적 동일한 버전으로 구축을 진행한다.

 

Virtual Box 및 가상 머신 OS 설치

-      사용자 환경에 호환되는 ‘Virtual Box’ 버전을 다운로드하여 설치

-      AWS(Amazon Web Service)와 같은 ‘Xen’ 환경에서는 가상 머신 ‘Virtual Box’ 실행 불가

-      본 가이드에서는 5.1.6 버전을 예제로 설치

root@A3SECURITY:/~# cd /opt

root@A3SECURITY:/opt# sudo apt-get install libqt4-opengl libsdl1.2debian -y

root@A3SECURITY:/opt# sudo apt-get install build-essential linux-headers-#(uname -r)

root@A3SECURITY:/opt# sudo wget http://download.virtualbox.org/virtualbox/5.1.6/virtualbox-5.1_5.1.6-110634~Ubuntu~trusty_amd64.deb

(설치 환경에 따라 amd64, i386 다운로드)

root@A3SECURITY:/opt# sudo dpkg -i virtualbox-5.1_5.1.6-110634~Ubuntu~trusty_amd64.deb

root@A3SECURITY:/opt# sudo usermod -g vboxusers cuckoo

root@A3SECURITY:/opt# sudo wget http://download.virtualbox.org/virtualbox/5.1.6/Oracle_VM_VirtualBox_Extension_Pack-5.1.6-110634.vbox-extpack

root@A3SECURITY:/opt# sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.1.6-110634.vbox-extpack

root@A3SECURITY:/opt# sudo /sbin/vboxconfig

root@A3SECURITY:/opt# sudo /etc/init.d/vboxdrv setup

root@A3SECURITY:/~# virtualbox&

  

Virtual Box Guest PC 생성 (Windows 7 Professional K)

-     
아래[그림 1]와 같이 ‘Virtual Box’ 가상 머신 생성

[그림 1] Create Virtual Box


[그림 2] Create Virtual Box

 

 

 

 

-     
아래[그림 4]와 같이 가상 하드 디스크의 위치 및 크기를 설정하게 되면 가상 머신 생성 완료

[그림 3] Create Virtual Box

Guest PC OS 설치

새로 생성된 가상 머신에 악성코드를 직접 실행하게 될 가상 OS를 설치한다. 예제로 ‘Windows 7 Professional K x64’를 설치하였으며, 설치 과정은 생략하였다. 본 문서는 ISO 파일의 다운로드 URL이 포함되어 있지 않으므로 별도로 파일을 준비하여 설치를 진행한다.

-     
Virtual Box 실행한 뒤 가상 디스크 ISO 파일을 삽입하여 OS 설치

root@A3SECURITY:/~# sudo virtualbox &


[그림 4] 가상 디스크 ISO 파일 삽입


[그림 5] 가상 OS Windows 7 설치

Guest PC 네트워크 설정


설치가 완료된 후 IP 주소 및 방화벽을 외부와 통신이 가능하도록 설정한다. 설정된 IP 주소는 ‘Virtualbox.conf’ 등의 설정 파일에서 동일하게 적용된다.



[그림 6] IP 주소 설정

 

[그림 7] 방화벽 설정


Guest PC 구성 프로그램 다운로드 및 설치

-      Guest PC에서 구성 프로그램 ‘Python’ ‘Python Image Library’를 다운로드 및 설치

Python 2.7.3 Download : http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi

PIL 1.1.7 Python Imaging Library (Windows only) Download : http://pythonware.com/products/pil


[그림 8] Python Download

-      Host PCGuest PC 간 자료 전송을 위해 ‘agent.py’ 파일을 Guest PC로 복사

-      파일 공유를 위해 [바탕화면>Shared] 폴더를 생성하여 공유 설정 및 ‘agent.py’ 파일 복사

-      파일의 실행 여부 확인을 위해 ‘Process-Explorer’ 다운로드

root@A3SECURITY:~# sudo cp /opt/cuckoo/agent/agent.py /home/cuckoo/Desktop/Shared/

Process-Explorer Download : https://download.sysinternals.com/files/ProcessExplorer.zip

 

agent.py, Process-Explorer 실행 및 스냅샷 기록

-     
Guest PC에서 ‘agent.py’, ‘Process-Explorer’Administrator 권한으로 실행


[그림 9] agent.py, Process-Explorer 실행


-      ‘agent.py’‘Process-Explorer’가 실행 중인 상태에서 스냅샷을 기록



[그림 10] 스냅샷 기록

Virtual Box Host-only Interface 생성 및 설정

-      Host PCGuest PC 간의 통신에 사용될 host-only 인터페이스 ‘vboxnet0’ 생성

root@A3SECURITY:~# sudo vboxmanage hostonlyif create

(오류 발생되는 경우 아래 참고)

root@A3SECURITY:~# sudo vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1

root@A3SECURITY:~# ifconfig

[오류 구문]

The vboxdrv kernel module is not loaded. Either there is no module available for the current kernel (시스템 커널 버전) or it failed to load.

[해결 방안]

root@A3SECURITY:~# sudo apt-get install dkms



Guest PC에서 Host PC 통신 시 vboxnet0으로 통신하도록 NIC 설정

-      Guest PC를 종료 후 설정, ‘Virtual Box’ 네트워크 설정 GUI에서 설정 가능

root@A3SECURITY:~# sudo vboxmanage modifyvm cuckoo1 --hostonlyadapter1 vboxnet0  root@A3SECURITY:~# sudo vboxmanage modifyvm cuckoo1 --nic1 hostonly

[오류 구문]

Guest PC NIC 설정 후 error 발생 할 경우 가상 머신 등록 설정

[해결 방안]

root@A3SECURITY:~# sudo vboxmanage registervm /root/VirtuaBox\ VMs/cuckoo1/cuckoo1.vbox

IPtables 규칙 추가

-      Guest PC 네트워크를 NAT 처럼 사용할 수 있도록 ‘iptables’ 규칙 추가

-     
재부팅 시 설정한 ‘iptables’ 규칙이 초기화 되므로, 스크립트 파일 생성 후 사용할 것을 권장


root@A3SECURITY:~# sudo iptables -A FORWARD --out-interface eth0 --in-interface vboxnet0 --source 192.168.56.0/24 --match conntrack --ctstate NEW -j ACCEPT

root@A3SECURITY:~# sudo iptables -A FORWARD --m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

root@A3SECURITY:~# sudo iptables -A POSTROUTING -t nat -j MASQUERADE


[그림 11] IPtables 규칙 추가

Host PCMASQUERADE IP 공유 설정

-      Guest PC의 통신을 Host PC에서 포워딩하기 위해 ‘MASQUERADE’를 아래와 같이 설정

root@A3SECURITY:~# sudo sysctl -w net.ipv4.ip_forward=1

root@A3SECURITY:~# sudo sysctl -p

Virtualbox.conf 설정

-      기본설정으로 사용 가능하며, ‘machines’을 여러 개 생성하여 다중 분석이 가능함

root@A3SECURITY:/opt/cuckoo# sudo vi /opt/cuckoo/conf/virtualbox.conf

[virtualbox]

mode = gui

machines = cuckoo1 // (Guest PC)

[cuckoo1]

label = cuckoo1

platform = windows

ip = 192.168.56.110 // (설정 IP 주소)

snapshot = CuckooStarted(20161004)  // (스냅샷 지정)

interface = vboxnet0

resultserver_ip = 192.168.56.1

resultserver_port = 2042

Cuckoo Sandbox 환경 구축

Cuckoo Sandbox의 필요 구성 프로그램들을 정상적으로 설치한 뒤, 추가로 몇 가지 설정을 마치게 되면 Cuckoo Sandbox의 구축이 완료된다. 구축 과정 중에 설치 환경 또는 적절하지 않은 설정으로 인한 오류가 발생될 수 있으니, 구축 과정과 오류 복구에 대한 설명에 따라 구축을 진행한다.

웹 프레임워크 구축

Cuckoo Sandbox는 콘솔(CUI) 제어도 가능하지만, 사용자의 편의를 위해 분석 결과 등을 웹 프레임워크에서 GUI 환경을 제공한다. 이를 사용하기 위해서는 웹 프레임워크 도구인 ‘Django’와 연동 DBMS ‘MongoDB’를 설치해야한다.

Django, MongoDB 설치 및 실행

-      ‘apt-get’ 명령어를 통해 ‘MongoDB’ 설치

-      ‘pip’ 명령어를 통해 ‘Django’ 설치

-      ‘/opt/cuckoo/web’ 디렉터리의 ‘manager.py’를 이용하여 ‘Django’를 실행

-      Django 기본 실행 시 ‘127.0.0.1:8000’으로 설정 됨

root@A3SECURITY:~# sudo apt-get install mongodb mongodb-dev python-pymongo -y

root@A3SECURITY:~# sudo pip install django==1.8.4

root@A3SECURITY:~# sudo /opt/cuckoo/web/manage.py runserver 0.0.0.0:8000

 

 

[오류 구문]

Failed to connect to databaseserverip:27017, reason: errno:111 Connection refused

[해결 방안]

root@A3SECURITY:~# sudo apt-get install --reinstall mongodb

 

[오류 구문]

(admin.E402) 'django.contrib.auth.context_processors.auth' must be in TEMPLATES in order to user the admin application.

[해결 방안]

/opt/cuckoo/web/web/settings.py 아래와 같이 소스코드 변경

TEMPLATES = [

    {

        "BACKEND": "django.template.backends.django.DjangoTemplates",

        "DIRS": [

         'template'

        ],

        "APP_DIRS": True,

        "OPTIONS": {

                'context_processors': [

                        'django.template.context_processors.debug',

                        'django.template.context_processors.request',

                        'django.contrib.auth.context_processors.auth',

                        'django.contrib.messages.context_processors.messages',

                        ],

                  },

        },

]         

MongoDB 설정

-      설정은 ‘/opt/cuckoo/conf’ 디렉터리의 ‘reporting.conf’ 파일에서 설정

[mongodb]

enabled = yes

host = 127.0.0.1

port = 27017

 

 

Cuckoo Sandbox 실행

-      Cuckoo Sandbox가 설치된 경로에서 ‘cuckoo.py’ Startup 파일 실행

-      로드(Load) Virtual Box Guest PC를 켜놓은 상태에서 Cuckoo Sandbox 실행해야 함

-      Snapshot을 지정한 경우 지정된 Snapshot으로 분석을 진행

-      Guest PC를 여러 개로 지정하고 싶은 경우 ‘cuckoo.conf’ 파일에서 [cuckoo2], [cuckoo3] 등을 추가하여 [cuckoo1]과 같은 방법으로 추가 설정할 수 있음


root@A3SECURITY:opt/cuckoo# sudo /opt/cuckoo/cuckoo.py

 

[오류 구문]

CRITICAL: CuckooCriticalError: Unable to import plugin "modules.processing.behavior": No module named dateutil.parser

[해결 방안]

root@A3SECURITY:~# sudo apt-get install python-pip –y

root@A3SECURITY:~# sudo pip install python-dateutil

 

[오류 구문]

Signature 패턴 등의 업데이트가 필요합니다

[해결 방안]

root@A3SECURITY:~# sudo /opt/cuckoo/utils/community.py -waf

 

[오류 구문]

[스크린샷 에러] could not find tesseract binary screenshot ocr aborted

[해결 방안]

root@A3SECURITY:~# sudo apt-get install tesseract-ocr

 

[오류 구문]

Unable to import yara (please compile from sources)

[해결 방안]

(yara 컴파일이 안되어 import 불가)

root@A3SECURITY:~# cd /opt

root@A3SECURITY:/opt# sudo git clone --recursiv https://github.com/plusvic/yara-python

root@A3SECURITY:/opt# cd yara-python

root@A3SECURITY:/opt/yara-python# sudo python setup.py build

root@A3SECURITY:/opt/yara-python# sudo python setup.py install

   

[오류 구문]

Unable to import pefile (`pip install pefile`)

[해결 방안]

(현재 설치되어 있는 pefile을 삭제한 뒤 수동으로 pefile을 재설치 해야함)

root@A3SECURITY:~# python

>>> import pefile

(ImportError: no module named pefile 에러 발생 시 재설치 필요)

root@A3SECURITY:~# sudo pip uninstall pefile

root@A3SECURITY:~# sudo wget https://github.com/erocarrera/pefile/files/192316/pefile-2016.3.28.gz

root@A3SECURITY:~# sudo pip uninstall pefile

tar xvfz pefile-2016.3.28.tar.gz

cd pefile-2016.3.28

python setup.py build

python setup.py install

 

[오류 구문]

분석 결과 스크린샷 탭에서 ‘Screenshot No available’ 구문으로 스크린샷 기능이 안될 경우

[해결 방안]

root@A3SECURITY:~# sudo vi /opt/cuckoo/conf/virtualbox..conf

(아래와 같이 설정)

[virtualbox]

mod = headless -> gui 로 변경

(설정되었더라도 Guest PC가 정상적으로 실행되지 않을 경우 스크린샷 기능 정상 작동 불가)

  

[오류 구문]

Cuckoo Sandbox 분석 로그에 Upload File Size 오류가 날 경우

[해결 방안]

root@A3SECURITY:~# sudo vi /opt/cuckoo/conf/cuckoo.conf

[resultserver]

upload_max_size = 10485760 (기본 10Mb, 임의로 지정)

analysis_size_limit = 10485760 (기본 10Mb, 임의로 지정)

 

 

-      Cuckoo SandboxStartup 파일인 ‘/opt/cuckoo/cuckoo.py’Django Startup 파일인 ‘/opt/cuckoo/web/manage.py’ 파일이 정상적으로 실행된 경우 아래[그림 13]와 같이 나타남

[그림 12] Cuckoo Sandbox, Django 정상 작동 모습

-      정상적으로 구축 과정을 완료한 뒤, 웹 브라우저로 ‘Django’를 실행할 때 설정한 IP주소와 포트번호를 입력(‘http://91.212.102.21:8000’)하면 아래[그림 14]와 같이 Cuckoo Sandbox의 대시보드 확인이 가능함

[그림 13] Cuckoo Sandbox 대시보드

 

-      Cuckoo Sandbox를 관리하는 ‘Django’ 웹 페이지에 접속하면 아래[그림 18]와 같은 상단 메뉴를 확인할 수 있음

-     
상단 메뉴에 대한 자세한 설명은 아래[2]에서 확인이 가능함




[그림 14] Cuckoo Sandbox 상단 메뉴

상단 메뉴

설명

Dashboard

진행 중인 작업과 완료된 작업, 대기 중인 작업 등의 상태를 확인할 수 있으며, 완료된 결과를 반영하여 Total tasks, Total samples 카운트

Recent

최근 분석 내역을 확인할 수 있음

Pending

분석 대기중인 작업을 확인할 수 있음

Search

Elastic Search 모듈을 추가한 후 분석 내용을 검색할 수 있음

Submit

분석 대상 파일을 업로드할 수 있음

Import

분석 대상 zip 파일을 업로드할 수 있음

[1] 상단 메뉴 설명

-     
분석 완료 후 상단 메뉴의 [Recent] 탭에서 분석 결과를 확인할 수 있으며, 분석 결과의 Report 메뉴는 아래[그림 16]와 같이 나타남

[그림 15] 분석 결과 Report 메뉴


Report 메뉴

설명

Summary

파일 상세 정보, 시그니쳐, 스크린샷, 네트워크 분석, 레지스트리, 뮤텍스, 프로세스, 경로 등의 분석 요약 내용을 확인할 수 있음

Static Analysis

대상 파일의 포맷, 버전, 섹션, 리소스 등의 정보를 확인할 수 있으며 이를 통해 정적 분석이 가능함

Behavioral Analysis

분석 중 프로그램이 실행되고 있을 때 프로세스 상태와 시작 및 종료 시간, 로드된 dll, 리턴 값 등의 정보를 확인할 수 있으며, 이를 통해 동적 분석이 가능함

Network Analysis

대상 프로그램이 실행되면서 발생된 패킷에 대한 정보를 확인하여 네트워크 패킷 분석이 가능함

Dropped Files

대상 프로그램이 실행되면서 생성 또는 다운로드된 파일 정보를 확인할 수 있음

Process Memory

덤프된 프로세스 메모리 정보를 확인할 수 있음

Admin

해당 작업에 대한 정보 확인 및 삭제 등의 관리가 가능함

[2] 분석 결과 Report 메뉴 설명


블로그 이미지

Diano.

http://www.diano.kr / 이사하는중 /

,