Ubuntu20.04配置CuckooSandbox环境

因为最近要做恶意软件分析,阅读论文发现动态分析的效果普遍比静态分析的效果要好一些,所以需要搭建一个动态分析的环境,查阅资料发现Cuckoo Sandbox是不错的自动化分析环境,但是搭建起来还是比较复杂的,主要是在配置虚拟机环境以及网络配置方面。

基础环境

文中的环境是Ubuntu 20.04 Server,也就是服务器版,后来为了配置虚拟机尝试过GNOME还有xfce4桌面环境,其实纯服务器环境即可完成配置,但是在配置虚拟机环境时可能会卡,所以还是有必要装一个桌面环境的。

在配置环境的时候建议配置一个新用户出来,Cuckoo官方不建议使用root权限搭建环境,最好是配置一个有sudo权限的用户,在本文中我配置的新用户名为Czy,注意要使用有sudo权限的用户创建,比如root等,对了别忘了在创建好新用户后在/etc/passwd将创建用户的默认的bash环境/bin/sh更改为/bin/bash,默认的/bin/sh在登录后并不是特别好用。

sudo useradd -m Czy # 添加Czy用户并生成home目录
sudo usermod -aG sudo Czy # 添加到超级用户组即sudo权限
# /etc/passwd
Czy:x:1001:1001::/home/Czy:/bin/bash

SSH软件使用的是MobaXterm,可以直接在本地实现virtualbox的图形界面,不过还是比较卡,肯定是不如直接使用图形界面的快,但是也只是配置过程中需要使用,真正使用Cuckoo时就不需要手动启动虚拟机环境了,如果用Xbash的话需要配合Xmanager才能在本地拉起virtualbox的图形界面,此外建议安装WinSCP用来传输文件,这个为了方便可以用root登录,不过要注意用root登录后传输后的文件的所有者都是root,写文件的话需要更改权限。

安装Anaconda

首先来说明为什么要安装Anaconda ,首先在Cuckoo不建议直接使用主python环境进行配置,建议使用venv,还有一个更重要的原因,在Ubuntu 20.04已经不建议使用python2了,而到目前为止Cuckoo只支持python2,之前在16.04使用pyhton就能拉起的环境现在需要安装python2并且必须使用python2命令才能唤起,所以为了避免出现各种问题,还是选择使用Anaconda进行环境配置。

首先下载Anaconda安装包,我下载的版本为Anaconda3-2019.03-Linux-x86_64.sh,在清华的镜像站https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下载即可,之后便是直接./运行该可执行文件,如果不能执行的话可能是没有x权限,直接sudo chmod 755 Anaconda3-2019.03-Linux-x86_64.sh运行即可安装,安装过程不再赘述,可以参考其他的文章 。

conda环境中安装python 2.7,然后这个虚拟环境我命名为python2,在下边的脚本要用到。

Conda安装的最后会提示你是否加入到环境变量,如果加入到环境变量的话那么每次ssh到服务器都会自动运行conda环境的,我个人不是很喜欢,于是我自行写了一个.sh文件,需要的时候我再去执行这个.sh文件即可唤醒环境,注意该文件的x执行权限,755一把梭就行。

其实这些都不算重点,能跑起来python 2.7的环境都是胜利。

#!/bin/bash

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/Czy/application/conda/bin/conda' 'bash.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/home/Czy/application/conda/etc/profile.d/conda.sh" ]; then
. "/home/Czy/application/conda/etc/profile.d/conda.sh"
else
export PATH="/home/Czy/application/conda/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
conda activate python2
source ./python2-conda.sh

安装Cuckoo

安装python库

我是直接执行了sudo pip install -U cuckoo,然后执行过程中告诉我缺啥我都再装,虽然这样不太好但是也不是不行哈哈,文档对于这块说的还是比较清楚的,这里借鉴一下其他博客说明的安装环境,如果安装失败,搜索一下错误,我就遇到过一个编译image什么的错误,是在github issue中找到一个用apt安装的依赖才解决的,但是具体记不清了。

sudo apt-get install python python-pip python-dev libffi-dev libssl-dev
sudo apt-get install python-virtualenv python-setuptools
sudo apt-get install libjpeg-dev zlib1g-dev swig

安装MongoDB

为了使用基于DjangoWeb界面,需要使用MongoDB,也就是为了启动cuckoo web runserver 0.0.0.0:8000的环境依赖,之后还需要配置用户名密码与数据库信息,这个在下一节会细说。

sudo apt-get install mongodb

安装PostgreSQL

CuckooWeb服务需要一个数据库,在配置文件中可以看出sqlitepostgresqlmysql都是可以的,由于我比较熟悉Mysql的操作本来想指定Mysql作为选定数据库来着,但是由于装python_mysql的驱动一直出问题,我估计是因为我装的Mysql 8.0,而Python 2.7早已不再维护了,所以无法正常使用驱动了,所以最终还是选择PostgreSQL,当然这个也需要配置用户名密码等,这个下一节再说明。

sudo apt-get install postgresql libpq-dev

安装virtualbox

首先需要安装virtualbox,直接使用apt-get安装即可。

sudo apt-get install virtualbox

如果像我一样是使用的服务器而没有实体机,而且我的服务器在实体机上是使用VMware Workstation管理的,那么这个状态就相当于在虚拟机中安装虚拟机,那么就需要在主体实体机的VMware Workstation中修改虚拟机配置在,Processors中启用VT-XAMD-V,也就是启动虚拟化才可以。

安装tcpdump

为了在执行期间转储恶意软件执行的网络活动,需要正确配置网络嗅探器以捕获流量并将其转储到文件中。

sudo apt-get install tcpdump apparmor-utils
sudo aa-disable /usr/sbin/tcpdump

请注意,只有在使用默认目录时才需要apparmor禁用配置文件(aa-disable命令),CWD因为apparmor会阻止创建实际的PCAP文件(另请参阅tcpdump的权限被拒绝),对于禁用apparmorLinux平台(例如,Debian),以下命令就足以安装tcpdump

sudo apt-get install tcpdump

tcpdump需要root权限,但由于不希望Cuckooroot身份运行,因此必须为二进制文件设置特定的Linux功能。

sudo groupadd pcap
sudo usermod -a -G pcap Czy # 这里是用户名
sudo chgrp pcap /usr/sbin/tcpdump
sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

可以使用以下命令验证上一个命令的结果。

getcap /usr/sbin/tcpdump
# /usr/sbin/tcpdump = cap_net_admin,cap_net_raw+eip

如果没有安装setcap则安装。

sudo apt-get install libcap2-bin

或者以其他方式(不推荐)的做法。

sudo chmod +s /usr/sbin/tcpdump

安装Volatility

Volatility是一种可选工具,可对内存转储进行取证分析,与Cuckoo结合使用,它可以自动提供对操作系统深度修改的额外可视性,并检测逃脱Cuckoo分析器监控域的rootkit技术的存在。

git clone https://github.com/volatilityfoundation/volatility.git
cd volatility
sudo python setup.py build
sudo python setup.py install

安装M2Crypto

目前M2Crypto只有在安装SWIG时才支持该库,在Ubuntu /Debian的系统上,可以按如下方式完成。

sudo apt-get install swig
sudo pip install m2crypto==0.24.0

Cuckoo环境配置

cuckoo默认安装在当前用户目录下,即~/.cuckoo,我们可以使用cuckoo -d来启动cuckoo

配置virtualbox虚拟机

这是个比较大的工程,为了方便我们直接在图形界面上完成这个操作。

首先我们需要准备好一个XP镜像,镜像需要自行下载,可以去MSDN下载,之后还要准备一个密钥,这个可以自行百度,多试试总有能用的,并且XP老系统了比较好找。

点击新建,这边的namecuckoo1,因为我有一个重名的了所以写了个2,这边一定要写好是cuckoo1,选择好windows XP 32-bit系统。



之后便是分配内存和硬盘存储等,可以一路next,接下来要启动安装镜像。

在此处选择下载好的xp系统镜像,接下来就跟随着系统进行安装,安装完成后将虚拟机关机,在Setting中的Storage中将光盘形状的这个位置的启动位置移除即可,否则每次开机都会提示你按任意键从光盘启动,那么便又会启动一次安装程序。



接下来需要配置网络环境,在启动的virtualbox中新建一个虚拟网卡,配置的ip地址等如下所示。

之后在我们新建的cuckoo1的虚拟机设置网络,如下所示,Host-only是代表只允许与宿主机通信,如果需要访问外网的话,请继续看下边的网络配置。

之后我们要配置一下虚拟机的外网网络环境,刚才我们新建了这个虚拟网卡,之后为了通信我们还需要将虚拟机里设置一个固定的ip地址,也就是刚才我们设置的虚拟网卡网关的子网,但是我们如果我们直接在xp系统里设置虚拟机的ip地址之后是无法上网的,所以我们需要在ubuntu中配置一个NAT网络转发,在这里我们直接使用iptables 进行网络转发,这里每次开机都会重置,如果想要开机自动可以使用systemctl进行开机自启动管理,需要编写UNIT,在这里就不赘述了,在这里我们还是写到一个sh文件中需要的时候再执行即可。

注意在下边这个ens160是我的网卡,可以使用ifconfig查看网卡名称,之后的192.168.56.0/24就是主机以及网络号划分的子网,如果上边的ip配置都是根据文章来的话,那就只需要修改这个网卡名称即可。

echo 1 | sudo tee -a /proc/sys/net/ipv4/ip_forward
sudo sysctl -w net.ipv4.ip_forward=1 sudo iptables -t nat -A POSTROUTING -o ens160 -s 192.168.56.0/24 -j MASQUERADE # 网卡名称 ens160
sudo iptables -P FORWARD DROP
sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -s 192.168.56.0/24 -j ACCEPT
sudo iptables -A FORWARD -s 192.168.56.0/24 -d 192.168.56.0/24 -j ACCEPT
sudo iptables -A FORWARD -j LOG
sudo ./network-transform.sh

接下来启动这个虚拟机,我们需要在这里关闭防火墙与自动更新,并且配置好ip地址。

另外还需要在虚拟机中进行网络配置以及启动一个agent.py,这个文件在~/.cuckoo/agent/agent.py,也就是说在虚拟机中也必须安装python 2.7环境,如果需要截图的话,还需要PIL包,在这里就不赘述安装过程了,无论是使用虚拟机共享磁盘还是搭建文件服务器环境等方式,或者是直接在xp虚拟机中下载python安装包并安装即可,使用python3启动简单的文件服务器命令如下。

python3 -m http.server --bind 0.0.0.0 8088

之后我们可以直接双击启动agent.py,另外也可以在C:\Document and Settings\Administrator\start menu\program\start设置让其开机自启,当然这个也没要必要,因为我们只需要创建快照即可,在运行agent.py之后,我们可以使用netstat命令查看8000端口是否被占用,如果已经占用就说明agent.py成功启动。

等环境全部搭建完成之后,我们需要创建快照,务必注意名字要命名为snapshot1,默认的为Snapshot 1,注意是首字母大写以及1之前有个空格的,所以我们要命名为snapshot1



之后我们就关闭虚拟机即可,在运行cuckoo过程中不需要手动启动虚拟机。

创建数据库

之前我们安装了MongoDBPostgreSQL,接下来我们需要为其创建一个用户以及创建数据库,这里统一一下用户名都为cuckoo,密码都为1234567890-=,数据库名都为cuckoo,下边的配置文件要用得到,具体过程请参照各自的数据库命令。

配置文件

所有的配置文件都在~/.cuckoo/conf/目录下,cuckoo.conf配置文件,重要位置已标出。

[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

virtualbox.conf配置文件,重要位置已标出。

[virtualbox]
mode = headless
path = /usr/bin/VBoxManage
interface = vboxnet0 ### 默认网卡
machines = cuckoo1 ### 虚拟机名称
controlports = 5000-5050 [cuckoo1]
label = cuckoo1 ### label
platform = windows
ip = 192.168.56.101 ### 虚拟机ip地址
snapshot = snapshot1 ### 快照名
interface = vboxnet0 ### 虚拟网卡
resultserver_ip =
resultserver_port =
tags =
options =
osprofile = [honeyd]
label = honeyd
platform = linux
ip = 192.168.56.102
tags = service, honeyd
options = nictrace noagent

reporting.conf配置文件,重要位置已标出。

[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

启动Cuckoo需要两个终端,一个终端启动cuckoo,另外一个终端启动cuckoo web runserver

cuckoo
cuckoo web runserver 0.0.0.0:8000



之后打开该web服务,在我的服务器的地址为http://192.168.109.206:8000/



在右上角的Submit提交文件,点击Analyze即可,现在就可以在执行cuckoo的终端查看到分析进度了,在Dashboard可以整体查看概览,也可以在Rencent中查看已经完成的任务。

另外在正常情况下在分析的时候$HOME/.cuckoo/storage/analyses会出现很多xxx.exe_xxx.dmp文件,可以使用crontab执行一些定时任务出来一下,例如我不需要则在存在时间大于6分钟的直接删除。

*/6 * * * * cd $HOME/.cuckoo/storage/analyses && find ./ -regex .*/memory/.*\.exe_  -mmin +6 -delete && find ./ -regex .*/memory/.*\.dmp  -mmin +6 -delete

Blog

参考

Ubuntu20.04配置CuckooSandbox环境的更多相关文章

  1. Ubuntu20.04配置Java开发环境

    Ubuntu20.04配置Java开发环境 JDK 1.8 安装 下载地址 下载后进行解压 tar -xvzf jdk-8u301-linux-x64.tar.gz 配置环境变量 gedit ~/.b ...

  2. ubuntu16.04配置java环境(重启后不会失效)

    ubuntu16.04配置java环境(重启后不会失效) 1.jdk的安装包(.tar.gz)拷贝到/opt目录下 mv jdk-8u144-linux-x64.tar.gz /opt 2.解压文件 ...

  3. Ubuntu20.04配置 ES7.17.0集群

    Ubuntu20.04配置 ES7.17.0集群 ES能做什么? elasticsearch简写es,es是一个高扩展.开源的全文检索和分析引擎,它可以准实时地快速存储.搜索.分析海量的数据. Ubu ...

  4. Ubuntu20.04 Java相关环境(JDK、Mysql、Redis、nacos、influxdb)部署以及运行

    重装了系统,系统版本号为:Ubuntu20.04 1.云平台 登录云平台,选择要重装的服务器,关机.一键重装即可 2.安装jdk 下载jdk-8u341-linux-x64.tar.gz,并复制到服务 ...

  5. ubuntu 14.04 配置 java 环境

    下载java包 (这里以java8为例) java包的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloa ...

  6. 【三维重建】Ubuntu20.04进行RealSenseD435环境配置及初步使用

    一.环境配置 github上面的教程:https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux ...

  7. ubuntu16.04配置tensorflow-gpu环境

    1.安装驱动 参考: 史上最全的ubuntu16.04安装nvidia驱动+cuda9.0+cuDnn7.0 https://blog.csdn.net/qq_31215157/article/det ...

  8. ubuntu14.04配置face_recognition环境

    Github项目地址:https://github.com/MiChongGET/face_collection 环境搭建 1.  环境 ubuntu14.04 LTS python2.7 pip   ...

  9. [PHP] ubuntu16.04配置Lamp环境(搭建linux+apache+mysql+php7环境)

    reference : http://blog.csdn.net/Abyss_sliver/article/details/77621404 好久没有在Linux环境下进行开发了,比较常用的还是win ...

  10. Ubuntu20.04和Docker环境下安装Redash中文版

    创建Ubunt20.04虚拟机,请参考:https://www.linuxidc.com/Linux/2020-03/162547.htm 一.安装基础环境: # 1.更换APT国内源 sudo se ...

随机推荐

  1. 推荐一个.NetCore开源的CMS项目,功能强大、扩展性强、支持插件的系统!

    推荐一个基于.Net Core开发的开源CMS项目,该项目功能完善.涉及知识点比较多,不管是作为二次开发.还是学习都是不错的选择. 01 项目简介 Cofoundry是基于.Net开发的.代码优先开发 ...

  2. 数据库研发人员必看的MySQL 8.0新特性

    本文汇总了MySQL8.0 面向开发的新特性,总共有12个新特性,有想快速了解8.0新特性的朋友,可以看一下哈文章目录:1.公用表达式支持-CTE2.窗口函数3.表达式作为默认值:4.CHECK支持5 ...

  3. (Python基础教程之七)Python字符串操作

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  4. 使用缓存构建更快的 Web 应用程序

    使用 Java 缓存系统缓存频繁查看的数据 使用 Java 技术的 Web 开发人员可以使用缓存实用程序快速提升他们的应用程序的性能.Java 缓存系统(Java Caching System,JCS ...

  5. 使用 LLVM 框架创建有效的编译器,第 2 部分

    使用 clang 预处理 C/C++ 代码 无论您使用哪一种编程语言,LLVM 编译器基础架构都会提供一种强大的方法来优化您的应用程序.在这个两部分系列的第二篇文章中,了解在 LLVM 中测试代码,使 ...

  6. Codeforces Round 642 (Div3)

    K-periodic Garland 给定一个长度位\(n\)的\(01\)串,每次操作可以将\(1\)变为\(0\)或者将\(0\)变为\(1\),现在你需要通过操作使得所有\(1\)之间的距离为\ ...

  7. Ubuntu使程序脱离终端运行

    应用场景: 远程登陆Linux服务器运行模型训练代码,如果关闭本地终端则服务器代码中断运行!目标操作:在本地终端运行服务器代码,当关闭终端时代码能够继续在服务器上运行,且再次打开终端连接服务器时能找回 ...

  8. MarkDown文档的编写

    MarkDown的基本语法 MarkDown的标题语法  通过#进行创建标题,#的数量控制标题的级别 MarkDown的段落语法  通过空白行将一行或者多行文本进行分隔 MarkDown的强调语法 粗 ...

  9. 一图一知-vue强大的slot

    vue常用的slot知识点记录

  10. Scratch列表的知识与应用

    列表及应用1 列表及应用2 练习题1