原作者:Liz McQuarrie, Ashutosh Mehra, Suchit Mishra, Kyle Randolph, Ben Roger
译者:lordVice
校对: StrokMitream
看雪翻译小组

介绍

我是 Kyle Randolph, 和我一起的还有负责 Acrobat 系列产品的安全团队, 这些产品中就包含今天我要讨论的, Adobe Reader。我将讲解七月份刚刚发布 的应用于 Adobe Reader 保护模式中新的沙箱技术,这是系列文章中的第一篇。我们将带你了解沙箱为了遏制恶意代码执行而设计的结构,以及它的运作和各个组件之间的通信过程。

什么是沙箱

沙箱 是一种可以将应用程序放在一个受限制的环境中运行的技术,其中一些特定的行为是被禁止 的(如安装或删除文件,或更改系统信息)。在 Adobe Reader 中,“沙箱”(即保护模式) 提供了更强的防护,使得 PDF 中包含的恶意代码会被遏制,并阻止对用户系统的提权行为。

Adobe Reader沙箱利用操作系统的安全控制功能将进程执行限制在最低的权限下。 因此,可能被攻击者控制的进程只能执行有限的动作,而且必须通过一个独立且可靠的进程接触到文件。这个设计有三个主要的效果:

  • 所有的 PDF 进程如 PDF 和图片的解析,JavaScript 运行,字体渲染和 3D 渲染 都在沙箱中进行。
  • 进程需要在沙箱外进行一些行为,必须通过一个叫做“broker process”可信的代理来进行。
  • 该沙箱首次隔离了两个安全主体:用户主体,即当前登录用户的运行环境; 以及** PDF 主体**,是一个隔离的进程,用于解析和渲染 PDF。这个分隔沙箱进程、其余的当前用户会话及操作系统的分隔带,是构建在进程级的可信边界之上的。

这个设计的目的在于将所有潜在的恶意数据在一个受限的 PDF 主体的环境中处理, 而不是在一个拥有完全权限的用户主体下进行。正如下图所示,进程间通讯(IPC) 会在沙箱的 broker 需要以用户主体,而非 PDF 主体进行一些行为时被启用,例如调用一个 操作系统的 API 或获取某个文件的写权限。

沙箱技术对于大多数企业应用来说是很新的技术,因为它很难应用于已经部署有众多成熟软件(拥有上百万行代码的软件)的环境中。最近在产品中体现出沙箱概念的软件包括 Microsoft Office 2007 MOICE, Google Chrome, 以及 Office 2010 保护模式。问题的难点在于如何在启动沙箱的同时,维持用户所依赖的功能仍能够运行。而终极目标是主动地提供一个支持漏洞发现与修复的高水平防护。

设计原则

沙箱的设计中包括了几个安全的最佳实践:

  • 利用现有的操作系统安全架构: Adobe Reader 依赖于 Windows 操作系统的安全特性,例如受限的 token,任务对象以及低操作权限。
  • 利用现有的实现: Adobe Reader 沙箱建立于 Google Chrome 沙箱之上,并且也将 Microsoft Office 2010 保护模式加入参考之中。
  • 坚持最低权限的原则: 所有的进程(可执行代码)仅能在其合理的目的下接触到必需的资源。
  • “不信任”推定: 在验证合法性之前,假设所有于沙箱之外的数据通信都是潜在的恶意数据。

Reader 沙箱提供的漏洞缓解

为了便于此次的探讨,让我们假设攻击者能够通过一个未知的漏洞在 Adobe Reader 中执行任意的代码,并且能够引诱用户打开一个邮件附件里的 PDF 文件,或者打开一个攻击者控制的网站中的 PDF。曾经,仅仅双击并渲染 PDF 文件就能够完全地控制用户的电脑。例如,攻击者知道并能够利用一个未知的字体 JavaScript API 内存溢出漏洞,或者字体组件中的整数溢出漏洞。一旦完成了exploit,很显然,攻击者就会通过垃圾邮件、广告,或者放在受欢迎的网站上来传播,引诱受害者们打开武装好的 PDF 文件。

当前的目标: Adobe Reader 的沙箱架构初步聚焦于阻止攻击者做两件事情:

  1. 在用户的电脑上安装恶意软件
  2. 在用户使用其它程序的时候,监控用户的键盘输入

如果攻击者能够成功地避开上述的防御,那么他将能够对用户造成严重的损害。例如,一旦攻击者能够在用户的电脑上安装恶意软件,那么他就可以任意地修改文件系统和注册表,并且还有可能安装客户端来实现网络上的协同攻击。另一个场景下,当攻击者可以监控用户的键盘输入时,他就可以尝试偷取机密和敏感信息,如密码和信用卡信息。

所以简单来讲,Adobe Reader 沙箱与 Google Chrome 沙箱类似,不允许攻击者在用户的文件系统上安装永久或临时的恶意软件,并阻止攻击者获得对用户电脑的控制。这个与我们的设计理念——最低权限相符:一个漏洞可以用于运行一些程序但并不能对用户的电脑进行恶意行为,因为它的权限被完全隔离在了高度受限的沙箱环境中。总而言之,这极大地减小了 Adobe Reader 的攻击面。

局限

沙箱对于操作系统的依赖意味着它的表现可能取决于操作系统的漏洞。正如 Google Chrome 沙箱,Adobe Reader 保护模式利用了 Windows 安全模型以及操作系统提供的安全措施。这个内在的依赖性意味着沙箱并不能够防护操作系统的弱点或漏洞。然而,当程序运行在沙箱中时,它可以在一定程度上降低漏洞利用的严重程度,因为沙箱屏蔽了许多常用的攻击向量。

我们的第一版沙箱设计并没有对以下方面进行保护:

  • 对文件系统和注册表在未授权的情况下进行读取。我们计划在未来的版本中解决这一问题。
  • 网络权限。我们正在对未来能够限制网络权限的方法进行调查研究,
  • 对粘贴板的读写权限
  • 不安全的操作系统配置

根据 Windows 沙箱化的说明, Windows 沙箱的最后一部分是用独立的桌面进行用户界面(UI)的渲染。我们不采用这样的方法因为改变 Adobe Reader 很麻烦。取而代之的是,我们通过列出在使用同一个桌面时可能的攻击方向,如粉碎攻击(shatter attack)和 SetWindowsHookEx DLL 注入攻击。这些攻击可以被多种方法避免,比如对沙箱中的任务目标使用低完整性和限制,这将会在之后的篇章中讨论到。

结束语

这总结了对 Adobe Reader 保护模式沙箱的架构和局限的概览。在之后的篇章中,我们将会探索沙箱的进程和 broker 进程的更多详细信息,以及它们的进程间交流(IPC)技术。最终,我们会对在 Adobe Reader 上用于验证的安全测试进行一些评价。

深入 Adobe Reader 保护模式 —— 第一部分 —— 设计相关推荐

  1. 关闭 Adobe Flash 沙箱(保护模式)解决Flash崩溃及卡顿问题

    关闭 Adobe Flash 沙箱(保护模式)解决Flash崩溃及卡顿问题 http://mozilla.com.cn/thread-34109-1-1.html 转载于:https://www.cn ...

  2. 50天内50个CVE:模糊测试Adobe Reader

    50天内50个CVE:模糊测试Adobe Reader 介绍 2017年是漏洞领域的一个转折点. 当年报告的新漏洞数量约为14,000,是前一年的两倍(见下表). 可能的原因是自动漏洞查找工具(也称为 ...

  3. IA-32系统编程指南 - 第三章 保护模式的内存管理【1】

    第三章 保护模式的内存管理[1] [作者:lion3875 原创文章 参考文献<Intel 64 and IA-32 system programming guide>] IA-32保护模 ...

  4. 保护模式下寻址(易懂)

    网上看到的一强帖,不转不行了,牛人啊,把这段代码拿捏的相当到位 括号中是我的加注 段机制轻松体验 [内存寻址] 实模式下的内存寻址: 让我们首先来回顾实模式下的寻址方式 段首地址×16+偏移量 = 物 ...

  5. 80486保护模式存储管理

    80486微处理器工作在保护模式时对存储器的管理有两个特点:一是引入了分段分页虚拟存储器地址转换机制,二是引入了对存储器的保护机制.地址转换机制使操作系统可以灵活地把存储区域分配给各个任务,而保护机制 ...

  6. Windows保护模式学习笔记(九)—— 2-9-9-12分页

    Windows保护模式学习笔记(九)-- 2-9-9-12分页 要点回顾 10-10-12分页 原理 环境配置 2-9-9-12分页 原理 PDPTE PDE PTE XD/NX标志位 环境配置 实验 ...

  7. Windows保护模式学习笔记(五)—— 任务段任务门

    Windows保护模式学习笔记(五)-- 任务段&任务门 要点回顾 任务段 TSS (Task-state segment ) TR段寄存器 TR段寄存器的读写 TSS段描述符 实验:加载自定 ...

  8. Windows保护模式学习笔记(二)—— 代码跨段跳转

    Windows保护模式学习笔记(二)-- 代码跨段跳转 要点回顾 代码跨段跳转 执行流程 1)段选择子拆分 2)查表得到段描述符 3)权限检查 4)加载段描述符 5)代码执行 6)总结 一致代码段(共 ...

  9. Adobe Reader栈溢出漏洞(CVE-2010-2883)分析

    文章目录 漏洞描述 测试环境 静态分析 定位触发点 分析漏洞成因 动态调试 获取SING表的入口地址 溢出点 精心挑选的返回地址 JavaScript实现HeapSpray 利用ROP链绕过DEP保护 ...

最新文章

  1. java uv实例_Java注解的实际应用案例讲解
  2. 慕课网Flask高级编程实战-10.鱼书业务处理
  3. wxpython中的所有文本框都是TextCtrl,不同的形式的文本框通过样式来实现,下面创建了一个密码输入框...
  4. SQL Server 数值四舍五入,小数点后保留2位
  5. 运行scrapy shell 'http://quotes.toscrape.com'出现错误ValueError: invalid hostname: 'http
  6. 我的Android学习之旅--1环境配置
  7. Flash 生命终止,HTML5能否完美替代?
  8. 定时器实现方式之TimerTask、Timer
  9. php正则去掉width=,关于php使用正则去除宽高样式的方法
  10. java基础面试题之:String 类的常用方法都有那些?
  11. jmu-python-函数-找钱_6-1 jmu-python-杨辉三角
  12. 洛谷—— P2251 质量检测
  13. 微信小程序网络请求服务器php接口获取数据库数据信息
  14. 论文阅读:Domain Information Enhanced Dependency Parser
  15. python中判断无向图是否有环_数据结构与算法:17 图
  16. 更换固态硬盘并使用微pe安装windows7系统及万能网卡
  17. 快速以管理员的身份运行cmd的方法
  18. linux 连接 ftp 下载文件
  19. 软件测试职业发展方向有哪些
  20. esp8266+arduino+blinker远程控制灯管和LED小灯,步骤详细,适用所有新手小白

热门文章

  1. 浅析拯救小矮人的 nlogn 算法及其证明
  2. Windows10系统Python2.7通过Swig调用C++过程
  3. 阅读笔记一之《软件需求与分析》
  4. Python 三级菜单
  5. [补档]暑假集训D5总结
  6. webpack第一节(4)
  7. Unity GeometryShader(从一个线框渲染的例子开始)
  8. 将一张表的主键(ID)重置为从1开始自增排列
  9. windows server 2003R2\2008R2\2012\2016 安装【故障转移群集】cluster
  10. struts2+spring3+hibernate3+mysql简单登录实现