论文部分内容阅读
[摘要] 纵观现在主流的浏览器,其中大多数浏览器都使用了一体化架构,即把用户和WEB整合到一个单独的保护域中。这样,一旦攻击者发现浏览器漏洞以后,就可以轻易的在用户机器上执行恶意代码、安装恶意软件或盗取敏感资料。本文介绍了一种新的浏览器框架,它同时也是谷歌Chrome浏览器(开源)的核心——Chromium安全框架。本文对该框架的结构、功能进行了探索研究,并对该架构抵御网页攻击的能力进行了分析,对未来浏览器的发展提供了参考。
[关键词] 浏览器 Chromium 沙箱 渲染引擎 浏览器内核
1、引言
在过去几年中,网页的作用不再仅仅显示静态页面,而已经进化成了类似一个个应用程序运行平台。但是,大多数网页浏览器仍然使用1993年NCSA Mosaic设计的一体化架构,它的缺点是当客户端需要运行大量脚本时会出现一些问题。例如,一个WEB应用程序的运行失败会导致整个浏览器异常退出。从安全的观点来看,运行在一个独立保护域里的浏览器比较脆弱,攻击者可以利用未被修复的漏洞破坏整个浏览器,从而通过盗取用户权限在用户机器上为所欲为。
近年来,模块化浏览器架构的研究方面有很大进展[1],其中包括多重保护域的思想。这些研究提高浏览器的安全方面做出了很大贡献,但都要以牺牲浏览器的兼容性为代价。
2、 Chromium架构
Chromium安全架构采用模块化的思想。在Chromium中有两个模块:浏览器内核和渲染引擎。其中浏览器内核代表用户运行,而渲染引擎代表网页运行,它们分别工作在单独的保护域里。为了防止攻击者利用渲染引擎的漏洞获得整个渲染引擎的执行权限,它被强制在一个“沙箱”[2]中运行,“沙箱”的作用是限制渲染引擎的权限,防止攻击者读取或篡改用户文件系统。表1-1是这两大模块各自要承担的任务。
Chromium架构中,渲染引擎和浏览器内核里集成了多种的现代浏览器组件,并在安全、兼容性和性能上找到了最佳的平衡点。该架构把高风险的组件(例如HTML解析器,JVM,DOM)分配给在沙箱内运行的渲染引擎。这些组件不但复杂而且由于历史的原因遗留下很多安全问题,把他们放在沙盒中执行可以有效的降低执行风险。浏览器内核负责管理持久性资源,例如cookies和密码数据库,并负责和操作系统交互,接收用户输入、输出和联网。从设计角度讲,Chromium架构包括以下两个方面:
(1)新架构必须和现有的网页兼容,特别是该架构的安全性约束应该对网站的显示不造成影响。这个要求在很大程度上限制了架构选择的范围,但是为了浏览器的有用性,这一条又是必须的。为了和基于网页的邮件站点保持兼容,新架构必须支持文件上传(用户常常需要为邮件添加附件)。
(2)新架构的渲染引擎采用黑箱模型,输入待解析的HTML代码,输出渲染后的位图。(如图1-2)在这个过程中,渲染引擎必须执行同源策略,而浏览器内核仅需要执行基本的安全约束就可以了,采用这样的设计可以降低浏览器内核安全监视器的复杂度。
图1-2 Chromium安全框架
2.1 渲染引擎 (Rendering Engine)
渲染引擎通过默认的行为(例如:绘制元素)和调用DOM API来解释执行页面内容。渲染页面内容要经过几个步骤,首先解析,然后再内存中创建文档对象模型DOM,设计文档,在脚本指导下操作文档。渲染引擎同时负责同源策略,这样可以防止恶意站点干扰用户和WEB站点的正常会话。
渲染引擎的设计较为复杂,它负责直接和不信任的WEB内容交互。从表1可以看出,大部分解析工作都由渲染引擎完成,包括HTML解析、图像解码和JavaScript解析。这些组件较为复杂,而且由于历史原因,很多组件都有缺陷。渲染引擎使用浏览器内核和用户、本地机及网络交互。渲染引擎运行在“沙箱”中,这样可以防止渲染引擎访问操作系统。
2.2浏览器内核(Browser Kernel)
浏览器内核负责管理多个渲染引擎实例和实现浏览器内核API。具体的说,浏览器负责实现基于选项卡的视窗系统,包括地址栏。浏览器内核负责管理一些持久性的数据,例如用户书签、cookies或保存密码;而且浏览器内核也负责和网络交互,并协调渲染引擎和操作系统的本地窗口管理器。浏览器内核把权限分配给各个渲染引擎,调用API来维护权限状态信息,例如是否允许某个渲染引擎执行上传。浏览器内核使用这些状态信息实现安全策略,限制渲染引擎与用户操作系统交互。
浏览器组件内嵌在模块中,它的设计兼顾安全、兼容性和性能。有些功能是由于历史原因人为分配的。例如,浏览器内核负责显示JavaScript警告框,而<选择>下拉式菜单由渲染引擎负责显示。还有一些任务(如对cookie数据的管理)需要直接访问文件系统,这些任务也交给浏览器内核完成,而另外一些任务(如执行正则表达式)是由渲染引擎执行的,因为这类执行常常不安全,沙箱保证了它们只能在一定权限内执行[3]。
从表1可以看出,渲染引擎负责大部分的解析和解码任务,因为由于历史原因,这些任务通常都会导致浏览器漏洞。网站的快捷方式会显示在浏览器的地址栏里,这个快捷方式通常是一张位图图片,它由浏览器内核会从网络上取得,但浏览器内核不会对图片进行解码,解码的工作是由渲染引擎完成的,渲染引擎将图片解码后传给由浏览器内核。这个步骤看起来似乎绕了一个大弯,但这样做可以有效的阻止攻击者利用图像解码器的漏洞控制浏览器内核。
但是,网络堆栈[4]是一个例外。众所周知,HTTP堆栈(网络堆栈的一种)负责解析HTTP响应的头部,它调用gzip或bzip2解码器在Content-encodings的帮助下解压缩HTTP响应。这些任务虽然可以分配给渲染引擎,但会是网络堆栈变得复杂并降低性能,所以由浏览器内核执行。
2.3 处理粒度
Chromium安全框架的处理粒度是每一张页面,每个网页选项卡对应一个渲染引擎实例,这样的话,即使某个渲染引擎运行失败也不会影响到其他选项卡,这是一种较好的容错机制。渲染引擎虽然主要是用来解析不受信任的内容,但也显示某些受信的内容,例如,警告用户某个站点HTTPS证书错误或怀疑是钓鱼站点。这些渲染任务都是由单独的渲染引擎实例执行的,渲染引擎对网页内容并不关心。
但页面查看器(Web Inspector)是一个例外。页面查看器属于Chromium安全架构的一部分,主要功能是查看页面源代码、页面元素、DOM和脚本调试等,这些属于可信内容,由渲染引擎解析负责页面内容。
图2-1Chrome的页面查看器(Web Inspector)
3、Chromium架构可以抵御的攻击
(1)强行安装恶意软件
攻击者会采用“过路下载”或其他方法强制安装恶意软件在用户的机器上,这种攻击对浏览器的威胁是非常大的。例如,网络上搔首弄姿的美女、各种各样有趣的小游戏,都在吸引着网友点击鼠标,点击之后看起来毫无动静,但后台已经开始下载恶意软件了。一旦这种有毒的软件进入到用户电脑,远端主机就可以发号施令,对电脑进行操控,这时,用户的电脑就成了“僵尸网络”中的一员。
2009年,Asprox“僵尸网络”发起了一场破坏力极大的SQL注入攻击。在这场攻击中,成千上万个“僵尸程序”(实现恶意控制功能的程序代码)携带上一个SQL注入软件,这个软件向Google搜索发送巧妙设计的查询语句,查询那些运行ASP.NET的服务器,然后向这些服务器发动SQL注入攻击。攻击者通过在应用程序中预先定义好的查询语句结尾加上额外的SQL语句,欺骗数据库服务器执行非授权的任意查询。僵尸程序还会搜索WEB服务器上的unicode和ASCII文件,然后植入一个IFRAME或script标签,它们负责把该服务器的访问者重定向到另外一个被破坏者操纵的服务器。
据报道,每周平均新增数十万台任人遥控的僵尸电脑任凭远端主机指挥,进行各种不法活动。多数时候,僵尸电脑的主人根本没发现自己已被选中。
(2) 键盘记录器 Transient Keylogger
键盘记录器是一个可以记录用户键盘操作的间谍软件。黑客可利用此软件记录用户输入的信息,从而盗取用户的MSN、QQ、电子邮件、网络游戏、网上银行等的帐号和密码以及其他的隐私信息,给用户带来损失。键盘记录器在用户关闭了浏览器之后就会消失,具有很大的隐秘性。
(3)文件窃贼
以非法读取用户硬盘上的敏感数据的攻击者称为文件窃贼。系统密码数据库或用户的财务报表等常常称为黑客窃取的目标。所以企业用户尤其要保护好敏感文件,提防那些文件强盗。
如果上述的一个或若干个攻击行为得逞,那么用户将面临更大的损失。例如,攻击者一旦给机器装上恶意软件,那么浏览器的安全策略就无能为力了,这时攻击者就占据了用户机器。Chromium安全架构可以阻止攻击者达到以上三个目标。
4、小结
Chromium并不是完美的,它自身也有一定局限性,例如不能阻止钓鱼攻击,不能抵御防火墙规避(Firewall Circumvention)攻击,对跨站式脚本XSS攻击没有有效的措施等等。但即便如此,Chromium架构的优势却更加明显,如通过分域策略和沙箱设计,该架构可以有效的阻止攻击者在本地执行任意代码。如果攻击者试图利用渲染引擎的某个漏洞在本地执行恶意程序,Chromium架构就会迫使攻击者使用浏览器内核接口。就这一点而言,Chromium无疑为未来浏览器发展提供了新的设计思想。
参考文献:
[1] Sotiris Ioannidis and Steven M. Bellovin. Building a secure web browser. In Proceedings of the USENIX Annual Technical Conference, Freenix Track, 2001.
[2] Sandbox.http://dev.chromium.org/developers/design-documents/sandbox,2010.
[3] SecurityFocus. PCRE Regular Expression Library Multiple Security Vulnerabilities.http://www.securityfocus.com/bid/26346,2007
[4] Networking stack.http://en.wikipedia.org/wiki/Network_stack,2010.
作者简介:
刘忠(1983—),男,陕西省汉中市,陕西理工学院管理系,助教,武汉大学软件工程硕士在读,主要从事电子商务研究、软件开发及网络安全。
[关键词] 浏览器 Chromium 沙箱 渲染引擎 浏览器内核
1、引言
在过去几年中,网页的作用不再仅仅显示静态页面,而已经进化成了类似一个个应用程序运行平台。但是,大多数网页浏览器仍然使用1993年NCSA Mosaic设计的一体化架构,它的缺点是当客户端需要运行大量脚本时会出现一些问题。例如,一个WEB应用程序的运行失败会导致整个浏览器异常退出。从安全的观点来看,运行在一个独立保护域里的浏览器比较脆弱,攻击者可以利用未被修复的漏洞破坏整个浏览器,从而通过盗取用户权限在用户机器上为所欲为。
近年来,模块化浏览器架构的研究方面有很大进展[1],其中包括多重保护域的思想。这些研究提高浏览器的安全方面做出了很大贡献,但都要以牺牲浏览器的兼容性为代价。
2、 Chromium架构
Chromium安全架构采用模块化的思想。在Chromium中有两个模块:浏览器内核和渲染引擎。其中浏览器内核代表用户运行,而渲染引擎代表网页运行,它们分别工作在单独的保护域里。为了防止攻击者利用渲染引擎的漏洞获得整个渲染引擎的执行权限,它被强制在一个“沙箱”[2]中运行,“沙箱”的作用是限制渲染引擎的权限,防止攻击者读取或篡改用户文件系统。表1-1是这两大模块各自要承担的任务。
Chromium架构中,渲染引擎和浏览器内核里集成了多种的现代浏览器组件,并在安全、兼容性和性能上找到了最佳的平衡点。该架构把高风险的组件(例如HTML解析器,JVM,DOM)分配给在沙箱内运行的渲染引擎。这些组件不但复杂而且由于历史的原因遗留下很多安全问题,把他们放在沙盒中执行可以有效的降低执行风险。浏览器内核负责管理持久性资源,例如cookies和密码数据库,并负责和操作系统交互,接收用户输入、输出和联网。从设计角度讲,Chromium架构包括以下两个方面:
(1)新架构必须和现有的网页兼容,特别是该架构的安全性约束应该对网站的显示不造成影响。这个要求在很大程度上限制了架构选择的范围,但是为了浏览器的有用性,这一条又是必须的。为了和基于网页的邮件站点保持兼容,新架构必须支持文件上传(用户常常需要为邮件添加附件)。
(2)新架构的渲染引擎采用黑箱模型,输入待解析的HTML代码,输出渲染后的位图。(如图1-2)在这个过程中,渲染引擎必须执行同源策略,而浏览器内核仅需要执行基本的安全约束就可以了,采用这样的设计可以降低浏览器内核安全监视器的复杂度。
图1-2 Chromium安全框架
2.1 渲染引擎 (Rendering Engine)
渲染引擎通过默认的行为(例如:绘制元素)和调用DOM API来解释执行页面内容。渲染页面内容要经过几个步骤,首先解析,然后再内存中创建文档对象模型DOM,设计文档,在脚本指导下操作文档。渲染引擎同时负责同源策略,这样可以防止恶意站点干扰用户和WEB站点的正常会话。
渲染引擎的设计较为复杂,它负责直接和不信任的WEB内容交互。从表1可以看出,大部分解析工作都由渲染引擎完成,包括HTML解析、图像解码和JavaScript解析。这些组件较为复杂,而且由于历史原因,很多组件都有缺陷。渲染引擎使用浏览器内核和用户、本地机及网络交互。渲染引擎运行在“沙箱”中,这样可以防止渲染引擎访问操作系统。
2.2浏览器内核(Browser Kernel)
浏览器内核负责管理多个渲染引擎实例和实现浏览器内核API。具体的说,浏览器负责实现基于选项卡的视窗系统,包括地址栏。浏览器内核负责管理一些持久性的数据,例如用户书签、cookies或保存密码;而且浏览器内核也负责和网络交互,并协调渲染引擎和操作系统的本地窗口管理器。浏览器内核把权限分配给各个渲染引擎,调用API来维护权限状态信息,例如是否允许某个渲染引擎执行上传。浏览器内核使用这些状态信息实现安全策略,限制渲染引擎与用户操作系统交互。
浏览器组件内嵌在模块中,它的设计兼顾安全、兼容性和性能。有些功能是由于历史原因人为分配的。例如,浏览器内核负责显示JavaScript警告框,而<选择>下拉式菜单由渲染引擎负责显示。还有一些任务(如对cookie数据的管理)需要直接访问文件系统,这些任务也交给浏览器内核完成,而另外一些任务(如执行正则表达式)是由渲染引擎执行的,因为这类执行常常不安全,沙箱保证了它们只能在一定权限内执行[3]。
从表1可以看出,渲染引擎负责大部分的解析和解码任务,因为由于历史原因,这些任务通常都会导致浏览器漏洞。网站的快捷方式会显示在浏览器的地址栏里,这个快捷方式通常是一张位图图片,它由浏览器内核会从网络上取得,但浏览器内核不会对图片进行解码,解码的工作是由渲染引擎完成的,渲染引擎将图片解码后传给由浏览器内核。这个步骤看起来似乎绕了一个大弯,但这样做可以有效的阻止攻击者利用图像解码器的漏洞控制浏览器内核。
但是,网络堆栈[4]是一个例外。众所周知,HTTP堆栈(网络堆栈的一种)负责解析HTTP响应的头部,它调用gzip或bzip2解码器在Content-encodings的帮助下解压缩HTTP响应。这些任务虽然可以分配给渲染引擎,但会是网络堆栈变得复杂并降低性能,所以由浏览器内核执行。
2.3 处理粒度
Chromium安全框架的处理粒度是每一张页面,每个网页选项卡对应一个渲染引擎实例,这样的话,即使某个渲染引擎运行失败也不会影响到其他选项卡,这是一种较好的容错机制。渲染引擎虽然主要是用来解析不受信任的内容,但也显示某些受信的内容,例如,警告用户某个站点HTTPS证书错误或怀疑是钓鱼站点。这些渲染任务都是由单独的渲染引擎实例执行的,渲染引擎对网页内容并不关心。
但页面查看器(Web Inspector)是一个例外。页面查看器属于Chromium安全架构的一部分,主要功能是查看页面源代码、页面元素、DOM和脚本调试等,这些属于可信内容,由渲染引擎解析负责页面内容。
图2-1Chrome的页面查看器(Web Inspector)
3、Chromium架构可以抵御的攻击
(1)强行安装恶意软件
攻击者会采用“过路下载”或其他方法强制安装恶意软件在用户的机器上,这种攻击对浏览器的威胁是非常大的。例如,网络上搔首弄姿的美女、各种各样有趣的小游戏,都在吸引着网友点击鼠标,点击之后看起来毫无动静,但后台已经开始下载恶意软件了。一旦这种有毒的软件进入到用户电脑,远端主机就可以发号施令,对电脑进行操控,这时,用户的电脑就成了“僵尸网络”中的一员。
2009年,Asprox“僵尸网络”发起了一场破坏力极大的SQL注入攻击。在这场攻击中,成千上万个“僵尸程序”(实现恶意控制功能的程序代码)携带上一个SQL注入软件,这个软件向Google搜索发送巧妙设计的查询语句,查询那些运行ASP.NET的服务器,然后向这些服务器发动SQL注入攻击。攻击者通过在应用程序中预先定义好的查询语句结尾加上额外的SQL语句,欺骗数据库服务器执行非授权的任意查询。僵尸程序还会搜索WEB服务器上的unicode和ASCII文件,然后植入一个IFRAME或script标签,它们负责把该服务器的访问者重定向到另外一个被破坏者操纵的服务器。
据报道,每周平均新增数十万台任人遥控的僵尸电脑任凭远端主机指挥,进行各种不法活动。多数时候,僵尸电脑的主人根本没发现自己已被选中。
(2) 键盘记录器 Transient Keylogger
键盘记录器是一个可以记录用户键盘操作的间谍软件。黑客可利用此软件记录用户输入的信息,从而盗取用户的MSN、QQ、电子邮件、网络游戏、网上银行等的帐号和密码以及其他的隐私信息,给用户带来损失。键盘记录器在用户关闭了浏览器之后就会消失,具有很大的隐秘性。
(3)文件窃贼
以非法读取用户硬盘上的敏感数据的攻击者称为文件窃贼。系统密码数据库或用户的财务报表等常常称为黑客窃取的目标。所以企业用户尤其要保护好敏感文件,提防那些文件强盗。
如果上述的一个或若干个攻击行为得逞,那么用户将面临更大的损失。例如,攻击者一旦给机器装上恶意软件,那么浏览器的安全策略就无能为力了,这时攻击者就占据了用户机器。Chromium安全架构可以阻止攻击者达到以上三个目标。
4、小结
Chromium并不是完美的,它自身也有一定局限性,例如不能阻止钓鱼攻击,不能抵御防火墙规避(Firewall Circumvention)攻击,对跨站式脚本XSS攻击没有有效的措施等等。但即便如此,Chromium架构的优势却更加明显,如通过分域策略和沙箱设计,该架构可以有效的阻止攻击者在本地执行任意代码。如果攻击者试图利用渲染引擎的某个漏洞在本地执行恶意程序,Chromium架构就会迫使攻击者使用浏览器内核接口。就这一点而言,Chromium无疑为未来浏览器发展提供了新的设计思想。
参考文献:
[1] Sotiris Ioannidis and Steven M. Bellovin. Building a secure web browser. In Proceedings of the USENIX Annual Technical Conference, Freenix Track, 2001.
[2] Sandbox.http://dev.chromium.org/developers/design-documents/sandbox,2010.
[3] SecurityFocus. PCRE Regular Expression Library Multiple Security Vulnerabilities.http://www.securityfocus.com/bid/26346,2007
[4] Networking stack.http://en.wikipedia.org/wiki/Network_stack,2010.
作者简介:
刘忠(1983—),男,陕西省汉中市,陕西理工学院管理系,助教,武汉大学软件工程硕士在读,主要从事电子商务研究、软件开发及网络安全。