深入 Adobe Reader 保护模式 —— 第一部分 —— 设计

原作者: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 上用于验证的安全测试进行一些评价。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java泛型主题讨论

说明:在学习泛型这一知识点中,主要参考自《疯狂Java讲义》第7章P307-P330的泛型内容,因为是跳着阅读,所以前面的一些名词不是特别清楚,这里也做出适当备注,供自己识记与理解。 1.泛型 理解:说到…

初学Vue.js,从头来过~

之前上课也学过vue.js,但是一遍过下来,实话,没有记住什么,所以决定自己在对照着文档过一遍,所以之后会弄一些基础的东西,还请大神们莫喷~~~~今天先给平台打一个预防针,Young C 要来啦~~ 吼吼&…

从Microsoft Teams技术栈看前端技术发展趋势

在前不久的微软美国一年一度的Ignite大会上,微软宣布Microsoft Teams是微软历史上发展最快的应用。它将取代Skype for business,成为语音视频协作的主打产品。 我也有幸在上个月微软中国年度技术大会Tech Summit 2018上被邀请作为讲师讲解基于Teams平台…

LeetCode 最大正方形

在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0输出: 4解法:判断以某个点为正方形右下角时最大的正方形时,那它的上方,左方和左上…

solidity字符串拼接

如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: 以太坊DApp实战开发入门去中心化电商DApp实战开发当你开始学习使用solidity开发以太坊智能合约之后,很快你会碰到一个问题: 在solidity中该如何拼…

Confluence Cloud的Teams Message Extension

Confluence Cloud的Message Extension现在正式登入Microsoft Teams。 它可用于团队频道和私人聊天,使您的对话更具描述性和信息性。 从Microsoft Teams应用商店获取Confluence Cloud应用程序并连接到Confluence Cloud实例。 连接后,您将能够搜索Conflue…

45 | 打蛇打七寸:精准测试

转载于:https://www.cnblogs.com/lmx0621/p/10614966.html

Teams App统计

周末闲来无事,统计了一下Teams的app商店里的app ( Teams App Store )。截至到现在(2018年11月)一共有145个app。要注意一点:如果app不是公开的(即单独安装到Office365租户里,并没有提交到office store&…

你必须要懂的APK瘦身知识

随着业务复杂度的逐渐增加,代码、资源也在不断的增加,此时你的APP大小也在增加。从用户层面来说,面对动辄几十兆的APP来说在非WIFI情况下还是会犹豫要不要下载,不下载你就可能因此失去了一个用户。从公司层面来讲,流量…

DHT网络

(基础技术) 现在有一种方法,可以通过磁力链接,例如magnet:?xturn:btih:0482e0811014fd4cb5d207d08a7be616a4672daa,就可以获取BT文件。 这个是通过DHT网络来实现的。 DHT网络是一个去中心化的,分布式信息存储系统。 存储的信息就…

Java基础 Day04(个人复习整理)

分支结构 2、switch语句 因为if语句的级联式最多只会处理三种情况,如果出现多情况 1>可以继续使用if语句的级联式,但是可能代码的可读性就会变差。  2>采用switch语句来解决。 switch语法格式: switch (存在多种情况的变量) {case 值…

java如何获取一个double的小数位数

前言 看标题是不是觉得这是一个很简单的问题,我一开始也是这么认为的,但是实际情况下,在各种情况下我们都进行了测试,发现很多实际情况是无法不尽如人意的。 方法分析 当前能想到的比较容易有下面几种 1、直接使用double处理 2、将…

Node文件模块

在上一篇文章中有提到,Node模块分为核心模块和文件模块,接下来就简单总结一下文件模块。 文件模块则是在运行时动态加载,需要完整的路径分析、文件定位、编译执行过程、速度相比核心模块稍微慢一些,但是用的非常多。这些模块需要我…

PHP GD库解析一张简单图片并输出

这里只演示一下2种颜色值的图片&#xff0c;简单描述下概念。 首先要安装下GD库。否则下面的代码运行不了。 $size getimagesize(2.png); // 获取图片大小 $res imagecreatefrompng(2.png); // 获取指定图片的资源对象for ($i 0; $i < $size[1]; $i) {for ($j 0; $j &…

Permutations CodeForces - 736D (矩阵逆)

对于删除每个对(x,y), 可以发现他对答案的贡献为代数余子式$A_{xy}$ 复习了一下线代后发现代数余子式可以通过伴随矩阵求出, 即$A_{xy}A^*[y][x]$, 伴随矩阵$A^*|A|A^{-1}$可以通过高斯消元$O(\frac{n^3}{\omega})$求出 #include <iostream> #include <algorithm> …

开发Teams的messaging extension

什么是Messaging Extension Messaging Extension是微软Teams的一种十分有用的扩展方式。可以让用户发送adaptive cards。具体的说明不在这里展开了。可以阅读微软官方的详细说明&#xff1a; https://docs.microsoft.com/en-gb/microsoftteams/platform/concepts/messaging-e…

归并排序(转)

转载自&#xff1a;https://www.cnblogs.com/chengxiao/p/6194356.html 归并排序&#xff08;MERGE-SORT&#xff09;是利用归并的思想实现的排序方法&#xff0c;该算法采用经典的分治&#xff08;divide-and-conquer&#xff09;策略&#xff08;分治法将问题分(divide)成一些…

Site24x7 为Teams提供可智能 DevOps

我们生活在一个云的时代, SaaS 应用程序每天都在推动我们的生产力。作为一个消费者, 很难想象如果你最喜欢的应用无法访问&#xff0c;即使只是一秒钟无法访问。作为 SaaS业务, 更难以想象您的服务面临停机, 每一分钟停止服务都会花费大量的资金, 当然还损失客户的信任。Site24…

XUbuntu22.04之跨平台容器格式工具:MKVToolNix(二百零三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

redis集群搭建踩坑笔记

推荐参考教程&#xff1a;https://blog.csdn.net/pucao_cug/article/details/69250101 错误&#xff1a; from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require from /usr/local/redis-3.0.6/src/redis-trib.rb:25:in <main> 解决&#xff1a; g…