Adobe Sandbox 研究

1 什么是沙盒?

沙盒是一种分离运行程序的安全机制。经常用来执行未测试代码或者是来自第三方的未信任的程序。

2 沙盒工作原理

(1)不信任的代码可以运行,但只是给予低权限;

(2)任何请求高权限的操作时通过另外一个中介进程;

(3)调用Windows API经常被拦截。

3 adobe加了沙盒前后的区别

Adobe Reader X以前未加入沙盒,漏洞利用过程如图1



图 1 Adobe Reader 9漏洞利用过程

Adobe Reader X开始加入沙盒,漏洞利用过程如图2



图 加入沙盒后漏洞的利用过程

4 Adobe Sandbox 完整性级别

Windows对程序的信任程度有5个预定义的完整性级别:

1、非信任

2、低

3、中

4、高

5、系统

Adobe reader有两个进程,broker的级别为中,而沙盒进程的级别是低。

5 Broker Client(sandbox)通信

 


图 3工作原理

进程间通信所用的结构体和参数通过沙盒进程写到内存,Broker读取并装载它们,一些参数可以用来接收结果。漏洞就存在这部分进程中。



进程间调用的参数结构

SandboxBroker 进程通信是通过共享内存机制实现的。Broker创建了一个2MB的共享内存用于IPC的初始化,共享内存的句柄发动到sandbox进程,所以的通信都会影响到这段共享内存。 Sandbox进程API的调用请求是存在一个IPC缓存中,也叫做CrossCallParams 或ActuallCallParams ,结构如图4。(from  crosscall_params.h )

分析IPC缓存结构:

1Tag为调用函数的标签;

2IsOnOut描述参数数据是传出还是传入;

3Call return 是一段用来填充来自IPC server的返回数据的缓存区;

4Params count显示参数的数量;

5)下面的是参数的详细情况;

6parameter type 是一个枚举类型:



参数类型

6 负责定义Cross Calls(进程间调用)的函数


set_info是一个静态结构体,通过它设置IPC的信息,然后作为参数传入到ipc_calls_函数进行设置。set_info结果如图5所示。


图 5  IPC结构

7 CVE 2013-0641逃离sandbox

 

6 exploitIPC的内容

绿色的是GetClipboardFormatNameW 函数的调用tag,蓝色显示只有两个参数,黄色是是参数的类型,06表示 INOUTPTR_TYPE ,02表示 ULONG_TYPE 。红色表示参数大小,所以第一个参数是偏移0x64,大小为9c,则为整段的“BB……BB”数据段。

 GetClipboardFormatNameW API 函数参数说明如图7


图 GetClipboardFormatNameW API 函数参数说明图

漏洞就是出在这个函数的调用.根据上面的描述,该函数的调用情况是GetClipboardFormatNameW(0xc19a, “BBBBBBBBBB……”, 0x9c);

单纯这样看是没有任何恶意的行为。


1edb0028HttpSendRequestA第四个参数的地址,它指向存放数据的buffer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值