InfoQ

新闻

以分布式信息流控制维护Web安全

作者 Jean-Jacques Dubray译者 郭晓刚 发布于 2008年8月6日 上午9时47分

社区
Architecture
主题
规则引擎,
SaaS,
REST
标签
跨站脚本XSS,
Facebook,
Wiki

华盛顿大学计算机科学系刚刚发布了Max Krohn(MIT)所作的一次演讲,题目是“分布式信息流控制维护Web安全”。

Max在演讲中解释说,他观察到一场计算领域的变革正在发生,正从桌面软件向服务器端软件和云计算变迁。

但他提醒道

Web软件是错漏不断的,为攻击者发现和利用。结果技术数据被盗或者被毁坏。

很多人都使用没法做静态分析的动态语言,很随意地使用第三方的代码、插件……照直说吧,为了让网站快速上线运行,我们做了很多草率的拼凑。

他定义了一个有意思的指标来粗略衡量软件的脆弱程度——用代码行数(LOC)除以装机数量。软件安装的次数越多,就像Linux,缺陷被发现及纠正的机会就越大,因此缺陷的数量就会越少。他用了几页幻灯片来列举Web应用的LOC和LOC/装机数量,以此阐明其观点。

Max的研究目标是为新类型的应用和架构定义一个安全模型。像Facebook这类应用允许开发者在平台中插入代码,甚至允许第三方服务器在Facebook平台上提供功能,问题变得更加严峻。

为了应对新挑战,Max和同事一起,以分布式信息流控制(Decentralized Information Flow Control,DIFC)模型为基础,开发了开源Web应用安全基础设施Flume

DIFC这种安全手段,让应用程序的作者能够控制应用的组成部分与外部世界之间数据如何流动。

对于隐私数据,DIFC允许不被信任的软件使用隐私数据,但由受信任的安全代码控制是否透露该数据;同时在数据完整性方面,DIFC让受信任的代码保护不受信任的软件,使之免于意外的伪造输入之威胁。

他们将服务器视为一个黑盒,并在响应构造的时刻跟踪数据。整个安全架构由一个安全网关和一个操作系统库组成,Web应用可使用该操作系统库标记数据。核心思路是把所有安全决策集中在网关,防止不希望出现的数据访问。

典型的Flume应用由两类进程构成。不受信任的进程完成大部分工作,它们受到DIFC控制的约束,且有可能自身并不知道DIFC的存在。另一方面,受信任的进程知道系统中存在DIFC,它们设立隐私及数据完整性控制来约束不受信任的进程。受信任的进程还有特权,可以选择性地违反经典的信息流控制——例如可以解密隐私数据(以导出到系统外),或者为数据完整性做担保。

系统的核心建基于一组相当简单的数据跟踪规则,用标签(Tags and Labels)来跟踪数据。

标签t本身并无内在的涵义,但进程一般会将每个标签与某个加密或完整性的范畴联系起来。举例来说,Tag b可能标示(label)Bob的隐私数据。Label是标签集(tag set)的子集。

如果Flume进程p有一个label是进程q的子集,那么p可以向进程p发送数据。Flume模型假定在同一台机器上运行着许多进程,并且通过消息或“流”相互通信。模型的目标是通过管制进程的通信以及进程label的变化,实现对数据流的跟踪。


图1.通信规则

Max指出这种思路并不是新的,而是从80年代就出现了。

网关是Flume安全架构的关键元素。首先Web应用不需要了解浏览器的任何情况,因为网关能够制定策略。但网关的中心角色使我们需要引入另一种新抽 象:Endpoint。由于网关需要协调多个系统的交互(浏览器、认证仓库、Web应用……),不能向所有的进程公开同一组label。Endpoint 有助于定义特别的label组合,专用于在网关与特定进程间实施通信。

演讲的第二部分集中展现一个基于MoinMoin Wiki的 用例。Max以此用例说明Flume能解决的问题远不止已知的缺陷类型(缓冲区溢出、跨站脚本以及SQL注入)。他演示了MoinMoin Wiki日历功能中的一处安全缺陷,利用该缺陷,原本应该只限于特定用户组的日历条目可以被所有用户看到。而仅仅用了标准策略,Flume就能阻止不该显示的日历内容。


图2.系统调用委托

Max总结说需要做的工作还很多。他们希望使系统更加灵活,以便能够处理Web应用中第三方上传的软件。他们也在研究如何让人们用同样的原则去共享数据。还有计划将触角延伸到浏览器层,把JavaScript纳入到架构之中。Max预见在金融行业会有许多用途。

联网系统的发展越来越需要端到端的安全解决方案,用应用程序代码之外的手段,强制施行数据访问策略,阻止恶意的访问。您的观点如何?是否曾遇到过这类安全问题?您用了什么样的方法解决?

查看英文原文:Securing the Web with Decentralized Information Flow Control

相关赞助商

InfoQ中文站架构社区,关注设计、技术趋势以及架构师所感兴趣的话题,通过新闻、文章、视频访谈和演讲以及迷你书等为中国架构社区提供一流资讯。

没有回复

回复

独家内容

世界顶尖运动队教练的成功秘诀

本文列出了来自于顶级教练Marc Lammers的9条原则,他是在打造世界最佳曲棍球队的过程中发现这些原则的,文章把这些原则映射到了软件开发实践之中。

探索JVM上的LISP

本文由Per Jacobsson所作,目标读者为有意了解Lisp的Java开发人员。文章探讨了当前可以运行于JVM上的不同Lisp方言,以明快简洁的方式介绍了Lisp程序设计工作机理和其独特之处,并在最后演示了Lisp代码同Java系统的整合过程。

Ruby/Rails: 不一样的'Web'应用

本文以一个实际应用的例子为引子,探讨Ruby/Rails在非传统web系统中应用,以及研究如何定制以Rails为基础的领域特定的MVC框架。

认识云计算

本视频对云计算进行了简要的介绍,主要包括了五部分内容:首先带大家认识“云”,然后对计算机的发展过程进行了阐述,接着介绍了业界现状和企业级/世界级计算的新布局,最后对云计算做了一下展望。

AtomServer:数据分发的发布动力

在这篇文章中,Bryon Jacob和Chris Berry介绍了AtomServer,一个基于Apache Abdera的完整Atom存储实现。在去年,作者一直致力于为其雇主——Homeaway——实现一个Atom存储,现在已开源了其Atom存储框架:AtomServer。

从卓越工程角度看微软中国开发团队的成长

开发团队的成长离不开优秀的人才,简捷有效的流程和高效率工具这三个卓越工程系统中的重要因素。本文作者从这三个因素分析了微软中国开发团队是如何“从优秀到卓越”的。

利用Ruby简化你的Java测试

本文是Productive Java with Ruby系列文章的第一篇,我将从单元测试这个话题开始,让Java的开发人员能够在实际工作中利用Ruby提高工作效率。

与赵进聊SaaS

InfoQ中文站有幸与阿里软件的首席架构师赵进在一起探讨了SaaS的相关话题,包括SOA和ASP与SaaS的异同、云计算、SaaS的前景、它的关键技术、技术瓶颈等等。