在Kali Linux 2020系统中安装、配置和使用cuckoo沙箱
今天为大家介绍在kali linux 2020系统中cuckoo软件及沙箱的安装、配置和使用方法。
主操作系统:kali linux 2020
cockoo版本:2.0.7
虚拟化软件:virtualbox 6.1
虚拟系统:windows 7、ubuntu 18.04
硬件平台:小米笔记本电脑
一、在kali linux系统中部署cuckoo软件
(一)cuckoo简介
1、什么是沙箱
工作中很多时候需要自己对一些可疑程序进行检测,可以选择VT等在线检测平台,也可以使用自己搭建的开源沙箱进行检测。所谓沙箱(sandbox),是一种将未知、不可信的软件隔离执行的安全机制,一般用来将不可信软件放在隔离环境中自动地动态执行,然后提取其运行过程中的进程行为、网络行为、文件行为等动态行为,安全研究员可以根据这些行为分析结果对恶意软件进行更深入地分析。
2、Cuckoo是什么?
Cuckoo是一款用Python编写的开源的自动化恶意软件分析系统,它的主要功能有:
(1)跟踪记录恶意软件所有的调用状况;
(2)恶意软件文件行为:恶意软件执行过程中创建新文件、修改文件、删除文件、读取文件或下载文件的行为;
(3)获取恶意软件的内存镜像;
(4)以PCAP格式记录恶意软件的网络流量;
(5)获取恶意软件执行过程中的屏幕截图;
(6)获取执行恶意软件的客户机的完整内存镜像。
3、cuckoo可以分析什么文件?
Cuckoo可以分析的文件类型包括但不限于:
Windows可执行文件
DLL文件
PDF文件
MSOffice文件
URL和HTML文件
PHP脚本文件
CPL文件
VB脚本文件
ZIP压缩包
JAR文件
Python脚本文件
APK文件
ELF文件
4、Cuckoo的架构
Cuckoo的架构也比较简单,在Host机上运行Cuckoo主程序,多个Guest机通过虚拟网络与Host机相连,每个Guest机上有一个Cuckoo Agent程序,用来做Cuckoo的监控代理,结构图如下:
(二)kali linux安装cuckoo相关的软件
1、安装python库
apt-get install python python-pip python-dev libffi-dev libssl-dev
apt-get install python-virtualenv python-setuptools
apt-get install libjpeg-dev zlib1g-dev swig
2、安装mongodb
为了使用基于djangle的web接口,需要安装mongodb。但是kali linux更新源中没有mongodb,需要引用ubuntu的更新源才能安装,具体方法如下:
(1)访问网站
https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/
选择适当版本的ubuntu,例如对于kali linux 2020系统,选择ubuntu 19.10:
(2)将ubuntu更新源的信息写入kali的配置文件
cd /etc/apt/sources.list.d
touch ubuntu.list //创建文件
vi ubuntu.list //编辑配置文件,加入下面的内容
保存退出
(3)安装软件
apt update
apt search mongodb //搜索特定的软件,使用了ubuntu的更新源则可以搜索到mongodb了
apt install mongodb mongodb-clients mongodb-server//安装软件
(4)还原更新源
vi /etc/apt/sources.list.d/ubuntu.list //编辑文件
注释掉所有的行:
保存退出。
3、安装postgresql
apt install postgresql libpq-dev
4、安装virtualbox
apt install virtualbox virtualbox-dkms virtualbox-ext-pack virtualbox-qt
5、安装tcpdump
apt-get install tcpdump//安装tcpdump,若已安装则更新
groupadd pcap//创建pcap组
usermod -a -G pcap user1 //将user1用户加入pcap组
chgrp pcap /usr/sbin/tcpdump//修改tcpdump可执行文件的属组,这样user1用户可以执行它(cuckoo以user1用户身份运行)
apt-get install libcap2-bin//为使用setcap,需安装libcap2-bin
setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
6、安装volatility
apt install volatility //默认已安装在kali中,用于内存dump取证。
7、安装M2Crypto
pip install m2crypto//用于实现加密连接
(三)账户管理
1、将当前的user1用户添加到vboxusers组
usermod -a -G vboxusers user1
2、提高允许打开文件的数量
/etc/security/limits.conf//编辑配置文件,将下面的内容粘贴到文件末尾
hard nofile 500000
soft nofile 500000
root hard nofile 500000
root soft nofile 500000
保存退出,重新登录后生效。
(四)安装cuckoo
pip install -U pip setuptools//安装setuptools
pip install -U cuckoo//安装cuckoo
(五)CWD(当前工作目录)
1、什么是CWD
从cuckoo 2.0.0开始有了CWD的概念。CWD所对应的目录包含了配置组件、生成的数据、cuckoo的检测结果等数据。包括但不限于如下内容:
Configuration
Cuckoo Signatures
Cuckoo Analyzer
Cuckoo Agent
Yara rules
Cuckoo Storage (where analysis results go)
CWD较cuckoo使用的传统方式有一些优势。
2、使用CWD
cuckoo -d //首次运行cuckoo命令,将自动进行CWD检查。
例如以user1身份运行cuckoo,默认的CWD为~/.cuckoo,即/home/user1/.cuckoo/。
CWD是可以配置的。下面列出了cuckoo判断CWD的顺序:
通过命令行选项—cwd(例如,—cwd ~/.cuckoo)
通过CUCKOO环境变量(例如,export CUCKOO=~/.cuckoo)
通过CUCKOO_CWD 环境变量
判断当前目录是否CWD(例如cd ~/.cuckoo)。假设在该目录中创建了CWD
默认的~/.cuckoo
如果以user1身份运行cuckoo,则不必指定CWD,默认使用/home/user1/.cuckoo/。那么为什么还要需要CWD的概念呢?原因是这样的,我们可以通过指定不同的CWD,在同一台主机上使用不同的配置同时运行多个cuckoo实例。例如想同时进行windows和安卓分析,可以指定不同的CWD,就不必再反复修改配置了。
(六)配置文件
1、cuckoo主要使用的配置文件
auxiliary.conf:辅助组件配置模块,可以配置tcpdump/mitm/sniffer等;
memory.conf:内存分析配置模块,主要用来配置Volatility的行为;
processing.conf:核心处理组件配置文件,可以开启/关闭行为分析、缓冲区分析、内存分析、截屏、Snort、字符串提取、VirusTotal辅助分析等等功能;
reporting.conf:报告生成模块的配置文件,用来开启jsondump或者HTML Report,还可以配置MongoDB存储分析结果(Web控制台会用到)。
2、配置cuckoo.conf
重要的参数:
[cuckoo]段的machinery:
[resultserver]段的ip和port:
[database]段的connection:
database默认为sqlite,根据需要指定数据库连接字符串。我们做测试使用默认即可。
3、配置auxiliary.conf
auxiliary模块是持续进行恶意样本分析的脚本,这个配置文件定义它们的选项。保持默认即可。
4、配置virtualbox.conf
需要修改的参数:
machines = cuckoo1 //值在virtualbox.conf中唯一即可,不必设置为虚拟机名称
[cuckoo1] //指定cuckoo1虚拟机的配置
label = win7x64 //virtualbox中的虚拟机名称
resultserver_port = 2042 //指定host的端口
5、配置memory.conf
要使用volatility,需要:
在$CWD/conf/processing.conf文件中启用volatility
在$CWD/conf/cuckoo.conf文件中启用Enable memory_dump
6、配置reporting.conf
[mongodb]
enabled = yes
7、其它配置文件保持默认即可。
(七)路由配置
1、为什么要允许虚拟机访问互联网
2、host(kali linux)开启流量转发
vi /etc/sysctl.conf//编辑配置文件
net.ipv4.ip_forward=1
保存退出
sysctl -p /etc/sysctl.conf //使配置生效
iptables -A FORWARD -owlan0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack —ctstate NEW -j ACCEPT//如果使用有线网卡则是-o eth0
iptables -A FORWARD -m conntrack —ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE
但是iptables这样设置也只是临时的,系统重启之后这些规则就会失效,如果想系统重启这些规则仍然可用,可以做以下处理:
编辑网络配置文件/etc/network/interfaces,在文件末尾添加以下两行:
pre-up iptables-restore < /etc/iptables.rules//开机时启用iptables规则
post-down iptables-save > /etc/iptables.rules//关机前保存当前所有iptables规则
这样一来,kali关机前会把iptables规则备份到/etc/iptables.rules文件中,每次开机都从/etc/iptables.rules读取规则并应用。
配置好之后,虚拟机就可以通过vboxnet0来访问互联网了。
二、windows 7虚拟机配置为cuckoo沙箱
(一)创建虚拟机
1、在虚拟机中安装64位windows 7系统
安装过程略。
设置虚拟机工作在host-only网络模式:
3、验证网络访问
(二)虚拟机中的软件安装
1、安装python和第三方库
下载安装2.7版本的python。安装后可能需要将python可执行文件的路径手工写入PATH环境变量。如果python 2.7安装在系统盘,使用下面的方法将可执行文件路径加入PATH:
系统属性—高级—环境变量—系统变量,选择path变量,点击“编辑”按钮。在原有内容之后加入下面的信息(注意使用分号作为分隔符):
;%systemdrive%\Python27\;%systemdrive%\Python27\Scripts\
echo %path% //查看环境变量配置效果
pip install pillow //在线安装pillow,cuckoo用其在虚拟机中截图
2、安装应用软件
浏览器、PDF阅读器、office套件、7zip、JDK、VC2015运行库、dotnet框架等。
过程略。
3、部署cuckoo代理程序
cd $CWD/agent //host上的操作,查看agent目录中的文件
将agent.py文件拷贝到Win7虚拟机的系统开机启动目录中:
C:\Users\administrator\AppData\Roaming\MicroSoft\Windows\Start Menu\Programs\Startup\
把agent.py后缀改成agent.pyw,这样程序启动就不会有GUI窗口了。
重启一下,测试能否自动运行:
进程列表中存在pythonw.exe,说明代理程序已經运行了。
(三)虚拟机中的系统配置
1、启用administrator账户
windows 7系统安装时创建了一个账户,而administrator账户是禁用的。沙箱工作时应使用最高权限账户,避免应用程序因权限不足造成其恶意行为无法表达。
2、关闭windows功能
(1)禁用windows自动更新
(2)关闭windows防火墙
(3)关闭UAC
3、设置用户自动登录
control userpasswords2 //设置administrator用户自动登录
(四)拍摄虚拟机快照
接下来需要对配置好的客户机建立一个快照。每次Cuckoo调用客户机分析完一个恶意样本之后,会把虚拟机恢复到这个快照的状态。
保存系统快照的时候有一点需要注意:确保在系统正常运行、且agent.pyw无界面运行的时候,执行系统快照。
(五)验证虚拟机功能
1、启动cuckoo程序
cuckoo //启动cuckoo主程序
cuckoo web //打开新的命令行窗口,启动cuckoo的web服务
http://localhost:8000///访问cuckoo的web界面
2、提交一个网址
通过命令行或者网页方式向cuckoo提交一个URL,如果能得到合理的结果,则说明cuckoo运行正常。
cuckoo submit –urlhttp://www.sina.com.cn//命令行提交URL
提交成功,那么是否能够进行分析呢?浏览器访问下面的网址:
http://127.0.0.1:8000/analysis/
查看cuckoo的分析结果:
可以看到检测的结果,说明cuckoo的主程序和虚拟机工作正常。
至此,windows 7系统作为cuckoo的虚拟机就配置完成了。
三、ubuntu 18.04虚拟机配置为cuckoo沙箱
(一)创建虚拟机
1、在虚拟机中安装64位ubuntu 1804系统
过程略。
设置虚拟机工作在host-only网络模式。
vi /etc/network/interfaces //编辑网络配置文件,加入下面的内容
auto enp0s3
iface enp0s3 inet static
address 192.168.56.102
netmask 255.255.255.0
network 192.168.56.0
broadcast 192.168.56.255
gateway 192.168.56.1
保存退出
systemctl restart networking//重启网络服务后生效
(2)配置dns服务器
3、验证网络访问
(二)虚拟机中的软件安装
1、安装python
apt install python //用于执行cuckoo的代理程序agent.py。
2、安装必要的软件
apt-get install systemtap gcc patch linux-headers-$(uname -r)//安装依赖性软件
apt install net-tools //包含ifconfig等程序
3、安装内核调试符号
//导入安装源的key
apt-key adv –keyserver keyserver.ubuntu.com –recv-keys C8CAB6595FDFF622
//添加更新源
codename=$(lsb_release -cs)
tee /etc/apt/sources.list.d/ddebs.list << EOF
debhttp://ddebs.ubuntu.com/${codename}main restricted universe multiverse
debhttp://ddebs.ubuntu.com/${codename}-security main restricted universe multiverse
debhttp://ddebs.ubuntu.com/${codename}-updates main restricted universe multiverse
debhttp://ddebs.ubuntu.com/${codename}-proposed main restricted universe multiverse
EOF
//更新
apt-get update
//安装内核调试符号(时间可能较长)
apt-get install linux-image-$(uname -r)-dbgsym
4、为systemtap的tapset打补丁
//为systemtap的tapset打补丁,这样cuckoo才能正确地处理输出
wgethttps://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/stuff/systemtap/expand_execve_envp.patch
wgethttps://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/stuff/systemtap/escape_delimiters.patch
patch /usr/share/systemtap/tapset/linux/sysc_execve.stp < expand_execve_envp.patch
patch /usr/share/systemtap/tapset/uconversions.stp < escape_delimiters.patch
5、编译内核扩展
wgethttps://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/stuff/systemtap/strace.stp//下载
stap -p4 -r $(uname -r) strace.stp -m stap_ -v //编译
编译完成后,将在当前目录看到stap_.ko。
使用下面的命令测试STAP内核扩展:
staprun -v ./stap_.ko
输出应该像下面的样子:
mv stap.ko /root/.cuckoo //将stap.ko文件放到/root/.cuckoo目录
6、删除不必要的软件(可选)
apt-get purge update-notifier update-manager update-manager-core ubuntu-release-upgrader-core
apt-get purge whoopsie ntpdate cups-daemon avahi-autoipd avahi-daemon avahi-utils
apt-get purge account-plugin-salut libnss-mdns telepathy-salut
(三)虚拟机中的系统配置
1、部署cuckoo的代理程序
//在虚拟机中操作:从host中复制agent.py到root用户的home目录,可通过scp
scp [email protected]:/home/user1/.cuckoo/agent/agent.py /root/agent.py
crontab -uroot -e //编辑root用户的计划任务,加入下面的内容
@reboot python /root/agent.py
保存退出。重启系统,验证一下:
可以看到,重启之后代理程序agent.py自动开始运行了。
2、关闭虚拟机的防火墙
ufw disable
3、关闭虚拟机的NTP服务
timedatectl set-ntp off
(四)拍摄虚拟机快照
接下来需要对配置好的客户机建立一个快照。每次Cuckoo调用客户机分析完一个恶意样本之后,会把虚拟机恢复到这个快照的状态。
保存系统快照的时候有一点需要注意:确保在系统正常运行的时候执行系统快照。
(五)验证虚拟机功能
1、启动cuckoo程序
cuckoo //启动cuckoo主程序
cuckoo web //打开新的命令行窗口,启动cuckoo的web服务
http://localhost:8000///访问cuckoo的web界面
2、提交一个网址
通过命令行或者网页方式向cuckoo提交一个可执行文件,如果能得到合理的结果,则说明cuckoo运行正常。
以网页方式提交,cuckoo会自动判断文件类型,交给对应的虚拟机执行。例如提交自制的linux程序,名为linux.elf,会看到linux沙箱被启动:
这说明提交是成功的,那么是否能够进行分析呢?浏览器访问下面的网址:
http://127.0.0.1:8000/analysis/
查看cuckoo的分析结果:
可以看到检测的结果,说明cuckoo的主程序和虚拟机工作正常。
至此,ubuntu 1804系统作为cuckoo的虚拟机就配置完成了。
四、kali linux使用cuckoo沙箱分析恶意样本
(一)启动cuckoo
1、启动cuckoo主程序
cuckoo //命令行启动cuckoo
没有出现报错信息,说明启动成功。
2、启动cuckoo的web服务
cuckoo web //在新的命令行窗口运行命令,启动cuckoo的web程序
浏览器打开下面的URL,以访问cuckoo的web界面:
http://localhost:8000/
注意,在启动cuckoo的web服务之前要先启动mongodb。使用下面的命令:
systemctl start mongodb
(二)向cuckoo提交恶意分析对象
1、在命令行中提交
//提交本地文件
cuckoo submit /path/to/binary
//提交一个URL
cuckoo submit –urlhttp://www.example.com
//提交本地文件,并指定比默认更高的优先级
cuckoo submit –priority 5 /path/to/binary
//提交本地文件并指定超时时间为60秒
cuckoo submit –timeout 60 /path/to/binary
//提交本地文件并指定分析包(analysis package)。所谓的分析包是关于样本的类型以及传递给样本的参数等,后面会详述分析包的概念。
cuckoo submit –package
//提交本地文件并指定分析包和选项(例如恶意样本执行时的参数)
cuckoo submit –package exe –options arguments=–dosomething /path/to/binary.exe
//提交本地文件并指定运行该文件的虚拟机(虚拟机名称对应virtualbox.conf文件中的machines的值,而不对应label参数的值)
cuckoo submit –machine cuckoo1 /path/to/binary
//提交本地文件并指定在windows虚拟机中运行
cuckoo submit –platform windows /path/to/binary
//提交本地文件并进行虚拟机的完整内存转储
cuckoo submit –memory /path/to/binary
//提交本地文件,强制执行到完全超时(忽略cuckoo用于决定终止分析的内部机制)
cuckoo submit –enforce-timeout /path/to/binary
//提交本地文件并设置虚拟机时钟,格式为%m-%d-%Y %H:%M:%S。不指定时钟则使用当前时间。例如让样本运行在2001年一月24日14点41分20秒
cuckoo submit –clock “01-24-2001 14:41:20″ /path/to/binary
//提交样本,进行Volatility分析(使用free=yes选项来关闭cuckoo的hook机制,减少其产生的负面影响)
cuckoo submit –memory –options free=yes /path/to/binary
//提交URL进行分析
cuckoo –urlhttp://www.example.com
2、分析包(Analysis Packages)的概念
(1)分析包的种类
applet: 用于分析java小程序
选项:
class: 执行要执行的类的名称。这是一个强制性的选项,必须使用。
bin: 用于分析通用的二进制数据,例如shellcode。
cpl: 用于分析控制面板应用。
dll: 用于分析动态链接库。
选项:
function: 指定要执行的函数,如果不指定,cuckoo将尝试执行DllMain函数。
arguments: 指定通过命令行传递给dll的参数。
loader: 指定一个除rundll32.exe之外的伪造的DLL启动器名称,用于对抗某些恶意软件使用的反沙箱技术。
doc: 用于运行和分析微软的word文档。
exe: 默认的分析包,用于分析通用的windows可执行文件。
选项:
arguments: 指定命令行参数,传递给被提交的恶意软件的初始进程。
generic: 通过cmd.exe运行和分析样本。
ie: 用于分析IE浏览器打开指定URL或者HTML文件时的行为
jar: 用于分析jar包。
选项:
class: 指定被执行的类的路径。如果未指定,cuckoo会尝试运行jar包中MANIFEST文件里的主函数。
js: 用于运行和分析javascript文件(例如邮件附件中那些js)。
hta: 用于运行和分析HTML应用程序。
msi: 用于运行和分析MSI类型的安装程序。
pdf: 用于运行和分析PDF文件。
ppt: 用于运行和分析微软的PowerPoint文档。
ps1: 用于运行和分析PowerShell脚本。
python: 用于运行和分析Python脚本。
vbs: 用于运行和分析VBScript文件.
wsf: 用于运行和分析wsf格式的Windows脚本文件.
xls: 用于运行和分析微软的Excel文档。
zip: 用于运行和分析Zip压缩文件。
选项:
file: 指定压缩包中某文件的名称,将其作为分析对象。如果未指定,cuckoo会尝试运行sample.exe。
arguments: 指定命令行参数,传递给被提交的恶意软件的初始进程。
password: 指定打开压缩文件的密码。如果未指定,cuckoo将尝试不使用解压密码,或者使用“infected”作为密码打开压缩文件。
(2)例子
cuckoo submit –package dll –options function=FunctionName,loader=explorer.exe /path/to/malware.dll
//向cuckoo提交/path/to/malware.dll文件。指定分析包为dll,并设置两个选项,一是被执行的dll中的函数名为FunctionName,二是使用explorer.exe作为dll启动器。
3、通过web界面提交
访问cuckoo的web界面:http://127.0.0.1:8000/
点击“SUBMIT A FILE FOR ANALYSIS”,上传文件进行分析。点击“SUBMIT URLS/HASHES”,提交URL或文件hash进行分析。
4、查看分析结果
点击样本名称,可以看到分析结果:
在Signatures(行为特征)部分,可以看到样本执行了添加用户到管理员组的操作。
cuckoo在沙箱中拍摄了样本执行时的截图,通过截图可进一步了解样本的运行情况。
(三)清理分析结果
cuckoo clean //该命令可以清除如下的数据:
分析结果
提交的文件
数据库中的分析任务和样本信息
mongodb数据库中的所有信息(若在$CWD/conf/reporting.conf配置了使用mongodb)
ElasticSearch数据库中的所有信息(若启用了ElasticSearch)
五、总结
本文为大家讲解了cuckoo系统的安装、配置和使用,希望对各位的工作有所帮助。
精彩推荐