Cuckoo v2.0.6搭建过程

前言

网上有很多Cuckoo的安装教程,但随着Cuckoo的版本更新,安装过程也会发生些许变化。截止本文时,Cuckoo的最新版本为2.0.6,但网上鲜有对应版本的公开安装教程,因此整理此文,希望能帮助大家少踩一些坑。

服务器安装

  1. 操作系统
    Ubuntu16.04

  2. 更换源
    自带的源不太稳定,所以更换为国内的源,如阿里源。操作如下:
    $ sudo gedit /etc/apt/sources.list
    直接替换即可,百度即可找到很多相关博文。当然,最好将原文件做一个备份。
    删除缓存:
    $ sudo rm -vfr /var/lib/apt/lists/*
    更新:
    $ apt-get update
    $ apt-get upgrade

  3. 安装基本的依赖包
    $ 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

  4. 安装数据库
    MongoDB用于存储样本分析结果,与web前端关联。
    $ sudo apt-get install mongodb
    Mysql用于储存Cuckoo运行状况。
    $ sudo apt-get install mysql-server
    $ sudo apt-get isntall mysql-client
    在两个数据库中均新建一个数据库/数据集。

  5. 安装Cuckoo
    2.0.6版本的Cuckoo推荐在虚拟环境中安装。virtualenv是一个创建隔绝的Python环境的工具,在之前的步骤中已经安装上了。
    $ virtualenv venv
    $ . venv/bin/activate
    (venv)$ pip install -U pip setuptools
    (venv)$ pip install -U cuckoo
    然后就会自动下载所需的各种包。在使用的过程中,如果提示某python模块缺失,可以再单独安装,但注意需要在虚拟环境中进行安装。
    安装完成后,Cuckoo相关文件的存放路径为:
    非root身份:/home/[username]/.cuckoo/
    或,root身份:/root/.cuckoo/
    这个路径称为CWD,后续的配置文件都修改在这个路径下的。

  6. tcpdump
    Host机需要可以嗅探网络数据包,需要安装tcpdump ,如本机没有,则执行以下命令安装:
    $ sudo apt-get install tcpdump apparmor-util
    如果系统没启用root账户,由于 tcpdump 的执行需要 root 权限,则需要以下配置:
    $ sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

  7. setcap
    如果系统里没有setcap命令,则需要安装libpcap包
    $ sudo apt-get install libcap2-bin

  8. yara
    $ sudo apt-get install yara
    $ sudo apt-get install python-yara
    (venv)$ pip install yara

  9. volatility
    如果需要启用内存镜像分析,需要安装volatility:
    apt-get install volatility

客户机安装

  1. 操作系统
    Windows7 x64

  2. 虚拟机软件
    本文选择virtualbox
    $ sudo wget https://download.virtualbox.org/virtualbox/5.2.18/virtualbox-5.2_5.2.18-124319~Ubuntu~xenial_amd64.deb
    $ sudo dpkg -i virtualbox-5.2_5.2.18-124319-Ubuntu~xenial_amd64.deb

  3. 虚拟机安装
    自行准备一个win7系统镜像,然后在VirtualBox中创建一个新的虚拟机,基本设置保持默认即可。
    接下来的步骤(除了网络配置)请参考资料[1]。

  4. 网络配置
    首先,需要在VirtualBox上添加一块给Host-Only虚拟网卡,默认是vboxnet0,IP为192.168.56.1,关闭DHCP服务。IP段可以自定义,与后续配置一致即可。
    然后配置客户机的网络,设置为Host-Only。在客户机内手动配置,IP为192.168.56.101。也可以自定义,与后续配置一致即可。
    接下来需要服务器和客户机可以互相ping通,且客户机可以连接外网。
    并用iptable做地址转换NAT规则。开启IP转发,用下面两条命令之一皆可:
    $ sysctl -w net.ipv4.ip_forward=1
    $ echo 1 > /proc/sys/net/ipv4/ip_forward
    但是上面的命令只能 临时开启IP转发功能,系统重启之后便失效。若想永久开启此功能,需要手动修改配置文件 /etc/sysctl.conf ,将里面 net.ipv4.ip_forward=1 前的注释取消,然后运行以下命令即可永久开启IP转发功能:
    $ sysctl -p /etc/sysctl.conf
    然后用iptables设置地址转换规则:

$ iptables -A FORWARD -o eth0 -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

但同样会重启失效,所以做如下处理:
编辑网络配置文件/etc/network/interfaces,在文末添加以下两行:

pre-up iptables-restore < /etc/iptables.rules #开机时启用iptables规则
post-down iptables-save > /etc/iptables.rules #关机前保存当前所有的iptables规则
  1. 客户机配置
  • 安装python环境
  • 安装PIL、Pillow
  • 安装一些软件,如office、Adobe Reader、Firefox等
  • 如果需要开启共享文件夹或拖拽、粘贴功能,注意要首先安装增强功能。
  • 客户端
    将CWD/agent/agent.py文件拷贝到客户机里。我们需要这个文件能开机自启动,做法如下:
    把agent.py文件放到系统开机启动目录中,在Win7中默认的路径是C:\Users[username]\AppData\Roaming\MicroSoft\Windows\Start Menu\Programs\Startup\。
    如果想要agent运行时没有GUI窗口,可以将后缀名改为pyw。
    在任务管理器中查看进程,或在命令行中执行netstat -an查看是否有8000端口的监听,来确定agent是否在运行。
  • 开机自动登录
    用管理员权限打开CMD窗口,依次执行以下命令:
reg add "hklm\software\Microsoft\Windows NT\CurrentVersion\WinLogon" /v DefaultUserName /d [USERNAME] /t REG_SZ /f
reg add "hklm\software\Microsoft\Windows NT\CurrentVersion\WinLogon" /v DefaultPassword /d [PASSWORD] /t REG_SZ /f
reg add "hklm\software\Microsoft\Windows NT\CurrentVersion\WinLogon" /v AutoAdminLogon /d 1 /t REG_SZ /f
reg add "hklm\system\CurrentControlSet\Control\TerminalServer" /v AllowRemoteRPC /d 0x01 /t REG_DWORD /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v LocalAccountTokenFilterPolicy /d 0x01 /t REG_DWORD /f

修改前两条命令里的[USERNAME]和[PASSWORD]为自己的账户和密码。

  • 关闭Windows防火墙、自动更新、UAC。
  • 客户机快照
    Cuckoo每次分析都会从一个快照恢复客户机,所以要在以上配置完成后,确定agent在运行的情况下进行快照,然后将客户机休眠(不是关机)。

Cuckoo配置

  1. 配置文件路径
    CWD/conf/

  2. cuckoo.conf

[database]
connection = mysql://username:passwd@localhost:port/[数据库名称]
[cuckoo]
version_check = no //每次启动都要检查更新很费时间,可以选择关闭
machinery = virtualbox
process_results = yes //有教程建议修改为no,这样会导致启动Cuckoo Sandbox需要多一个步骤,但会让主模块与处理报告的模块分离,大幅提升稳定性,避免各种意外发生。但是我没有找到这样做以后报告如何生成,所以维持了yes。
  1. auxillary.conf
[sniffer]
enabled = yes
tcpdump = /usr/sbin/tcpdump 
  1. virtualbox.conf
    如果虚拟机软件用的是vmware就是vmware.conf。
[virtualbox]
mode = gui //有界面,调试的时候可以选择
或 mode = headless //无界面
path = /usr/bin/vboxmanage
interface = vboxnet0
machines = cuckoo1 //你的虚拟机名称
controlports = 5000-5050

[windows7]
label = cuckoo1 //你的虚拟机名称,需要与machines一致
platform = windows
ip = 192.168.56.101
snapshot = snapshot1 //创建的快照名称
  1. reporting.conf
[mongodb]
enabled = yes  //默认是no
host = 127.0.0.1
port = 27017
db = cuckoo //数据集名称
store_memdump = yes 
paginate = 100
  1. processing.conf
    用于开启/关闭某些分析模块。本文没有做修改。

  2. 社区签名库
    虚拟环境下,运行以下命令下载Cuckoo提供的社区版行为签名库:
    (venv)# cuckoo community
    或先下载再导入:
    (venv)# cuckoo community --file cuckoo_master.tar.gz
    由于网络奇慢,故没有成功。

  3. 其他
    Cuckoo对TcpDump的调用做了一层封装,对应的文件在[Python安装目录]Libsite-packages⧵cuckoo⧵auxiliary⧵sniffer.py,这个python脚本负责调用TcpDump并对其输出进行解析,由于Linux和Windows默认的换行符不同,所以我们需要对这个解析代码进行微调:

for line in err.split("rn"):
  if not line continue or line.startswith(err_whitelist_start):
    continue
// “r”为我们添加的内容

Cuckoo启动

Cuckoo的启动和VirtualBox需要在同一用户角色下,一般来说都是非root用户。但由于显示问题,本文的VirtualBox只能再root下启动,故均在root下启动。

  • 启动虚拟环境
    # . venv/bin/activate
  • 启动Cuckoo
    (venv)# cuckoo 或 cuckoo –d
  • 启动web
    (venv)# cuckoo web
    然后就可以通过http://localhost:8000访问了。
    可以通过web提交样本、查看报告,也可以通过命令行。
    分析结果的储存路径为:
    CWD/storage/analyses

问题处理

  1. 找不到客户机

CuckooConfigurationError: Option xxx is not found in configuration

或,

Please update your configuration. Unable to shut 'xxx' down or find the machine in its proper state: The virtual machine 'xxx' doesn't exist! Please create one or more Cuckoo analysis VMs and properly fill out the Cuckoo configuration!

确定virtualbox.conf中,label与machines都是你的虚拟机名称(这样我也没有成功,当我重启服务器,将label、machines、虚拟机名称都改成默认的cuckoo1后,才成功)。

  1. tcpdump Permission denied
    tcpdump默认是enforce模式,改成complain模式。
    查看模式:
    grep tcpdump /sys/kernel/security/apparmor/profiles
    更改为complain:
    aa-complain /usr/sbin/tcpdump

WARNING: Uploaded file length larger than upload_max_size, stopping upload.

修改cuckoo.conf
upload_max_size = 314572800 或更大
这个值是从客户机中传回Cuckoo的报告、截图等数据的大小。

Error fetching configuration file! This is a serious error. if encountered, please notify the Cuckoo developers as this error prevents analysis.

  • 确定关闭了UAC
  • 确定以管理员身份运行agent.py/agent.pyw
  • 确定在agent运行中进行了快照
  • 将客户机休眠,不是关机(也许关机也是对的,但是我没有成功)
  • 如果不行,就关闭pythonw进程重开,或重启客户机。

Analysis results folder already exists at path "/root/.cuckoo/storage/analyses/1", analysis aborted.

编号为1的任务已存在。
mysql中不存在任务1,故Cuckoo将新任务编号为1,但CWD/storage/analyses存在任务1的内容。调试过程的产物,删除CWD/storage/analyses中的任务1即可。

CuckooCriticalError: Unable to bind ResultServer on 192.168.56.1:2042 [Errno 99] Cannot assign requested address. This usually happens when you start Cuckoo without bringing up the virtual interface associated with the ResultServer IP address.

每次重启服务器后再启动Cuckoo总是这样,需要重启客户机,将其休眠,然后才能正常启动。原因未知。

  1. 过完年回来重启服务器,遇到新问题
    按说一切配置都已完好,偏偏启动的时候遇到了以下问题:

CuckooCriticalError: Unable to bind ResultServer on 192.168.56.1:2042 [Errno 99] Cannot assign requested address. This usually happens when you start Cuckoo without bringing up the virtual interface associated with the ResultServer IP address.

ResultServer的配置之前没有修改过,ip和port配置在cuckoo.conf的[resultserver]中,ip与virtualbox的网卡ip一致。后来我将ip和port配置在了virtualbox.conf的各客户机标签下的resultserver_ip和resultserver_port,再按要求将cuckoo.conf中的ip改为0.0.0.0,且将两处的port都进行了更换,就不再出现问题了。

参考资料

  1. https://www.cnblogs.com/cb0327/p/5061446.html
  2. https://www.colabug.com/3266828.html
  3. http://www.freebuf.com/sectool/108533.html
  4. https://www.jianshu.com/p/f623fa0bebf9
  5. 官方文档:https://cuckoo.sh/docs/usage/cwd.html

注:
以上有部分叙述直接copy网上教程,如有侵权请提醒;
本人才疏学浅,教程中如有错误请指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容