沙箱是一个虚拟系统程序,允许你在沙箱环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。 在网络安全中,沙箱指在隔离环境中,用以测试不受信任的文件或应用程序等行为的工具。
沙箱也是一种将未知、不可信的软件隔离执行的安全机制。恶意软件分析沙箱一般用来将不可信软件放在隔离环境中自动地动态执行,然后提取其运行过程中的进程行为、网络行为、文件行为等动态行为,安全研究员可以根据这些行为分析结果对恶意软件进行更深入地分析。
Cuckoo 是一款用Python 编写的开源的自动化恶意软件分析系统,它的主要功能有:
1.跟踪记录恶意软件所有的调用状况;
2.恶意软件文件行为:恶意软件执行过程中创建新文件、修改文件、删除文件、读取文件或下载文件的行为;
3.获取恶意软件的内存镜像;
4.以 PCAP 格式记录恶意软件的网络流量;
5.获取恶意软件执行过程中的屏幕截图;
6.获取执行恶意软件的客户机的完整内存镜像
Cuckoo 可以分析的文件类型包括但不限于:Windows 可执行文件、DLL 文件、PDF 文件、MS Office 文件、URL 和 HTML 文件、PHP 脚本文件、CPL 文件、VB 脚本文件、ZIP 压缩包、JAR 文件、Python 脚本文件、APK 文件、ELF 文件
Cuckoo 的架构也比较简单,在 Host 机上运行 Cuckoo 主程序,多个 Guest 机通过虚拟网络与 Host 机相连,每个 Guest 机上有一个 Cuckoo Agent 程序,用来做 Cuckoo 的监控代理。
官方wiki https://github.com/cuckoosandbox/cuckoo/issues?page=3&q=is%3Aissue+is%3Aopen
官方手册 http://docs.cuckoosandbox.org/en/latest/installation/
参考资料:
中翻手册 https://cuckoo-sandbox.readthedocs.io/zh_CN/latest/introduction/index.html
布谷鸟沙箱初体验 http://www.freebuf.com/articles/system/123816.html
布谷鸟安装配置详解 http://www.freebuf.com/sectool/108533.html
VBoxManage命令详解 http://dong717.iteye.com/blog/1967739
使用ubuntu16.04(最契合版本),cuckoo完全兼容python2.7,为避免不必要的环境问题,采用2.7以及pip2,并且使用虚拟环境管理-virtualbox,内部镜像推荐win7(实测为win10可能会出现WindowsError错误),如果是vmware安装,推荐使用兼容性Workstation 15.x,ubuntu版本选择Ubuntu 64位-因为配置低了不方便后续虚拟嵌套。
特殊说明:云上安装需要支持虚拟嵌套,目前华为云仅裸金属服务器及专属主机支持。具体可以询问云服务器客服。
Ubuntu下载:http://releases.ubuntu.com

#(1) 先把源文件复制到sources.list.old,备份
cd /etc/apt/ && sudo cp sources.list sources.list.old
#(2 ) 没有安装过vim 先安装 vim。安装完后修改
sudo apt-get install vim -y
#这里gedit也比较方便,不过注意执行需要以登录用户执行,如果不是root,加上sudo就好了
sudo vim /etc/apt/sources.list
18.04#将原来文件的内容全部注释/删除,添加清华源,由于我安装的是18.04的Ubuntu,所以下列以18.04举例
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
#更新
sudo apt-get update
#安装aptitude,先使用较为匹配的依赖
sudo apt install aptitude gedit -y
#安装编译工具和基本库:
sudo aptitude install gcc g++ make build-essential zlib1g-dev libssl-dev libffi-dev
#安装通用依赖项:
sudo aptitude install zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev git mongodb swig libtiff5-dev libjpeg8-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev
#安装Python及其相关依赖项:
sudo aptitude install python python-dev python-pip python-setuptools python-virtualenv python-pil python-sqlalchemy python-bson python-dpkt python-jinja2 python-magic python-pymongo python-gridfs python-libvirt python-bottle python-pefile python-chardet python-tk
#安装其他特定依赖项:
sudo aptitude install libjpeg-dev
wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz -O Python-2.7.12.tgz
tar -zvxf Python-2.7.12.tgz
cd Python-2.7.12
./configure
make && make install
cd
#查看py版本
python -V
sudo add-apt-repository universe
sudo apt update
#如果之前安装了python2,可以跳过这一步
apt install python2.7
# 查看是否配置了python替代方案
update-alternatives --list python
# 将python2设置为1
update-alternatives --install /usr/bin/python python /usr/bin/python2 2
# 将python3设置为2
update-alternatives --install /usr/bin/python python /usr/bin/python3 1
# 查看python替代方案
update-alternatives --list python
# 如何切换版本
# update-alternatives --config python
#升级pip版本
python -m pip install --upgrade pip
#降低pip版本,指定pip19.2
python -m pip install pip==19.2
#卸载pip
python -m pip uninstall pip
#下载get包
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py -O get-pip.py
python get-pip.py
#检测版本
python -m pip --version
apt-get upgrade python-setuptools -y
apt-get install python-pip
#创建pip文件夹 并创建pip.conf文件
cd ~
mkdir .pip
touch pip.conf
sudo chmod 755 pip.conf
gedit pip.conf
#pip.conf文件内容为:
[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple
timeout = 6000
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn
disable-pip-version-check = true
#更新
python -m pip install --upgrade pip
virtualenv部署时拥有自己的安装目录,不与其它任何环境共享一个库,能够管理Python的版本和库。
如同时开发多个应用时,这些应用需要共用一个Python,应用A在2.6版本,应用B需要2.7版本,这时候会出现版本不统一情况,利用virtualenv可以为每个应用做一个“隔离”的Python运行环境。
sudo pip install virtualenv
sudo pip install virtualenvwrapper
#设置环境变量
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh
#激活环境变量
source ~/.bashrc
#创建虚拟环境的根目录
$ mkdir $HOME/.virtualenvs
#创建虚拟环境
sudo virtualenv /opt/cuckoo
#指定虚拟环境的python版本
sudo virtualenv --python /usr/bin/python2 /opt/cuckoo
#默认情况下虚拟环境不会依赖系统环境的site-packages,如果想依赖系统环境的site-packages,可以使用--system-site-packages来设置。
#sudo virtualenv --system-site-packages /opt/cuckoo
#启动虚拟环境
source /opt/cuckoo/bin/activate
#ubuntu使用apt安装软件包时报错,内容如下:
#E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
sudo rm /var/lib/dpkg/lock-frontend
sudo apt-get update
#如无用,重启机器
#无法找到软件包
#这种情况一般换源解决-https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/(清华源)
#然后选择 对于版本的源 之后修改
在安装的部分用proxychains挂代理速度会快很多
sudo apt-get install mongodb
sudo apt install libmysqld-dev -y
sudo apt install mysql-client -y
sudo apt install libmysqlclient-dev -y
sudo apt install build-essential -y
sudo apt install libmysqld-dev -y
#为避免不必要的麻烦建议使用
sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
getcap /usr/sbin/tcpdump
apt-get install tcpdump apparmor-utils -y
#注意核对tcpdump位置
aa-disable /usr/sbin/tcpdump
#Tcpdump需要根权限,但如果您不希望Cuckoo以根权限运行,因此必须将特定的Linux功能设置为二进制文件,提前创建cuckoo用户
groupadd pcap
useradd cuckoo
usermod -a -G pcap cuckoo
chgrp pcap /usr/bin/tcpdump
setcap cap_net_raw,cap_net_admin=eip /usr/bin/tcpdump
getcap /usr/sbin/tcpdump
sudo wget http://sourceforge.net/projects/ssdeep/files/ssdeep-2.13/ssdeep-2.13.tar.gz/download -O ssdeep-2.13.tar.gz --no-check-certificate
tar -zxvf ssdeep-2.13.tar.gz
cd ssdeep-2.13/
sudo ./configure
sudo make
sudo make install
#查看是否安装成功
ssdeep -V
cd -
#在指定文件夹下安装,这里我在opt目录安装的
cd /opt
sudo apt-get install git
#这里可能需要挂梯子:
sudo git clone https://github.com/volatilityfoundation/volatility.git
cd volatility
#将构建它类型
sudo python setup.py build
#安装
sudo python setup.py install
#查看帮助信息,确认是否安装成功
python vol.py -h
cd -
#如缺失distorm3,下载后重新构建:
python -m pip install distorm3 pycrypto
sudo python setup.py build
python setup.py install
#查看帮助信息,确认是否安装成功
python vol.py -h
cd -
#提取内存中保留的 cmd 命令使用情况(第二条命令是将镜像的注册表项导出进行查看,第一条通常执行时间较长)
python vol.py -f memory --profile=WinXPSP2x86 cmdscan
volatility_2.6_win64_standalone.exe -f memory.dmp --profile=Win7SP1x64 dumpregistry --dump-dir ./
#选择性的安装
#PIL:图片处理库
python -m pip install pil
#OpenPyxl:读写excel文件
python -m pip install openpyxl
#ujson:JSON解析
python -m pip install ujson
#yara-规则匹配
sudo aptitude install libtool flex yara -y
一定要0.24.0版本,安装比这新的版本会接着报错,比这个版本低的暂没遇到问题
sudo aptitude install python-m2crypto -y
python -m pip install m2crypto==0.24.0
#如果报错,试试下面的命令,固定py版本安装
python2.7 -m pip install M2Crypto
sudo apt-get install build-essential python3-dev python-dev libssl-dev swig
python -m pip install https://gitlab.com/m2crypto/m2crypto/repository/python3/archive.tar.gz
python -m pip install M2Crypto
#OpenSSL的最新稳定版本是1.1.1系列,ubuntu18.04内置了1.1.0g版本的openssl
#查看本机版本
openssl version
#官网查看对应Ubuntu对应版本
http://security.ubuntu.com/ubuntu/pool/main/o/openssl/
#使用下面的apt命令更新Ubuntu存储库并安装软件包编译的软件包依赖项:
sudo apt update
sudo aptitude install build-essential checkinstall zlib1g-dev
#转到’/ usr / local / src’目录并使用wget下载OpenSSL-1.1.1b的源代码:
cd /usr/local/src/
sudo wget https://www.openssl.org/source/openssl-1.1.1b.tar.gz
#现在解压缩openssl-1.1.1b.tar.gz文件,然后转到’openssl-1.1.1b’目录:
sudo tar -xf openssl-1.1.1b.tar.gz
cd openssl-1.1.1b
#使用以下命令配置和编译OpenSSL:
sudo ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
sudo make
sudo make test
#注意:
#prefix和–openssldir =设置OpenSSL的输出路径。
#shared = force来创建共享库。
#zlib =使用zlib库启用压缩。
#编译过程完成后,使用以下命令安装OpenSSL:
sudo make install
#OpenSSL安装在’/usr/local/ssl’目录中。
#接下来,我们将为OpenSSL配置共享库。 新的OpenSSL二进制文件将从’/usr/local/ssl/lib’目录加载库文件。
#转到’/etc/ld.so.conf.d’目录并创建新配置文件’openssl-1.1.1b.conf’:
cd /etc/ld.so.conf.d/
sudo vim openss1-1.1.1b.conf
#粘贴openssl库路径目录:
/usr/local/ssl/lib
#现在使用以下命令重新加载动态链接:
sudo ldconfig -v
#默认最高版本
python -m pip install M2Crypto
#可选择安装项,位CUCKOO web界面中的远程控制功能提供RDP,VNC和SSH的转换层
sudo aptitude install libguac-client-rdp0 libguac-client-vnc0 libguac-client-ssh0 guacd
sudo aptitude install libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk
python -m pip install --ignore-installed dpkt==1.8.7
sudo aptitude install python-pypcap
python -m pip install pyopenssl pycrypto
python -m pip install -U pip setuptools
#查看版本,确认是否安装成功
python -m pip list | grep setuptools
python -m pip install -U cuckoo
#启动web
cuckoo web
#通过http://localhost:8000
cuckoo web runserver 0.0.0.0:8080
#也可以通过ip访问 http://host ip:8080
#如果需要设置后台可以使用nohup或者&
nohup cuckoo
nohup cuckoo web runserver 0.0.0.0:8080
#无法绑定结果服务器”错误意味着杜鹃无法 绑定用于获取分析日志的组件,发生这种情况是因为您的虚拟接口关闭或丢失。需要重新启动接口进行绑定
$ If the hostonly interface vboxnet0 does not exist already.
#新建网卡
VBoxManage hostonlyif create
Configure vboxnet0.
VBoxManage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0
cd ~/.cuckoo/conf
sudo gedit cuckoo.conf
#如不使用密码,为空

#其中包含了300多个恶意软件行为签名,可用于简化我们对结果的分析。
#需要梯子
cuckoo community
#下载好的 community 压缩包,也可以通过如下命令直接导入:
wget https://github.com/cuckoosandbox/community/archive/master.tar.gz
cuckoo community --file master.tar.gz
从 Oracle 仓库软件源中安装 VirtualBox:
#安装依赖
python -m pip install openpyxl ujson distorm3 pytz
wget -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 -
echo "deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian $(lsb_release -cs) contrib" | \
sudo tee -a /etc/apt/sources.list.d/virtualbox.list
sudo apt update
输入 sudo apt install virtualbox- 并点击 tab 键以查看可用于安装的各种 VirtualBox 版本,然后通过补全命令来选择其中一个版本。
sudo apt install virtualbox-7.0
#使用命令行删除:
#sudo apt remove virtualbox virtualbox-*
virtualbox
1、QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to ‘/tmp/runtime-root’
export XDG_RUNTIME_DIR=/usr/lib/
export XDG_RUNTIME_DIR=/usr/lib/ >> /etc/profile
export RUNLEVEL=3 >> /etc/profile
source /etc/profile
2、其他问题建议直接重启试试
source /opt/cuckoo/bin/activate
sudo cuckoo -d
virtualbox
#VirtualBox Extension Pack为来宾计算机提供了多种有用的功能,例如虚拟USB 2.0和3.0设备,对RDP的支持,图像加密等等。
#查看virtualbox的版本号:
vboxmanage -V
#这里查询为6.1.40r154048
#然后去http://download.virtualbox.org/virtualbox/找到自己对应的版本,使用wget进行下载。
wget http://download.virtualbox.org/virtualbox/6.1.40/Oracle_VM_VirtualBox_Extension_Pack-6.1.40-154048.vbox-extpack
sudo vboxmanage extpack install Oracle_VM_VirtualBox_Extension_Pack-6.1.40-154048.vbox-extpack
#查看扩展包是否安装成功:
vboxmanage list extpacks
#设置扩展包特性(为后面使用远程桌面做准备):
vboxmanage setproperty vrdeextpack "Oracle VM VirtualBox Extension Pack"
#导入自选扩展包:
#VBoxManage extpack install 包名
#如果报了一个错误为:QXcbConnection: Could not connect to display
#查看DISPLAY是否被定义
echo $DISPLAY
echo "export QT_QPA_PLATFORM='offscreen'" >> ~/.bashrc && source ~/.bashrc
#注意:指定文件夹下完成!
cd /opt && sudo chmod 777 -R /opt
VBoxManage createvm --name cuckoo --register
#设置操作系统win7:
VBoxManage modifyvm cuckoo --ostype Windows7
#查看支持的类型:
VBoxManage list ostypes
#设置内存:
VBoxManage modifyvm cuckoo --memory 1500
#建立虚拟磁盘(系统盘)100G:
VBoxManage createmedium --filename cuckoo_HDD_SYS_100G.vdi --size 100000
#建立虚拟磁盘(home盘)100G:
VBoxManage createmedium --filename cuckoo_HDD_HOME_100G.vdi --size 100000
#创建存储控制器IDE、SATA:
VBoxManage storagectl cuckoo --name IDE --add ide --controller PIIX4 --bootable on
VBoxManage storagectl cuckoo --name SATA --add sata --controller IntelAhci --bootable on
#关联虚拟磁盘:
VBoxManage storageattach cuckoo --storagectl SATA --port 0 --device 0 --type hdd --medium cuckoo_HDD_SYS_100G.vdi
VBoxManage storageattach cuckoo--storagectl SATA --port 1 --device 0 --type hdd --medium cuckoo_HDD_HOME_100G.vdi
#开启嵌套虚拟化
VBoxManage modifyvm cuckoo --nested-hw-virt on
#设置虚拟机使用的CPU、内存和显存,这里分别设置为4核、32G和30M.
VBoxManage modifyvm cuckoo --ioapic on
vboxmanage modifyvm cuckoo --cpus 4 --memory 1500 --vram 30 --hwvirtex on
#设置启动顺序
VBoxManage modifyvm cuckoo --boot1 disk --boot2 cdrom --boot3 floppy --boot4 disk
#设置I/O:
vboxmanage modifyvm cuckoo --ioapic on
#设置远程桌面连接:
VBoxManage modifyvm cuckoo --vrdeport 3389 --vrdeaddress ""
#打开远程桌面(需要安装扩展包之后支持):
VBoxManage modifyvm cuckoo --vrde on
#下载镜像-https://msdn.itellyou.cn/,镜像需下载在Ubuntu文件中,推荐存放opt:
VBoxManage storageattach cuckoo --storagectl IDE --port 0 --device 0 --type dvddrive --medium /opt/cn_windows_7_professional_with_sp1_vl_build_x86_dvd_u_677939.iso
#开启对应虚拟机
VBoxHeadless -startvm "cuckoo"
#格式化输出信息:
VBoxManage showvminfo cuckoo -details -machinereadable
#查看虚拟机列表及正在运行虚拟机列表:
VBoxManage list vms && vboxmanage list runningvms
#新增一个网卡,默认vboxnet:
VBoxManage hostonlyif create
#设置网卡2为nat
VBoxManage modifyvm cuckoo --bridgeadapter1 nat
#修改网络模式为nat:
VBoxManage modifyvm cuckoo --nic2 nat
#自动分配的IP是10的私有网段,修改网段:
VBoxManage modifyvm cuckoo --natnet2 "192.168.214.0/24"
#设置hostonly模式:
VBoxManage modifyvm cuckoo --nic1 hostonly
#设置到网卡1:
VBoxManage modifyvm cuckoo --hostonlyadapter1 vboxnet0
#验证主机和客户机上能ping通
#客户机上设置固定IP-随意设置56网段内即可:
192.168.56.xx
#虚拟机要开启共享,传输agent.py,pillow-2.7,win32-py2.7
#Ubuntu安装Samba服务及配置共享文件夹:
apt-get install samba samba-common
mkdir /root/share
chmod 777 -R /root/share
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
vim /etc/samba/smb.conf
sudo smbpasswd -a nanshou
#配置samba配置文件-最后加上:
sudo vi /etc/samba/smb.conf
[share]
comment = share folder
browseable = yes
path = /home/nanshou/share
create mask = 0700
directory mask = 0700
valid users = nanshou
force user = nanshou
force group = nanshou
public = yes
available = yes
writable = yes
service smbd restart
#客户机上,网络里输入:
\192.168.56.1\share
#可以看到主机共享文件夹
#控制脚本位置:
.cuckoo/agent/agent.py
安装python2.7,pollow
#配置环境变量
#控制面板进行操作即可
#打开gpedit.msc-关闭防火墙、系统更新等
#管理员打开cmd
net user administrator /active:yes
#切换administrator登录
#拍摄快照:
VBoxManage snapshot cuckoo(虚拟机名) take test1(快照名)
#通过某一快照恢复:
VBoxManage snapshot "vmname" restore "snapname"
cd ~/.cuckoo/conf
sudo gedit cuckoo.conf
machinery = virtualbox
[resultserver]
ip = 192.168.56.1 #This is the IP address of the host
port = 2042 #leave default unless you have services running
[cuckoo]
//每次启动都要检查更新很费时间,关闭
version_check = no
auxiliary.conf:
[sniffer]
#Enable or disable the use of an external sniffer (tcpdump) [yes/no].
enabled = yes
#Specify the path to your local installation of tcpdump. Make sure this
#path is correct.
tcpdump = /usr/sbin/tcpdump(注意这里的位置)
virtualbox.conf:
machines = cuckoo //你的虚拟机名字
[你的虚拟机名字]
label = 你的虚拟机名字
platform = windows
ip = 192.168.56.101 # IP address of the guest
snapshot = 你创建的快照名字
interface = vboxnet0
如果只设置了仅主机模式,就要设置路由转发,使
sysctl -w net.ipv4.ip_forward=1
echo 1 > /proc/sys/net/ipv4/ip_forward
永久开启:
vim /etc/sysctl.conf
net.ipv4.ip_forward=1 //前的#注释取消
sysctl -p /etc/sysctl.conf
通过设置IP转发,可以实现客户机通过主机的ens33网卡访问网络
#iptables -A FORWARD -o ens33 -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
在控制台新建虚拟电脑,名称使用cuckoo,版本使用windows7


下为win7下载迅雷链接:
ed2k://|file|cn_windows_7_professional_with_sp1_vl_build_x86_dvd_u_677939.iso|2502909952|935E5B4B754527BE3C238FA6ABDD9B86|/
在存储中选择下载好的iso镜像

按照提示安装即可,选择家庭网络

安装完成后关掉防火墙和自动更新


添加virtualbox的网卡并添加到win7中,在管理-> 主机网络管理器中添加网络

在虚拟主机的设置中选择vboxnet0的网络

在主机中设置主机的ip
192.168.56.101
255.255.255.0
192.168.56.1
114.114.114.114
8.8.8.8

ubuntu中编辑有线连接
192.168.56.10
255.255.255.0
192.168.56.2
114.114.114.114

配置完成之后重启win7
现在ubuntu的网络状况如下:

在ubuntu中执行命令
sudo -i
sysctl -w net.ipv4.ip_forward=1
echo 1 > /proc/sys/net/ipv4/ip_forward
gedit /etc/sysctl.conf // 在这里去掉net.ipv4.ip_forward=1 前的#号,保存
sysctl -p /etc/sysctl.conf
exit
然后配置iptables
sudo iptables -A FORWARD -o ens33 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo gedit /etc/network/interfaces
在interfaces文件的下边添加两行
pre-up iptables-restore < /etc/iptables.rules
post-down iptables-save > /etc/iptables.rules
修改resolv.conf文件里边的nameserver
sudo gedit /etc/resolv.conf
将nameserver 的127.0.0.1 改为nameserver 114.114.114.114
在ubuntu新建share文件夹共享到win7,执行命令:
cd ~
sudo mkdir share
sudo cp ~/.cuckoo/agent/agent.py ~/share
在share文件夹中下载两个python的文件
sudo wget https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi
从http://www.rsdown.cn/down/166571.html#download网站中下载PIL-1.1.7.win32-py2.7.exe

在设备->安装增强功能中安装增强功能, 同vmware中的vmware tools


然后在虚拟机设置中选择设备->共享文件夹,添加一个共享文件夹

将刚刚的创建的share文件夹添加在这里,然后将win7关机
在设置里将启动顺序设为硬盘最先

重新启动之后看到共享文件夹

点击安装python,安装完成后将agent.py 改名成agent.pyw之后和PIL文件一起移动到c盘下的Python27

点击PIL-1.1.7.win32-py2.7安装PIL,安装好后双击agent,没有弹窗但是开放了8000端口,在cmd中运行
netstat -an

监听8000 配置成功,就可以了
配置组策略在windows组件的附件管理器中增加中等风险文件类型包含列表,运行文件就不会出现未识别软件弹窗
运行命令打开组策略:
gpedit.msc



在计算机的控制面板中选择用户账户和家庭安全,在用户账户中选择更改用户账户控制设置,将选项拉到最下端就可以关掉UAC

在计算机管理->系统工具->本地用户和组->用户属性取消掉administrator账号勾选

然后在win+R 中输入
control userpasswords2

应用后直接在密码窗中确定即可
注销后选择administrator用户进行登陆,在Python27目录中重新运行agent.pyw并在cmd中使用netstat -an检查端口是否开放
在备份 控制->生成备份 ,名字叫snapshot

首先,在主机端为您的机械平台准备网络。 如果您将 VirtualBox 与仅主机接口一起使用,并且您有一个接口,则无需安装其他依赖项。vboxnet0
如果您使用 QEMU,您可能需要安装其他 主机上的依赖关系:
sudo apt install uml-utilities bridge-utils
接下来,获取要为其配置接口的虚拟机列表 从。 例如,、、、、等。 对于每个 VM,在主机上预配置网络分流接口,需要 避免必须以 root 身份启动,例如:conf/qemu.conf``ubuntu_x32``ubuntu_x64``ubuntu_arm``ubuntu_mips``ubuntu_mipsel
sudo tunctl -b -u cuckoo -t tap_ubuntu_x32
sudo ip link set tap_ubuntu_x32 master br0
sudo ip link set dev tap_ubuntu_x32 up
sudo ip link set dev br0 up
sudo tunctl -b -u cuckoo -t tap_ubuntu_x64
sudo ip link set tap_ubuntu_x64 master br0
sudo ip link set dev tap_ubuntu_x64 up
sudo ip link set dev br0 up
请注意,如果您以其他用户身份运行 Cuckoo,请在 -u 之后替换 ‘‘cuckoo’’ 与您的用户。
通过共享,将agent文件传入ubuntu客户机
最简单的方法是将其添加到crontab中:
sudo apt install uml-utilities bridge-utils
$ sudo crontab -e
#第一次可能会需要选择模式,选择vim模式
#在linux客户机中自启设置sh文件,为了确保文件自启成功同时设置py文件
@reboot python /path/to/agent.sh
@reboot python /path/to/agent.py
注意:如果是第一次执行“crontab -e”,会提示选择编辑器
sudo select-editor:
如果是第一次执行“crontab -e”,会提示选择编辑器,选择合适的编辑器即可。我选择的是“2”,vim。
#以后若要该改变选择, 输入select-editor
sudo select-editor
sudo apt-get update
sudo apt-get install python2.7
sudo apt update
sudo apt install python-pip
pip install --upgrade pip
sudo apt install net-tools
sudo apt-get install systemtap gcc patch linux-headers-$(uname -r)
安装内核调试符号:
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
deb http://ddebs.ubuntu.com/ ${codename} main restricted universe multiverse
#deb 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
#(适用于 Debian 9 amd64)安装内核调试符号:
sudo apt-get install linux-image-$(uname -r)-dbg
以便 Cuckoo 分析器可以正确解析 输出:
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
#这里可能会出现报错,详细的解决办法参照
删除现有安装
sudo apt-get remove systemtap
#转到https://sourceware.org/systemtap/wiki/SystemTapReleases 并下载Systemtap的最新源代码(我已经测试了4.3版本)
tar xf systemtap-x.x.tar.gz
#它应该是依赖项的完整列表,但如果缺少某些内容,您将在下一步中找到(查看systemtap-*/README)
apt-get install gcc g++ elfutils libdw-dev elfutils build-essential
cd systemtap-*
./configure(如果你在这里遇到错误,可能会缺少一些依赖项)
make
make install
重试启动:sudo stap -p4 -r $(uname -r) strace.stp -m stap_ -v
编译完成后,您应该会看到该文件 文件夹。现在,您将能够测试 STAP 内核扩展,如下所示:stap_.ko
sudo staprun -v ./stap_.ko
输出应如下所示:
staprun:insert_module:x Module stap_ inserted from file path_to_stap_.ko
该文件应放在 /root/.cuckoo 中:stap_.ko
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 地址,并且 将变量设置为 。 配置 VM 后创建快照。 现在可以进行分析了!
2019-07-29 10:27:51,506 [cuckoo.core.plugins] 错误:无法运行任务 #27 的处理模块“内存”:
回溯(最近一次调用最后一次):
文件“/usr/local/lib/python2.7/dist-packages/cuckoo/core/plugins.py”,第 246 行,进程
中数据 = current.run() 文件“/usr/local/lib/python2.7/dist-packages/cuckoo/processing/memory.py”,第 1118 行,运行
返回 VolatilityManager(self.memory_path, osprofile).run()
文件“/usr/local/lib/python2.7/dist-packages/cuckoo/processing/memory.py”,第 1039 行,运行
结果[plugin_name] = getattr(self.vol, plugin_name)()
文件“/usr/local/lib/python2.7/dist-packages/cuckoo/processing/memory.py”,第 172 行,在 command.calculate() 的进程的 pslist 中:
文件“/usr/local/lib/python2.7/dist-packages/volatility-2.6.1-py2.7.egg/volatility/win32/tasks.py”,第 88 行,在 pslist
中对于 get_kdbg(addr_space).processes() 中的 p:
文件“/usr/local/lib/python2.7/dist-packages/volatility-2.6.1-py2.7.egg/volatility/win32/tasks.py”,第 50 行,在 if obj get_kdbg
中。VolMagic(addr_space)。KPCR.value:
文件“/usr/local/lib/python2.7/dist-packages/volatility-2.6.1-py2.7.egg/volatility/obj.py”,第 751 行,在 getattr 中返回 self.m(attr) 文件“/usr/local/lib/python2.7/dist-packages/volatility-2.6.1-py2.7.egg/volatility/obj.py”,第 733 行,在 m
raise 中 AttributeError(“结构{0}没有成员{1}”.format(self.obj_name, attr
))
AttributeError:结构VOLATILITY_MAGIC没有成员 KPCR
“dir_part”是“日志”,但它不在RESULT_UPLOADABLE。如果我将“如果dir_part不在RESULT_UPLOADABLE:”修改为“如果dir_part不在RESULT_DIRECTORIES:”
官方修改:
cuckoo/data/analyzer/windows/modules/auxiliary/procmon.py文件中logs修改为files
# Upload the XML file to the host.
upload_to_host(self.procmon_xml, os.path.join("logs", "procmon.xml"))
upload_to_host(self.procmon_xml, os.path.join("files", "procmon.xml"))
大神修改:
修改cuckoo根文件.cuckoo/下的文件resultserver.py
RESULT_UPLOADABLE = ("files", "shots", "buffer", "extracted", "memory")
RESULT_DIRECTORIES = RESULT_UPLOADABLE + ("reports", "logs")
def netlog_sanitize_fname(path):
"""Validate agent-provided path for result files"""
path = path.replace("\\", "/")
dir_part, name = os.path.split(path)
if dir_part not in RESULT_DIRECTORIE:
if dir_part not in RESULT_DIRECTORIES:
raise CuckooOperationalError("Netlog client requested banned path: %r"
% path)
if any(c in BANNED_PATH_CHARS for c in name):
for c in BANNED_PATH_CHARS:
path = path.replace(c, "X")
return path
cd ~/.cuckoo/conf
sudo gedit cuckoo.conf
配置如下
machinery = virtualbox
[resultserver]
ip = 192.168.56.1 #This is the IP address of the host
port = 2042 #leave default unless you have services running

#如额外配置,在文件下修改即可(web密码、数据库等):
[cuckoo]
version_check = yes
ignore_vulnerabilities = no
api_token = uIfx
web_secret =
delete_original = no
delete_bin_copy = no
machinery = virtualbox
memory_dump = no
terminate_processes = no
reschedule = no
process_results = yes
max_analysis_count = 0
max_machines_count = 0
max_vmstartup_count = 10
freespace = 1024
tmppath =
rooter = /tmp/cuckoo-rooter
[feedback]
enabled = no
name =
company =
email =
[resultserver]
ip = 192.168.109.206 ### 主机地址
port = 2042 ### 端口
upload_max_size = 134217728
[processing].
analysis_size_limit = 134217728
resolve_dns = yes
sort_pcap = yes
[database]
connection = postgresql://cuckoo:1234567890-=@localhost:5432/cuckoo ### 数据库链接
timeout = 60
[timeouts]
default = 120
critical = 60
vm_state = 60
[remotecontrol]
enabled = no
guacd_host = localhost
guacd_port = 4822
sudo gedit auxiliary.conf
配置如下
[sniffer]
enabled = yes
#Specify the path to your local installation of tcpdump. Make sure this
#path is correct.
tcpdump = /usr/sbin/tcpdump
sudo gedit virtualbox.conf
配置如下
machines = cuckoo1
[cuckoo1]
label = cuckoo // 前边virtualbox的主机名
platform = windows
ip = 192.168.56.101 // 客户机的ip地址
snapshot = snapshot // 生成备份的名字
interface = vboxnet0 // virtualbox网卡名

#如果有多台客户机
machines = cuckoo1,cuckoo2
#在下面根据格式添加即可
[cuckoox]
label = xxx // 前边virtualbox的主机名
platform = linux
ip = 192.168.56.102 // 客户机的ip地址
snapshot = snapshot // 生成备份的名字
interface = vboxnet0 // virtualbox网卡名
sudo gedit reporting.conf
配置如下
[mongodb]
enabled = yes
重启virtualbox,在ubuntu 运行
sudo apt-get install apparmor-utils
sudo aa-disable /usr/sbin/tcpdump //保证tcpdump正常使用
配置 recentfiles.py
sudo gedit ~/.cuckoo/analyzer/windows/modules/auxiliary/recentfiles.py
在这部分加上注释符
'''
r = SHELL32.SHGetKnownFolderPath(
uuid.UUID(self.locations[location]).get_bytes_le(),
0, None, ctypes.byref(dirpath)
)
if r:
log.warning("Error obtaining user directory: 0x%08x", r)
return
# TODO We should free the memory with CoTaskMemFree().
return dirpath.value
'''

#如额外配置
[feedback]
enabled = no ### 启动
[jsondump]
enabled = yes
indent = 4
calls = yes
[singlefile]
enabled = no
html = no
pdf = no
[misp]
enabled = no
url =
apikey =
mode = maldoc ipaddr hashes url
distribution = 0
analysis = 0
threat_level = 4
min_malscore = 0
tag = Cuckoo
upload_sample = no
[mongodb]
enabled = yes ### 启用mongodb
host = 127.0.0.1
port = 27017
db = cuckoo ### 数据库名
store_memdump = yes
paginate = 100
username = cuckoo ### 账号
password = 1234567890-= ### 密码
[elasticsearch]
enabled = no
hosts = 127.0.0.1
timeout = 300
calls = no
index = cuckoo
index_time_pattern = yearly
cuckoo_node =
[moloch]
enabled = no
host =
insecure = no
moloch_capture = /data/moloch/bin/moloch-capture
conf = /data/moloch/etc/config.ini
instance = cuckoo
[notification]
enabled = no
url =
identifier =
[mattermost]
enabled = no
url =
myurl =
username = cuckoo
show_virustotal = no
show_signatures = no
show_urls = no
hash_filename = no
hash_url = no
#配置数据库连接
#更改默认数据库
cuckoo默认使用sqlite数据库,如果需要使用并发(多台虚拟机同时分析)的话,推荐使用mysql或者postgresql。
这里使用mysql作为设置,首先创建cuckoo用户,密码为cuckoo,数据库为cuckoo
mysql> CREATE DATABASE IF NOT EXISTS cuckoo default charset utf8 COLLATE utf8_general_ci;
mysql> CREATE USER 'cuckoo'@'localhost' IDENTIFIED BY 'cuckoo';
mysql> GRANT ALL PRIVILEGES ON cuckoo.* TO 'cuckoo'@'localhost';
mysql> FLUSH PRIVILEGES;
接着修改cuckoo配置文件 conf/cuckoo.conf
[database]
connection = mysql://cuckoo:cuckoo@localhost/cuckoo
将win7恢复到刚才保存的镜像,打开两个ubuntu的终端分别输入
sudo cuckoo -d
sudo cuckoo web runserver


访问本地8000端口
[http://127.0.0.1:8000](http://127.0.0.1:8000/)
即可看到界面

Thanatos勒索病毒测试
将病毒在控制台进行文件的上传,点击submit提交,提交后点击右上角的analyze就可以开始分析了

分析当中的状态是running,运行cuckoo -d的终端也在实时显示分析的过程


运行结束之后会出现reported的标志,点击reported会看到报告

从报告中可以看到Thanatos.exe的大小、类型和特征值,分析的时间和运行的截图,截图就是在win7中运行的结果

以下是运行截图的详情,将c盘的文件包括桌面的password文件进行加密,加密之后弹出记事本勒索比特币



这里的结果和微步云沙箱的也是差不多的
