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 주소 설정
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 PC와 Guest 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 PC와 Guest 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 PC의 MASQUERADE 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 Sandbox의 Startup 파일인 ‘/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 메뉴 설명
'보안 도구' 카테고리의 다른 글
Recon-ng 사용법 및 기능 설명 (0) | 2016.11.11 |
---|---|
Cuckoo Sandbox 기능 설명 (0) | 2016.10.13 |
Cuckoo Sandbox 설치 및 구축 (1/2) (0) | 2016.10.13 |
오픈소스 CMS 취약점 점검 도구 CMSmap이란? CMSmap 사용법 (0) | 2016.09.22 |
[정보 수집 도구] FOCA 란?, FOCA 사용법 (0) | 2016.09.19 |