Cuckoo Sandbox (Automated Malware Analysis) Bolaven 2013.10.28
Malware analysis Cuckoo Sandbox Cuckoo Sandbox 는 Sandbox 환경에서악성파일을실행하고빠르게분석하여포괄적인분석결과를자동으로수집해주는분석도구이다. 우리는이러한 Cuckoo 를이용하여의심파일에대한초기분석을할수있고, 이것은악성코드대응업무에많은도움을줄것이다. Bolaven 소모임에서는 Cuckoo Sandbox 를좀더쉽게설치하고업무에활용할수있도록문서를제작하여공유한다 Cuckoo Sandbox 의주요기능 악성코드에의해수행되는 Windows API 함수호출추적 악성코드에의해파일생성및복사, 삭제확인 선택한프로세스의메모리덤프 분석시스템의전체메모리덤프 악성코드실행하는동안스크린샷 (process explorer) 네트워크덤프 해당문서는 Bolaven 5 차문서인 Cuckoo Sandbox 설치에서부족한부분을업그레이드하였고, Cuckoo 를이용하여 12 차문서의파밍악성코드를분석해보았다. 1. Cuckoo Sandbox 설치환경 Ubuntu 에 Cuckoo Sandbox 와가상머신인 Virtualbox 설치 - OS : Ubuntu 12.04 LTS(long-term support) - Cuckoo Sandbox 0.6 - Virtualbox 4.2.8 (guest PC - WindowsXP sp3) [ 그림 1. 설치구성 ]
2. 구성프로그램 본문서에서는 Cuckoo 에서기본적으로제공되는분석도구에추가분석프로그램을설치하여아래의 내용들을결과로확인가능하다 - Virustotal 검색결과 ( 기본적으로연결되며사용유무설정가능 ) - 실행압축확인 (PE file 설치 ) - Fuzzy Hash 확인 (ssdeep 설치 ) - 패턴을이용하여악성코드식별및분류 (Yara 설치 ) - 네트워크트래픽분석 (tcp dump 설치 ) - 분석을위한가상환경구성 (Virtualbox 설치 ) 3. 분석가능한파일 실행파일및 DLL 파일외에도가상머신에관련프로그램을설치하여여러종류파일분석가능하다 - Windows PE files (DLL files 포함 ) - PDF files 및 Office Documents files 등문서파일 - URLs [ 그림 2. Cuckoo Snadbox Report] 3
Cuckoo Sandbox 설치 1. Ubuntu Setting 및유용한프로그램설치 1.1 root 계정활성화 - Ubuntu 는기본적으로 root 계정으로로그인할수없음 ( 활성화명령어필요 ) cuckoo@ubuntu:~$ sudo passwd root 본문서에서는 cuckoo 계정으로설치를진행하지만 root 계정으로설치가능하다 1.2 apt-get update 및재부팅 - /etc/apt/source.list의인덱스를기반으로패키지의정보를최신으로업데이트 cuckoo@ubuntu:~$ sudo apt-get update; sudo apt-get upgrade -y; sudo apt-get dist-upgrade -y; sudo apt-get autoremove -y; sudo shutdown -r now later 1.3 python 패키지설치 - Cuckoo Sandbox는 python으로제작 ( 프로그램실행하기위해필요 ) cuckoo@ubuntu:~$ sudo apt-get install python python-dev python-sqlalchemy python-dpkt python-jinja2 python-magic python-pymongo python-bottle -y 1.4 svn 설치 - 소프트웨어버전관리프로그램이며최신버전의소스코드를받기위해설치 cuckoo@ubuntu:~$ sudo apt-get install subversion cuckoo@ubuntu:~$ sudo svnadmin create --fs-type bdb test 1.5 PE file 설치 - svn checkout 명령어를이용하여 pefile의최신버전소스코드를받음 cuckoo@ubuntu: /opt$ sudo apt-get install python-pefile cuckoo@ubuntu:/opt$ sudo svn checkout http://pefile.googlecode.com/svn/trunk/ pefile cuckoo@ubuntu:/opt$ cd /opt/pefile cuckoo@ubuntu:/opt/pefile$ sudo python setup.py build cuckoo@ubuntu:/opt/pefile$ sudo python setup.py build install 1.6 ssdeep 설치 - ssdeep는 Fuzzy Hash를사용하여원본파일과의유사도를파악하기위해사용 - 해쉬값은파일의일부만수정해도전혀다른값이나오지만, Fuzzy Hash는하나의파일을블록별로구분하여해싱을하기때문에원본과유사한파일을찾아낼수있다 4
cuckoo@ubuntu:/opt$ sudo apt-get install git cuckoo@ubuntu:/opt$ sudo apt-get install build-essential git libpcre3 libpcre3-dev libpcre++-dev -y cuckoo@ubuntu:/opt$ sudo wget http://sourceforge.net/projects/ssdeep/files/ssdeep-2.9/ssdeep-2.9.tar.gz cuckoo@ubuntu:/opt$ sudo tar -xvzf ssdeep-2.9.tar.gz cuckoo@ubuntu:/opt$ sudo rm -f ssdeep-2.9.tar.gz cuckoo@ubuntu:/opt$ sudo mv ssdeep-2.9 ssdeep cuckoo@ubuntu:/opt$ cd /opt/ssdeep cuckoo@ubuntu:/opt/ssdeep$ sudo./configure cuckoo@ubuntu:/opt/ssdeep$ sudo make cuckoo@ubuntu:/opt/ssdeep$ sudo make install cuckoo@ubuntu:/opt/ssdeep$ sudo ldconfig cuckoo@ubuntu:/opt/ssdeep$ cd /opt cuckoo@ubuntu:/opt$ sudo git clone https://github.com/kbandla/pydeep.git pydeep cuckoo@ubuntu:/opt$ cd /opt/pydeep cuckoo@ubuntu:/opt/pydeep$ sudo python setup.py build cuckoo@ubuntu:/opt/pydeep$ sudo python setup.py install 1.7 Yara 설치 - 시그니처기반으로파일의패턴을분석하여악성코드를분류하는데사용하는 TOOL - 행동기반탐지를하지못하지만, 패턴기반으로악성파일이나프로세스를탐지 식별을위해탐지패턴즉, rule파일을만들어야한다 cuckoo@ubuntu:/opt$ sudo wget http://yara-project.googlecode.com/files/yara-1.6.tar.gz cuckoo@ubuntu:/opt$ sudo tar xvfz yara-1.6.tar.gz cuckoo@ubuntu:/opt$ sudo rm -f yara-1.6.tar.gz cuckoo@ubuntu:/opt$ cd /opt/yara-1.6 cuckoo@ubuntu:/opt/yara-1.6$ sudo./configure cuckoo@ubuntu:/opt/yara-1.6$ sudo make cuckoo@ubuntu:/opt/yara-1.6$ sudo make install 1.8 Yara-Python 설치 - Yara Python은 Yara signature 분석을위해설치 cuckoo@ubuntu:/opt$ sudo wget http://yara-project.googlecode.com/files/yara-python-1.6.tar.gz cuckoo@ubuntu:/opt$ sudo tar xvfz yara-python-1.6.tar.gz cuckoo@ubuntu:/opt$ sudo rm -f yara-python-1.6.tar.gz cuckoo@ubuntu:/opt$ cd /opt/yara-python-1.6 cuckoo@ubuntu:/opt/yara-python-1.6$ sudo python setup.py build cuckoo@ubuntu:/opt/yara-python-1.6$ sudo python setup.py install cuckoo@ubuntu:/opt/yara-python-1.6$ cd /opt/yara-1.6 lcuckoo@ubuntu:/opt/yara-1.6$ sudo make install 5
1.9 tcpdump 설치및실행 - 파일실행시발생하는트래픽분석을위해설치 cuckoo@ubuntu:~$ sudo apt-get install tcpdump cuckoo@ubuntu:~$ sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump 2. Cuckoo Sandbox 설치 2.1 Virtualbox cuckoo 사용자만들기 cuckoo@ubuntu: /opt$ sudo useradd cuckoo cuckoo@ubuntu: /opt$ sudo usermod -g vboxusers cuckoo 2.2 Cuckoo Sandbox 설치 cuckoo@ubuntu: /opt$ sudo git clone https://github.com/cuckoobox/cuckoo.git cuckoo 2.3 mysql 설치및데이터베이스연결 - 기본으로제공하는 sqlite 사용하지않고 mysql을사용 cuckoo@ubuntu:/~$ sudo apt-get install mysql-server python-mysqldb -y (mysql root 패스워드설정나옴 ) cuckoo@ubuntu:/~$ sudo mysql -u root -p mysql> create database cuckoo; mysql> grant all privileges on cuckoo.* to cuckoo@localhost identified by 'Cuck00@n@lyst!' ; mysql> flush privileges; mysql> quit 2.4 cuckoo.conf 설정 - mysql 설치후설정된데이터베이스연결파라미터를반영하기위해 cuckoo.conf 파일을수정 cuckoo@ubuntu:/~$ sudo vi /opt/cuckoo/conf/cuckoo.conf [ 그림 3. cuckoo.conf database 연결설정 ] 6
3. Virtualbox 설치 3.1 Virtualbox 다운로드및설치 - Virtualbox은 4.2.18 버전까지있으며, 사용자환경에맞게 4.2.2~4.2.18 버전설치 여기서는 4.2.8을예제로설치하였다 - linux-headers-'uname -r' 부분은 Kernel release를확인후동일하게입력 cuckoo@ubuntu:/opt$ sudo apt-get install libqt4-opengl libsdl1.2debian -y cuckoo@ubuntu:/opt$ sudo apt-get install build-essential linux-headers-'uname -r' cuckoo@ubuntu:/opt$ sudo wget http://download.virtualbox.org/virtualbox/4.2.8/virtualbox-4.2_4.2.8-83876~ubuntu~precise_i386.deb cuckoo@ubuntu:/opt$ sudo dpkg -i virtualbox-4.2_4.2.8-83876~ubuntu~precise_i386.deb cuckoo@ubuntu:/opt$ sudo wget http://download.virtualbox.org/virtualbox/4.2.8/oracle_vm_virtualbox_extension_pack-4.2.8-83876.vboxextpack cuckoo@ubuntu:/opt$ sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.2.8-83876.vbox-extpack cuckoo@ubuntu:/opt$ sudo /etc/init.d/vboxdrv setup [ 그림 4. Kernel release 확인 ] 3.2 Virtualbox Guest PC 생성 (WindowsXP sp3) - Guect PC 생성시 cuckoo/conf/virtualbox.conf 설정파일과동일하게이름을 cuckoo1 로설정 [ 그림 5. virtualbox.conf 확인 ] [ 그림 6. Guest PC 생성 Name] 7
3.3 Virtualbox host-only 전용 interface 생성및확인 - Guest PC와통신할때 host-only 설정으로사용하기위하여 vboxnet0 생성 cuckoo@ubuntu:~$ sudo vboxmanage hostonlyif create cuckoo@ubuntu:~$ sudo vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 cuckoo@ubuntu:~$ ifconfig [ 그림 7. interface 생성확인 ] 3.4 Guest PC 에서 Host PC 통신시 vboxnet0 로연결하도록 NIC 를설정 - Guest PC를종료후설정, VirtualBox 네트워크설정 GUI에서설정가능 cuckoo@ubuntu:~$ sudo vboxmanage modifyvm cuckoo1 --hostonlyadapter1 vboxnet0 cuckoo@ubuntu:~$ sudo vboxmanage modifyvm cuckoo1 --nic1 hostonly TIP [ 그림 8. Virtualbox Network 설정 ] Guest PC NIC 설정후 error 발생할경우가상머신등록설정 3.5 IPtables 규칙추가 - Guest PC 네트워크를 NAT 처럼사용할수있도록 IPtables 규칙추가 cuckoo@ubuntu:~$ sudo iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack -- ctstate NEW -j ACCEPT cuckoo@ubuntu:~$ sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT cuckoo@ubuntu:~$ sudo iptables -A POSTROUTING -t nat -j MASQUERADE 3.6 Host PC 에서패킷을포워딩하도록설정 ( 마스커레이드 ) cuckoo@ubuntu:~$ sudo sysctl -w net.ipv4.ip_forward=1 cuckoo@ubuntu:~$ sudo sysctl -p 기본 0 으로설정되어있음 8
3.7 Virtualbox Guest PC 네트워크설정 (WindowsXP sp3) - Host PC 와원활한통신을위해 Windows 방화벽사용안함 으로설정 [ 그림 9. Guest PC 네트워크및방화벽설정 ] 3.8 Guest PC Python 및 Python Image Library 설치 - Host PC의 Python 버전을확인하여동일하게설치해야실행시문제가발생하지않음 http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi http://pythonware.com/products/pil --> PIL 1.1.7 Python Imaging Library 1.1.7 for Python 2.7 (Windows only) 다운로드 [ 그림 10. Python 설치 ] 9
3.9 agent.py 실행 - Host PC 와 Guest PC 간자료전송을위해 Cuckoo/agent/agent.py 을 Guest PC 에복사및실행 3.10 process explorer 실행 [ 그림 11. Guest PC 화면설정 ] 3.11 Guest PC 에 agent.py, process explorer 실행후스냅샷저장 [ 그림 12. VirtualBox 스냅샷 ] TIP pdf, office 문서등의파일을분석하기위해서는프로그램을설치및실행하여정상동작하는지확인후스냅샷을저장한다 경고창등으로인해프로그램이동작하지않는것을방지하기위해 3.12 Virtualbox.conf 설정 - 기본설정으로사용가능하며 machines를여러개생성하면다중분석이가능하다 - Guest PC 생성시등록한 name으로 machines 설정 cuckoo@ubuntu:otp/cuckoo$ sudo vi conf/virtualbox.conf machines = cuckoo1 label = cuckoo1 platform = windows IP = 192.168.56.101 10
4. Cuckoo Sandbox 실행및웹설정 4.1 Cuckoo Snadbox 실행 - cuckoo 설치된경로에서 python 으로실행 [ 그림 13. cuckoo.py 실행 ] 4.2 Cuckoo Snadbox 웹설정 - 파일업로드및분석명령은 CUI모드또는 GUI모드둘다가능 - 사용과접근이편리한웹을설정하여외부에서도분석가능하도록설정 - args.host와 args.port를변경하지않으면자동으로 [Host PC IP]:8080 으로셋팅 cuckoo@ubuntu:~$ sudo vi /cuckoo/utils/web.py 파일에서하단부분설정 run(host=args.host, port=args.port, reloader=true) 4.3 Cuckoo Snadbox 웹접속 - 웹브라우저에서 [cuckoo host IP]Port 로접속하여악성코드를업로드하여분석실행 [ 그림 14. Cuckoo Sandbox 웹화면 ] 11
Cuckoo Sandbox Report Bolaven 12 차문서에서분석했었던파밍악성코드를 Cuckoo Sandbox 를이용하여분석해보았다 12 차문서의분석내용과비교하기위해 Cuckoo 분석내용중핵심부분만작성하였다. 12 차분석보고서내용은문서끝부분을참고하기바란다 1. Cuckoo Sandbox 를이용한 dafa8.exe 파일분석 1.1 Cuckoo Sandbox Report - File Details, Screenshots, Dropped Files, Network Analysis, Processes 등으로구성되어있다 [ 그림 15. Cuckoo Sandbox Report] 12
2. Dropped Files 2.1 Hostssoon.exe - 파일을복사하는 CopyFileA API 함수를이용하여 dafa8.exe 를 Hostssoon.exe 자가복제 [ 그림 16. dafa8.exe 자가복제 ] 2.2 kkapskok - File size 1bytes 로생성파일로내용없음 [ 그림 17. kkapskok 파일의상세내용 ] 2.3 qc.bat - NtCreateFile API 함수를이용하여 qc.bat 파일생성 - qc.bat 파일은 hosts 파일의사용자권한을모든권한으로변경 [ 그림 18. qc.bat 파일생성 ] 13
2.4 bh.bat - NtCreateFile API 함수를이용하여 bh.bat 파일생성 - Bh.bat 파일은 hosts 파일의권한을읽기권한으로변경 ( 초기설정으로변경 ) [ 그림 19. bh.bat 파일생성 ] 3. DNS Requests 3.1 yongm.dafa8088.com 접근 - InternetConnectA API 함수를사용하여파일전송을위해세션연결 [ 그림 20. DNS Requests] 3.2 txt 파일다운로드 - hosts 파일을변조하기위한 abcd.txt 다운로드 [ 그림 21. abcd.txt 다운로드 ] 14
4. 정보전송및 CMD 사용제한 4.1 감염 PC 의정보전송 - yongm.dafa8088.com/count.asp 으로 MAC, OS, Language 정보전송 [ 그림 22. 감염 PC 의정보전송 ] 4.2 DisableCMD - RegSetValueExA API 함수를이용하여 CMD 사용제한 [ 그림 23. DisableCMD] [ 참고자료 ] Cuckoo Sannbox http://www.cuckoosandbox.org TCPDUMP http://www.tcpdump.org Ubuntu http://www.ubuntu.com Yara-project http://code.google.com/p/yara-project/ Yara Rule 메뉴얼 http://code.google.com/p/yara-project/downloads/detail?name=yara%20user's%20manual%201.5.pdf 15
[ 부록 ] Bolaven 12 차보고서요약 ( 파밍악성코드분석 ) Cuckoo Sandbax Report 와비교자료용 [ 그림 23. 신종파밍악성코드유포흐름도 ] 1 hxxp://vvvvvvcbc.googlecode.com/files/dafa8.exe 악성파일실행 2 자가복제를하여 C:\Windows\System32\Hostssoon.exe 저장 3 CMD 창을사용하지못하도록레지스트리값수정 4 C:\Windows\qc.bat 파일을생성하여 hosts 파일의사용자권한을모든권한으로변경 5 hxxp://yongm.dafa8088.com/abcd.txt (hosts 변조레코드 ) 다운로드후 hosts 파일변조 6 C:\Windows\bh.bat 파일을생성하여 hosts 파일의권한을다시읽기권한으로변경 7 MAC Address 획득 8 hxxp://yongm.dafa8088.com/count.asp 로정보유출 Team bolaven 은보안관제팀분석소모임입니다. ( 양광삼, 김준호, 김대업, 이은재, 김용희, 설인규, 김기웅, 김지후, 김소래 ) 16