ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Cuckoo沙箱在Ubuntu各版本上的安装与使用完整指南

2026/10/5 14:21:18 拓冰建站 浏览量
Cuckoo沙箱在Ubuntu各版本上的安装与使用完整指南 做恶意样本分析这行手动开虚拟机、装系统、恢复快照、抓流量、导日志的日子我算是过够了。后来接触到Cuckoo Sandbox一种开源的自动化恶意软件分析系统慢慢把重复劳动交给了它效率上来了不止一倍。这篇文章就围绕Cuckoo沙箱在Ubuntu各版本上的安装与使用把我自己踩过的坑、试出来的方案、实际运行时的调整逻辑完整讲一遍。内容适合正在搭沙箱做样本分析的人也适合刚入行的安全分析人员命令和思路都可以直接照着操作。1. 安装前的整体规划版本选择与硬件要求1.1 Cuckoo Sandbox是什么为什么宿主机选UbuntuCuckoo Sandbox是一个开源的自动化恶意软件分析系统核心作用是在隔离的虚拟环境中动态执行可疑文件自动采集进程行为、网络请求、文件读写、注册表变更等运行痕迹最后生成一份结构化分析报告。简单说你丢一个可疑样本进去它自己跑一遍然后把“这玩意儿干了什么”清清楚楚列给你。宿主机选Ubuntu不是因为它比Windows好看而是现实原因。Cuckoo的主控端是用Python写的依赖一堆Linux下的工具链比如tcpdump抓包、Volatility做内存取证、ssdeep做模糊哈希这些在Linux生态里都是原生支持或直接apt就能装的。Windows下要凑齐这套环境光编译和兼容性问题就够喝一壶。如果你以后要接入VirusTotal、反病毒引擎联动的插件Linux下的社区支持和文档也要全得多。1.2 各Ubuntu版本的适配差异与推荐“各Ubuntu版本”这个说法看起来只是版本号不同但实际影响安装成败的关键点是Python环境和系统库版本。我实际装过的有16.04、18.04、20.04也帮朋友排查过22.04差异确实存在。Ubuntu版本默认Python推荐的Cuckoo类型安装难度主要注意点16.04Python 2.7Cuckoo原版Python2低apt源需要改清华或中科大依赖版本老兼容性好18.04Python 2.7 / Python 3.6Cuckoo原版Python2低系统自带Python2依赖好装比较省心20.04Python 3.8Cuckoo现维护版本或自建Python2环境中没有默认Python2需要自己装否则老代码跑不了22.04Python 3.10不建议直接装老Cuckoo较高很多旧依赖包在Python3.10下编译报错推荐用Docker或换系统如果你之前完全没碰过Cuckoo我推荐直接用Ubuntu 18.04 Server版这是最顺的一条路。系统装完自带Python 2.7Cuckoo主程序用pip install cuckoo装依赖包基本都能找到编译好的wheel不需要折腾gcc那堆东西。如果你非要上20.04或22.04就要么自己编译Python 2.7环境要么走Docker路线后面我会单独说。1.3 硬件配置和网络拓扑规划硬件方面我给一个最低门槛供参考CPU至少4核且必须支持硬件虚拟化Intel VT-x或AMD-VBIOS里要开好内存8GB起步如果你准备跑多台分析虚拟机并行分析16GB以上更稳磁盘建议100GB以上样本、虚拟机快照和分析日志都会慢慢堆起来。网络规划是很多人忽略的重点。Cuckoo的网络通常分三段宿主机管理网、虚拟分析网、样本通信网。分析虚拟机一般使用Host-Only网络由一个虚拟网卡桥接出来这样样本在虚拟机里访问的“互联网”实际上是假的流量会被Cuckoo内置的虚拟网络截获和分析。千万别把分析虚拟机直接桥接到物理网络不然样本一旦有内网扫描行为就直接连到你们公司生产网络去了。我用的是VirtualBox的Host-Only模式再结合Cuckoo自带的dns假应答和流量记录功能基本能做到对外零泄漏。提示分析网络与宿主管理网络必须隔离。这是搭沙箱的第一安全原则网上很多教程不提这点实际出事的时候是真的会连累整段办公网。2. 核心依赖安装与配置一步步把Cuckoo装起来2.1 基础环境准备与Python虚拟环境我建议所有依赖安装都在一个虚拟环境里做别在系统全局环境里直接pip。Cuckoo的依赖里有很多老版本包比如M2Crypto、Pillow、django和系统全局已有的包很容易冲突。我这里以Ubuntu 18.04 Python 2.7为例走一遍完整流程。sudo apt-get update sudo apt-get upgrade -y sudo apt-get install -y python python-pip python-dev sudo apt-get install -y virtualenv接着创建并激活虚拟环境virtualenv --pythonpython2.7 cuckoo-env source cuckoo-env/bin/activate环境激活之后所有包都装在这个虚拟环境里以后不管是升级或者重装都不会把系统弄乱。这一步对后面排查问题很有帮助你至少知道哪些包是被Cuckoo的虚拟环境管着的。2.2 系统依赖工具安装tcpdump、ssdeep、Volatility等Cuckoo依赖的很多底层工具不是pip包而是系统包需要预先装好。下面是18.04上实测可用的命令sudo apt-get install -y python-pip python-dev libffi-dev libssl-dev sudo apt-get install -y libvirt-dev libxml2-dev libxslt1-dev zlib1g-dev sudo apt-get install -y tcpdump dnsmasq-utils sudo apt-get install -y ssdeep sudo apt-get install -y genisoimage sudo apt-get install -y virtualbox sudo apt-get install -y volatilitytcpdump这个包装完之后还需要给它提权否则普通用户无法抓包。Cuckoo官方文档建议用setcap给tcpdump加上网络原始访问能力执行sudo setcap cap_net_raw,cap_net_admineip /usr/sbin/tcpdump设置完可以用getcap /usr/sbin/tcpdump验证一下。这个我建议在安装完之后就做不然第一次跑分析任务的时候会报“tcpdump permission denied”处理起来倒不复杂但会打断你的思路。2.3 Cuckoo本体安装与初始化配置虚拟环境激活状态下执行pip install cuckoo装完后先初始化目录结构cuckoo init这个命令会生成Cuckoo配置目录默认在~/.cuckoo里面包含conf/、storage/、log/等目录。刚init完重点是修改conf/cuckoo.conf和conf/virtualbox.conf两个文件。cuckoo.conf里要设置的关键项machinery virtualboxmemory_dump on如果要用Volatility做内存转储分析就把记忆体转储打开virtualbox.conf里设置虚拟机相关参数核心有分析虚拟机的名称对应VirtualBox里创建的虚拟机快照名称分配的分析虚拟机数量这里有个细节Cuckoo分析的虚拟机必须保存一个干净快照而且快照名要在配置文件里明确指定。它是靠恢复快照来把被样本改过的系统还原到初始状态的所以快照必须在干净系统状态下创建。2.4 分析虚拟机Guest配置要点分析虚拟机是指在VirtualBox里跑的那台Windows系统Cuckoo会在它里面运行样本并采集行为。Guest系统的准备有几个要点系统建议用Windows 7 x86或Windows 10 x64根据你要分析的样本类型选择安装Python 2.7Cuckoo在Guest中用的agent是Python写的老版本Cuckoo要求Python 2.6以上安装PILPillow用于屏幕截图关闭Windows防火墙和Windows Defender避免干扰样本运行和agent通信配置网络为Host-Only并固定IP和宿主机保持同一网段创建一个干净的干净快照并命名为一个固定名字这个步骤是最容易被忽略的。很多人装好宿主机Cuckoo之后一直报“cannot find guest”检查半天才发现是虚拟机快照没有创建或者快照名称和配置里的不一致。快照名称不要用中文不要有空格不然解析配置的时候容易出问题。3. 各Ubuntu版本安装差异与踩坑实录3.1 Ubuntu 16.04与18.04最少弯路组合16.04和18.04整个安装流程基本一样唯一需要注意的是apt源。因为官方源在某些地区速度太慢而且Python2相关的包在旧版本源里可能已经不再更新我习惯在安装前先把源更换成国内常用的镜像源。Ubuntu 16.04上有一个额外问题libssl-dev版本默认是1.0.2而有些pip包在编译时依赖更新的OpenSSL头文件如果报错可以用如下方式处理sudo apt-get install -y libssl1.0-dev如果pip install某个依赖包编译报错绝大多数情况是缺了某个-dev包。M2Crypto编译失败时通常是因为libssl-dev和swig没有安装执行sudo apt-get install -y swig再把M2Crypto单独重新装一遍。我在这两个版本上跑Cuckoo的过程里基本上没遇到特别大的障碍全部流程两三小时就能跑通。3.2 Ubuntu 20.04与22.04Python2环境缺失的三种解法20.04开始系统默认不带Python 2.7了这是最麻烦的事。我试过三种解法各有优劣。第一种编译安装Python 2.7自用。你从Python官网下载Python 2.7.18源码然后编译安装到/usr/local/python2.7。接着用virtualenv指定这个Python版本创建虚拟环境。但编译过程中会遇到SSL/M2Crypto相关的兼容问题需要自己下载老版本的openssl头文件来配合。这个方法适合有一定Linux编译经验的人缺点是费时间。第二种用Docker装Cuckoo。直接拉一个xebia/cuckoo或blacktop/cuckoo这类镜像宿主机只需要装Docker简单得多。但这样做的代价是宿主机与容器之间的网络和USB透传配置会更复杂而且我们现在讨论的是“在Ubuntu上安装”走Docker等于把Ubuntu本身的依赖问题整体绕过了。第三种直接换用Python3兼容的版本来分析。Cuckoo原版的官方维护已经停了社区有对应的Python3迁移版本也可以直接用基于Cuckoo二次开发的商业化或开源替代品。但如果你想要的是最原汁原味的Cuckoo使用体验这套方案会偏离你原有的目标。我的倾向是20.04值得折腾一下先尝试编译Python2.7。22.04就别硬折腾了用VirtualBox虚拟机里套一个18.04跑Cuckoo或者用Docker方案都比在22.04上死磕依赖舒服。3.3 各版本安装报错速查表报错信息出现环境原因解决方案Command python setup.py egg_info failed20.04/22.04Python版本不匹配或setuptools太新换Python 2.7虚拟环境或单独安装旧setuptoolscannot find -lssl16.04libssl-dev版本不对安装libssl1.0-dev或libssl-dev匹配版本tcpdump: no suitable device found所有版本权限或网络接口配置不对setcap提权或检查Host-Only网卡是否启用M2Crypto.SSL.SSLError: certificate verify failed18.04编译时Python2环境SSL配置不完整重新编译Python2启用SSL模块No module named Crypto.Cipher20.04缺pycrypto包或安装顺序错误在虚拟环境里手动pip install pycryptovirtualbox: Could not find VirtualBox所有版本Cuckoo无法定位VirtualBox路径检查conf/virtualbox.conf里vboxmanage路径或重新安装virtualbox4. 沙箱使用流程从提交样本到报告解读4.1 启动Cuckoo服务一切配置完成后启动主控进程cuckoo如果你想使用Web界面需要另开一个终端同样在虚拟环境里启动cuckoo web --host 127.0.0.1 --port 8080然后浏览器访问http://127.0.0.1:8080。Web界面可以查看分析任务状态和报告但我个人更习惯用命令行提交样本因为可以直接看到日志输出。Cuckoo主控进程的基本工作流程是接收任务 - 启动虚拟环境 - 恢复虚拟机快照 - 分发样本到虚拟机 - 触发运行 - 抓取行为与流量 - 还原快照 - 生成报告。理解了这条链路排查问题时会快很多。4.2 提交样本的三种方式第一种命令行提交。最直接适合单次分析cuckoo submit /path/to/sample.exe第二种通过Web界面提交。适合日常操作拖拽文件进去就行。Web界面在分析完成后会展示结果摘要、进程树、下载的文件等内容。第三种通过API提交。适合批量操作或集成到自己的分析平台里。启动API服务cuckoo api --host 127.0.0.1 --port 8090然后通过HTTP请求提交任务传文件、设置超时时间、指定包名等都可以。我在做样本批量入库的时候就是写脚本调API把十几个样本排队塞进去一次性跑完。4.3 分析参数的关键设置提交任务时有一些参数会影响分析质量。我常用的几个超时时间-t默认分析时间为120秒考虑到样本可能有延时行为我一般设置为180到240秒这个可以在提交时指定包名-p如果样本本身就是python打包的或者需要指定运行参数可以用这个参数网络--options可以设置是否模拟网络服务、DNS应答等比如设置dns 127.0.0.1让样本的DNS请求被Cuckoo自己接管路由--routing在需要让样本访问某个特定IP或端口时使用参数选择背后的逻辑是要让样本“放松警惕”。很多样本会检测是否处于虚拟机环境或者等待一段时间才执行恶意行为。把超时时间设大一点至少在分析结果里能看到它在等待过程中做了哪些动作。4.4 报告文件解读技巧分析完成后Cuckoo会在~/.cuckoo/storage/analyses/任务ID/目录下生成一系列文件关键的有report.html可视化报告包含进程树、文件操作、网络流量等dump.pcap虚拟网络抓包文件可用Wireshark打开memory.dmp内存转储文件可用于Volatility做内存取证files样本释放的文件列表报告里最值得关注的是“进程行为”这一栏它会详细列出每个进程创建的子进程、加载的DLL、修改的文件和注册表项。拿勒索软件举例你会在进程行为里看到它调用了大量加密相关的API并且修改了文档文件的后缀名。配合网络流量里的C2通信记录基本就能把样本的行为链路拼出来。5. 常见问题与排查思路实录5.1 网络问题虚拟机没有IP或连不上宿主机这个是我遇到次数最多的问题。检查顺序是这样的先看VirtualBox里虚拟机的网络模式是不是Host-Only再看虚拟机的系统里IP是不是和宿主机vboxnet0网卡同一个网段最后用guest机器里的IP去ping宿主机vboxnet0的IP通了再跑Cuckoo。还有一种隐蔽情况如果宿主机上有多个虚拟网卡比如之前装过Docker或者OVSVirtualBox的Host-Only网卡索引可能会乱掉。在VirtualBox管理界面里删除原来的网络并重建然后把guest虚拟机重新绑定到新的Host-Only网卡上就好了。5.2 快照问题Error with machinery virtualboxCuckoo启动时报这个错的概率我在不同版本机器上都碰到过。原因通常是配置里指定的快照不存在。你需要用VBoxManage看一下当前虚拟机有哪些快照VBoxManage snapshot 虚拟机名 list确认快照名称后把它写进conf/virtualbox.conf的snapshot参数中。还有一件事容易忽略快照起名时不要用空格虽然Cuckoo配置里允许带引号但解析时偶尔会出现转义问题纯字母数字最省心。5.3 分析任务卡在pending状态样本提交后一直处于pending多半是主控进程没有收到任务分发状态。先看cuckou日志默认在~/.cuckoo/log/cuckoo.log。常见原因有Cuckoo进程跑在临时目录任务存储路径权限不对或者虚拟环境里cuckoo命令的PATH不对导致shell找不到cuckoo可执行文件。我习惯把虚拟环境的bin目录写进~/.bashrc或者直接用绝对路径调用虚拟环境里的cuckoo脚本避免这种玄学问题。5.4 Guest虚拟机里样本没执行起来样本在虚拟机里没有执行或者说执行了但没有任何行为记录这种情况我排查后找到的最多原因是agent没启动。Cuckoo在虚拟机里通过agent.py和主控通信如果agent没跑起来主控连不上分析自然失败。检查做法手动在guest虚拟机里运行agent.py看它是否能正常连接到宿主机监控端口默认是2046。如果连接不上检查防火墙或者虚拟机网络隔离。agent脚本位置一般在Cuckoo安装目录下的utils/agent目录需要把这个目录拷贝进guest虚拟机。5.5 Cuckoo服务进程异常退出Cuckoo跑着跑着就死掉基本与内存占用有关。分析虚拟机本身吃内存同时跑多个虚拟机宿主机内存不够时进程会被系统强杀。这个没有更优雅的办法要么减少并行分析的虚拟机数量conf里machinery配置的machines数要么扩大swap分区临时缓解但长期建议加内存。提示正式跑稳定后定期备份~/.cuckoo目录。这个目录里存了所有分析记录和配置被误删或者系统故障时没有备份就只能重新收集样本和重新配置环境了。我一般用一个cron脚本每周打包一次到另一块磁盘。6. 一个可以少踩很多坑的安装顺序清单所有依赖都装好的情况下推荐的顺序是先装系统级工具再装VirtualBox并创建好guest虚拟机再装Cuckoo本体最后初始化配置。这个顺序背后逻辑是Cuckoo在init的时候需要检测machinery模块如果VirtualBox还没装好cuckoo init虽然也能跑但后面一启动就会报找不到VBoxManage。综合下来完整的命令执行顺序可以整理成这样更新Ubuntu系统并安装基础编译工具安装tcpdump、ssdeep、VirtualBox等系统工具创建Python虚拟环境并激活pip install cuckoo并执行cuckoo init创建Windows guest虚拟机并配置Host-Only网络给guest安装Python环境和agent脚本保存干净快照编辑cuckoo.conf和virtualbox.conf启动cuckoo并提交测试样本验证我最早装的时候顺序是反着来的先装Cuckoo后装VirtualBox结果init出来的配置文件在启动时各种找路径后来重置了Cuckoo目录才解决。顺着这个流程走一遍基本半小时就能跑起来。最后再分享一个我自己的习惯每次安装完正式使用之前我会拿一个已知行为的无害测试程序比如一个弹窗脚本或一条ping命令先跑一次分析确认报告里能看到对应的行为记录后再开始分析真实样本。这一步花不了几分钟但能提前暴露环境配置问题比如时间超时设置、网络抓包有没有生效、agent通不通而不是等真正分析样本时才发现结果报告里什么都没有。Cuckoo这套东西装起来不难难的是把环境细节调稳妥。希望这份基于实际安装过程的记录能帮你少走一些弯路把时间花在分析样本本身而不是花在折腾环境上。