写点什么

专业级沙箱与恶意样本的自动化分析

发布于: 2020 年 11 月 03 日

云妹导读:

沙箱的英文为 sandbox,也被译作沙盒,通常用来为一些来源不可信、具破坏力或无法判定其意图的程序提供一个隔离的运行环境,甚至很多专业级的沙箱,本质就是一个增强的虚拟机。沙箱通常可以严格控制沙箱中运行的程序所能访问的各种资源,包括:限制、禁止、监控对网络的访问、对真实系统的访问、对输入设备的读取等。总之,可以把沙箱理解为是虚拟化和监控手段的集合体。


沙箱是我们日常进行恶意攻击捕获、应急响应处置等工作时的常用工具。本文将通过几个实例介绍沙箱的基本概念,以 Cuckoo 为例介绍沙箱环境的搭建流程,最后以 gonnacry 勒索软件为例简单介绍 Cuckoo linux 沙箱检测能力增强及 signature 开发过程。


沙箱的基本概念


为了更好的理解沙箱的相关概念,下面剖析一下我们日常可能会用到的几个典型沙箱。

 

Windows 沙箱

 

微软在 Windows 10 18305 版本之后的专业版和企业版中加入了沙箱功能,可以通过 Windows 功能界面开启沙箱。



Windows 沙箱基于 Windows 下的容器技术,构建在 Windows 操作系统内核之上,是一种更轻量级的虚拟化方案,专门用于安全地隔离运行应用程序。其基本架构如下图所示:



Windows 沙箱虽然与操作系统共享内核,但沙箱访问内核是受限制的,内核并未提供应用程序运行所需的全部 API 和服务。

 

 Windows 沙箱具备开箱即用的特性,我们可以直接开启一个 Windows 沙箱,像在本地一样运行应用程序,但是不用担心损坏操作系统。比如,我们在日常使用电脑的过程中难免遇到需要下载执行一些可信度不确定的应用程序,在电脑上直接运行担心中毒,虚拟机运行又太消耗资源,这时 Windows 沙箱便是一个很好的选择。

 

Adobe 沙箱

 

如今,PDF 已经从静态页面发展到具有如交互式表单、多媒体内容、脚本以及其它功能的复合式文档。这些功能使得 PDF 容易受到恶意脚本或操作的攻击,这些攻击可以窃取数据甚至损坏您的计算机。使用增强的安全性,可以禁止或有选择性地允许来自信任位置和文件的操作,从而保护您的计算机免受这些威胁。Adobe Reader 在 X 之后的版本中加入了沙箱功能,来缓解漏洞利用。我们可以从下面两个图片对比中了解加入沙箱前后漏洞利用的难度变化情况。


▲Adobe Reader 9未加入沙箱机制的漏洞利用流程▲


▲Adobe Reader X加入沙箱之后的漏洞利用流程▲


加入沙箱之后 Adobe Reader 不信任的代码可以运行,但是只给予较低的权限,请求高权限的操作时需要通过另外一个中介进程来完成,同时很多敏感的 Windows API 调用会被拦截,从而保证 Adobe Reader 不被轻易的漏洞利用。以文件操作为例,典型的文件操作流程为:(1)调用 CreateFile(2)权限允许的情况下获取文件句柄(3)执行 ReadFile/WriteFile 进行读写操作。加入沙箱机制之后,程序是运行在沙箱进程中的:直接调用 CreateFile 被禁止。文件操作需要中介进程(Broker Process)进行中转,中介进程会进行一系列的校验,防止恶意操作。当全部校验通过后才会调用 CreateFile 并获取文件句柄。



通过这两个案例我们对沙箱是什么有了基本的了解。除此之外,还有一些其他类型的沙箱,基本原理类似,例如:杀毒软件沙箱(360 沙箱等)、浏览器沙箱(Chrome 沙箱等),这里就不一一介绍了。下面我们聊一聊专业级沙箱及恶意样本的自动化分析,本文以 Cuckoo 的 linux 沙箱为例进行介绍(注:Cuckoo 的 Windows 沙箱不在本文讨论范围,感兴趣的朋友可以去网上搜索相关文章)。

 

Cuckoo 沙箱


Cuckoo 沙箱是一个自动化的恶意样本分析系统。通过 web 界面或者沙箱系统提供的 web api 提交可疑文件,沙箱系统即可自动分析,并在分析完毕后提供一个详细的报告,概述该文件在沙箱中执行时的行为。

 

架构与流程


Cuckoo 由 Cuckoo host、Analysis Guests、Virtual network 构成。cuckoo host 是调度中心,analysis guest 是具体执行样本的沙箱环境,两者通过虚拟网卡连接。当提交样本到 cuckoo host 后,cuckoo host 会调度一个空闲的 analysis guest 节点,同时将样本传递给所选择的沙箱节点进行自动化分析,分析结束之后将沙箱节点采集到的分析数据进行汇总,最后输出分析报告。



Cuckoo 沙箱底层基于虚拟化技术,可以使用不同的虚拟化平台进行构建,目前支持的虚拟化平台包括:VirtualBox、KVM、VMware Workstation、XenServer。

 

Cuckoo 搭建

 

以下安装流程基于 VirtualBox 虚拟化环境,分为 Host 和 Guest 两部分。所用实验环境配置为:

系统发行版 :Ubuntu 18.04 硬件配置  :16 核 32G 600G


  • Host 安装

  

– 依赖库安装


sudo apt-get install -y python python-pip python-dev libffi-dev libssl-dev 

sudo apt-get install -y python-virtualenv python-setuptools 

sudo apt-get install -y libjpeg-dev zlib1g-dev swig


– 数据库安装


sudo apt-get install mongodb

apt-get install -y build-essential git libpcre3 libpcre3-dev libpcre++-dev python-dev libfuzzy-dev git clone https://github.com/kbandla/pydeep.git cd pydeep python setup.py build python setup.py install


– 安装 Virtualbox 


echo deb http://download.virtualbox.org/virtualbox/debian bionic contrib | sudo tee -a   /etc/apt/sources.list.d/virtualbox.listwget -q https://www.virtualbox.org/download/oraclevbox2016.asc -O- | sudo apt-key add -sudo apt-get updatesudo apt-get install -y libpng16-16 libvpx5 libsdl-ttf2.0-0sudo apt-get install virtualbox


– 安装 tcpdump


apt-get install -y libcap2-bin tcpdump


– 安装 Volatility


wget https://downloads.volatilityfoundation.org//releases/2.6/volatility2.6lin64standalone.zip unzip volatility2.6_lin64_standalone.zip


– 安装 M2Crypto


sudo apt-get install -y swig sudo pip install m2crypto


– 安装 guacd


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


– 安装 cuckoo


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


安装成功后如下图所示:



  • Guest 安装


– 安装依赖库


sudo apt-get install systemtap gcc patch linux-headers-$(uname -r)


– patch systemtap 脚本


$ wget https://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/stuff/systemtap/expandexecveenvp.patch $ wget https://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/stuff/systemtap/escapedelimiters.patch $ sudo patch /usr/share/systemtap/tapset/linux/syscexecve.stp < expandexecveenvp.patch $ sudo patch /usr/share/systemtap/tapset/uconversions.stp < escape_delimiters.patch


– 编译内核扩展


$ wget https://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/stuff/systemtap/strace.stp $ sudo stap -p4 -r $(uname -r) strace.stp -m stap -v $ sudo staprun -v ./stap.ko $ sudo mkdir /root/.cuckoo $ sudo mv stap_.ko /root/.cuckoo/


– 关闭防火墙及 ntp


sudo ufw disablesudo timedatectl set-ntp off


环境安装完成之后便可以启动 cuckoo 调度进程及 web 服务:


cuckoo -dcuckoo web runserver 192.168.1.15:80



使用 Cuckoo 进行恶意样本分析

 

Cuckoo 的 linux 沙箱主要从三个维度进行样本分析:


  • syscall 调用监控

  • 内存分析

  • 网络行为分析

 

下面结合一个实际案例,详细介绍一下如何使用 SystemTap 监控系统调用并开发一条检测恶意样本的检测策略。

 

SystemTap 是一个用来跟踪和探测的工具,它可以提供类似于 netstat、ps、top 和 iostat 等工具的输出信息,但是可以提供相比这些工具更加强大的跟踪和探测能力。

 

SystemTap 是一个框架,具体的分析逻辑需要通过 SystemTap 脚本实现。SystemTap 脚本由两部分组成:events handlers,即事件和相应的处理程序。事件及其相应的处理程序统称为探针(probe),一个 SystemTap 脚本可以有多个探针。下图为 cuckoo 中用来监控系统调用的探针。



这段代码用来监控及获取恶意样本进程及其子进程调用的 syscall,以及相关 syscall 的参数和返回值。

 相对应的,SystemTap 脚本的执行流程为:


1) SystemTap 检查脚本的依赖库是否存在(通常位于/usr/share/systemtap/tapset/)。SystemTap 将用 tapset 库中相应的定义替换脚本中的 tapset。


2) SystemTap 将脚本转换成 C 语言,并通过 C 编译器将其编译成内核模块。(systemtap 安装包里面包含此步骤需要用到的工具)


3) SystemTap 加载内核模块。在此之后脚本里面定义的全部 probe(events 和 handlers)就生效了。这一步是通过 systemtap-runtime 中的 staprun 来实现的。


4) 事件触发时,相应的 handlers(事件处理程序)被执行。


5) SystemTap 会话结束时,探针自动失效,同时内核模块也被卸载掉。


至此,我们对 Cuckoo 通过 SystemTap 监控 syscall 的过程有了一个整体的了解,SystemTap 会把采集到的 syscall 及其参数返回值以报告的形式返回给 Cuckoo,Cuckoo 的分析系统可以分析报告。使用者可以通过添加策略(signature)使对 SystemTap 采集的结果进行分析。

 

以勒索软件 gonnacry 的分析为例,下图是勒索软件 gonnacry 在执行加密操作前的一系列操作,因为他的加密依赖于系统上安装的加解密库 libcrypto,所以会在 libcrypto 常见的安装位置搜索这个库。



我们可以添加一条策略用来记录 SystemTap 对该操作的记录,并标记该操作为具有一定恶意的行为。



当沙箱运行过程中本条策略被多次命中时,可以基本确定被分析的的样本在系统上搜索 libcrypto.so,此时可以结合其他检测策略提升对恶意样本检测的准确率。

 检测效果如下:


欢迎点击京东智联云,了解开发者社区

更多精彩技术实践与独家干货解析

欢迎关注【京东智联云开发者】公众号


发布于: 2020 年 11 月 03 日阅读数: 488
用户头像

拥抱技术,与开发者携手创造未来! 2018.11.20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东科技开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
专业级沙箱与恶意样本的自动化分析