- 环境
- Ubuntu主机配置
- !/bin/bash
- sudo -H pip install lxml cybox==2.0.1.4 maec==4.0.1.0 “Django<2”
- Windows7客户机
- Linux客户机
- http://ddebs.ubuntu.com/ ${codename}-security main restricted universe multiverse">deb http://ddebs.ubuntu.com/ ${codename}-security main restricted universe multiverse
cuckoo布谷鸟沙箱搭建的初衷,是分析禁止联网并且禁止上传网络云沙箱的敏感样本时,为了方便自己收集样本行为,使用了一年,它的内存dump功能对于一些样本偶尔有奇效。
环境
- 运行环境 Ubuntu18.04.5x64
- windows沙箱客户机 window7sp1x86
- linux沙箱客户机 Ubuntu18.04.3x64
Ubuntu主机配置
依赖安装
```bash!/bin/bash
echo “Installing Updates and dependencies…” sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get autoremove -y sudo apt-get install python python-pip python-dev libffi-dev libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev -y sudo apt-get install python-virtualenv python-setuptools -y sudo apt-get install libjpeg-dev zlib1g-dev -y sudo apt-get install libxml2-dev libxslt1-dev libevent-dev libpcre3 libpcre3-dev libtool libpcre++-dev g++ -y sudo apt-get install git automake dkms unzip wget python-sqlalchemy python-bson python-dpkt python-jinja2 -y sudo apt-get install python-magic python-mysqldb python-gridfs python-bottle python-pefile python-chardet -y
echo “Python 3” cd /usr/src sudo wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz sudo tar -xvf Python-3.8.0.tgz cd Python-3.8.0 ./configure sudo make && make install
echo “Pip” sudo wget https://bootstrap.pypa.io/get-pip.py python get-pip.py pip install —upgrade pip sudo -H pip install pillow -y
echo “MongoDB” sudo apt-get install mongodb -y
echo “Postgresql” sudo apt-get install postgresql libpq-dev -y sudo pip install psycopg2
echo “Tcpdump” sudo apt-get install tcpdump apparmor-utils -y sudo aa-disable /usr/sbin/tcpdump sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump getcap /usr/sbin/tcpdump
sudo -H pip install lxml cybox==2.0.1.4 maec==4.0.1.0 “Django<2”
sudo -H pip install lxml cybox maec “Django<2”
<a name="b5wRl"></a>### cuckoo与组件安装```bash#!/bin/bashecho " - Installing -"echo "Adding cuckoo user"sudo adduser --disabled-login -gecos "" cuckoosudo usermod -G cuckoo cuckooecho "ssdeep"sudo apt-get install ssdeep python-pyrex subversion libfuzzy-dev -yecho "M2Crypto"sudo apt-get install swig -ysudo -H pip install m2crypto==0.31.0echo "Volatility"git clone https://github.com/volatilityfoundation/volatility.gitcd volatilitysudo python setup.py installcd ..echo "Distrom"wget -O distormv3.4.1.tar.gz https://github.com/gdabah/distorm/archive/v3.4.1.tar.gztar -zxvf distormv3.4.1.tar.gzcd distorm-3.4.1sudo python setup.py installsudo apt-get install libjansson-dev libmagic-devsudo apt-get install libtool-bincd ..echo "PyCrypto"sudo -H pip install pycrypto ansible --upgrade IPython==5.0 jupyter openpyxl ujsonecho "Yara"wget -O yarav3.11.0.tar.gz https://github.com/VirusTotal/yara/archive/v3.11.0.tar.gztar -zxvf yarav3.11.0.tar.gzcd yara-3.11.0sudo ./bootstrap.shsudo ./configure --with-crypto --enable-magic -enable-cuckoosudo makesudo make installsudo -H pip install yara-pythonecho "FTP Server"sudo mkdir -p /home/ubuntu/vmshared/pubsudo chown -R cuckoo:cuckoo /home/ubuntu/vmsharedsudo chmod -R ug=rwX,o=rX /home/ubuntu/vmshared/sudo chmod -R ugo=rwX /home/ubuntu/vmshared/pubsudo apt-get install vsftpdecho "Adding stuff to /etc/vsftpd.conf"sudo sed -i 's/#write_enable=YES/write_enable=YES/g' /etc/vsftpd.confsudo sed -i 's/#anon_upload_enable=YES/anon_upload_enable=YES/g' /etc/vsftpd.confsudo sed -i 's/#anon_mkdir_write_enable=YES/anon_mkdir_write_enable=YES/g' /etc/vsftpd.confsudo bash -c 'echo "listen_address=192.168.100.1" >> /etc/vsftpd.conf'sudo bash -c 'echo "listen_port=2121" >> /etc/vsftpd.conf'sudo bash -c 'echo "anon_root=/home/ubuntu/vmshared" >> /etc/vsftpd.conf'sudo bash -c 'echo "anon_umask=000" >> /etc/vsftpd.conf'sudo bash -c 'echo "chown_upload_mode=0666" >> /etc/vsftpd.conf'sudo bash -c 'echo "pasv_enable=Yes" >> /etc/vsftpd.conf'sudo bash -c 'echo "pasv_min_port=10090" >> /etc/vsftpd.conf'sudo bash -c 'echo "pasv_max_port=10100" >> /etc/vsftpd.conf'sudo service vsftpd restartsudo service vsftpd statussudo ufw allow 20/tcpsudo ufw allow 21/tcpsudo ufw allow 990/tcpsudo ufw allow 10090:10100/tcpsudo ufw enablesudo ufw disableecho "Cuckoo"cat <<EODo the following:virtualenv venvsudo apt-get remove python-dpktsudo su. venv/bin/activatesudo pip install -U pip setuptoolssudo pip install -U cuckoocuckoo -dcp /root/.cuckoo/agent/agent.py /home/ubuntu/vmshared/agent.pywcd /root/.cuckooservice mongodb startEO
virtualenv venvsudo apt-get remove python-dpktsudo su. venv/bin/activatesudo pip install -U pip setuptoolssudo pip install -U cuckoocuckoo -dcp /root/.cuckoo/agent/agent.py /home/ubuntu/vmshared/agent.pywcd /root/.cuckooservice mongodb start
安装VirtualBox
#!/bin/bashecho "Installing VirtualBox"#codename = (lsb_release --codename | cut -f2)codename=$(lsb_release --codename | cut -f2)echo deb [arch=amd64] https://download.virtualbox.org/virtualbox/debian bionic contrib | sudo tee -a /etc/apt/sources.list.d/virtualbox.listwget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -sudo apt-get updatesudo apt-get install virtualbox-6.1
网络配置
使用host-only网络,并通过iptables转发客户机数据包到主机,下面的配置将会将输入接口vboxnet0的数据包转发到主机且将内网地址伪装成外接口ens33的地址,iptable的参数使用可见https://www.jianshu.com/p/5a604b4ef342。
#!/bin/bashecho "- Installing -"sudo apt install net-toolssudo vboxmanage hostonlyif createsudo vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1sudo vboxmanage modifyvm cuckoo1 --hostonlyadapter1 vboxnet0sudo vboxmanage modifyvm cuckoo1 --nic1 hostonlysudo modprobe ip_tablessudo modprobe ip_nat_ftpsudo iptables -P INPUT ACCEPTsudo iptables -P OUTPUT ACCEPTsudo iptables -P FORWARD ACCEPTsudo iptables -t nat -A POSTROUTING -o ens33 -jMASQUERADEsudo iptables -A FORWARD -i vboxnet0 -j ACCEPTecho 1 | sudo tee -a /proc/sys/net/ipv4/ip_forwardsudo sysctl -w net.ipv4.ip_forward=1sudo apt-get install iptables-persistentsudo netfilter-persistent save
modprobe ip_tables
modprobe ip_nat_ftp
在LINUX启动时,ip_tables和iptable_nat两个模块在内核中并不是默认的启动项,因此上述两条语句就是先将这两个必须的模块启动。
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
设置防火墙规则,对于输入输出和转发的包均设置为接受状态。
建立伪装和IP转发:
iptables -t nat -A POSTROUTING -o ens33 -jMASQUERADE
iptables -A FORWARD -i vboxnet0 -j ACCEPT
参数说明:
-t nat:调用NAT表,调用这个说明遇到了产生新的连接的包。
-A POSTROUTIN:指定信息包打算离开防火墙时改变它们的规则,意即使用NAT。
-i vboxnet0:输入接口。
-o ens33:输出接口。
-j MASQUERADE:指定进行地址伪装,意即将内网地址伪装成外接口ens33的地址进行传输。
这两条命令的意思就是将内网向外连接的数据包(从vboxnet0接收到的数据包)的地址转换为外网接口的地址并从外接口(从ens33接口转发)转发
cuckoo配置
sudo nano /root/.cuckoo/conf/cuckoo.confmemory_dump = yessudo nano /root/.cuckoo/conf/virtualbox.confmode = guimachines = cuckoo1[cuckoo1]label = cuckoo1snapshot = clean-final-Xtags = windows_7, 32_bit, pythonsudo nano /root/.cuckoo/conf/memory.confguest_profile = Win7SP1x86delete_memdump = yessudo nano /root/.cuckoo/conf/processing.conf[memory]enabled yessudo nano /root/.cuckoo/conf/reporting.conf[singlefile]enabled = yeshtml = yespdf = yes
Windows7客户机
- 使用默认管理员账号Administrator
- 配置网络,设置静态IP192.168.56.101,子网掩码,255.255.255.0,网关192.168.56.1,DNS8.8.8.8
- 关闭防火墙
- 将agent.pyw置于启动目录下
- 在agent.pyw运行状态下拍下快照snapshot1,作为沙箱运行快照
Linux客户机
按照文档https://cuckoo.sh/docs/installation/guest/linux.html,逐步执行命令即可。
确保代理自动启动。最简单的方法是将其添加到 crontab:
在虚拟机内安装依赖项:$sudo crontab -e@reboot python /path/to/agent.py
安装内核调试符号: ```bash sudo apt-key adv —keyserver keyserver.ubuntu.com —recv-keys C8CAB6595FDFF622 $ codename=$(lsb_release -cs) $ sudo tee /etc/apt/sources.list.d/ddebs.list << EOF$sudo apt-get install systemtap gcc patch linux-headers-$(uname -r)
deb http://ddebs.ubuntu.com/ ${codename} main restricted universe multiversedeb http://ddebs.ubuntu.com/ ${codename}-security main restricted universe multiverse
deb http://ddebs.ubuntu.com/ ${codename}-updates main restricted universe multiverse
deb http://ddebs.ubuntu.com/ ${codename}-proposed main restricted universe multiverse EOF
$ sudo apt-get update $ sudo apt-get install linux-image-$(uname -r)-dbgsym
修补 SystemTap tapset,以便 Cuckoo 分析器可以正确解析输出:```bash$ wget https://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/stuff/systemtap/expand_execve_envp.patch$ wget https://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/stuff/systemtap/escape_delimiters.patch$ sudo patch /usr/share/systemtap/tapset/linux/sysc_execve.stp < expand_execve_envp.patch$ sudo patch /usr/share/systemtap/tapset/uconversions.stp < escape_delimiters.patch
编译内核扩展:
$ wget https://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/stuff/systemtap/strace.stp$ sudo stap -p4 -r $(uname -r) strace.stp -m stap_ -v
编译完成后,您应该会stap_.ko在同一文件夹中看到该文件。您现在可以按如下方式测试 STAP 内核扩展:
$ sudo staprun -v ./stap_.ko
输出应如下所示:
staprun:insertmodule:x Module stap inserted from file pathto_stap.ko
该stap_.ko文件应放在 /root/.cuckoo 中:
$ sudo mkdir /root/.cuckoo$ sudo mv stap_.ko /root/.cuckoo/
禁用虚拟机内部的防火墙(如果存在):
$ sudo ufw disable
在 VM 内禁用 NTP:
$ sudo timedatectl set-ntp off
可选 - 预装删除软件和配置:
$ sudo apt-get purge update-notifier update-manager update-manager-core ubuntu-release-upgrader-core$ sudo apt-get purge whoopsie ntpdate cups-daemon avahi-autoipd avahi-daemon avahi-utils$ sudo apt-get purge account-plugin-salut libnss-mdns telepathy-salut
建议使用静态 IP 地址配置 Linux 来宾。确保配置中的机器条目具有正确的 IP 地址并将platform变量设置为linux。配置 VM 后创建快照。现在可以进行分析了!
自定义配置
反虚拟机检测
#!/bin/bashecho " - Installing -"sudo apt-get install python3-pip libcdio-utils acpica-tools mesa-utilssudo pip3 install -r requirements.txtwget https://download.sysinternals.com/files/VolumeId.zip https://www.nirsoft.net/utils/devmanview-x64.ziphostname > computer.lstwhoami > user.lstsudo python3 antivmdetect.pyecho "Installation complete"
Cuckoo社区插件
cuckoo社区存储仓库(https://github.com/cuckoosandbox/community),包含一些样本签名与yara规则。
cuckoo community# cuckoo community --file cuckoo_master.tar.gz
遇到的一些问题
VMware通过NAT转发端口异常
我是以VMware下的Ubuntu虚拟机作为Host,并通过NAT分配IP给虚拟机。但局域网某些网段无法访问VMware内虚拟机的web服务。甚至出现在物理机无法通过自己的局域网地址访问cuckoo服务。
解决方案:把VMware的NAT服务程序vmnat.exe加入到防火墙允许列表里面。
无法在 Linux Guest 上编译内核扩展
执行sudo stap -p4 -r $(uname -r) strace.stp -m stap_ -v命令编译systemtap模块报错:
semantic error: while resolving probe point: identifier ‘kprobe’ …
解决方案:移除systemtap并下载源码重新编译安装,https://github.com/cuckoosandbox/cuckoo/issues/2684。
我建议每个有同样问题的人尝试以下步骤:
- sudo apt-get remove systemtap: 删除现有的安装
- 去https://sourceware.org/systemtap/wiki/SystemTapReleases下载Systemtap的最新源码(我测试过4.3版本)
- tar xf systemtap-x.x.tar.gz
- apt-get install gcc g++ elfutils libdw-dev elfutils build-essential:它应该是依赖项的完整列表,但如果缺少某些内容,您将在下一步中找到(查看systemtap-*/README)
- cd systemtap-*
- ./configure (如果您在这里遇到错误,则可能缺少某些依赖项)
- make
- make install
重试启动sudo stap -p4 -r $(uname -r) strace.stp -m stap_ -v:
$ sudo stap -p4 -r $(uname -r) strace.stp -m stap_ -vPass 1: parsed user script and 476 library scripts using 117248virt/88100res/5912shr/82312data kb, in 150usr/20sys/165real ms.Pass 2: analyzed script: 1799 probes, 205 functions, 103 embeds, 176 globals using 148156virt/120404res/7412shr/113220data kb, in 48440usr/5800sys/33518real ms.Pass 3: translated to C into "/tmp/stapklRjSe/stap__src.c" using 149744virt/122164res/7604shr/114808data kb, in 250usr/20sys/283real ms. stap_.koPass 4: compiled C into "stap_.ko" in 60980usr/1970sys/58715real ms.
Incorrect OS has been specified - volatility
在配置完linux沙箱后提交elf样本产出如下错误。
ERROR: Error running Volatility on machine 'cuckoo_ubuntu1': An incorrect OS has been specified for this machine! Please provide the correct one or Cuckoo won't be able to provide Volatility-based results for analyses with this VM.
输出日志显示内存dump文件路径为:/root/.cuckoo/storage/analyses/10/memory.dmp,执行下面命令查看dmp文件对应的信息。
vol.py -f memory.dmp imageinfo
但等待一段时间后并没有镜像信息,使用vol.py —info命令查看volatility配置发现profile中并不包含有Linux,需要手动配置。
文档如下:
https://github.com/volatilityfoundation/profiles
https://github.com/volatilityfoundation/volatility/wiki/Linux
https://www.andreafortuna.org/2019/08/22/how-to-generate-a-volatility-profile-for-a-linux-system/
apt-get install dwarfdumpapt-get install build-essentialapt search linux-headers-$(uname -r)apt install linux-headers-$(uname -r)
生成的zip文件复制到目录:volatility/volatility/plugins/overlays/linux,zip名称根据系统发行版本自定义一个即可,如Ubuntu1804
git clone https://github.com/volatilityfoundation/volatility.gitcd volatility/tools/linux/ && makecd ../../../zip $(lsb_release -i -s)_$(uname -r)_profile.zip ./volatility/tools/linux/module.dwarf /boot/System.map-$(uname -r)
复制zip到插件目录后,查找配置文件的名称:
