샌디박싱과 쿠쿠박스

악성코드 및 포렌식|2021. 3. 28. 18:03

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

쿠쿠 박스 설치를 위해 http://ropgadget.com/posts/cuckoo_install.html를 참고하여 설치를 진행한다. 문제점이 몇 가지 존재하여 쿠쿠박스.org를 참고했으며, 우분투는 14.04버전을 다운로드 받아 실행한다. 다음 url은 우분투 초기 세팅 버전이니 우분투를 직접 설치하기 귀찮으신 분들은 아래 링크를 사용하면 된다. 다운로드 후에 VMware를 사용하여 열자. vmware 관련 툴도 같이 설치가 돼있다.

 

Ubuntu 14.04 init OVA 파일

https://1drv.ms/u/s!ApuAgT1AKk_rgv5f9JzjD3mjZfVRzQ

 

CuckooSandBox2.0-RC2

https://1drv.ms/f/s!ApuAgT1AKk_rgv8VeFS1o4bjsWa2tA

 

 

1. Create user

 

쿠쿠샌드박스를 운영할 유저를 만든다. 명령어로 간단히 유저를 만드는 것도 좋은 방법이지만, 이 방법보다는 직접 데스크탑 상단의 환경 설정에서 사용자 관리를 통하여 유저를 만드는 것을 추천한다. 유저를 만든 후에 그룹은 명령어를 통해서 입력하면 된다. 유저를 만들 때는 관리자로 만들도록 하고 부팅시 자동로그인을 설정해두면 편리하다.

바탕화면 상단 가장 우측에 존재하는 설정 마크를 눌르고 [시스템 설정]을 클릭한다.

 

시스템 설정에서 사용자 계정을 클릭한다.

 

사용자 계정에서 왼쪽아래 [+ 버튼]을 누르면 사용자를 추가할 수 있는데 그전에 오른쪽 상단에 잠금해제를 해주어야 한다. 잠금해제를 하지 않으면 권한이 없어서 계정을 만들 수 없다.

 

[+ 버튼]을 누르면 아래와 같이 계정추가 창이 뜬다. 아래와 같이 관리자 계정으로 cuckoo 사용자를 만든다. 관리자 계정으로 세팅하지 않을 경우 sudo 명령어를 사용할 수 없으니 주의하자.

 

 

cuckoo 사용자가 잘 만들어졌다면, 터미널을 실행해 cuckoo 사용자의 비밀번호를 설정하고 그룹을 추가하자.

# sudo passwd cuckoo // 패스워드 세팅

# sudo apt-get install virtualbox // 버츄얼박스 설치

# usermod -a -G vboxusers cuckoo

# usermod -a -G sudo cuckoo

다시 사용자 계정 창으로 들어가서 잠금을 해제하고 자동 로그인을 활성화하자. 원래 계정은 자동 로그인을 꺼주고, cuckoo는 켜자.

 

 

 

사용자 설정이 완료가 됐다면 시스템 재부팅을 하자. 리붓 후에는 cuckcoo사용자로 자동 로그인된다.

 

$ sudo restart 

2. Update system

쿠쿠를 설치하기 앞서 모든 시스템을 업데이트하는 과정으로 시간이 좀 걸린다.

cuckoo@cuckoo:~$ sudo apt-get remove apt-listchanges

cuckoo@cuckoo:~$ sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get autoremove -y

3. Install dependencies and tools

쿠쿠 박스에 필요한 모든 의존성 있는 파일들을 설치한다. 업데이트 시 오류가 발생하는 몇 부분이 있지만 프로그램이 알아서 대치해서 설치한다. 그러나 jdk의 경우에 8버전은 설치가 되지 않으니 7버전으로 설치하면 된다.

후에 yara를 설치할 때 의존성 문제가 발생한다. 때문에 문제를 해결하기 위해 아래 파일을 추가적으로 설치하면 된다.

sudo apt-get install libjansson-dev libmagic-dev

cuckoo@cuckoo:~$ sudo apt-get install apache2-utils apt-listchanges automake bison clamav clamav-daemon clamav-freshclam curl exiftool fail2ban flex gcc geoip-database git libboost-all-dev libffi-dev libfuzzy-dev libgeoip-dev libjpeg-dev libmagic1 libpq-dev libssl-dev libtool libvirt-dev libxml2-dev libxslt-dev libxslt1-dev make mongodb mono-utils nginx openjdk-8-jre-headless p7zip-full postgresql postgresql-contrib privoxy python python-bottle python-bson python-chardet python-dev python-dpkt python-jinja2 python-libvirt python-m2crypto python-magic python-pefile python-pil python-pip python-pymongo python-sqlalchemy python-yara ssdeep suricata swig tcpdump tesseract-ocr tor unattended-upgrades unzip upx-ucl virtualbox wget wkhtmltopdf xfonts-100dpi xvfb yara -y

cuckoo@cuckoo:~$ sudo pip install MAEC cybox distorm3 django gunicorn openpyxl psycopg2 pycrypto

cuckoo@cuckoo:~$ sudo pip install git+https://github.com/kbandla/pydeep.git

cuckoo@cuckoo:~$ sudo pip install git+https://github.com/volatilityfoundation/volatility.git

cuckoo@cuckoo:~$ sudo chmod +s /usr/sbin/tcpdump

cuckoo@cuckoo:~$ wget https://github.com/VirusTotal/yara/archive/v3.5.0.tar.gz

cuckoo@cuckoo:~$ tar -zxvf v3.5.0.tar.gz

cuckoo@cuckoo:~$ cd yara-3.5.0/

cuckoo@cuckoo:~/yara-3.5.0$ ./bootstrap.sh

cuckoo@cuckoo:~/yara-3.5.0$ ./configure --enable-cuckoo --enable-magic

cuckoo@cuckoo:~/yara-3.5.0$ make

cuckoo@cuckoo:~/yara-3.5.0$ sudo make install

cuckoo@cuckoo:~$ cd ~

cuckoo@cuckoo:~$ git clone https://github.com/seanthegeek/routetor.git

cuckoo@cuckoo:~$ cd routetor

cuckoo@cuckoo:~/routetor$ sudo cp *tor* /usr/sbin

cuckoo@cuckoo:~$ cd ~

4. Setup DB

쿠쿠를 운영하기 위한 DB를 만든다. DB 세팅 시 오타가 있으니 주의하자. 아래는 수정된 파일 사항이다.

cuckoo@cuckoo:~$ sudo su postgres

postgres@cuckoo:/home/cuckoo$ psql

 

CREATE USER cuckoo WITH PASSWORD 'cuckoo';

CREATE DATABASE cuckoo;

GRANT ALL PRIVILEGES ON DATABASE cuckoo to cuckoo;

\q

 

postgres@cuckoo:/home/cuckoo$ exit

5. Install cuckoo

쿠쿠 설치 자체는 굉장히 간단하다. 그러나 가이드에서 제공하는 버전은 구 버전을 수정한 버전이다. 나는새버전을 설치한다.

cuckoo@cuckoo:~$ git clone git://github.com/cuckoosandbox/cuckoo.git // 새버전 다운로드

cuckoo@cuckoo:~$ sudo pip install -r ./cuckoo-modified/requirements.txt

cuckoo@cuckoo:~$ ./cuckoo-modified/utils/community.py -wafb monitor

cuckoo@cuckoo:~$ ./cuckoo-modified/utils/community.py -waf

cuckoo@cuckoo:~$ mv cuckoo-modified/ cuckoo/

6. Web Interface 설치

Nginx를 설치하면 REST API가 사용가능한 웹을 설치할 수 있다. 그러나 참고한 사이트와 똑같이 진행하면 오류가 발생하면서 서버가 제대로 열리지 않는다. 대신에 cuckoo/web/manage.py를 실행한다. 파이썬 장고로 웹을 연다. 이때 cuckoo/conf/reporting.py를 참고하게 된다. mongo와 elasticsearch의 enable을 yes로 전환하자. mongo는 no로 놔두면 실행이 안되고 mongo는 설치가 까다롭기 때문에 elasticsearch를 설치하여 진행한다.

엘라스틱서치는 어렵지 않다. deb 파일을 받아서 dpkg로 설치하면 끝난다. jdk 7이 필요하지만 의존성 설치할 때 이미 설치를 완료했다.

$ wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.deb

$ sudo dpkg -i elasticsearch-1.7.2.deb

$ sudo update-rc.d elasticsearch defaults 

$ mv cuckoo/web/

$ python manage.py runserver 0.0.0.0:8000 // 웹인터 페이스 실행

물론 아래의 Nginx과 같이 https로 서비스를 지원하지는 않는다.

7. Setup VM and install OS

라이센스 문제도 있기 때문에 설치된 OS를 사용하자. MS 사이트(https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/)를 따라가 필요한 OS를 다운로드하고 압축을 풀면 굉장히 쉽게 설치가 완료된다. 

VM 이름은 설정에 들어가서 cuckoo1로 먼저 수정한다.

 

 

설치된 후에는 해당 OS에 맞는 python2.7(www.python.org)설치와 스냅샷을 찍을 때 사용하는 파이썬 라이브러리(http://www.pythonware.com/products/pil/) 설치가 필요하다(필자는 세팅 시 공유 폴더 기능을 사용했다. 우분투에 올리기 전에 로컬에서 압축을 풀고 미리 세팅해두면 편리하다. 가상 OS 위의 가상 OS라 무지 느리다).마지막으로 agent.py를 실행 상태로 만든다(angent.py는 cuckoo/agent에 있다). 이때 방화벽 차단 안내가 나오는데 반드시 방화벽을 내려야 한다.

ipconfig를 사용해서 192.168.56.101에 제대로 네트워크 인터페이스가 설정됐는지 확인한다. 만약 잡히지 않는다면 강제로 설정한다. 제어판 - 네트워크 - 연결 - 어댑터 속성 - 인터넷 프로토콜(TCP/IP)의 속성에서 아래와 같이 설정한다.

 

모든 세팅이 완료하면 agent를 실행시킨 상태에서 시스템을 정지 시킨 뒤, 전원을 끄고, 스냅샷을 찍는다. 이 과정은 아래 명령어를 따라하면 된다. 그리고 

#!/bin/bash

VM='cuckoo1'

VBoxManage snapshot $VM take Snapshot1 --pause

VBoxManage controlvm $VM poweroff

VBoxManage snapshot $VM restorecurrent

 

 

세팅이 모두 완료됐다. 이제 이 상태로 놔두고 쿠쿠로 실행하면 붙어서 잘 동작한다. 아래 명령어는 우분투의 방화벽을 내리는 명령어다. 이 명령어를 실행해야 온전히 동작한다.

iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPTiptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTiptables -A POSTROUTING -t nat -j MASQUERADEsysctl -w net.ipv4.ip_forward=

8. ~/cuckoo/conf/auxillary.conf

쿠쿠의 기능 설정 파일이다. 아래와 같이 수정하고 없는 부분은 만들어서 넣자(토르가 동작이 잘 되는지는 테스트해보지 않았다).

[sniffer]

enabled = yes 

interface = vboxnet0

 

[tor]

enables = yes [msoffice]

9. ~/cuckoo/conf/cuckoo.conf

쿠쿠 주요 설정파일이다. 특이한 사항은 앞서 구성한 데이터베이스 환경을 설정해준다는 점이다.

[cuckoo]

machinery = virtualbox

 

[resultserver]

ip = 192.168.56.1

port = 2042

 

[database]

connection = postgresql://cuckoo:cuckoo@localhost:5432/cuckoo

10. /usr/sbin/cuckooboot 파일 만들기

웹을 사용하지 않기 때문에 웹 서버 동작 내용을 삭제해야 한다. 크론탭이 제대로 동작하지 않기 때문에 필자는 여기에 routetor도 함께 시작하도록 설정해 두었다.

#!/bin/bash

/usr/sbin/routetor &

/sbin/iptables -F

/sbin/iptables -t nat -F

/usr/bin/vboxmanage hostonlyif create

/usr/bin/vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1

CUCKOO_USER="cuckoo"

CUCKOO_PATH="/home/cuckoo/cuckoo"

VIRBR_IP="192.168.56.1"

INETSIM_DNS_PORT="5342"

VIRBR_DEV="vboxnet0"

su $CUCKOO_USER -c "pkill gunicorn" >/dev/null 2>&1

su $CUCKOO_USER -c "pkill python" > /dev/null 2>&1

/usr/sbin/service tor restart

cd $CUCKOO_PATH

su $CUCKOO_USER -c "./cuckoo.py &"

cd web

su $CUCKOO_USER -c "./manage.py runserver 0.0.0.0:8000 &"

cd ../utils

su $CUCKOO_USER -c "./api.py -H 0.0.0.0 -p 8001"

11. /etc/privoxy/config

이건 또 뭘까..

forward-socks5t / 127.0.0.1:9050 .

12. /etc/tor/torrc

토르 설정파일인데 잘 동작하는지는 모른다.

TransListenAddress 192.168.56.1

TransPort 9040

DNSListenAddress 192.168.56.1

DnsPort 5353

13. root crontab

예약 시스템인데, 이유는 모르겠지만 잘 동작하지 않는다.

42 * * * * /usr/sbin/etupdate @reboot /usr/sbin/cuckooboot > /dev/null 2>&1 @reboot /usr/sbin/routetor

Hopefully I didn't miss anything. I'm going to work on getting mitm setup with tor on cuckoo-modified but requires a bit of work. Specifically, need to modify torstart to append entries, instead of insert, and include the below iptables rules for mitmproxy.

/sbin/iptables -t nat -I PREROUTING -i vboxnet0 -p tcp --dport 80 -j REDIRECT --to-port 8080 /sbin/iptables -t nat -I PREROUTING -i vboxnet0 -p tcp --dport 443 -j REDIRECT --to-port 8080

There are about 5 other things that need to be coded into the cuckoo webservices or copied over from vanilla but I'll add them here when/if I get around to doing it. Finally, need to modify the VM to include the mitmproxy p12 certificate.

 

  1. 가상환경 튜토리얼

다운로드 후 압축 해제

 

id : root, passwd : toor

id : cuckoo, passwd : toor

 

쿠쿠 실행

 

cuckoo: ~$ sudo cuckooboot

 

쿠쿠 데이터베이스 삭제하기

 

cuckoo: ~/cuckoo $ cuckoo.py --clean

 

 

 

 

아이디 cuckoo 

 

비밀번호 toor

댓글()