kkamagi's story

IT, 정보보안, 포렌식, 일상 공유

DFIR

Cuckoo Sandbox 2.0설치 - for Windows 7

까마기 2017. 2. 23. 15:38
728x90
반응형

 

악성코드 분석을 위한

Cuckoo sandbox 2.0 설치 – for Windows 7

 

 * 본 포스팅은 인터넷 블로그 및 공개된 단행본을 참고 하였습니다.

 


I. Cuckoo Sandbox?

1) 개요

: 쿠쿠 샌드박스(Cuckoo Sandbox)는 가상머신을 이용한 악성코드 분석 플랫폼이다. 각 기업의 네트워크 환경에서 현업 PC에 악성코드가 실행 탐지/감염되었을 경우 보안솔루션에 의해 샘플을 얻거나, 네트워크 패킷 분석을 통해 얻은 악성실행 파일에 대하여 가상머신에서 실행하고 그 행위를 분석하여 결과를 자동으로 수집한 정보를 얻을 수 있다.

 쿠쿠 샌드박스는 기본적으로 GNU/Linux(Debian 계열 또는 우분투)에 설치하는 것을 가정하고 있다. 때문에 윈도우 운영체제를 사용하여 분석할 경우 가상머신 소프트웨어를 윈도우 OS에 설치하고 가상머신 소프트웨어에 Ubuntu를 설치한 후에 다시 Ubuntu 환경에서 Sandbox에 사용할 환경(Window OS)을 구축해야 하는 번거로움이 있다.

 이번에는 Host 운영체제를 Linux 계열 또는 Mac OS X 운영체제를 사용하지 않는 이상 보통의 기 윈도우이기 때문에 윈도우 환경에서 구축해보도록 하겠다. (최근에는 docker 환경에서 간단히 설치 및 실행하는 방법도 있다)

 

2) 주요 기능

- 악성코드에 의해 수행되는 Windows API 함수 호출 추적

- 악성코드에 의해 파일 생성 및 복사, 삭제 확인

- 선택한 프로세스의 메모리 덤프

- 분석 시스템의 전체 메모리 덤프

- 악성코드 실행하는 동안 스크린 샷(Process explorer)

- 네트워크 덤프

 

3) 구성 프로그램 및 기능

- Virustotal 검색결과 (기본적으로 연결되며 사용 유무 설정 가능)

- 실행 압축 확인 (PE file 설치)

- Fuzzy Hash 확인 (ssdeep 설치)

- 패턴을 이용하여 악성코드 식별 및 분류 (Yara 설치)

- 네트워크 트래픽 분석 (tcp dump 설치)

- 분석을 위한 가상환경 구성 (Virtualbox 설치)

 

4) 분석 가능한 파일

* 실행파일 및 DLL 파일 외에도 가상머신 관련 프로그램을 설치하여 여러 종류의 파일 분석이 가능하다.

- Windows PE files (DLL files 포함)

- PDF files Office Documents files 등 문서파일

- URLs

 

5) 2.0 Release 핵심 내용


64비트 윈도우 응용프로그램과 샘플 모니터링

  • 지난 반년동안 제대로된 64비트 윈도우 시스템의 모니터링을 구현하기 위해 노력했다.

맥 OSX 분석
  • Dmitry Rodionov가 구글 섬머 코드 2015의 일환으로 쿡쿠 샌드박스를 위한 맥 OS X 분석기를 개발했다. 하지만 맥 OS X를 가상머신으로 구축하여 운영하는 것은 애플의 약관에 위반될 수 있으니 주의바란다. 물론 우리가 책임지지는 않는다. 이 분석기의 핵심은 Dtrace의 사용이다.

리눅스 분석
  • Mark Schloesser가 이 부분을 집중적으로 제작했는데 사실 이 시스템이 쉘 쇼크랑 엘라스틱서치 취약점으로 고생했다. 리눅스 분석은 Sysdig, LTTNG, SystemTap과 같은 기존의 몇몇 프로젝트를 잘 활용하여 구현했다. 다만 ARM이나 MIPS와같은 다른 플랫폼으로 확장할 때 문제가 발생한다.

안드로이드 분석
  • Cuckoo Droid로 잘 알려진 Idan Revivo이 고생하여 만든 안드로이드 분석기를 사용했다. ADB 기반으로 에뮬레이터를 실행하고, 달빅/자바 런타임을 후킹하여 자바 함수를 기록하는 형태로 모니터링을 구현했다.

PCAP 분석 도구의 통합
  • 수리카타(Suricata), 스노트(Snort) 그리고 모로치(Moloch)와 같은 PCAP 분석 도구의 기능들을 통합하여 기능화하였다. 최종적으로 아이피나 도메인에서 하이퍼링크를 타고 모로치 웹 인터페이스에 접속하면 자동으로 차단 쿼리를 생성하는 형태로 구현하려고 한다.

TLS/HTTPS 트래픽 복호화 및 도청 분석
  • TLS/HTTPS 트래픽을 수집하여 분석할 수 있게 구현했다. 물론 분석을 위한 목적도 있지만, 투명한 방식으로 TLS를 차단하는것이 최종 목표다. 암호화를 복호화하기 위해 VM에 인증서를 설치하지 않는다. Cuckoo Sandbox의 동작과 함께 암호화와 복호화가 함께 진행하도록 구현했다.

VPN 지원을 포함하여 각각의 네트워크 라우팅 분석
  • Erik Kooijstra과 n3sfox의 도움으로 VPN을 지원하는 형태로 구성할 수 있었다. 다음 릴리즈에서는 FakeNet와 InetSim과 같은 서비스를 지원하도록 구현할 예정이다. 

악성 행위를 구분하고 정의하기 위한 300가지 넘는 시그니쳐
  • 200여개의 새로운 시그니처를 제공한 RedSocks에게 무한한 감사를 드린다. community.py -waf 명령으로 모든 패턴을 다운로드 받을 수 있다. 시그니처들은 악성코드의 악성행위에 따른 수치화를 진행했다.

볼라티리티(Volatility) 베이스라인 캡쳐를 지원하여 분석하는 동안 변경되는 부분을 강조
  • 구현하고 싶은 기능이 매우 많지만, 잠재적인 참여자의 도움이 클 경우 우선순위가 올라갈 수 있다. 우리는 Bart Mauritz 와 Joshua Beens의 도움으로 볼라티리티 분석 데이터를 실시간 표시할 수 있는 개념을 증명했다. 이제는 모든 메모리 분석이 끝난 후 레포트를 받아 볼 필요없이 실시간으로 받아 볼 수 있다.

프로세스 메모리 덤프에서 URL 추출
  • 메모리에서 URL을 추출할 수 있는 기능을 구현했지만, 좀 더 정교하고 자동화된 기능은 다음 릴리즈에서 기대할 수 있을 것이다.

다른 VM에서 추가 서비스를 실행할 가능성
  • 오랜 시간동안 많은 사용자들의 요청에 의해 만들어진 기능이다. 특별한 상황에서는 악성코드가 네트워크를 통해 부가적인 확산을 시도할 수 있다. 이를 위해 여러대의 가상머신을 실행하여 분석하는 기능을 구현할 예정이다. 현재는 원시적인 단계에 있지만, 앞으로의 업데이트에서 점점 세련되게 구현할 것이다. 예를 들면 허니팟 시나리오의 지원과 실제 기업 환경을 복제하기 위한 AD 서버를 지원하려고 한다.

많은 버그를 수정하고 자동화를 개선



1.    구성

1)    구성 환경

 

Host PC(WIN 7 64bit)

Guest OS(Ubuntu 16.04 64bit)

Cuckoo Sandbox(Win7 32bit)

 

2) 네트워크 구성

 

 

 

 

 

 

 

 

 

 

 

 

 

II. 가상머신 환경 구축

 

1) Host PC에서 VirtualBox를 이용하여 Cuckoo Sandbox 설치

 

 

1. Host PC Guest PC 구성

1) Host PCOracle VirtualBox 프로그램 다운로드 및 설치

 

2) Ubuntu iso 파일 다운로드 및 설치, 게스트 확장 설치

 

 

 

 

 

 

 

 

 

3) Guest PCUbuntu 설치 및 Cuckoo Sandbox 환경 구축

Ubuntu에서 Virtualbox 설치

# apt-get install virtualbox

 

- virtualbox 실행

 

 

sandbox OS 이미지 download

- http://modern.ie 접속 및 VM 다운로드 (iso 이미지가 있으면 해당 이미지로 VM 설치)

 

 

 

 

 

 

 

2. 네트워크 인터페이스 설정(Guest PC - Ubuntu)

* 네트워크 설정

– 2개의 인터페이스 (NAT, Host전용 또는 NAT, Bridge)

ex) 네트워크 구성 확인 예

 

 

1) NAT- IP

: 10.0.2.15

 

======Virtualbox 설치======

 

uname a

 

apt-get install linux-headers-(커널버전)-generic

 

/etc/init.d/vboxdrv setup

 

apt-get install virtualbox -y

 

 

 

======사용자 생성======

 

# usermod G vboxusers <username>

 

 

 

 

 

2) vboxnet0

: 192.168.56.1

: vboxnet 인터페이스 생성하기 (Guest OS Sandbox 통신하기 위함)

 

# vboxmanage hostonlyif create

# vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1

# vboxmanage registervm /home/cuckoo/VirtualBox VMs/cuckoo1/cuckoo1.vbox

# vboxmanage modifyvm cuckoo1 --hostonlyadapter1 vboxnet0

# vboxmanage modifyvm cuckoo1 --nic1 hostonly

 

 

==============================================================

vi /etc/init.d/vboxnet

 

#!/bin/sh

 

vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1

vboxmanage modifyvm cuckoo1 --hostonlyadapter1 vboxnet0

vboxmanage modifyvm cuckoo1 --nic1 hostonly

 

chmod 755 vboxnet

apt-get install sysv-rc-conf

sysv-rc-conf vboxnet on

init 6

ifconfig -> 확인

==============================================================

 

 

 

 

 

 

 

 

 

 

 

 

 

3) 포트 포워딩

- Host only Adapter(호스트 전용 네트워크)

: 호스트 PC의 네트워크 어댑터를 통하여 게스트(VM)과 통신하기 위한 네트워크 설정

-> 포트 포워딩 설정을 위해 필요

 

 

 

 

 

3. iptables 설정

 

1) Hostonly Network로 설정하였을 경우

 

iptables -A FORWARD -o enp0s3 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT

iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A POSTROUTING -t nat -j MASQUERADE

sh -c "iptables-save > /etc/iptables.rules"

 

2) sysctl 수정

 

# vi /etc/sysctl.conf

net.ipv4.ip_forward=1      -> ip forwarding 커널단에서 활성화

 

 4. 라이브러리 패키지 설치

# apt-get update y

# apt-get upgrade -y

# apt-get dist-upgrade y; apt-get autoremove y; shutdown r now later

 

# apt-get install python python-dev python-pip python-sqlalchemy python-dpkt python-jinja2 python-magic python-pymongo python-bottle libtool byacc flex bison git subversion libffi-dev libpq-dev libxml2-dev libssl-dev libxslt1-dev libldap2-dev libsasl2-dev libfuzzy-dev curl automake libvirt-dev vim python-dist swig tesseract tesseract-ocr m2crypt python-dateutil pymisp

 

# apt-get install python python-dev python-sqlalchemy python-dpkt python-jinja2 python-magic python-pymongo python-bottle -y

 

# apt-get install swig -y

# apt-get default-jre

# apt-get install libmysqlclient-dev

# apt-get install subversion -y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 5. Cuckoo 설치

1) cuckoo archive download  및 설치

github 저장소에서 다운로드하기

cd /cuckoo

wget https://github.com/cuckoosandbox/cuckoo/archive/master.zip

unzip master.zip-> cuckoo-master 디렉터리 생성

 

cuckoo 공식 사이트에서 다운로드

- 최신버전 : Cuckoo sandbox 2.0-rc2

 

- 다운로드 받은 파일

 

 

- ubuntu로 파일 옮긴 후 압축 해제 및 버전 확인

 

 

 

2) 라이브러리 업데이트

 

pip install --upgrade pip

 

- community signatures download modules

cd /cuckoo/utils/

python community.py -wafb monitor

pip install –r requirements.txt   

-> github에서 배포되는 패키지들은 대부분 requirements.txt 라는 파일을 포함하고 있다. 관련된 의존 패키지를 나열해 놓은 것이며, cuckoo의 경우 각 패키지의 버전까지 명시가 되어 있어 매우 편리하다.

 

pip install pydeep

pip install cybox==2.0.1.4

pip install maec=4.0.1.0

pip install m2crypto

pip install sqlalchemy requests MySQLdb MySQL-python(또는 mysql-python) bson python-dateutil

 

 

 

 

 

 

 

3) Yara 설치

- 시그니처 기반으로 파일의 패턴을 분석하여 악성코드를 분류하는데 사용하는 Tool

- 행동기반 탐지를 하지 못하지만, 패턴 기반으로 악성 파일이나 프로세스를 탐지 (식별을 위해 탐지패턴 즉, rule 파일을 만들어야 한다)

wget https://github.com/plusvic/yara/archive/v3.3.0.tar.gz -O yara_3.3.0.tar.gz

tar xvfz yara_3.3.0.tar.gz

cd yara-3.3.0

chmod +x build.sh

./build.sh

make && make install

cd yara-python

python setup.py build

python setup.by install

ldconfig

python tests.py

yara –v

 

 

4) Volatility 설치

wget https://github.com/volatilityfoundation/volatility/archive/2.4.1.tar.gz -O volatility-2.4.1.tar.gz

tar xvfz volatility-2.4.1.tar.gz

cd volatility-2.4.1

make && make install

python setup.py install

 

svn checkout http://distorm.googlecode.com/svn/trunk/ distorm

cd distorm

python setup.py install

 

5) tcpdump 설치

apt-get install tcpdump -y

ll /usr/sbin/tcpdump

chmod +s /usr/sbin/tcpdump

ll /usr/sbin/tcpdump

apt-get install libcap2-bin -y

 

setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

getcap /usr/sbin/tcpdump

 

6) Suricata 설치 및 설정 (ids/ips 시스템 구성)

apt-get install suricata

cp /etc/suricata/suricata-debian.yaml /etc/suricata/suricata-cuckoo.yaml

vi /etc/suricata/suricata-cuckoo.yaml

Locate file-store: (use ctrl+w to search).

Set enabled to yes.

Set force-md5 and force-filestore to yes.

Enable file-log, which should be located right below it.

Locate reassembly: use ctrl+w to search (You'll need to do this twice; the first reference is just comment documentation about it, you want is the actual, non-commented reassembly:)

Set depth, to 0 (without a unit of measurement)

Set request-body-limit and response-body-limit to 0 

(without any measurement unit), under default-config:

Under the vars: address-groups: section, set EXTERNAL_NET to any.

Download etupdate to update Emerging Threat's Open IDS rules:

$ git clone https://github.com/seanthegeek/etupdate.git

$ sudo cp etupdate/etupdate /usr/sbin

$ sudo /usr/sbin/etupdate -V

Edit the crontab:

$ sudo crontab –e

42 * * * * /usr/sbin/etupdate

 

7) inetsim 설치

apt-get install inetsim 또는 패키지 받아서 설치

 

8) Moloch 설치

apt-get install uuid

cuckoo 디렉터리로 이동

# git clone https://github.com/aol/moloch.git

cd /moloch

 

9) snort 설치

apt-get install snort

pip install snort

 

 

 

 

 

10) PE file 설치

 

# apt-get install python-pefile

# svn checkout http;//pefile.googlecode.com/svn/trunk/pefile

-> 해당 명령어를 실행한 위치에 ‘pefile’ 디렉터리가 생성 -> /opt 위치가 아니라면 /opt 로 이동

 

11) ssdeep 설치

 

- ssdeep Fuzzy Hash를 사용하여 원본 파일과의 유사도를 파악하기 위해 사용

- 해쉬 값은 파일의 일부만 수정해도 전혀 다른 값이 나오지만, Fuzzy Hash는 하나의 파일을 블록 별로 구분하여 해싱을 하기 때문에 원본과 유사한 파일을 찾아낼 수 있다.

 

# apt-get install git

wget http://sourceforge.net/projects/ssdeep/files/ssdeep-2.10/ssdeep-2.10.tar.gz

tar xvfz ssdeep-2.10.tar.gz

rm ssdeep-2.10.tar.gz

mv ssdeep-2.10 ssdeep

cd /opt/pefile/ssdeep

./configure

make && make install

ldconfig

cd /opt

 

 

12) pydeep 설치

 

pip install pydeep

또는

git clone https://github.com/kbandla/pydeep.git pydeep

cd pydeep

python setup.py build

python setup.py install

 

13) dev 2.0

pip install python-datautil

cuckoo 설치 후 /cuckoo ./utils/community.py -wafb monitor

 

 

 

6. Cuckoo Sandbox 설치

1) modern.ie에서 다운로드 받은 VM 불러오기

- Ubuntu(게스트 OS)에서 VM 분석을 하기 위한 sandbox

 

2) Host Guest PC 간 공유폴더 설정하기

 ① 공유폴더 설정_1

 

mkdir /opt/share

mount –t vboxsf 폴더이름 마운트할 경로

 

 

 

 

 

 

 

 

 

 

 

 

 

② 공유폴더 설정_2

- samba 설치 및 공유폴더 설정

 

apt-get install samba system-config-samba gksu

 

gksu system-config-samba

 

 top menu

  Preferences - server settings

    - Guest Account : avahi

  Preferences -  samba users

    - Add User : avahi

sudo apt-get install sysv-rc-conf

sudo sysv-rc-conf --list

  - smbd nmdb 데몬이 실행되어야 자동 실행됨

 

 

update-rc.d smbd defaults

 update-rc.d nmbd defaults

sysv-rc-conf --list | grep -E "nmbd|smbd"

 

 

 

gksu system-config-samba

  - +add samba share

  - basic 

  - access : only allow access to specific users

 

 

-> 폴더권한 설정 후 윈도우에서 접속 확인

 

 

 

3) VM 불러오기 - Sandbox 환경 구축
  
modern.ie 사이트에서 다운로드 받은 VM을 불러온다.

 

   VM 이름 : cuckoo sandbox 1

(cuckoo설치디렉터리/conf/virtualbox.conf에 이름 지정 시 동일하게 세팅 필요)

 

sandbox 네트워크 설정 – Host-only (vboxmanage 명령어로 vboxnet0 생성 후 선택)

 

5) Guest 확장 패키지, Python, PIL 설치 , agent.py 복사 및 실행

 

 

 

 

 

6) 방화벽, UAC off 및 자동업데이트 비활성화

 

 

7) 네트워크 설정 (Sandbox)

① 호스트 전용 어댑터 설정

 IP : 192.168.56.103/24

   GW : 192.168.56.1 (Ubuntu vboxnet0 IP)

   DNS : 8.8.8.8, 168.126.63.1

 

8) Snapshot 생성 및 Clone 생성

 

 

9) Sandbox VM Name 설정

 

l  Mysql 설치 및 데이터베이스 연결

apt-get install mysql-server python-mysqldb -y

mysql -u root -p

create database 데이터베이스명;

grant all privileges on 데이터베이스.* to user@localhost identified by ‘패스워드;

flush privileges;

quit

 

- mysql 설치 후 설정된 데이터베이스 연결 파라미터를 반영하기 위해 cuckoo.conf 파일을 수정

[database] 부분

 

 

 

 

 

 

 

 

 

 7. Cuckoo Sandbox 설정

1) cuckoo conf 설정

auxiliary.conf : 보조 모듈 설정

avd.conf : 안드로이드 sandbox 환경 설정

cuckoo.conf : cuckoo 엔진 설정

esx.conf : esx 가상화 sandbox 환경 설정

kvm.conf : kvm sandbox 환경 설정

memory.conf : memory dump 설정

physical.conf :

processing.conf : process 모듈 설정

qemu.conf : qemu를 사용한 sandbox 환경 설정

reporting.conf : 분석 결과 보고서 설정

- json

- html

- mongodb

- elasticsearch : Shay Banon Lucene을 바탕으로 개발한 분산 검색엔진이다. 설치와 서버 확장이 매우 편리하기 때문에 개발하고 있는 시스템에 검색 기능이 필요할 경우에 적용하며, 분산 시스템이기 때문에 검색 대상 용량이 증가했을 때 대응하기 수월한 점이 장점이다.

 

virtualbox.conf : sandbox 사용 소프트웨어 virtualbox 설정

vmware.conf : sandbox 사용 소프트웨어 vmware 설정

vpn.conf : vpn 연결하여 네트워크 구성 시 설정

vsphere.conf : Hyper-v를 활용하여 구성 시 설정

xenserver.conf : Xenserver 가상화를 활용하여 구성 시 설정

 

 

 

- /opt/cuckoo/conf/virtualbox.conf 설정 파일에서 Guest PC의 호스트네임을 동일하게 설정(cuckoo1)

- Guest PC 종료

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

 

vboxmanage hostonlyif create

vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1

 

 

======Cuckoo.conf 파일 설정======

 

* /opt/cuckoo/conf/cuckoo.conf

 

[cuckoo]

 

version_check = on

 

-> cuckoo 최신 버전을 체크한다. On/off로 지정

 

delete_original = off

 

-> 검사하는 원본 파일을 삭제 또는 사본 저장을 on/off로 지정

 

 

 

machinery = virtualbox

 

-> cuckoo가 사용할 가상화 소프트웨어를 지정

 

memory_dump = off

 

-> VirtualBox libvirt 모듈(KVM)을 이용하여 메모리 덤프의 생성을 on/off로 지정

 

-> Memory Dump를 하기 원한다면 on으로 수정한다. 악성코드가 감염되고 메모리 덤프 파일을 통해 악성코드의 행동을 분석할 시 이용된다.

 

 

 

[resultserver]

 

ip = 192.168.56.1

 

-> 분석 결과에 대한 로그를 수신하는 서버의 IP주소를 지정

 

port = 2042

 

-> 분석 결과에 대한 로그를 수신하는 서버의 포트번호를 지정

 

upload_max_size = 10485760

 

-> 업로드 하는 파일의 최대 크기를 설정

 

 

 

[processing]

 

analysis_size_limit = 104857600

 

-> 프로세스에서 생성된 파일의 크기를 설정

 

resolve_dns = on

 

-> DNS 조회의 사용 여부를 on/off로 지정

 

sort_pcap = on

 

 

 

[database]

 

mysql://kiwoom:kiwoom24!#%@localhost/cuckoo

 

-> 데이터베이스 연동

 

 

 

timeout =

 

-> 데이터베이스 연결의 타임아웃 시간 설정

 

 

 

[timeouts]

 

default = 120

 

-> 기본 분석 시간을 설정. 더 자세한 정보를 보기 위해서 시간을 더 크게 할 필요성은 없으며, 너무 짧으면 악성코드가 활동하기 전에 분석이 완료될 수 있기 때문에 분석을 통해 적당한 시간을 지정

 

critical = 600

 

-> 최대 분석 시간을 설정, 분석 시스템이 강제 종료되고 분석 결과의 대부분은 손실하게 된다

 

vm_state = 60

 

-> 가상머신의 상태를 변경하는데 대기하는 시간

 

 

===== Processing.conf 설정=====

 

* Processing.conf cuckoo 프로세스 동작에 대한 활성화/비활성화를 설정할 수 있다. 원하지 않는 기능을 사용하지 않으면 최종보고서에 해당 분석 부분이 보여지지 않는다.

 

Analysisinfo, apkinfo, baseline, behavior, buffer, debug, droidmon, dropped, dumptls, googleplay, memory, network, procmemory, screenshots, snort, static, strings, suricata, targetinfo, virustotal

 

* Cuckoo Sandbox 0.5 버전 이후부터는 VirusTotal API 키가 설정파일에 기본으로 저장되어 있는 것이 있기 때문에 이 키를 그대로 사용해도 되나, 자신의 API키를 사용하여 VirusTotal 서비스에 히스토리를 남기는 것이 좋다.

 

 

 

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

 vboxmanage registervm /home/user/virtualBox\ VMs/cuckoo1/cuckoo1.vbox

 

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

Vboxmanage modifyvm cuckoo1 --hostonlyadapter1 vboxnet0

 

====== IPTABLES 규칙 추가======

 

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

====== iptables 저장======

 

sh c iptables-save > /etc/iptables.rules

vi /etc/network/interfaces

pre-up iptables-restore < /etc/iptables.rules

 

:wq

 

- Host PC에서 패킷을 포워딩 하도록 설정 (마스커레이드, MASQUERADE)

sysctl w net.ipv4.ip_forward=1

 

 

- VirtualBox Guest PC (Windows 7) 네트워크 설정

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

III. Cuckoo 실행

 1. Cuckoo 엔진 실행

 /opt/cuckoo-master/

python cuckoo.py –d &

 

 2. Cuckoo Web UI 사용 및 Django 연동

1) python /cuckoo_설치디렉터리/web/manage.py runserver 10.0.2.15:8001 &

Ex) python manage.py runserver x.x.x.x:port

 

- Guest PC NAT IP cuckoo web 서비스를 올린다. (포트는 임의로 지정가능)

 

 

* Django 에러 시 버전 확인

pip freeze | grep Django

pip install Django==1.8

 

* 현재 문서에서는 Django 1.8 버전으로 진행 -> update하여 1.10.2 버전으로 되면 설정 상 에러 발생

 

 

 

 

3. Port Forwarding

  1) 설정 네트워크 어댑터1 – 포트 포워딩

 

2) ssh web UI를 로컬 PC에서 접근 가능하도록 포트 포워딩 설정

Host PC의 호스트 전용 네트워크 어댑터 IP 설정

 

Oracle VirtualBox (Host PC Guest PC) 포트포워딩 규칙

 

Host PC에서 Guest PC(Ubuntu)ssh 접속하기

 

Host PC에서 Cuckoo Engine Web UI 접속(8000)포트

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IV. Cuckoo 활용

 1. Utils 활용

 

1) api.py

cd /opt/cuckoo-master/utils

python api.py –H 192.168.56.101 –p 8090 &

 api.py로 서비스 실행 후 curl 명령어로 파일 분석 명령내리기

curl –F “file=@파일위치;filename=nameinpost” url.com

 

 

 - cuckoo 상태 출력

# curl http://localhost:8090/cuckoo/status

 

 

 

 

 

 

 

  2) submit.py

- 커맨드라인 인터페이스를 통해 분석을 요청하는 기능이며, 특정 디렉터리에 수집해 놓은 악성코드들에 대해 작업 예약을 해놓을 수 있다. 작업을 추가해 놓으면 Cuckoo Sandbox가 순서대로 작업 정보를 보고 자동 분석을 진행한다. 한곳에서는 악성코드를 정기적으로 수집하고, 수집된 악성코드를 자동으로 분석하도록 스케줄할 때 활용할 수 있다.

 

- 사용법

utils 경로로 이동 -> cd /cuckoo/utils

 

python submit.py [바이너리 파일 경로]

python submit.py --url [URL 경로]

python submit.py --priority 5 [바이너리 파일 경로]           우선순위

python submit.py --timeout 60 [바이너리 파일 경로]         분석시간제한

python submit.py --package [패키지명] [바이너리 파일 경로]        

python submit.py --package exe --option arguments=--dosomething [바이너리 파일 경로]

python submit.py --machine cuckoo1 [바이너리 파일 경로]

python submit.py --platform windows [바이너리 파일 경로]

python submit.py --memory [바이너리 파일 경로]

python submit.py --enforce-timeout [바이너리 파일 경로]

python submit.py –clock “03-23-2017 10:51:20” [바이너리 파일 경로]

 

ex) 명령어를 실행하면 해당 바이너리 파일에 대한 분석을 바로 진행하는 것을 알 수 있다.

 

 2. Report

1) default – Json, Html, Maec, MongoDB

- Maec

http://www.hakawati.co.kr/253

 

pip install lxml

 pip install cybox==2.0.1.4

 pip install maec==4.0.1.0

 apt-get install libxsl1-dev libxml2-dev

vi /home/cuckoo/conf/reporting.conf

[maec40]

 

enabled=yes

mode=overview

processtree=true

output_handles=false

static=true

strings=true

virustotal=true

 

 3. Django, MongoDB 설치

- Cuckoo 1.0 버전 이전에는 cuckoo 설치경로/cuckoo/utils/web.py 를 통해 웹 UI를 이용할 수 있지만 오래된 인터페이스이며, 분석 결과가 많은 경우 로드 시간이 오래걸리는 등 불편함이 존재한다. 또한 Cuckoo 2.0 버전에는 web.py 가 존재하지 않는다.

 

 이러한 이유로 단순한 설정 및 설치로 MongoDB를 이용한 파이썬 웹 프레임워크인 Django(장고)를 통해 운영 및 분석이 가능하다.

 

apt-get install mongodb mongodb-dev python-pymongo y

또는

apt-get install mongodb && sudo apt-get install mongodb-org && sudo apt-get install mongodb-dev && sudo apt-get install mongodb-server && sudo apt-get install mongodb-10gen

 

* apt-get error 날 경우

 

# rm /var/lib/dpkg/status

# touch /var/lib/dpkg/status

 

-> 다시 시도

 

pip install django (python-django 설치 안됨) -> 설치 후 /data/db 생성

 

======Django, MongoDB 설정======

# vi reporting.conf

[mongodb]

Enable = yes

 

====== Django 실행======

 

# cd /opt/cuckoo/web

# python manage.py runserver &

Firefox -> http://127.0.0.1:8000  cuckoo web ui 접속 확인

- mongod 로컬 포트 : 27017

 

7. Psql 설치

 

참고 : chess72.tistory.com/113, gurubee.net/lecture/2939

매뉴얼 : http://www.postgresql.org/docs

 

sudo -u postgres psql

 

* postgresql 설치

sudo apt-get install postgresql

 

* postgresql 문서 받기

sudo apt-get install postgresql-doc-8.4

 

* postgresql tool 설치

sudo apt-get install pgadmin3

 

* 설정 

sudo gedit /etc/postgresql/8.4/main/postgresql.conf

아래의 문장을 찾아 주석을 해제한다

#listen_addresses = 'localhost' 

listen_addresses = 'localhost'

 

sudo gedit /etc/postgresql/8.4/main/pg_hba.conf

아래의 문장을 찾아 peer md5로 변경한다.

# Database administrative login by Unix domain socket

local   all         postgres                          md5 

 

sudo /etc/init.d/postgresql restart

sudo /etc/init.d/postgresql reload

 

sudo -u postgres psql

위의 문장은 postgres 유저 이름으로 postgress db 를 로그인한다

위의 문장을 수행하면 postgress 명령을 수행할 수 있고 아래와 같이 표시가 변경된다

 

postgres=# 

위의 상태에서 sql psql 명령어를 입력할 수 있으며 종료 명령은 \q 이며

도움말은 \? 이다

 

* DB 생성 

sudo -u postgres createdb < db name >

 

* DB 접속 

sudo -u postgres psql < db name >

 

사용자계정 조회

SELECT * FROM PG_SHADOW;

또는 \du

 

CREATE USER TEST;

ALTER USER TEST ENCRYPTED PASSWORD 'aa' CREATEDB;

ALTER USER TEST CREATEROLE;

DROP USER TEST;

 

psql -U TEST

 

\l #데이터베이스 리스트

 

user : cuckoo

db : cuckoo_db

포트 :5432

 

접속 리셋

http://www.mozmorris.com/2011/11/15/configure-postgresql-to-accept-tcpip-connections.html

 

중요! 원격접속시 설정

postgresql.conf

listen_addresses = '*'

 

sudo gedit /etc/postgresql/9.3/main/pg_hba.conf

#IPv4 local connections:

host  all  all  0.0.0.0/0  trust

 

pgAdmin3 설치

sudo apt-get install pgadmin3

 

쿼리 테스트

select * from [table] where [row] = '1234a'

delete from table

 

iptables 설정

sudo iptables -A INPUT -p tcp --dport 5432 -s 192.168.0.0/16 -j ACCEPT

 

sudo sh -c "iptables-save > /etc/iptables.rules"

sudo gedit /etc/network/interfaces

 - 작성 : pre-up iptables-restore < /etc/iptables.rules

---------------------------------------------------------------

 

cuckoo에서 postgre db 사용시 설치 

 - sudo apt-get install libpq-dev

 - sudo pip install psycopg2

 

cuckoo/conf cuckoo.conf 수정

connection = postgresql://cuckoo:pw@192.168.202.137:5432/cuckoo_db

 

 

8. Error Message

 

1) VM 분석 시에 윈도우 창 에러 메시지에 is32bit 관련 메시지가 출력된다면, VM Snapshot agent.py를 관리자 권한으로 상승시켜 다시 실행 후에 Snapshot도 다시 캡쳐한 후에 분석을 진행한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

V. 악성코드 자동 분석

1. Malware 및 악성URL 분석

 1) file submit Analyze(수동 분석)

 

2) 분석 결과

 

 

 

 

 

- API Call 추적, File Dump, Screenshots, Network Traffic, Process, System memory dump

 

 

2. 상세 분석

1) 파일 정보

- 악성코드 샘플 파일 : 063627014979bc2c3d0f84261ad65a83.zip ( Cerber Ransomware )

- Size, File Type, MD5, SHA1, SHA256, SHA512, CRC32, ssdeep 정보

 

2) 동적 분석

- 프로세스 트리 (Process Tree)

 

 

V. 정리

 

1. 참고 URL

 

 

1) suricata IDS 구축

http://lamalama.tistory.com/entry/%EC%95%85%EC%84%B1%EC%BD%94%EB%93%9C-%EB%B6%84%EC%84%9D-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-3

 

2) Howto : Build a Cuckoo sandbox

https://infosecspeakeasy.org/t/howto-build-a-cuckoo-sandbox/27

 

  3) 악성코드 분석을 위한 Cuckoo Sandbox 설치(for Mac)

https://cpuu.postype.com/post/325368/

 

 


반응형