Cuckoo沙箱Linux检测引擎
Cuckoo沙箱是一款开源自动化恶意软件分析系统,将可疑文件或URL在隔离环境中运行,生成详细的行为报告。
Cuckoo支持在Windows、macOS、Linux、Android四种操作系统平台下分析恶意文件(包括可执行文件、Office文档、PDF文档、邮件等多种类型)和恶意网站。相较于静态分析,沙箱动态分析可获得可疑文件的详细行为信息,如可疑文件创建的进程、调用的函数、创建删除或下载的文件、请求的网络流量等,进而对可疑文件进行深度判定。
Cuckoo的整体运行流程为:提交样本->启动虚拟机->往虚拟机投递样本和检测引擎并运行->回传检测结果->Processing模块处理结果->Signatures模块过规则->Reporting模块生成报告。
沙箱核心组件之一是动态检测引擎,Cuckoo沙箱Linux检测引擎基于SystemTap实现,关于SystemTap可以参见上一篇博客SystemTap,SystemTap在Linux Guest虚拟机中的安装参见Installing the Linux guest。
首先打补丁escape_delimiters,将字符串中的特殊字符转换成十六进制表示,方便后续日志分析:
$ sudo patch /usr/share/systemtap/tapset/uconversions.stp < escape_delimiters.patch |
然后将监控脚本strace.stp转换成内核模块:
$ sudo stap -p4 -r $(uname -r) strace.stp -m stap_ -v |
检测引擎运行时,stap.py直接运行生成的内核模块,监控样本进程:
self.proc = subprocess.Popen([ |
这里path
即stap_.ko
内核模块;-x
指定target进程ID,可在SystemTap脚本通过target()获取。
生成的日志stap.log
会回传到主机,由processing模块分析,最终由reporting模块生成报告。
由监控脚本strace.stp可见(引用的tapsets函数可参见SystemTap Tapset Reference Manual),引擎会监控样本进程及其子进程的所有系统调用并生成日志:
probe nd_syscall.* { |
生成的日志可参见测试样例log.stap:
Mon Jun 19 16:58:31 2017.445170 python@b774dcf9[680] execve("/usr/bin/sh", ["sh", "-c", "/tmp/helloworld.sh"], ["LANGUAGE=en_US:en", "HOME=/root", "LOGNAME=root", "PATH=/usr/bin:/bin", "LANG=en_US.UTF-8", "SHELL=/bin/sh", "PWD=/root"]) = -2 (ENOENT) |
对日志的解析参见测试脚本test_stap.py。
投递样本helloworld.sh进行分析:
!/bin/bash |
生成的行为分析进程树:
部分系统调用信息: