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
새로 생성된 가상 머신에 악성코드를 직접 실행하게 될 가상 OS를 설치한다. 예제로 ‘Windows 7 Professional K x64’를
설치하였으며, 설치 과정은 생략하였다. 본 문서는 ISO 파일의 다운로드 URL이 포함되어 있지 않으므로 별도로 파일을
준비하여 설치를 진행한다.
-
Virtual
Box 실행한 뒤 가상 디스크
ISO 파일을 삽입하여 OS 설치
root@A3SECURITY:/~#
sudo virtualbox & |
[그림 4] 가상 디스크 ISO 파일 삽입
[그림 5] 가상 OS Windows 7 설치
설치가 완료된 후 IP 주소 및 방화벽을 외부와 통신이 가능하도록 설정한다. 설정된 IP 주소는 ‘Virtualbox.conf’
등의 설정 파일에서 동일하게 적용된다.
[그림 6] IP 주소 설정
[그림 7] 방화벽 설정
Guest PC 구성 프로그램 다운로드 및 설치
- Guest PC에서 구성 프로그램 ‘Python’ 및 ‘Python Image Library’를 다운로드
및 설치
[그림 8] Python Download
-
Host PC와 Guest PC 간 자료 전송을 위해 ‘agent.py’ 파일을 Guest PC로 복사
-
파일 공유를 위해 [바탕화면>Shared] 폴더를 생성하여 공유 설정 및 ‘agent.py’ 파일
복사
-
파일의 실행 여부 확인을 위해
‘Process-Explorer’ 다운로드
-
Guest PC에서 ‘agent.py’,
‘Process-Explorer’를 Administrator 권한으로 실행
[그림 9] agent.py, Process-Explorer 실행
-
‘agent.py’와 ‘Process-Explorer’가
실행 중인 상태에서 스냅샷을 기록
[그림 10] 스냅샷 기록
-
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
|
-
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
|
-
기본설정으로 사용 가능하며, ‘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는 콘솔(CUI) 제어도
가능하지만, 사용자의 편의를 위해 분석 결과 등을 웹 프레임워크에서
GUI 환경을 제공한다. 이를 사용하기 위해서는 웹 프레임워크 도구인 ‘Django’와 연동 DBMS ‘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.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 메뉴 설명