实践研究 (Research for Practice, RfP) 结合了 Digital Library(世界上最大的计算机科学研究文献库)的资源和 会员的专业知识。在每期 RfP 专栏中,专家们都会分享关于一个集中的、面向实践的主题的精选论文。
我们的第三期实践研究带来了涵盖编程语言、编译器、隐私和移动 Web 的读物。
首先,Jean Yang 概述了如何使用信息流技术来构建本质上就安全的程序。正如 Yang 所写,信息流是一个概念上简单的“清晰的想法”:可以跟踪敏感信息在程序变量和控制语句之间的流动,以确定信息是否可能实际泄露。然而,使信息流变得实用是一个主要的挑战。与其依靠程序员来跟踪信息流,不如让编译器和语言运行时来完成繁重的工作?应用程序编写者如何轻松表达他们的隐私策略,并理解给定策略对应用程序用户可能看到的值集的影响?Yang 的论文集通过巧妙地结合编译器、系统和语言设计技术,直接解决了这些问题。这种注重理论与实践相结合的方法是 RfP 的一个极佳主题。
其次,Vijay Janapa Reddi 和 Yuhao Zhu 概述了移动 Web 未来面临的挑战。移动设备代表了个人计算的一个主要前沿,其普及率和数据量都呈极端增长态势。因此,Reddi 和 Zhu 概述了移动 Web 计算中三个主要的持续挑战:资源加载的响应速度、计算设备的能源效率以及数据的高效利用。在他们的引文中,Reddi 和 Zhu 借鉴了一系列涵盖浏览器、编程语言和数据代理的技术,以说明在应对这些挑战时进行“跨层优化”的机会。具体而言,通过重新设计 Web 堆栈的核心组件,例如缓存和资源获取逻辑,系统运营商可以改善用户的移动 Web 体验。这种协同设计的机会不仅仅是理论上的:Reddi 和 Zhu 的第三篇引文描述了一种移动优化的压缩代理,该代理已在 Google 的生产环境中运行。
与往常一样,我们在 RfP 中的目标是让读者在周末下午的阅读时间内成为计算机科学研究中最新、面向实践的主题的专家。我感谢本期专家的慷慨贡献,贡献了如此强大的一组文章,并且,与往常一样,我们欢迎您的反馈!——Peter Bailis
作者:Jean Yang
信息泄露变得如此普遍,以至于许多人已经放弃了对信息安全的希望。3 有人说,数据泄露反正不可避免。1 其他(计算机)说,我甚至不再上网了。6
这种绝望导致另一些人求助于最后的手段:推理我们的程序实际做了什么。多年来,只要你的机器人能唱歌,错误就无关紧要。如果你的程序的速度是昨天的两倍,谁会关心它给你什么输出呢?但我们开始痛苦地认识到,再多的花哨也无法弥补 Facebook 将你的电话号码泄露给你没有邀请参加派对的人。4
这种认识正将我们带入一个新时代,在这个时代,以前看起来不必要地繁复的推理技术正变得流行起来。监管机构日益增长的压力最终使使用精确的程序分析来确保软件安全变得越来越受欢迎。5 对快速生产 Web 应用程序日益增长的需求使得开发新的范例(即规范化的范例)来创建本质安全的软件变得至关重要。
构建安全软件意味着解决信息流的重要问题。我们大多数人都听说过访问我们不应该看到的信息的后门方法。例如,一位研究人员表明,只需搜索随机电话号码,就有可能发现数千名 Facebook 用户的电话号码。2 许多此类泄露的发生并非因为系统直接显示敏感值,而是因为它显示了对敏感值进行计算(例如搜索)的结果。防止这些泄露不仅需要对敏感值本身实施策略,还需要在计算可能受到敏感值影响时实施策略。
正确执行关于信息流的策略意味着推理敏感值和策略,因为它们流经越来越复杂的程序,并确保仅显示与每个用户关联的权限一致的信息。有大量工作致力于编译时和运行时技术,用于跟踪程序中的值,以确保正确的信息流。
虽然信息流是一个清晰的想法,但要在实际的程序和系统上实现它,需要解决许多难题。此处介绍的三篇论文侧重于解决 Web 应用程序的安全信息流问题。第一篇论文描述了一种将信任从 Web 应用程序中移除,并转移到框架和编译器的方法。第二篇论文描述了一种在 Web 框架中实现的完全动态的强制执行技术,该技术要求程序员只需指定一次策略。第三篇论文描述了一个 Web 框架,该框架根据策略和查看上下文自定义程序行为。
Chong, S., Vikram, K., Myers, A. C. 2007. SIF: enforcing confidentiality and integrity in web applications. In Proceedings of the 16th Usenix Security Symposium;
https://www.usenix.org/conference/16th-usenix-security-symposium/sif-enforcing-confidentiality-and-integrity-web.
在保护 Web 应用程序的安全方面,程序员的主要负担之一是推理信息如何通过应用程序的不同部分以及跨请求的计算泄露。如果没有额外的检查和制衡,程序员必须被完全信任才能正确地完成这项工作。
第一篇精选文章介绍了一个框架,该框架将信任从应用程序转移到框架和编译器。SIF (Servlet Information Flow) 框架遵循基于语言的信息流工作路线,专注于根据安全策略规范检查程序。SIF 框架使用 Java servlet 框架构建,可防止许多常见的信息流来源,例如跨多个请求的信息流。SIF 应用程序使用 Jif 编写,Jif 是一种扩展了 Java 的语言,程序员可以在其中提供标签,指定信息流的策略。SIF 结合使用编译时和运行时强制执行,以确保从提交请求到返回请求的时间段内都强制执行安全策略,且强制执行开销适中。SIF 工作的主要贡献在于展示了如何在复杂的动态 Web 应用程序中提供关于信息流保证的保证(其中大部分在编译时完成)。
Giffin, D. B., et al. 2012. Hails: protecting data privacy in untrusted web applications. 10th Usenix Symposium on Operating Systems Design and Implementation;
https://www.usenix.org/node/170829.
虽然编译时检查方法非常适合提供程序安全保证,但它们通常需要程序员付出相当大的努力。程序员不仅必须正确构建关于信息流的程序,还必须使用所需的策略注释程序。
另一种方法是限制:以受限方式运行不受信任的代码,以防止代码表现出不良行为。对于信息流,限制的形式是标记敏感值,在计算过程中跟踪它们,并在应用程序端点检查标记。这种动态方法通常更受欢迎,因为它们几乎不需要程序员的输入。
本文介绍了 Hails,这是一个用于有原则的遏制的 Web 框架。Hails 扩展了标准的 MVC(模型-视图-控制器)范例,以包含策略,实现了 MPVC(模型-策略-视图-控制器)范例,程序员可以在其中将基于标签的策略与程序的其余部分分开指定。Hails 在 Haskell 中构建,使用 LIO(标记 IO)库在线程/上下文级别强制执行安全策略,并使用 MAC(强制访问控制)来调解对数据库等资源的访问。作为一个信息流控制框架,它具有良好的性能,每秒可处理约 47.8 K 个请求。
Hails 已被用于构建多个 Web 应用程序,初创公司 Intrinsic 正在使用 Hails 的商业版本。Hails 的工作表明,可以在 Web 应用程序中强制执行信息流,且开销可忽略不计,而无需程序员更改他们的编程方式。
Yang, J., et al. 2016. Precise, dynamic information flow for database-backed applications. In Proceedings of the 37th SIGPLAN Conference on Programming Language Design and Implementation: 631-647;
http://dl.acm.org/citation.cfm?id=2908098.
在前两种方法中,程序员仍然负担着正确构建关于信息流的程序的责任。在底层执行模型没有改变的情况下,任何框架最多只能在策略被违反时引发异常或静默失败。
本文着眼于如果信息流策略可以像内存管理语言分解分配和释放一样从程序中分解出来,Web 编程模型可能会是什么样子。本文介绍了 Jacqueline,这是一个 MPVC 框架,允许程序员指定:(1) 如何为每个数据值计算替代默认值;以及 (2) 关于何时显示可能包含数据库查询和/或依赖于敏感值的每个值的高级策略。
敏感位置值的合理默认值是相应的城市。一个有效的策略是仅当查看者在位置的某个半径范围内时才允许查看者查看该位置。本文介绍了一种适用于现有 SQL 数据库的 Jacqueline 实现策略。虽然本文更侧重于演示可行性,而不是 Web 安全的细节,但它降低了希望采用该方法的从业人员的风险。
过去几年,人们逐渐转向采用实用的信息流:首先是遏制,然后是微容器和微细分。这些技术控制哪些设备和服务可以与软件定义基础设施(例如 iptables 和软件定义网络)的策略进行交互。Illumio、vArmour 和 GuardiCore 是微细分领域的众多初创公司中的三家。这种向更精细粒度方法演进的趋势表明,人们越来越愿意接受系统重新架构和运行时开销,而这些是信息流控制方法带来的。随着安全性变得越来越重要,信息流技术变得越来越实用,向更多采用的转变将继续下去。
感谢 Aliza Aufrichtig、Stephen Chong、Vincenzo Iozzo、Leo Meyerovich 和 Deian Stefan 的评论。
1. Balluck, K. 2014. Corporate data breaches "inevitable," expert says. The Hill (November 30); http://thehill.com/policy/cybersecurity/225550-cybersecurity-expert-data-breaches-inevitable.
2. Cunningham, M. 2015. Facebook security flaw could leak your personal info to criminals. Komando.com (August 10); http://www.komando.com/happening-now/320275/facebook-security-flaw-could-leak-your-personal-info-to-criminals/all.
3. Information is beautiful. 2016. World's biggest data breaches; http://www.informationisbeautiful.net/visualizations/worlds-biggest-data-breaches-hacks/.
4. Gellman, B., Poitras, L. 2013. U.S., British intelligence mining data from nine U.S. Internet companies in broad, secret program. Washington Post (June 7); https://www.washingtonpost.com/investigations/us-intelligence-mining-data-from-nine-us-internet-companies-in-broad-secret-program/2013/06/06/3a0c0da8-cebf-11e2-8845-d970ccb04497_story.html
5. OWASP (Open Web Application Security Project. 2016. Static code analysis; https://www.owasp.org/index.php/Static_Code_Analysis.
6. Zetter, K. 2014. Hacker lexicon: What is an air gap? Wired (December 8); http://www.wired.com/2014/12/hacker-lexicon-air-gap/.
作者:Vijay Janapa Reddi 和 Yuhao Zhu
Web 正处于新演变的风口浪尖,这得益于当今最普及的个人计算平台——移动设备。目前,有超过 30 亿台连接到 Web 的移动设备。到 2020 年,将有 500 亿台此类设备。在全球许多市场中,移动 Web 流量已超过桌面 Web 流量,并且继续以两位数的速度增长。
移动 Web 的未来面临三大重大挑战。此处选择的论文侧重于仔细应对这些挑战。第一个主要挑战是 Web 应用程序的响应速度。据估计,Web 页面加载时间延迟一秒钟,亚马逊每年将损失 16 亿美元的销售额,因为如果 Web 页面加载时间过长,移动用户会完全放弃 Web 服务。Google 在搜索结果生成速度减慢十分之四秒的情况下,损失了 800 万次搜索。移动 Web 响应速度的关键瓶颈是资源加载。当今 Web 页面中的对象数量已经达到数百个,并且还在稳步增长。未来的移动 Web 计算系统必须提高资源加载性能,这是第一篇论文的重点。
第二个主要挑战是能源效率。移动设备受到电池的严重限制。虽然摩尔定律驱动的计算能力大约每两年提升一次,但电池容量每 10 年翻一番——这在计算能力和为设备供电所需的能量之间造成了越来越大的差距。因此,未来的移动 Web 计算必须是节能高效的。我们选择的第二篇论文提出了 Web 编程语言对能源效率的支持。
第三个主要挑战是数据使用。未来移动 Web 使用的很大一部分将来自发展中国家的新兴市场,在这些市场中,移动数据的成本高得令人望而却步。为了加速 Web 在新兴市场的增长,未来的移动 Web 计算基础设施必须有意识地提供数据。最后一篇论文讨论了如何设计一个实用且高效的 HTTP 数据压缩代理服务,该服务可在 Google 规模下运行。
开发人员和系统架构师必须针对 RED(响应速度、能源效率和数据使用)进行优化,最好是一起优化,以迎接新一代移动 Web 计算的到来。
Netravali et al. 2016. Polaris: faster page loads using fine-grained dependency tracking. 13th Usenix Symposium on Networked Systems Design and Implementation;
https://www.usenix.org/conference/nsdi16/technical-sessions/presentation/netravali.
移动 Web 响应速度的关键瓶颈是资源加载。瓶颈源于 Web 页面上对象(例如,图像和层叠样式表文件)的数量不断增加。根据 HTTP Archive 的数据,仅在过去三年中,Web 页面的大小就翻了一番。因此,提高资源加载性能对于改善整体移动 Web 体验至关重要。
资源加载在很大程度上取决于 Web 浏览器加载以呈现页面的资源的临界路径。这种临界路径以资源依赖关系图的形式存在,不会静态地向 Web 浏览器公开。因此,当今的浏览器在资源加载期间做出保守的决策。为了避免资源依赖关系冲突,Web 浏览器通常会限制其资源加载并发性,从而导致性能降低。
Polaris 是一个用于加速 Web 页面资源加载的系统,这是应对移动 Web 资源激增的重要一步。Polaris 离线构建精确的资源依赖关系图,并在运行时使用该图来确定最佳资源加载计划。由此产生的计划最大限度地提高了并发性,因此,极大地提高了移动 Web 性能。Polaris 的透明设计也使其脱颖而出。它在未修改的 Web 浏览器之上运行,无需 Web 应用程序或浏览器开发人员的干预。这种设计最大限度地减少了部署不便,并增加了其被采用的机会,这两个因素对于有效部署 Web 至关重要。
Zhu, Y., Reddi, J. 2016. GreenWeb: language extensions for energy-efficient mobile web computing. Proceedings of the 37th SIGPLAN Conference on Programming Language Design and Implementation: 145-160;
http://dl.acm.org/citation.cfm?id=2908082.
能源效率是对缺乏外部电源的移动设备的最关键限制。Web 运行时(通常是浏览器引擎)必须开始明智地预算 Web 应用程序的能源使用,并根据用户 QoS(服务质量)约束进行调整。然而,最终用户 QoS 信息在当今的 Web 编程语言中基本上没有被考虑在内。
GreenWeb 背后的理念是,应用程序开发人员提供最少但至关重要的 QoS 信息,以指导浏览器的运行时能源优化。为了赋能新一代具有能源意识的 Web 应用程序开发人员,需要在语言层面采用新的编程抽象。GreenWeb 提出了两种新的语言构造QoS 类型和 QoS 目标,以捕获用户 QoS 体验的关键方面。借助开发人员辅助的 QoS 信息,GreenWeb 浏览器可以确定如何在满足指定用户 QoS 期望的同时最大限度地减少设备的能源消耗。
GreenWeb 不强制执行任何特定的运行时实现。例如,作者演示了一种使用 P(非对称芯片多处理器)硬件的实现。P 是一种节能高效的异构架构,ARM、Samsung 和 Qualcomm 等移动硬件供应商已广泛采用——您可能在口袋里就有一个。GreenWeb 浏览器利用语言注释作为提示,在 P 硬件上动态调度执行,以实现节能并延长电池寿命。
Agababov, V., et al. 2015. Flywheel: Google's data compression proxy for the mobile web. "Proceedings of the 12th Usenix Symposium on Networked Systems Design and Implementation";
http://research.google.com/pubs/pub43447.html.
移动 Web 在新兴市场中至关重要。新兴市场中移动 Web 的首要障碍是数据成本高昂,而不是性能或能源效率。在发展中国家,移动数据支出占个人收入一半以上的情况并不少见。因此,减少传输的数据量至关重要。
Google 的 Flywheel 是一个压缩代理系统,旨在使移动 Web 具有数据使用意识。使用压缩代理来减少数据使用量(并提高延迟)并不是一个新想法。然而,Flywheel 表明,虽然代理服务器的核心是压缩,但仍有许多设计问题需要考虑,这些问题需要大量的工程努力,尤其是在使此类系统在 Google 规模下实用方面。设计问题示例包括请求异常时的容错和可用性、安全浏览、针对中间盒优化的稳健性等。此外,作者从大规模测量结果中得出结论,提出了有趣的性能结果,这些结果可能无法从小规模实验中观察到。例如,数据压缩对延迟减少的影响在很大程度上取决于用户群体、关注的指标和 Web 页面特征。
我们提倡全面应对 RED 挑战。这将需要协同优化跨越不同系统层的优化。我们选择的三篇论文是朝着这种跨层优化努力迈出的第一步。通过额外的协同作用,我们可能会发现比每个层独立工作时更多的优化空间。现在是我们作为一个社区让 Web 在新兴时代再次伟大的时候了。
Peter Bailis 是斯坦福大学计算机科学助理教授。他在 Future Data Systems 组 (futuredata.stanford.edu/) 的研究重点是下一代数据密集型系统的设计和实现。他于 2015 年获得 UC Berkeley 博士学位,并于 2011 年获得哈佛大学 A.B. 学位,均为计算机科学专业。
Jean Yang 是卡内基梅隆大学计算机科学系的助理教授。她的研究兴趣在于应用于安全性、隐私和生物建模的编程语言设计和软件验证。她曾在 Google、Facebook 和 Microsoft Research 实习。2015 年,她与人共同创立了 Cybersecurity Factory 加速器,以弥合网络安全领域研究与实践之间的差距。
Vijay Janapa Reddi 是德克萨斯大学奥斯汀分校电气与计算机工程系的助理教授。他的研究兴趣涵盖计算机体系结构的定义,包括软件设计和优化,以提高移动体验的质量并提高高性能计算系统的能源效率。Reddi 是美国国家工程院 Gilbreth 讲座荣誉 (2016)、IEEE Computer Society TCCA Young Computer Architect Award (2016)、Intel Early Career Award (2013) 和多个 Google Faculty Research Awards (2012, 2013, 2015) 的获得者。他还是 2005 年 International Symposium on Microarchitecture 最佳论文奖、2009 年 International Symposium on High-Performance Computer Architecture 最佳论文奖以及 IEEE 的 Top Picks in Computer Architecture 奖 (2006, 2010, 2011) 的获得者。
Yuhao Zhu 是德克萨斯大学奥斯汀分校的博士候选人。他喜欢构建更好的软件和硬件,以使下一代客户端和云计算快速且节能高效,并提供高质量的体验。他的论文重点是通过涵盖处理器架构、Web 浏览器运行时、编程语言和应用程序层的整体方法来提高移动 Web 计算的能源效率。他于 2015 年获得 UT Austin 的硕士学位,并于 2010 年获得中国北京航空航天大学的学士学位。他是 Google 博士研究员 (2016)。他的论文曾获得 Best of Computer Architecture Letters (2014) 和 IEEE MICRO Top Picks in Computer Architecture (2016 年荣誉提名)。
版权 © 2016 归所有者/作者所有。出版权已许可给 。
最初发表于 Queue vol. 14, no. 4—
在 Digital Library 中评论本文
Shylaja Nukala, Vivek Rau - 为什么 SRE 文档很重要
SRE(站点可靠性工程)是一种职位职能、一种思维模式以及一套工程方法,用于使 Web 产品和服务可靠运行。SRE 在软件开发和系统工程的交叉点运作,以解决运营问题并设计解决方案,以可扩展、可靠和高效的方式设计、构建和运行大规模分布式系统。成熟的 SRE 团队可能拥有与许多 SRE 职能相关的定义明确的文档体系。
Taylor Savage - 组件化 Web
在当今的软件工程中,没有哪项任务能像 Web 开发那样艰巨。Web 应用程序的典型规范可能如下:该应用程序必须在各种浏览器上运行。它必须以 60 fps 的速度运行动画。它必须对触摸立即响应。它必须符合一组特定的设计原则和规范。它必须在几乎所有可以想象到的屏幕尺寸上工作,从电视和 30 英寸显示器到手机和手表表面。它必须在长期内得到良好的工程设计和可维护性。
Arie van Deursen - 超越页面对象:使用状态对象测试 Web 应用程序
Web 应用程序的端到端测试通常涉及通过 Selenium WebDriver 等框架与 Web 页面进行棘手的交互。隐藏此类 Web 页面复杂性的推荐方法是使用页面对象,但首先需要回答一些问题:在测试 Web 应用程序时,应该创建哪些页面对象?页面对象中应包含哪些操作?给定您的页面对象,您应该指定哪些测试场景?
Rich Harris - 消除准入壁垒
一场战争正在 Web 开发领域展开。一方是工具制造商和工具用户的先锋,他们以摧毁糟糕的旧观念(在这个环境中,“旧”指的是任何在一个多月前在 Hacker News 上首次亮相的东西)以及关于转译器和诸如此类的喧闹辩论为乐。