360隔离沙箱是360安全中心于2011年5月14日发布的安全产品,目前内置与360安全卫士的功能大全中。在360隔离沙箱内运行程序完全隔离不怕中毒。快速建立隔离环境,轻量便捷。自动识别与手动模式结合。
Windows Subsystem for Linux(简称WSL)是一个为在Windows 10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,目标是使纯正的Ubuntu 14.04 "Trusty Tahr"映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。
沙箱逃逸是利用特殊的环境或者特殊技巧导致沙箱失去原本的效果,产生绕过沙箱隔离的问题。
360安全应急响应中心回复:” 因为64位非强力模式下rpc通信本来都是已知问题,而强力模式只支持win7,更新的版本因为patchguard不支持强力模式了,其实可以不算是漏洞”。文章重点在于分享思路,并不是针对360以及360安全产品。
对于沙箱逃逸常见方法分为:
检测虚拟机:常见的有检测虚拟机注册表、厂商ID、虚拟机专属的硬件设备特征(MAC地址、VGA适配器厂商名称等)。
时间攻击:一些权限指令在有hypervisor的环境中执行延迟远比bare-metal来的高,主要是因为hv在这当中需要截获指令并进行安全检查,必要的时候还需要进行一些仿真。
环境侦测:检测CPU核心数、检测硬盘大小(虚拟机环境一般硬盘会很小)、检测屏幕分辨率
破坏行为监控:摘钩子、unaligned call、等等。这类对于不透明的沙盘来说问题不算太大,对于公共沙盘来说,写一些测试程序可以轻松修谈到虚拟环境的一些特性,如果他们还给不打码的系统截图就更方便了。
超时大法:比如sleep()函数,一般而言目前沙盘对这类函数都有一定绕过手段,但达到类似目的方法非常多。
环境侦测:检测时间、用户名、时区设定。
用户交互检测:检测鼠标是否有移动,需要用户进行特定操作才展开行为等等。
基于当前的逃避技术,我分为两个特点进行分析,一种是针对虚拟机检测,另种是针对沙箱分析环境特点的对抗。
方法属于针对沙箱分析环境的特点对抗。360隔离沙箱对于底层接口进行监测和记录,并且使用了路径重定向技术。除此之外,在360隔离沙箱中通过界面是不允许执行CMD等系统关键程序。
在WINDOWS 10 系统中安装WSL,安装之后能够在CMD中使用bash命令,进入BASH SHELL。由于WSL提供了一个微软开发的Linux兼容内核接口(不包含Linux代码),来自Ubuntu的用户模式二进制文件在其上运行,并且之中的操作效果等同于WINDOWS下操作。由于360隔离沙箱不支持Linux兼容内核接口,所以导致隔离沙箱失效。
对于逃逸的思路,肯定是有所了解了。下面对于逃逸进行演练,演练目标在隔离沙箱中启动CMD程序,并且使用其在真实的系统中写入文件。
1、 安装360安全卫士,添加插件360隔离沙箱。如图1所示。
2、 在隔离沙箱程序打开CMD,发现已经被禁止打开CMD程序,如图2所示。
3、 建立test.py文件,其中代码如下:
# import os
# os.system("cmd /c bash")
在隔离沙箱中运行test.py的文件,能够使用cmd打开bash shell。如图3所示。
如果将这个脚本打包为EXE文件再执行也是可以的。文章中就不进行演示了,使用pyinstaller模块,执行pyinstaller –F <文件名>.py。能够非常方便的进行打包成exe文件。
4、 执行 echo “topsec” > “test.txt”, 将一段字符串写入到文件,如图4所示。
这种逃逸方法源于沙箱分析环境的特点对抗,环境出现了变化沙箱并不能很好的支持。对于利用方法进行扩展可以执行 cmd /c 'bash –c sh code',通过这方法,能够执行sh 代码,更加深入的进行利用。沙箱逃逸的方法还有很多,文章描述的只是其中一种思路,思路可以扩展到其他不同的环境之中
沙箱的实现方法是基于loader虚拟机的实现,所谓的虚拟机就是一个PE加载器,加载的PE被控制在一个可控的环境中。
360隔离沙箱使用的是驱动级防护,目前对于在360隔离沙箱中写文件会被重定向到当前硬盘的X:\360SANDBOX\SHADOW目录中。
360沙盒的注册表监控过滤分为对注册表的增删改查的操作。对注册表的操作主要通过hook相关过滤函数,hook的目的就是沙盒内的应用程序运行时对系统的注册表没有任何影响。
360文件系统的监控操作通过minifilter来过滤.360Box对minifilter文件系统的回调函数包括
Filter_irp_system_Control_pre \\新加载卷的过滤安装
Filter_irp_system_controk_post
Filter_irp_system_create_pre \\ 对新建文件的预处理过滤
Filter_irp_system_create_post \\新建文件的后处理过滤
Irp_set_information_pre \\对复制、删除、剪切、重命名文件的过滤
对power和create、open的irp的派遣函数()
这个过滤是在DriverEntry函数中
DriverObject->MajorFunction[16] = (PDRIVER_DISPATCH)filter_irp_power;\\过滤irp
DriverObject->MajorFunction[0]= filter_irp_create_close;
DriverObject->MajorFunction[2] = filter_irp_create_close;
DriverObject->MajorFunction[14] =(PDRIVER_DISPATCH)filter_irp_query_security;
进入360隔离沙箱后,360隔离沙箱将一些操作重定向到隔离沙箱内,比如说写文件、修改注册表等操作,这个只是沙箱一部分。
在隔离沙箱产品中进行对比发现SandBoxie并不存在此类问题。我在SandBoxie无法执行BASH命令,可能原因在于通过加载自身的驱动来保护底层数据,然而360隔离沙箱并不支持相关的驱动。