악성코드 분석 도구인 cuckoo sandbox를 통한 분석 방법에 대한 첫번째 이야기입니다.
cuckoo sandbox 설치인데요, 리눅스에서 쉽게 설치가 가능합니다.

일단 하나하나 살펴보며 설치 과정을 작성할까 하다가 양이 많을 것 같아 빠르고 쉽게 설치하는 구성으로 진행해볼까 합니다.


1. cuckoo sandbox 에서 사용하는 패키지 및 lib 설치


(install package and library)

 설치 중 필요했던 패키지, 라이브러리 등을 모아서 하나의 명령행으로 작성하였습니다.

# apt-get install python python-dev python-sqlalchemy python-dpkt python-jinja2
python-magic python-pymongo python-bottle subversion git build-essential git libpcre3 libpcre3-dev libpcre++-dev python-bottle

cuckoo 설정 및 db 종류에 따라 추가로 발생할 수 있는 패키지가 존재합니다. 일단 위 패키지는 구동에 필요했던 패키지들입니다.


데비안 계열 리눅스(데비안,우분투 등)에서는 apt 패키지 매니저로 설치 가능한 부분이 많이 때문에 해당 부분 설치 후 모자란 부분에 대해서 설치를 진행하면 됩니다. (yum으로도 가능하겠지만.. 데비안 유저라 잘 모르겠네요..)

위 설치 과정이 끝났다면 3가지 패키지 설치가 더 필요합니다.
바로 PE-File , ssdeep, yara 인데요. 아래와 같은 방법으로 설치 진행하시면 됩니다.

PE-File
# python-pefile
# svn checkout http://pefile.googlecode.com/svn/trunk/ pefile
# cd  pefile
# python setup.py builid install

ssdeep
ssdeep 는 ssdeep 및 pydeep  설치가 필요합니다.
# wget http://sourceforge.net/projects/ssdeep/files/ssdeep-2.9/ssdeep-2.9.tar.gz
# tar -xvf ssdeep-2.9.tar.gz
# cd ssdeep-2.9
# ./configure
# make;make install
# ldconfig
# cd ..
# git clone https://github.com/kbandla/pydeep.git pydeep
# python setup.py build
# python setup.py install
# cd ..

yara
yara 또한 python-yara 설치가 필요합니다.
# wget http://yara-project.googlecode.com/files/yara-1.6.tar.gz
# tar xvfz yara-1.6.tar.gz
# cd yara-1.6
# ./configure
# make;make install
# wget http://yara-project.googlecode.com/files/yara-python-1.6.tar.gz
# tar -xvf yara-python-1.6.tar.gz
# cd yara-python-1.6
# python setup.py build
# python setup.py install
# cd..
# cd yara-1.6
# make install
# cd ..


2.cuckoo sandbox 설치

위 패키지 설치가 끝났다면 cuckoo sandbox 를 다운 받아 설치합니다.
git로 clone 뜨면 됩니다.

# git clone https://github.com/cuckoobox/cuckoo.git cuckoo
#cd cuckoo


3.virtual box 설치

cuckoo sandbox는 oracle vm을 사용하기 때문에 virtual box 설치 및 네트워크 설정이 필요합니다.

여러 웹 사이트 및 블로그를 보면 어렵게 설치하는 방법도 많은데.. 저는 예전에 설치한 방법으로 별다른 에러 없이 잘 진행되었네요.

virtualbox 를 source list 에 추가 후 설치합니다.
# apt-get install virtualbox

virtualbox 설치 과정은 아래 주소 참고해주세요.
(몇몇 필요한 게시글은 좀 옮겨놓아야 할  같네요.)

http://noon.tistory.com/1202

4. vm 설정(set vm)

sandbox 로 쓰일 vm을 생성합니다. 이때 가상머신의 이름은 cuckoo에서 사용되니 꼭 메모해두세요.(쉽게 쓰는게 최고입니다. )


vm 생성이 완료되었다면 터미널에서 가상머신을 위한 host-only 인터페이스를 구성합니다.
vboxmanage를 이용하여 192.168.56 대역으로 설정하였습니다.

# vboxmanage hostonlyif create
# vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1


설정 후 ifconfig로 네트워크 정보 확인 시 확인됩니다.
이제 sandbox 로 쓰일 가상 머신에서 동일한 대역으로 할당 받도록 네트워크 설정을 합니다.


set virtual machine network



추가로 python 과 pil을 설치합니다.

파이썬 공식 홈페이지에서 2.7 버전을 다운로드하여 설치합니다.
www.python.org

download python 2.7
 
pil은 아래 url로 접근하여 2.7 윈도우 버전으로 설치합니다.
http://pythonware.com/products/pil


5. cuckoo agent 설치 및 스냅샷

이제 cuckoo 디렉토리에서 agent.py 파일을 vm으로 넘겨주어 vm 내에서 실행합니다.
실행 후 스냅샷 이름은 test로 하였습니다.


running agent.py


6. cuckoo vm 설정 후 실행

conf 하위의 virtualbox.conf 파일을 아까 만든 vm 데이터로 수정합니다.

#conf/virtualbox.con

  1 [virtualbox]
  2 # Specify which VirtualBox mode you want to run your machines on.
  3 # Can be "gui", "sdl" or "headless". Refer to VirtualBox's official
  4 # documentation to understand the differences.
  5 mode = gui
  6 
  7 # Path to the local installation of the VBoxManage utility.
  8 path = /usr/bin/VBoxManage
  9 
 10 # Specify a comma-separated list of available machines to be used. For each
 11 # specified ID you have to define a dedicated section containing the details
 12 # on the respective machine. (E.g. cuckoo1,cuckoo2,cuckoo3)
 13 machines = cuckoo1          # 1번째 분석 머신입니다. 똑같이 작성하셔도 됩니다.
 14 
 15 [cuckoo1]
 16 # Specify the label name of the current machine as specified in your
 17 # VirtualBox configuration.
 18 label = MalwareAnalysis     #제가 생성한 가상머신 이름입니다.  만드신 vm 넣어줍니다
 19 
 20 # Specify the operating system platform used by current machine
 21 # [windows/darwin/linux].
 22 platform = windows
 23 
 24 # Specify the IP address of the current virtual machine. Make sure that the
 25 # IP address is valid and that the host machine is able to reach it. If not,
 26 # the analysis will fail.
 27 ip = 192.168.56.141         # 가상머신 IP입니다.
 28 
 29 # (Optional) Specify the snapshot name to use. If you do not specify a snapshot
 30 # name, the VirtualBox MachineManager will use the current snapshot.
 31 # Example (Snapshot1 is the snapshot name):
 32 snapshot = test                   # 스냅샷
 33 
 34 # (Optional) Specify the name of the network interface that should be used
 35 # when dumping network traffic from this machine with tcpdump. If specified,
 36 # overrides the default interface specified in cuckoo.conf
 37 # Example (vboxnet0 is the interface name):
 38 interface = vboxnet0        # 네트워크 인터페이스입니다.

시그니쳐 업데이트(선택)
cuckoo에서 쓰이는 분석 모듈 중 업데이트가 필요한 항목에 대한 업데이트입니다.
필수는 아니지만 해서 저는 업데이트 하고 사용하였습니다.

# ./util/community.py -s -f


이제 cuckoo sandbox 실행입니다.

python cuckoo.py 

or

python cuckoo.py -d




   

혹시 vm을 찾을 수 없는 에러 발생 시 아래와 같은 방법으로 해결 가능합니다.
Error
[modules.machinery.virtualbox] DEBUG: VBoxManage returns error checking status for machine MalwareAnalysis: VBoxManage: error: Could not find a registered machine named 'MalwareAnalysis'

MalwareAnalysis(제 vm 입니다.) 를 찾을 수 없다고 하네요.
원인은 제가 작업을 root로 하였는데, vm이 일반 사용자 계정으로 설치되어 vm에서 해당 리스트가 확인이 안되었더라구요..

# vboxmanage list vms

no result(아무 결과 없었습니다.)

하여 root 계정으로 virtualbox 실행 후 MalwareAnalysis.vdi를 로드하여 에러 발생 부분 수정하였습니다. 유사한 방법으로 고치시면 될 거 같습니다.


긴 글 읽어주셔서 정말 감사합니다.
위에서 보신 웹 ui 사용하는 방법 및 샘플로 분석한 결과는 #2에서 보여드리겠습니다.
궁금하신 내용은 답글 및 메일로 주세요.

감사합니다.  :)


#1 Cuckoo SandBox 설치하기 (Install Cuckoo SandBox on debian linux)
http://www.hahwul.com/2015/03/cuckoo-1-cuckoo-sandbox-install-cuckoo.html

#2 Cuckoo SandBox의 web ui 및 샘플 실행파일 분석(web ui & sample analysis)
http://www.hahwul.com/2015/03/cuckoo-2-cuckoo-sandbox-web-ui-web-ui.html




댓글 5개:

  1. 지나가다가. 이글 보고 cuckoo 설치했는데, 참고할 사항이 있어 추가할게요.

    0. vboxmanage list vms : 필요없는 vboxnet 이 설정되어 있으면 지워준다.
    - ex) "" {52a91e62-096d-4f8b-96f4-5fa76db3cd76}
    - VBoxManage unregistervm {52a91e62-096d-4f8b-96f4-5fa76db3cd76}

    0. vboxmanage에서 hostonly 생성전에 이미 생성된 vboxnet0이 있는지 확인후 있으면 제거
    - ifconfig
    - vboxmanage hostonlyif remove vboxnet0

    1. vboxnet0 생성
    - vboxmanage hostonlyif create
    - vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1

    2. virtualbox network 설정을 nat으로 설정해서 인터넷이 되는지 확인. ( 인터넷이 되어야한다 )

    3. virtualbox를 hostonly로 바꿔서 nat과 같이 만들어줘야한다.

    4. vm register에 등록한다. 이미 등록된 UUID라고 하면은 기존걸 삭제해준다.
    - VBoxManage registervm /home/debian/VirtualBox\ VMs/cuckoo0/cuckoo0.vbox

    5. 인터넷이 안되면 아래처럼 hostonly를 nat으로 쓸수 있게 바꿔줘야한다. 그리고 방화벽 설정
    - vboxmanage modifyvm cuckoo0 --hostonlyadapter1 vboxnet0
    - vboxmanage modifyvm cuckoo0 --nic1 hostonly

    - vm (winxp setting) and
    Static IP - 192.168.56.101
    DNS - any DNS server (8.8.8.8) and 8.8.4.4 : google
    Default Gateway - 192.168.56.1

    - iptables -A FORWARD -o eth0 -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

    - echo 1 > /proc/sys/net/ipv4/ip_forward

    답글삭제
  2. 작성자가 댓글을 삭제했습니다.

    답글삭제
  3. 이글보고 cuckoo 설치완료하였습니다. 설치하면서 막혔던 부분 참고로 적어놓을게요.^^

    답글삭제
  4. Cuckoo Sandbox 설치 관련하여 추가로 많은 도움이 될 것 같네요~
    좋은 내용 감사합니다 : )

    # 진행하다가 막히시거나, 궁금한 점 있으시면 최대한 답변 드리도록 하겠습니다.

    답글삭제