Web浏览器使用户容易受到越来越多的攻击。在保持可用性的同时,可以做些什么来使它们安全?
“密封在海底的贫铀球体中。” 这是经常被提及的描述,说明了使计算机相当安全所需的一切。 显然,在互联网时代或任何其他时代,这样的机器都将是相当无用的。
我们生活在一个有趣的时代。您桌面上的那台计算机体现了21世纪安全工程师面临的矛盾。 必须保证它的安全,并且花费大量的时间、精力和金钱来尝试做到这一点:构建防火墙以将该机器与互联网隔离; 安全审计告诉我们必须删除哪些程序以及必须更改哪些权限,以使机器不会受到损害; 病毒检查程序测试加载到机器上的所有新软件是否包含恶意内容。
然而,为了使该堡垒对我们有用,我们要求在墙壁上凿出洞,以允许我们运行Web浏览器。 如果浏览器没有获得足够的计算机其余部分的访问权限,我们会抱怨。 我们坚持易用性和速度,即使这使我们的所有其他防御措施都变得毫无意义。 在许多情况下,我们使用的浏览器是从互联网上下载的,没有采取预防措施,并且由对安全没有培训或兴趣的桌面所有者配置。
浏览器是互联网体验的核心,因此它们也是困扰用户和开发人员的许多安全问题的核心。
早期浏览器的主要功能包括加密和cookie,这对于当时的简单用途来说已经足够好了。 这些技术实现了电子商务的启动,而Web的货币化正是导致许多安全问题的原因。 想要赚钱的攻击者会去有钱的地方,而Web上就有钱可赚。
今天,用户对浏览器的期望更高。 它应该能够处理复杂的银行和购物系统; 显示各种各样的媒体,包括视频、音频和动画; 在微观尺度上与网络交互(例如,当您将光标移动到Netflix中的DVD选项上方并看到电影摘要时发生的情况); 并尽可能接近实时地更新——所有这些都不能向坏人泄露敏感信息或为攻击者敞开大门。
考虑一下AJAX(异步JavaScript和XML)。 Web页面可以包含代码,该代码建立返回服务器的网络连接,并与该服务器进行对话,这可能会绕过集成到浏览器中的任何数量的安全机制。 AJAX作为用户界面技术的日益普及意味着企业网络通常允许这些连接,以便流行的站点可以正常运行。
AJAX的底层机制(尽管名称如此,但可能不一定使用JavaScript,XML或异步)是一个名为XMLHttpRequest5的函数,最初由Microsoft为Internet Explorer引入,但现在受到Firefox,Safari,Opera和其他浏览器的支持。 XMLHttpRequest允许Web页面的某个部分对Internet上的服务器进行有效的远程过程调用,并在Web页面的上下文中使用该调用的结果。 它是一个强大的工具,但也容易受到许多攻击。1
Flash,JavaScript和Java都允许由未知第三方编写的程序在浏览器中运行。 是的,有沙箱和安全措施,但是正如任何攻击者都会告诉您的那样,渗透的一大步是让目标机器运行您的代码。
早期的浏览器存在一些重大且值得注意的漏洞,但攻击者的类型也较少。 早期攻击者的动机往往是好奇心或在同行群体中得分。 现代浏览器必须防御组织日益完善的犯罪分子,他们正在寻找将浏览器漏洞转化为金钱的方法。 他们具有侵略性,有条不紊,并且愿意尝试各种攻击以查看哪些有效。 然后是那些在灰色地带工作的人,他们并没有完全违反法律,而是尽可能地突破界限以赚取一些钱。
随着更具侵略性的威胁的到来,也出现了更具侵略性的防御者。 想要成名的安全专家可以比浏览器开发人员准备反应的速度更快地发布有关浏览器的漏洞信息。 尽管此类披露的根源通常是由崇高的动机驱动的,但如果所有各方处理不当,结果可能是灾难性的。
早期披露的另一面是零日漏洞。 在这种类型的攻击中,攻击者了解到浏览器中的缺陷,并在安全社区有机会进行防御之前采取行动来利用该缺陷并从中获利。
注入攻击(有时称为XSS或跨站脚本)是指攻击者在原本合法的Web请求中嵌入命令或代码。 这可能包括嵌入式SQL命令;堆栈粉碎尝试,其中数据被精心设计以利用命令解释器中的编程漏洞;以及HTML注入,其中用户发布的帖子(例如博客中的评论)包含旨在由该帖子的查看者执行的代码。
XSRF(跨站请求伪造)类似于XSS,但它基本上从浏览器中的另一个选项卡中窃取您的cookie。 这是相对较新的,因为选项卡式浏览仅在过去几年才流行起来。 这是一个有趣的演示,说明浏览器功能有时会放大旧问题。 Google工程师在Chrome中为每个选项卡实现单独进程的原因之一是为了避免XSRF攻击。
一个名称相似但不同的攻击是跨站请求伪造,例如,受害者加载一个HTML页面,该页面引用一个图像,其src已被替换为对另一个网站的调用,可能是在受害者拥有帐户的网站。 这种攻击的变体包括诸如映射受害者企业内的网络以供另一个攻击以后使用。
除了这种性质的威胁之外,还有更多社交而非技术性质的威胁——例如网络钓鱼4。 在网络钓鱼中,受害者可能会收到来自他们与之开展业务的公司的完全合理的电子邮件,其中包含指向看起来也是合法的网站的链接。 他们登录,虚假的网站会窃取他们的用户名和密码,然后将其用于远不如他们希望的合法目的。 网络钓鱼诈骗更多地取决于用户的轻信,而不是浏览器的技术,但浏览器通常会承担很多责任。
存在基于主机名中字符的错别字或错误识别的此类性质的攻击。 一个简单的例子是,在浏览器URL输入字段经常使用的无衬线字体中,很难发现“google.com”和“googIe.com”(其中小写l已被大写I替换)之间的区别。 将该攻击扩展到Unicode和国际化,您将遇到一些非常痛苦且难以防御的东西。
Cookie是一种长期使用的机制,用于存储有关用户或会话的信息。 它们可能会被盗,伪造,中毒,劫持或滥用于拒绝服务攻击。3 尽管如此,它们对于许多网站来说都是必不可少的机制。 查看浏览器上存储的cookie列表可能非常有教育意义。
与浏览器cookie类似的是Flash cookie。 常规HTTP cookie的最大大小为4 KB,通常可以从浏览器控制面板中的对话框中擦除。 Flash cookie或LSO(本地共享对象)与Adobe Flash Player相关。 它们最多可以存储100 KB的数据,没有到期日期,并且通常无法由浏览器用户删除,尽管一些浏览器扩展程序正在变得可用以帮助删除它们。 尽管Flash以沙箱模型运行,但LSO存储在用户的磁盘上,并且可以与其他攻击结合使用。
除了Flash cookie之外,ActionScript语言(编写Flash应用程序的方式)还支持XMLSockets。 这使Flash具有打开网络通信会话的能力。 XMLSockets有一些限制,因为它们不允许访问低于1024的端口(大多数系统服务都驻留在该端口),并且它们只允许连接到始发Flash应用程序所在的同一子域。 但是,考虑一下攻击者秘密运行Flash游戏的情况。 攻击者在同一站点上运行一个高编号的代理,受害者的机器可以通过XMLSockets访问该代理,并将其重定向到任何地方,用于任何目的,从而绕过XMLSockets的限制。 此技巧已被用于揭露试图使用匿名代理来隐藏其身份的用户。
点击劫持是一种相对较新的攻击,攻击者在其中呈现一个看似合理的页面,例如Web游戏,但将其与链接到另一个服务(例如受害者在其帐户中拥有的商店的电子商务界面)的透明页面叠加在一起。 通过仔细定位游戏的按钮,攻击者可以导致其受害者从其商店帐户执行操作,而不知道他们已经这样做了。
在软件设计中,可用性和安全性长期以来一直相互对立。 浏览器也不例外。
当浏览Web或下载文件时,用户不断需要就是否信任站点或从该站点访问的内容做出选择。 浏览器对此的方法随着时间的推移而发展——例如,如果您访问具有无效HTTPS证书的站点,浏览器过去会给出轻微警告; 现在,大多数浏览器都会阻止具有无效证书的站点,并让用户弄清楚如何取消阻止它们。 文件下载也采用了类似的方法。 Internet Explorer倾向于在打开下载的文件之前多次询问用户,尤其是在文件未签名的情况下。 经常提示用户执行合法操作通常会造成用户疲劳,这使得用户在具有“合理但不过度”安全姿势的软件与对于安全而言过于开放或对于有用而言过于封闭的软件包之间走钢丝时变得粗心大意。 如今,大多数浏览器已从“让用户做出选择”模型演变为“阻止并要求显式覆盖操作”模型。
在某些情况下,浏览器的安全性对网站设计和可用性产生了重大影响。 浏览器为身份盗窃恶意软件提供了明确的目标,因为大量个人信息在某个时候或另一个时候会通过浏览器。 这种类型的恶意软件使用各种技术来窃取用户的凭据。 其中一种技术是表单抓取——基本上是挂钩浏览器的内部代码以发送表单数据,以便在SSL(安全套接字层)对其进行加密之前捕获登录信息。 另一种技术是记录键盘击键,以在用户将信息键入浏览器时窃取凭据。 这些技术催生了网站设计人员为提供更高级的身份验证方法而进行的各种尝试,例如使用硬件令牌进行多因素身份验证以及使用各种基于单击的键盘以避免键盘记录器。 在某些情况下,银行可能会要求用户使用硬件令牌对每笔交易进行身份验证。 尽管其中一些技术无疑提高了安全性,但它们可能会给最终用户带来沉重的负担。
恶意软件攻击的Web浏览器的另一个可用性功能是自动完成功能。 自动完成将表单信息保存在安全位置,并向用户显示先前在类似表单中键入的内容的选项。 几个恶意软件家族,例如Goldun/Trojan Hearse,非常有效地使用了此技术。 恶意软件破解了浏览器中加密的自动完成数据,并将其发送回中央服务器位置,甚至无需等待用户登录站点。
鉴于所有存在的漏洞以及攻击者利用这些漏洞的意愿,您可能会认为用户会强烈要求其浏览器提供更高的安全性。 其中一些人确实如此——只要它不阻止他们的任何所需功能正常工作。
让我们从浏览器软件本身开始。 从安全工程的角度来看,浏览器软件(或任何软件)的明显选择是以锁定状态交付它,并启用所有安全功能。 然后,用户或企业可以通过启用他们想要的功能来削弱安全性。 这样做过的消费者软件通常在市场上失败了。 消费者想要安全,但他们不想考虑或配置它。 如果交付的配置可以满足他们的需求,他们可能根本不会或很少更改配置。
因此,浏览器设计人员面临着金发姑娘困境。 要么粥太冷(由于安全锁定的要求而不可用),要么太热(太容易被滥用,因为没有足够的安全措施到位,或者太弱)。 设计“恰到好处”的配置几乎是不可能的,因为威胁不断演变,未发现的错误以及用户对挫败感的不同容忍度。
有许多文档列出了可以采取的锁定Web浏览器的步骤。 例如,其中一个步骤通常类似于“禁用JavaScript”。 但是,实际上很少有人这样做——至少不是永久性的——因为禁用JavaScript的浏览器很烦人,并且在许多情况下会阻止您访问您有合法理由访问的站点。
Cookie虽然有时会被刷新以解决问题,但对于许多网站至关重要,禁用它们将阻止广泛的服务正常工作。
浏览器开发人员一直在加班加点地解决其中一些问题——并且取得了一些成功——但这绝对是一场艰苦的战斗。
主动和被动的开发人员可以生成无休止的软件更新系列。 作为负责任的防御者,您的困境在于,在未经测试的情况下允许这些更新进入您的用户可能会破坏应用程序甚至引入安全漏洞,但不允许它们可能会使您的企业更容易受到更严重的攻击。
分布式管理在此领域提供了一些帮助,但是所有主要浏览器都比许多防御者希望的要弱。 Microsoft提供了免费的Internet Explorer管理工具包,该工具包为企业浏览器部署和管理工具设定了标准,但是该标准低于许多人所期望的。 FirefoxADM是一个用于管理Firefox浏览器集合的开源项目,它的功能要有限得多,但是朝着正确的方向迈出了一步。 FrontMotion提供了一个基于Web的工具,该工具使防御者可以创建包含经批准的软件,配置和Firefox插件的软件包。 所有这些都仅适用于Windows平台。
Firefox和Google的Chrome浏览器都实现了沙箱,其中浏览器在程序的隔离区域中运行代码(例如JavaScript或Flash),该区域仅为程序提供有限的资源,并且其设计经过严格的安全漏洞审查。 Internet Explorer使用基于区域的安全模型,其中根据正在访问的站点启用或禁用安全功能。 在Vista下,Internet Explorer在所谓的保护模式下运行,该模式限制了浏览器程序可以执行的操作系统特权。
开源开发人员尤其必须非常小心地设计和实施沙箱系统,因为他们的沙箱源代码可供攻击者研究和测试。 当然,这对于沙箱开发人员来说并不奇怪,这也是开源沙箱往往会快速改进的原因之一。
浏览器开发人员还提出了几种对抗网络钓鱼攻击的方法,主要是启发式方法来检测尝试访问欺诈性站点的行为,汇总已知网络钓鱼站点列表并发出警告的技术,以及增强登录安全性。
注入攻击最正确的防御是在服务器端,但是受害者通常是浏览器用户,而不是服务器所有者。 因此,浏览器可能会实施策略,通过限制可以从特定页面中的何处访问资源来阻碍注入攻击。
Firefox积极推行修补已知漏洞的策略,并定期生成更新。 Internet Explorer 7在这方面比IE 6有了显着改进,尽管IE 7中存在的已知但未修补的漏洞比Firefox多得多。 Chrome似乎正在效仿Firefox,尽管它目前缺乏其他两者的知名度,因此很少有人批判性地关注它的缺陷。2
一些浏览器开发人员正在采用和改进其用于检测,报告和响应安全漏洞的系统。 Mozilla.org是Firefox的支持和开发组织,它征集开源开发人员来协助进行代码审查,并提供开放的错误跟踪系统,以便可以报告错误并跟踪后续行动。
从防御者的角度来看,这些努力喜忧参半。 由于浏览器软件可以由任何用户从Internet上免费下载,因此所有浏览器都值得怀疑。 谨慎的防御者可能希望浏览器足够坚固,但他们不能指望这一点。 桌面*nix系统和Mac OS X允许浏览器软件以比Windows通常低的权限级别运行,但是这种安全措施可能会被其他用户驱动的配置更改所规避。
从网络安全的角度来看,浏览器本质上是您组织防火墙中一个受到某种程度控制的漏洞,该漏洞通向您试图保护的核心。 尽管浏览器设计人员确实非常努力地限制攻击者可以从浏览器内部进行的操作,但是许多安全性在很大程度上依赖于浏览器用户,而浏览器用户通常除了安全性之外还有其他兴趣。 浏览器开发人员可以弥补的范围是有限的,并且浏览器用户并非总是接受浏览器建立的安全约束。
随着此问题得到更多曝光,浏览器开发人员正在一定程度上合作以共享防御策略。 Google发布了一本出色的浏览器安全手册6,其中比较了各种浏览器功能和防御措施。
攻防策略正在共同发展,使用和威胁模型也在共同发展。 与往常一样,任何人只要有足够的技能,动机和机会,都可以闯入任何东西。 浏览器开发人员,网络管理员和浏览器用户的任务是调节这三个量,以最大程度地减少成功攻击的次数。
这确实是一项非常艰巨的工作。
1 Stamos, A., Lackey, Z. 2006. 攻击AJAX Web应用程序。 iSEC Partners; http://www.isecpartners.com/files/iSEC-Attacking_AJAX_Applications.BH2006.pdf.
2. 维基百科。 Web浏览器比较; http://en.wikipedia.org/wiki/Comparison_of_web_browsers.
3. 维基百科,HTTP cookie; http://en.wikipedia.org/wiki/HTTP_cookie.
4. 维基百科。 网络钓鱼; http://en.wikipedia.org/wiki/Phishing.
5. 维基百科。 XMLHttpRequest; http://en.wikipedia.org/wiki/XMLHttpRequest
6. Zalewski, M. 2008. 浏览器安全手册。 Google; http://code.google.com/p/browsersec/wiki/Main.
THOMAS A. WADLOW 是一位网络和计算机安全顾问,也是网络安全过程(Addison-Wesley Professional,2000年)的作者。
VLAD GORELIK 是AVG Technologies的工程副总裁,在那里他领导行为恶意软件检测和清除技术的开发。 此前,他曾在Sana Security担任CTO多年,领导公司在创建产品以对抗恶意软件方面的工作。 他在软件技术和计算机安全领域拥有多项专利和已提交的专利申请。
© 2009 1542-7730/ 09/0200 $5.00
作者注
已发表的文章包含一些关于XSRF(跨站引用伪造或跨站请求伪造)的不准确之处。 XSRF攻击利用浏览器中已建立的会话状态。 如果用户已通过身份验证登录到网站,并且攻击者可以以某种方式从同一浏览器生成指向该网站的URL,则该URL也可能通过身份验证。 这对于包括会话cookie在内的多种类型的身份验证机制都是如此。 这种形式的攻击不需要多个选项卡,并且已经存在了一段时间,但是选项卡为攻击增加了一个新的维度,因为越来越多的用户保持打开多个选项卡,这些选项卡可能已通过对重要(或高价值)站点的身份验证。 如果用户登录银行,然后在单独的选项卡中转到以某种方式向银行发送恶意URL的页面,则该URL可能会通过身份验证,并且可能能够在用户不知情或不同意的情况下对其银行帐户执行操作。 我们试图展示的是,有时功能会产生意想不到的安全隐患。 此问题适用于所有主要浏览器。
尽管我们对这个错误感到遗憾,但本文的最初主旨仍然不变:浏览器安全问题很复杂,并且每天都变得越来越复杂。 它们构成的风险不容小觑。
最初发表于Queue杂志第7卷,第2期—
在数字图书馆中评论本文
Paul Vixie - 要么静态,要么回家
当前和历史上计算机与网络安全中的大多数问题都归结为一个简单的观察:让其他人控制我们的设备对我们不利。 在另一个时间,我将解释“其他人”和“不利”是什么意思。 就本文而言,我将完全专注于“控制”的含义。 我们失去对设备控制的一种方式是外部分布式拒绝服务(DDoS)攻击,这些攻击使网络充满不必要的流量,而没有为真正的(“想要的”)流量留下空间。 其他形式的DDoS是相似的:例如,低轨道离子炮(LOIC)的攻击可能不会完全填满网络,但它可以使Web服务器忙于响应无用的攻击请求,以至于服务器无法响应任何有用的客户请求。
Axel Arnbak, Hadi Asghari, Michel Van Eeten, Nico Van Eijk - HTTPS市场中的安全崩溃
HTTPS(超文本传输协议安全)已发展成为安全Web浏览的事实标准。 通过基于证书的身份验证协议,Web服务和Internet用户首先使用TLS/SSL证书相互验证身份(“握手”),端到端加密Web通信,并在浏览器中显示挂锁以指示通信是安全的。 近年来,HTTPS已成为保护在线社交,政治和经济活动的重要技术。
Sharon Goldberg - 为什么保护互联网路由需要这么长时间?
BGP(边界网关协议)是将Internet粘合在一起的粘合剂,可实现由不同组织运营的大型网络之间的数据通信。 BGP通过设置组织之间(例如,从波士顿大学的网络,通过更大的ISP(Internet服务提供商),例如Level3,巴基斯坦电信和中国电信,然后到住宅网络(例如Comcast)或企业网络(例如美国银行))的流量路由,使Internet通信全球化。
Ben Laurie - 证书透明度
2011年8月28日,一个错误颁发的google.com通配符HTTPS证书被用于对伊朗的多名用户进行中间人攻击。 该证书由一家名为DigiNotar的荷兰CA(证书颁发机构)颁发,DigiNotar是VASCO Data Security International的子公司。 后来的分析表明,DigiNotar在一个多月前(至少自7月19日以来)就已经意识到其系统中的漏洞。 它还表明,至少已颁发了531个欺诈性证书。 由于DigiNotar没有所有错误颁发的证书的记录,因此最终计数可能永远不会为人所知。