简单的活着

答辩手稿

Posted on By Mista Cai

答辩

各位老师好,我是18级专硕蔡刘壮,导师是赵峰老师,指导老师是羌卫中老师,毕设题目是基于动态分析的反沙箱对抗技术

提纲

接下来,我主要对设计目标,关键技术和系统测试进行展示。

我在研究生期间的主要工作是

参与了华为公司的项目,面向高级恶意样本检测的动态行为数据采集和特征分析。主要负责第二期任务,提出一项反沙箱对抗技术,保证数据流采集的有效性

研究背景与意义

目前,由于恶意软件数量巨大,沙箱等自动化分析工具越发重要。根据lastline15年的报告,14年具有逃逸行为的恶意样本占比增加了一倍以上,超过了70%。

因此沙箱在面临应用逃逸技术的复杂恶意软件时往往显得非常无力。

大多数沙箱都或多或少受到了逃逸技术的影响。

设计目标

所以我们需要提出一项反沙箱对抗技术,保证数据流采集的有效性。如果采集的数据是无效的,那么后续分析也是没有意义的。

我们按照多路径探索的思路,探索程序的多条可执行路径,尽可能多的暴露程序的可疑行为,增强对程序的可视性。

还要减小多路径探索技术的性能开销,避免应用污点追踪和全局符号执行等开销较大的技术,增强可用性。

技术架构

因此,我们采用了开销低于5%的Intel PT技术结合选择性符号执行来完成多路径探索。

通过将Intel PT记录的控制流信息与二进制文件的静态反汇编相结合,能够精确地还原分支路径。有了这些执行过的路径数据,我们就可以找到程序的每个未执行基本块并识别相应的条件分支。

我们的监控系统可以时刻监听程序和系统环境之间的交互,如果这些条件分支使用了API参数作为判断条件,我们就可以使用选择性符号执行确定这条路径条件,从而将控制流引导到未执行的基本块。

首先是,还原执行路径

通过对恶意软件样本进行反汇编得到其控制流图CFG(Control Flow Graph),结合Intel PT收集到的控制流信息,可以还原出恶意软件样本的本次执行路径。

接下来是,捕获系统调用

我们通过设置系统调用标志位,禁用syscall机制。这个时候,syscall的调用将引起无效操作码异常。随后我们将Hypervisor设置为捕获所有无效操作代码异常。如果是自然异常,就将控制权返回给虚拟机。但是,如果异常指令是sycall指令,就收集相关信息,模拟该指令,然后将控制权返回给虚拟机。

##最后是,选择性符号执行

符号执行是一项很强大的技术,但由于路径爆炸问题它的延展性受到严重限制;但是符号执行强大的约束求解能力让它以选择性符号执行的形式受到广泛应用。

我们采用angr作为符号执行引擎,它支持程序在基本块之间的符号执行,还有很友好的python接口,方便脚本编写

接下是,系统测试与分析

首先是,测试环境与配置

宿主机CPU选取的是支持Intel PT的i5-9400F,操作系统是Ubuntu18.04 64位版本,按项目方要求,内核是linux 4.10.2,QEMU版本2.6.0

客户机操作系统是64位的win7pro,SDK和WDK版本保持一致

接下来是,还原执行路径

Intel PT记录的数据结合IDA的反汇编,可以得到执行过的路径

然后是,选择性符号执行

求解出到达未执行基本块的路径条件,之后更改系统条件重新执行样本即可探索程序更多行为。

之后是,代码覆盖率

代码覆盖率相对增加指的是多路径探索技术相对于初始路径多覆盖的代码部分,大部分增幅都在20%以上,说明多路径探索技术暴露了程序更多的行为,减小了逃逸的可能。

接着是,性能测试

我们使用SPEC 2006对系统性能进行了测试,开启监控后的平均性能开销在39%,对系统性能影响在可接受范围之内。

最后是,总结与展望

首先是总结,我们通过利用IntelPT技术结合选择性符号执行完成路径探索,性能开销较小,可实用性较强。

我们基于Hypervisor的监控系统通过捕获系统调用,来监控程序喝系统之家的交互,增强分析过程,使程序行为更可视。

然后是,展望

我们目前使用的Intel PT是通过驱动将数据存储在宿主机内,对虚拟机内部有改动。未来可以从Hypervisor配置Intel PT,在虚拟机外部追踪程序,对虚拟机内部不进行修改,这样的话,恶意样本和虚拟机操作系统都不知道Intel PT的存在,分析的恶意软件样本几乎不可能检测和逃逸Intel PT的追踪。

由于混淆和加壳技术的影响,静态分析有时会遇到困难。未来可以Dump程序运行期间内存镜像用作静态分析,减轻混淆和加壳技术干扰。

最后,功能展示

首先通过libvirt打开虚拟机,

准备打开系统监控,获取系统调用

加载驱动,开始监听

运行样本

最后是获取到PT数据和系统调用信息

亮点

开销

监控,可视

PPT里面的关键字

混淆:功能上一样,难以阅读和理解。

加壳,改变程序和都来了文件的编码(目前还有一些加壳软件可以压缩、加密驱动程序),来压缩文件体积或加密程序。加壳一般为了保护程序。

动态脱壳,由于加壳的程序运行时必须还原成原始形态,即加壳程序会在运行时自行脱壳。目前,有一种脱壳方式是抓取(Dump)内存中的镜像,再重构成标准的执行文件。

沙箱了解多少

原理,动态分析,行为分析