下载本文的PDF版本 PDF

保持静态,否则回家

最终,动态系统就是安全性较低。


Paul Vixie

计算机和网络安全领域当前和历史上大多数问题都可归结为一个简单的观察结果:让其他人控制我们的设备对我们不利。 稍后我会解释“其他人”和“不利”的含义。 在本文中,我将完全专注于控制的含义。 我们失去设备控制权的一种方式是外部分布式拒绝服务 (DDoS) 攻击,这种攻击会用不需要的流量填充网络,使真实(“需要的”)流量没有空间。 其他形式的 DDoS 也很类似——例如,低轨道离子炮 (LOIC) 的攻击可能不会完全填满网络,但它会让 Web 服务器忙于响应无用的攻击请求,以至于服务器无法响应任何有用的客户请求。 无论哪种方式,DDoS 都意味着外部人员正在控制我们的设备,这对我们不利。

监视、数据渗漏和其他形式的隐私泄露通常以恶意软件或硬件(即“恶意软件”)的形式出现,这些软件或硬件以某种方式进入您的设备,添加读取您的地址簿或监视您的击键并将该信息报告给外部人员等功能。 恶意软件提供商通常比我们用户(或制造商)更了解我们的设备,尤其是在他们毒害了我们的供应链的情况下。 这意味着我们有时会使用我们认为不可编程的设备,但实际上这些设备可以被知道某些漏洞或秘密握手的外部人员编程。 监视和数据渗漏仅仅是一个设备执行其所有者不知道、不喜欢且无法控制的事情的例子。

数据变为代码

因为互联网是一个分布式系统,它涉及到设备(如计算机和智能手机)之间发送消息,每个设备都包含一些硬件和一些软件。 到目前为止,恶意软件注入到这些设备中最常见的方式是发送以某种故意方式格式错误的消息,以利用接收设备硬件或软件中的漏洞或弱点,从而使我们认为是数据的东西变成代码。 设备中可以接收来自其他设备消息的大多数防御机制,是为了防止预期包含文本或图形或可能是电子表格的数据升级为代码,即告诉设备如何表现(或定义其功能)的指令。 反病毒软件失败的承诺是可以使用模式匹配检测恶意软件。 今天,我们使用反病毒工具来清理受感染的系统,但我们知道我们不能指望及时检测到恶意软件来防止感染。

因此,我们强化我们的设备,试图阻止外部数据变成内部代码。 我们关闭不必要的服务,我们修补和更新我们的操作系统,我们使用防火墙来控制谁可以访问我们无法关闭的服务,我们以加密方式签名和验证我们的代码,并且我们随机化程序内存中对象的位置,以便如果来自外部的数据确实以某种方式变成我们设备内部的代码,那么该代码将错误地猜测它着陆的位置,从而无法伤害我们。 我们将设备内存的某些部分设为仅数据,而将其他部分设为仅代码,因此成功的攻击会将外部人员的数据放入不允许执行代码的设备内存部分。 我们记录对我们系统的访问、对我们防火墙的命中以及我们网络上的流量,试图校准正常情况,以便突出异常情况。 我们购买网络信誉系统的订阅,以便已知感染恶意软件的其他设备无法访问我们的服务。 我们在客户注册系统中添加 CAPTCHA,以防止僵尸网络创建虚假帐户,从而从我们的边界内部攻击我们。 我们将每个面向 Internet 的服务放入其自己的虚拟机中,以便成功的攻击只会影响我们企业的一小部分。

邀请特洛伊木马进入

然后,在花费了所有费用来应对所有这些复杂的防御之后,我们中的一些人继续安装 DCMS(动态内容管理系统)作为我们的面向公众的 Web 服务器。 这种方法就像建造一座坚固的城墙城市,然后邀请特洛伊木马进入,或者使阿基里斯刀枪不入,除了他的脚后跟。 WordPress 和 Drupal 是 DCMS 的示例,还有数百个。 DCMS 在网站管理中具有良好且必要的位置,但该位置不在前线,我们的代码在那里暴露于来自外部的数据。

DCMS 的吸引力在于非技术编辑可以对网站进行更改或添加,并且这些更改几乎立即对公众或客户可见。 在万维网的早期,网站是使用 UNIX 服务器上的文本编辑器以原始 HTML 编写的,这意味着,在 Web 的早期,所有发布都涉及可以使用 UNIX 文本编辑器处理原始 HTML 的技术用户。 虽然我个人认为那些是“美好的旧时光”,但我也承认,当完全由技术用户控制时,Web 不如今天有趣和富有成效。 DCMS 使 Web 能够实现印刷机的承诺——让每个人都成为潜在的出版商。 当向公众讲话的能力仅限于富人、权势者或高度技术人员时,人类社会就无法蓬勃发展。

然而,DCMS 非常危险——对于使用它的运营商而言。 这是因为用于编程 DCMS 系统的计算机语言的强大功能和弹性,以及 DCMS 系统本身的功能和弹性。 DCMS 使我们有机会重新进行,并且经常重新输掉外部数据与内部代码之间的战争。 用于编写 Web 应用程序(如 DCMS 系统)的大多数计算机语言都包含一个名为eval,其中编程指令可以在运行时故意从数据升级为代码。 我意识到这听起来很疯狂,而且有点疯狂,但是eval仅仅是所有电动工具都可能致命的另一个例子。 在熟练的手中,eval是成功的制造者,但当它对不熟练或恶意用户开放时,eval是灾难的根源。 如果您想知道当攻击者找到一种将您的代码eval他们的数据的方法时,他们会多么兴奋和高兴,请在 Web 上搜索 "Little Bobby Tables."

但是即使没有eval在用于编程 DCMS 的底层计算机语言中,或者在用于管理该程序长期数据的数据库(如学生记录)中,大多数 DCMS 在内部都是数据驱动的,这意味着 DCMS 软件通常构建得像一个机器人,将网站的内容视为要遵循的一组指令。 要通过让 DCMS 将数据升级为代码来攻击 DCMS,有时只需要添加一篇特殊格式的博客文章,甚至是现有博客文章上的评论。 为了防御 DCMS 免受此类攻击,需要审核用于编程 DCMS 的每一段软件,包括计算机语言解释器; 所有代码库,尤其是 OpenSSL(搜索 "Heartbleed Bug"); 操作系统,包括其内核、实用程序和编译器; Web 服务器软件; 以及已与 DCMS 一起安装的任何第三方应用程序。 (提示:这很荒谬。)

DDoS

让我们从远程代码执行漏洞(将外部人员数据升级为可执行代码)倒回到 DDoS 一会儿。 即使您的 DCMS 是完全非交互式的,以至于它从不为用户提供输入任何输入的机会,URL 和请求环境变量的输入数据路径也经过仔细审核,并且在与 Web 服务器同一台计算机上没有安装像 Bash(搜索 "Shellshock Bug")之类的东西,DCMS 仍然是 DDoS 攻击的“踢我”标志。 这是因为每个 DCMS 页面视图都涉及在您的 Web 服务器上运行一些小的软件位,而不是仅仅返回一些先前生成的文件的内容。 在现代计算机上执行代码非常快,但仍然比返回预生成文件的内容慢得多。 如果有人使用 LOIC 或任何类似工具攻击 Web 服务,他们需要的攻击者数量将比耗尽静态或基于文件的服务少 1000 倍。

精明的读者会注意到我的个人网站是 DCMS。 我不会使用像“鞋匠的孩子光脚”这样蹩脚的辩解,我会指出 DCMS 的吸引力是如此显而易见,以至于即使我也能看到它们——我不喜欢在没有必要的时候使用 UNIX 文本编辑器处理原始 HTML,而且我的个人 Web 服务器不是收入来源,也不包含敏感数据。 我时不时会受到 DDoS 攻击,我必须定期进入并删除大量评论垃圾邮件。 总拥有成本非常低,如果您的企业网站像我的个人网站一样不重要,那么您可以像我一样随意运行 DCMS。 (提示:在您的企业网站上佩戴“踢我”标志可能对业务不利。)

在工作中,我们的面向公众的网站是完全静态的。 有一个 CMS(内容管理系统),但它非常技术性——它需要使用 UNIX 文本编辑器、一个名为 GIT 的版本控制实用程序以及对一种名为 Markdown 的语言的了解。 这让我们的非技术员工(包括我们业务团队的一些成员)感到沮丧,但这意味着我们的 Web 服务器不运行任何代码来呈现 Web 对象——它只是返回使用“ikiwiki”CMS 预先生成的文件。 Bricolage 是非动态 CMS 的另一个示例,但对于非技术 WYSIWYG 用户来说,它比 ikiwiki 之类的东西更友好。 请注意,没有人是 DDoS 防护的,无论他们的营销文献或年度报告怎么说。 我们都生活在一个缺乏任何准入控制的互联网上,因此大多数低投入的攻击者都可以轻松击败大多数高投入的防御者。 但是,我们可以选择我们的网站是否佩戴“踢我”标志。

有一种我称之为大部分静态的混合模型,其中所有样式表、图形、菜单和其他在视图之间不更改且可以由许多查看者共享的对象都是预先生成的,并作为文件提供。 Web 服务器不会代表查看者执行任何代码,直到该查看者登录,即使在那之后,每个页面视图上返回的大多数对象也是静态的(来自文件)。 这比完全静态网站稍微不安全一些,但对于许多 Web 服务运营商来说,这是一个现实的折衷方案。 我说“不太安全”,是因为攻击者可以在服务中注册一些帐户,以便使其以后的攻击更有效。 大规模帐户创建是僵尸网络的常见任务,因此大多数允许在线注册的 Web 服务运营商都尝试使用 CAPTCHA 来保护其服务。

大部分静态模型也适用于 CDN(内容分发网络),其中查看者的 Web 浏览器连接到的实际前端服务器位于云中的某个位置,由专家操作,并且大规模过度配置以应对除最高级别的 DDoS 攻击之外的所有攻击。 为了使这成为可能,网站必须发出信号,表明图形、样式表和 JavaScript 文件等静态对象是可缓存的。 这告诉 CDN 提供商它可以将其网络中的这些文件分发并多次返回给多个查看者——并且在 DDoS 的情况下,多次返回给多个攻击者。 当然,一旦用户登录到站点,就会有一些动态内容,这时 CDN 会将请求传递到真正的 Web 服务器,并且 DCMS 将再次暴露于外部人员数据。 这绝不能停止成为引起关注、警惕、谨慎和应急计划的原因。

作为混合的准 CDN 模型,大部分静态 DCMS 可以放在前端 Web 代理(如 Squid 或 Apache 的 mod_proxy 功能)后面。 这不会像外包给 CDN 那样有效地保护您的网络免受 DDoS 攻击,但它可以保护您的 DCMS 资源免受耗尽。 请注意,任何大部分静态模型(无论是否使用 CDN)仍然无法保护您的 DCMS 代码免受外部人员数据的暴露。 对于我们安全行业的绝大多数人来说,这意味着如果可以使用静态发布模型来满足 Web 服务的业务目的,则静态优于大部分静态。

因此,如果您认真对待运行基于 Web 的服务,请不要在其上放置“踢我”标志。 保持静态,否则回家。

喜欢它,讨厌它? 告诉我们

[email protected]

Paul Vixie 是 Farsight Security 的首席执行官。 他曾任 ISC(互联网系统联盟)的总裁、董事长和创始人; MAPS、PAIX 和 MIBH 的总裁; Abovenet/MFN 的 CTO; 以及多家营利性和非营利性公司的董事会成员。 他于 2005 年至 2013 年在 ARIN(美国互联网号码注册机构)董事会任职,并于 2008 年和 2009 年担任其主席。 Vixie 是 ICANN RSSAC(根服务器系统咨询委员会)和 ICANN SSAC(安全和稳定性咨询委员会)的创始成员。

© 2014 1542-7730/15/0100 $10.00

另请参阅

在苹果中发现不止一条虫子
- Mike Bland
如果你看到什么,就说出来。
2 月,苹果公司披露并修复了一个 SSL(安全套接字层)漏洞,该漏洞自 2012 年 9 月发布 iOS 6.0 以来一直未被发现。 由于 goto 语句重复导致的 SSL/TLS(传输层安全)握手算法中的短路,它使用户容易受到中间人攻击。 自从发现这个非常严重的错误以来,许多人撰写了关于潜在原因的文章。 然而,仔细检查代码不仅揭示了如何编写单元测试来捕获该错误,还揭示了如何重构现有代码以使该算法可测试——以及更多关于错误性质和产生该错误的环境的线索。

内部访问控制
- Geetanjali Sampemane
信任但要验证。
似乎每天都有关于另一起引人注目的高调安全事件的新闻,无论是广泛使用的软件(如 OpenSSL 或 Bash)中长期存在的漏洞的发现,还是名人照片被盗和公开。 似乎有无限的零日漏洞和强大的国家支持的攻击者。 面对这些威胁,甚至值得尝试保护您的系统和数据吗? 系统安全设计人员和管理员可以做什么?

DNS 复杂性
- Paul Vixie
尽管 DNS 只包含一些简单的规则,但它已经发展成为一个极其复杂的系统。
DNS(域名系统)是一个分布式、连贯、可靠、自主、分层数据库,是同类中的第一个也是唯一一个。 DNS 创建于 20 世纪 80 年代,当时互联网还很年轻,但已经超出了其将主机名转换为 IP 地址的原始系统,DNS 是使全球互联网(和万维网)成为可能的基础技术之一。 然而,这一切并非顺利发生,DNS 技术已定期更新和改进。 尽管仍然可以用简单的术语描述 DNS,但到目前为止,底层细节已经非常精妙。 本文探讨了 DNS(系统和协议)的假定定义和真实定义,并通过互联网协议开发哲学的视角展示了这两种定义之间的一些张力。

acmqueue

最初发表于 Queue 第 13 卷,第 2 期
数字图书馆 中评论本文





更多相关文章

Axel Arnbak, Hadi Asghari, Michel Van Eeten, Nico Van Eijk - HTTPS 市场的安全崩溃
HTTPS(超文本传输协议安全)已发展成为安全 Web 浏览的事实标准。 通过基于证书的身份验证协议,Web 服务和互联网用户首先使用 TLS/SSL 证书相互验证身份(“握手”),对 Web 通信进行端到端加密,并在浏览器中显示挂锁,以指示通信是安全的。 近年来,HTTPS 已成为保护在线社交、政治和经济活动的关键技术。


Sharon Goldberg - 为什么保护互联网路由需要这么长时间?
BGP(边界网关协议)是将互联网粘合在一起的粘合剂,使不同组织运营的大型网络之间能够进行数据通信。 BGP 通过为组织之间的流量设置路由来使互联网通信全球化——例如,从波士顿大学的网络,通过更大的 ISP(互联网服务提供商),如 Level3、巴基斯坦电信和中国电信,然后到住宅网络,如 Comcast 或企业网络,如美国银行。


Ben Laurie - 证书透明度
2011 年 8 月 28 日,一个错误颁发的 google.com 通配符 HTTPS 证书被用于对伊朗的多个用户进行中间人攻击。 该证书由一家名为 DigiNotar 的荷兰 CA(证书颁发机构)颁发,DigiNotar 是 VASCO Data Security International 的子公司。 后来的分析表明,DigiNotar 早在一个多月前(至少从 7 月 19 日起)就意识到了其系统中的漏洞。 它还表明,至少颁发了 531 个欺诈性证书。 最终计数可能永远不会为人所知,因为 DigiNotar 没有所有错误颁发证书的记录。


Christoph Kern - 保护错综复杂的 Web
脚本注入漏洞是 Web 应用程序开发的祸根:在原因和补救方面具有欺骗性的简单性,但它们在大规模 Web 开发中仍然出奇地难以预防。





© 保留所有权利。

© . All rights reserved.