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

云妹导读:
沙箱的英文为sandbox,也被译做沙盒,一般用来为一些来源不可信、具破坏力或没法断定其意图的程序提供一个隔离的运行环境,甚至不少专业级的沙箱,本质就是一个加强的虚拟机。沙箱一般能够严格控制沙箱中运行的程序所能访问的各类资源,包括:限制、禁止、监控对网络的访问、对真实系统的访问、对输入设备的读取等。总之,能够把沙箱理解为是虚拟化和监控手段的集合体。
沙箱是咱们平常进行恶意攻击捕获、应急响应处置等工做时的经常使用工具。本文将经过几个实例介绍沙箱的基本概念,以Cuckoo为例介绍沙箱环境的搭建流程,最后以gonnacry勒索软件为例简单介绍Cuckoo linux沙箱检测能力加强及signature开发过程。python

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

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

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

Windows沙箱虽然与操做系统共享内核,但沙箱访问内核是受限制的,内核并未提供应用程序运行所需的所有API和服务。
Windows沙箱具有开箱即用的特性,咱们能够直接开启一个Windows沙箱,像在本地同样运行应用程序,可是不用担忧损坏操做系统。好比,咱们在平常使用电脑的过程当中不免遇到须要下载执行一些可信度不肯定的应用程序,在电脑上直接运行担忧中毒,虚拟机运行又太消耗资源,这时Windows沙箱即是一个很好的选择。github

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

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

▲Adobe Reader X加入沙箱以后的漏洞利用流程▲数据库

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

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

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。

如下安装流程基于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
– 安装pydeep
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.list
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install -y libpng16-16 libvpx5 libsdl-ttf2.0-0
sudo apt-get install virtualbox
– 安装tcpdump
apt-get install -y libcap2-bin tcpdump
– 安装 Volatility
wget https://downloads.volatilityfoundation.org//releases/2.6/volatility_2.6_lin64_standalone.zip
unzip volatility_2.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/expand_execve_envp.patch
$ wget https://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/stuff/systemtap/escape_delimiters.patch
$ sudo patch /usr/share/systemtap/tapset/linux/sysc_execve.stp < expand_execve_envp.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 disable
sudo timedatectl set-ntp off
环境安装完成以后即可以启动cuckoo调度进程及web服务:
cuckoo -d
cuckoo web runserver 192.168.1.15:80

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

  • syscall调用监控
    经过systemtap监控系统调用。
  • 内存分析
    经过Volatility 和YARA对进程内存进行内存分析
  • 网络行为分析
    主要经过snort对网络流量进行分析

下面结合一个实际案例,详细介绍一下如何使用SystemTap监控系统调用并开发一条检测恶意样本的检测策略。
SystemTap是一个用来跟踪和探测的工具,它能够提供相似于netstat、ps、top和iostat等工具的输出信息,可是能够提供相比这些工具更增强大的跟踪和探测能力。
SystemTap是一个框架,具体的分析逻辑须要经过SystemTap脚本实现。SystemTap脚本由两部分组成:eventshandlers,即事件和相应的处理程序。事件及其相应的处理程序统称为探针(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,此时能够结合其余检测策略提高对恶意样本检测的准确率。
检测效果以下:

[阅读原文]

相关文章
相关标签/搜索