关于操作系统:专业级沙箱与恶意样本的自动化分析

4次阅读

共计 5100 个字符,预计需要花费 13 分钟才能阅读完成。

云妹导读:
沙箱的英文为 sandbox,也被译作沙盒,通常用来为一些起源不可信、具破坏力或无奈断定其用意的程序提供一个隔离的运行环境,甚至很多专业级的沙箱,实质就是一个加强的虚拟机。沙箱通常能够严格控制沙箱中运行的程序所能拜访的各种资源,包含:限度、禁止、监控对网络的拜访、对实在零碎的拜访、对输出设施的读取等。总之,能够把沙箱了解为是虚拟化和监控伎俩的集合体。
沙箱是咱们日常进行歹意攻打捕捉、应急响应处理等工作时的常用工具。本文将通过几个实例介绍沙箱的基本概念,以 Cuckoo 为例介绍沙箱环境的搭建流程,最初以 gonnacry 勒索软件为例简略介绍 Cuckoo linux 沙箱检测能力加强及 signature 开发过程。

为了更好的了解沙箱的相干概念,上面分析一下咱们日常可能会用到的几个典型沙箱。

微软在 Windows 10 18305 版本之后的专业版和企业版中退出了沙箱性能,能够通过 Windows 性能界面开启沙箱。

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

Windows 沙箱尽管与操作系统共享内核,但沙箱拜访内核是受限制的,内核并未提供利用程序运行所需的全副 API 和服务。
Windows 沙箱具备开箱即用的个性,咱们能够间接开启一个 Windows 沙箱,像在本地一样运行应用程序,然而不必放心损坏操作系统。比方,咱们在日常应用电脑的过程中不免遇到须要下载执行一些可信度不确定的应用程序,在电脑上间接运行放心中毒,虚拟机运行又太耗费资源,这时 Windows 沙箱便是一个很好的抉择。

现在,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 沙箱是 一个自动化的歹意样本剖析零碎。通过 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,此时能够联合其余检测策略晋升对歹意样本检测的准确率。
检测成果如下:

[浏览原文]

正文完
 0