zoukankan      html  css  js  c++  java
  • Cuckoo SandBox的安装、配置和应用

    依赖安装

    在安装和配置Cuckoo之前,需要安装依赖的一些软件和库。首先创建一个文件夹存放cuckoo所需要的文件。

    这里是需要的库和需要安装的文件。

    image-20200723082143077

    安装 Python 库 (Ubuntu/Debian-based)

    Cuckoo的管理组件完全由Python脚本编写,所以就需要适合的Python版本。 完全兼容的Python版本是 2.7

    老版本的Python和Python 3(未来可能会支持) 目前都是不支持的。

    以下一些通过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
    

    如果要使用基于Django开发的Web界面, 则MongoDB是必须要安装的:

    $ sudo apt-get install mongodb
    

    如要使用PostgreSQL数据库(推荐), PostgreSQL也必须安装:

    $ sudo apt-get install postgresql libpq-dev
    

    YaraPydeep 是可选的插件。如果选择安装的话,具体安装步骤可以参考他们的官网。这里使用源码安装。

    安装pydeep

    安装依赖

    $apt-get install build-essential git libpcre3 libpcre3-dev libpcre++-dev  python-dev libfuzzy-dev
    

    进入pydeep目录

    $cd pydeep
    $python setup.py build 
    $sudo apt-get install python-dev libfuzzy-dev  #遇到编译错误用这条命令解决pydeep编译问题
    $python setup.py install
    

    进入ssdeep

    $ cd ssdeep-2.13
    $ ./configure
    $ make
    $ sudo make install
    
    #确认安装无误
    $ ssdeep -V
    Then proceed by installing pydeep:
    

    然后ssdeep -V和 pip show pydeep看看安装是否成功

    安装yara

    进入yaya

    $cd yara-3.5.0/
    $./bootstrap.sh
    

    如果想修改yara的源代码还需要flex,bison这两个包用于语法解析

    $apt-get install flex bison
    

    接着编译安装yara:

    $./configure
    $make
    $make install
    

    然后测试是否安装成功

    $make check
    

    如果注意前面的编译安装结果的话会发现有缺少OpenSSL库的警告,这里我们安装一下

    $apt-get install libssl-dev
    

    接下来安装yara-python

    $pip install yara-python
    

    安装 tcpdump

    Tcpdump用于抓取恶意软件运行过程中产生的所有流量。

    安装命令:

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

    AppArmor 只有当PCAP文件生成没有权限的时候才需要,可以参考 Permission denied for tcpdump

    禁用了AppArmor 的Linux的平台下, 比如Debian, 仅需要安装 tcpdump:

    $ sudo apt-get install tcpdump
    

    Tcpdump需要root权限,如果不想运行在root用户下,需要做以下设置:

    $ 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
    

    需要注意的是 setcap 命令不安全,有可能造成提权漏洞,建议将Cuckoo安装在专有的环境里。

    可能出现的问题:
    getcap /usr/sbin/tcpdump没有输出先查看当前的tcpdump的模式:

    grep tcpdump /sys/kernel/security/apparmor/profiles
    /usr/sbin/tcpdump (enforce)
    上面显示是enforce模式,所以有这个问题,把它改成complain模式:
    aa-complain /usr/sbin/tcpdump -
    再次使用tcpdump 并写文件的时候就没问题了。
    想在转换成enforce模式时:
    aa-enforce /usr/sbin/tcpdump

    【注】 通过命令aa-complain或aa-enforce可以切换profile文件的状态。这需要先安装对应的utils工具:
    sudo apt-get install apparmor-utils

    安装 Volatility

    Volatility 用于分析内存转储文件的可选工具. Cuckoo与Volatility配合,可以更深度和全面的分析,可以防止恶意软件利用rookit技术逃逸沙箱的监控。

    为了能够工作正常,Cuckoo要求Volatility版本不低于 2.3, 推荐最新版本2.5。 可以从官网下载 official repository.

    可以查阅Volatility官方文档的安装说明.

    #先安装依赖
    $ sudo pip install openpyxl
    $ sudo pip install ujson
    $ sudo pip install pycrypto
    $ sudo pip install distorm3
    $ sudo pip install pytz 
    
    #然后安装volatility
    #将volatility压缩包解压
    $ cd volatility
    $ python setup.py build
    $ python setup.py install
    
    #确认安装无误
    $ python vol.py -h
    

    安装 M2Crypto

    当前 M2Crypto 库需要 SWIG 支持. Ubuntu/Debian-like 系统下可以通过以下命令安装:

    $ sudo apt-get install swig
    

    SWIG 安装好之后,通过以下命令安装 M2Crypto:

    $ sudo pip install m2crypto
    

    安装 guacd(可选)

    guacd 是RDP,SSH,VNC等远程控制的代理层, 是Cuckoo的Web界面的远程终端中使用,可选。
    没有它,远程控制功能就无法使用,版本要求0.9.9及以上。我们推荐安装最新版本 使用如下命令安装:

    $ sudo apt install libguac-client-rdp0 libguac-client-vnc0 libguac-client-ssh0 guacd
    

    如果只需要远程桌面功能,则可以跳过 libguac-client-vnc0libguac-client-ssh0 两个包.

    如果使用了较老的Linux发行版,又想使用最新的guacd,那只能自己动手编译:

    $ sudo apt -y install libcairo2-dev libjpeg-turbo8-dev libpng-dev libossp-uuid-dev libfreerdp-dev
    $ mkdir /tmp/guac-build && cd /tmp/guac-build
    $ wget https://www.apache.org/dist/guacamole/0.9.14/source/guacamole-server-0.9.14.tar.gz
    $ tar xvf guacamole-server-0.9.14.tar.gz && cd guacamole-server-0.9.14
    $ ./configure --with-init-dir=/etc/init.d
    $ make && sudo make install && cd ..
    $ sudo ldconfig
    $ sudo /etc/init.d/guacd start
    

    安装requests包(用于http请求)

    #进入requests
    $cd requests
    $python setup.py install
    

    安装dateutil包

    使用pip安装

    $pip install python-dateutil
    

    客户机安装

    安装VirtualBox(直接安装):

    $ sudo apt-get install virtualbox
    

    打开虚拟机的时候需要用root权限打开,因为cuckoo是root权限,所以如果是非root权限的virtualbox,对于cuckoo来说是无法进行监听的。

    然后使用VirtualBox安装windows xp

    安装完成后安装增强功能工具(类似于VMware的VMware Tools)

    image-20200709230055843

    安装完增强工具后我们才能对宿主机和客户机建立共享文件夹

    建立文件夹依次选择VirtualBox菜单项中的设备-共享文件夹,设置如下:

    image-20200709230350189

    配置客户机:

    1.为windows安装python2.7

    为系统添加python环境

    2.安装PIL(Python截屏库)

    3.关闭windows自动更新

    4.关闭windows防火墙

    6.Ubuntu .cuckoo/agent目录下的agent.py拷贝到客户机中的c:python27目录下去,并将agent.py重命名为agent.pyw,这样运行的时候就不会显示控制台窗口了

    7.将Python根目录下的agent.pyw的快捷方式放到启动文件夹中去

    image-20200709231630052

    运行agent.pyw后,我们使用netstat -an命令会发现本地的8000端口正在处于监听状态中

    接着将IP配置为192.168.56.101

    image-20200709232309966

    对客户机做一个快照,取名为cuckoostart-1(名字自己取),后面对沙箱的配置中会用到。

    配置该虚拟机的网络模式为Host-only: 宿主机192.168.56.1 客户机192.168.56.101,然后客户机就能与ubuntu通信。

    image-20200712103437813

    此时Guest是无法访问互联网的,所以要在Host中设置IP转发,利用虚拟网卡做代理转发,接下来回到Ubuntu中,使用Iptables配置宿主机IP的转发和过滤规则:

    #开启IP转发
    $ 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
    
    #配置Iptables的规则
    $iptables -A FORWARD -o ens33 -i vboxnet1 -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
    $sysctl -w net.ipv4.ip_forward=1
    
    #接着为保证重启之后依然有效
    $sudo gedit /etc/network/interfaces
    #在最后添加两行
    $pre-up iptables-restore < /etc/iptables.rules 
    $post-down iptables-save > /etc/iptables.rules 
    
    

    安装 Cuckoo

    安装最新版本的Cuckoo比较简单. 推荐使用 pip 和 [](https://cuckoo-sandbox.readthedocs.io/zh_CN/latest/installation/host/installation.html#id4)setuptools来安装最新版本的Cuckoo。 (一些可能存在的问题 DistributionNotFound / No distribution matching the version..).

    (缺少依赖的时候会导致各种问题.建议安装前确定依赖项是否安装完成。)

    $ sudo pip install -U pip setuptools
    $ sudo pip install -U cuckoo
    

    全局安装Cuckoo是没有问题的,但是 强力推荐virtualenv 来安装

    $ virtualenv venv
    $ . venv/bin/activate
    (venv)$ pip install -U pip setuptools
    (venv)$ pip install -U cuckoo
    

    为什么推荐使用 virtualenv 呢:

    • Cuckoo的依赖并不是用的最新版本,可能会与系统已有的版本冲突.
    • 系统中其他软件的安装,可能会导致Cuckoo的依赖产生问题.
    • 使用virtualenv,可以让非root用户也可以安装相关软件.
    • 简单来说virtualenv是最佳实践.

    配置cuckoo

    Cuckoo配置文件的更改是非常重要的一步,否则很可能你的所有安装都无法正常启动。在 .cuckoo/conf/中修改配置文件:

    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
    

    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.
    # You can check this using the command: whereis tcpdump
    tcpdump = /usr/sbin/tcpdump
    
    # Specify the network interface name on which tcpdump should monitor the
    # traffic. Make sure the interface is active.
    # The ifconfig command will show you the interface name.
    #自己选择的网络名称    
    interface = vboxnet1
    

    virtualbox.conf

    machines = 你的虚拟机名字
    
    [你的虚拟机名字]
    label = 你的虚拟机名字
    platform = windows
    ip = 192.168.56.101 # IP address of the guest
    snapshot = 你创建的快照名字
    

    reporting.conf

    [mongodb]
    enabled = yes
    

    启动cuckoo

    $sudo cuckoo -d
    

    至此,所有的配置都配置完了,此时先运行Web服务

     $sudo cuckoo web runserver
    

    正常运行的话打开http://127.0.0.1:8000,就可以看到cuckoo SandBox的Web页面了。然后打开Cuckoo的服务,cuckoo 若最后一行显示等待分析任务,则说明你安装没问题,如果显示说没有找到CWD位置,则你需要先运行cuckoo -d

    正常运行的话打开http://127.0.0.1:8000,就可以看到cuckoo SandBox的Web页面了。然后打开Cuckoo的服务,cuckoo 若最后一行显示等待分析任务,则说明你安装没问题,如果显示说没有找到CWD位置,则你需要先运行cuckoo -d

    (可能遇到的情况 sudo cuckoo 命令找不到,cuckoo默认是在/home/username/.cuckoo/.local/bin/cuckoo)

    把它添加到sudo命令启动

    $sudo cp /home/username/.cuckoo/.local/bin/cuckoo  /usr/local/bin
    

    运行情况:

    image-20200710104048277

    web页面

    image-20200710104234917

    Cuckoo基本使用

    使用如下命令可以启动Cuckoo:

    $ sudo cuckoo
    

    启动后,可以看到日志输出,Cuckoo 会在开始的时候,请求 api.cuckoosandbox.org 检查更新。 可以在配置文件中修改 version_check 来关闭更新检查。

    启动完成后,Cuckoo 就等着提交文件来分析了。

    开始使用之前,如果需要修改Cuckoo的默认配置, 配置目录在 $CWD/conf/ 。 如果添加虚拟机或者修改数据库, 可以参考 客户机的准备。 如果需要WEB界面上看到样本分析报告, $CWD/conf/reporting.conf 中的 mongodb 一定要启用。 参考 Web 界面

    接下来我们需要下载 Cuckoo Community, 其中包含了300多个恶意软件行为签名,可用于简化我们对结果的分析。 下载命令如下:

    (venv)$ cuckoo community
    

    或者如果有下载好的 community 压缩包, (例如 wget https://github.com/cuckoosandbox/community/archive/master.tar.gz) 可以通过如下命令直接导入:

    (venv)$ cuckoo community --file master.tar.gz
    

    至此,我们就可以开始提交样本了, 可以参考 提交工具 。 多个样本可以在一次命令中提交,例如:

    (venv)$ cuckoo submit /tmp/sample1.exe /tmp/sample2.exe /tmp/sample3.exe
    Success: File "/tmp/sample1.exe" added as task with ID #1
    Success: File "/tmp/sample2.exe" added as task with ID #2
    Success: File "/tmp/sample3.exe" added as task with ID #3
    (venv)$ cuckoo submit --url google.com bing.com
    Success: URL "google.com" added as task with ID #4
    Success: URL "bing.com" added as task with ID #5
    

    样本的分析,依赖 cuckoo 的守护进程。 默认情况下, 直接运行守护进程, 不限制同时分析的样本数量(可通过 -m 参数指定)

    # This command is equal to what used to be "./cuckoo.py -d".
    (venv)$ cuckoo -d
    

    如果需要从WEB界面查看界面分析结果, 则需要运行cuckoo WEB进程。 对于测试环境或者并发数较小的环境, 可以通过内置的 Django WEB server 来运行, 实际环境下,我们更推荐基于高性能的WEB服务器来部署, 可以参考 Web 界面部署

    (venv)$ cuckoo web
    Performing system checks...
    
    System check identified no issues (0 silenced).
    March 31, 2017 - 12:10:46
    Django version 1.8.4, using settings 'cuckoo.web.web.settings'
    Starting development server at http://localhost:8000/
    Quit the server with CONTROL-C.
    

    提交工具

    最简单的提交样本分析的方式是通过 cuckoo submit 命令, 例如:

    $ cuckoo submit --help
    Usage: cuckoo submit [OPTIONS] [TARGET]...
    
      Submit one or more files or URLs to Cuckoo.
    
    Options:
      -u, --url           Submitting URLs instead of samples
      -o, --options TEXT  Options for these tasks
      --package TEXT      Analysis package to use
      --custom TEXT       Custom information to pass along this task
      --owner TEXT        Owner of this task
      --timeout INTEGER   Analysis time in seconds
      --priority INTEGER  Priority of this task
      --machine TEXT      Machine to analyze these tasks on
      --platform TEXT     Analysis platform
      --memory            Enable memory dumping
      --enforce-timeout   Don't terminate the analysis early
      --clock TEXT        Set the system clock
      --tags TEXT         Analysis tags
      --baseline          Create baseline task
      --remote TEXT       Submit to a remote Cuckoo instance
      --shuffle           Shuffle the submitted tasks
      --pattern TEXT      Provide a glob-pattern when submitting a
                          directory
      --max INTEGER       Submit up to X tasks at once
      --unique            Only submit samples that have not been
                          analyzed before
      -d, --debug         Enable verbose logging
      -q, --quiet         Only log warnings and critical messages
      --help              Show this message and exit.
    

    通过 cuckoo submit 可以指定文件或者目录, 如果是目录的话, 会遍历并提交里面的文件。

    对于提交为样本类型会在后续的代码中自动分析, 可以参考 Analysis Packages

    Example: 提交一个本地的二进制文件:

    $ cuckoo submit /path/to/binary
    

    Example: 提交一个 URL:

    $ cuckoo submit --url http://www.example.com
    

    Example: 提交一个本地的二进制文件并且指定了较高的优先级:

    $ cuckoo submit --priority 5 /path/to/binary
    

    Example: 提交一个本地的二进制文件并且设置最长分析时间是60秒:

    $ cuckoo submit --timeout 60 /path/to/binary
    

    Example: 提交一个本地的二进制文件并且指定文件类型:

    $ cuckoo submit --package <name of package> /path/to/binary
    

    Example: 提交一个本地的二进制文件并且指定网络路由方式是tor:

    $ cuckoo submit -o route=tor /path/to/binary
    

    Example: 提交一个本地的二进制文件并且指定文件类型,以及指定二进制文件运行时携带的参数:

    $ cuckoo submit --package exe --options arguments=--dosomething /path/to/binary.exe
    

    Example: 提交一个本地的二进制文件并且指定运行的虚拟机是 cuckoo:

    $ cuckoo submit --machine cuckoo1 /path/to/binary
    

    Example: 提交一个本地的二进制文件并且指定虚拟机平台是windows:

    $ cuckoo submit --platform windows /path/to/binary
    

    Example: 提交一个本地的二进制文件并且要求完整内存dumps:

    $ cuckoo submit --memory /path/to/binary
    

    Example: 提交一个本地的二进制文件并且强制使用最大的单个样本分析时长:

    $ cuckoo submit --enforce-timeout /path/to/binary
    

    Example: 提交一个本地的二进制文件并且指定设置虚拟机的系统日期时间:

    $ cuckoo submit --clock "01-24-2001 14:41:20" /path/to/binary
    

    Example: 提交一个本地的二进制文件并且要求内存分析, 且设置内存分析的参数

    $ cuckoo submit --memory --options free=yes /path/to/binary
    

    API

    REST API 的使用方法参考 REST API.

    分布式 Cuckoo

    分布式的Cuckoo 可以参考 Distributed Cuckoo.

    病毒样本测试

    1.提交蓝屏病毒

    image-20200712173045214

    web页面显示:

    image-20200713083411207

    image-20200713083336968

    image-20200712172930369

    分析:结果分析:提交方式可以通过命令行和 web 进行提交。对上传的蓝屏病毒进行分析,计算出病毒程序的md5等特征值,可以在腾讯哈勃分析系统中查找对应MD5 值并分析。蓝屏病毒主要是运行了 cmd.exe,并对系统中的 taskkill.exe 进行破 环。 taskkill.exe 是系统正常运转、各种办公软件、游戏运行所不可或缺的重要文 件。在缺失 taskkill.exe 的情况下会导致无故蓝屏等。

    总结

    在搭建 cuckoo 的过程中,主要是参考了官方的搭建文档,根据官网文档搭 建还是挺顺利了,但遇到了一些问题,在安装配置时缺少某些依赖库,所以在安装库的时候,都采用了源码安装。在遇到配置错误时,能够根据提示的错误来修正,最后完成了 cuckoo 的搭建。在进行病毒样本提交分析时,学会了如何查看分析报告,并从中分析病毒的特征。

    参考资料:
    cuckoo官网:https://cuckoo-sandbox.readthedocs.io/zh_CN/latest/
    其他链接:https://www.jianshu.com/p/f623fa0bebf9
    https://www.freebuf.com/articles/system/123816.html

  • 相关阅读:
    Live2d网页看板娘
    阿里云服务器(云主机)搭建网站攻略 最新9.5一个月
    Cookie小案例
    Node搭建多人聊天室
    JS鼠标点击爱心,文字特效
    JQ根据鼠标上下移动设置导航浮窗
    JS背景网页樱花特效
    Node中怎么保持MySql一直连接不断开
    Navicat for MySQL破解版
    Windows Server 2008 R2 安装MySql,PHP
  • 原文地址:https://www.cnblogs.com/thresh/p/13364317.html
Copyright © 2011-2022 走看看