麻省理工学院。 讲座课程#6.858。 “计算机系统的安全性。” Nikolai Zeldovich,James Mickens。 2014年
计算机系统安全是一门有关开发和实施安全计算机系统的课程。 讲座涵盖了威胁模型,危害安全性的攻击以及基于最新科学研究的安全技术。 主题包括操作系统(OS)安全性,功能,信息流管理,语言安全性,网络协议,硬件安全性和Web应用程序安全性。
第1课:“简介:威胁模型”
第1 部分 /
第2 部分 /
第3部分第2课:“控制黑客攻击”,
第1 部分 /
第2 部分 /
第3部分第3讲:“缓冲区溢出:漏洞利用和保护”
第1 部分 /
第2 部分 /
第3部分讲座4:“特权分离”,
第1 部分 /
第2 部分 /
第3部分讲座5:“安全系统从何而来?”
第1 部分 /
第2部分讲座6:“机会”
第1 部分 /
第2 部分 /
第3部分讲座7:“本地客户端沙箱”
第1 部分 /
第2 部分 /
第3部分讲座8:“网络安全模型”
第1 部分 /
第2 部分 /
第3部分讲座9:“ Web应用程序安全性”
第1 部分 /
第2 部分 /
第3部分 听众:那么是什么阻止了攻击者寻找钥匙? 这个秘密钥匙在哪里?
教授:是的,这是一个好问题。 在大多数情况下,AWS的客户端不是浏览器,而是一些在云中运行的虚拟机。 因此,您只能看到虚拟机之间的通信。 您还可以想象用户可以以某种方式给出这些链接或以某种方式将其嵌入HTML。 如果您在HTML或JavaScript源代码中有类似于板上显示的内容,则将具有创建此类请求的代码。 因此,如果我为您提供其中之一,则可以代表我提出请求。
受众:是否可以将MAC用于普通客户端?
教授:通常来说-您是指浏览器吗?
受众群体:面向普通用户。
教授:事实是,钥匙实际位于何处是至关重要的问题。 因为如果密钥可以像cookie一样容易被盗,那么我们将一无所获。 因此,在许多情况下,所有这些东西都存储在云中的某个地方,并用于在虚拟机之间交换数据,并且也在云中从服务器到服务器传输。 因此,应用程序开发人员将启动VM,该VM使用外包存储在AWS中的一堆东西。
受众:这里是否存在网络延迟问题,因此攻击者可以在用户之后立即发送相同的请求并获得访问权限?
教授:是的,只要有几个人为有关时间戳安全性的论文辩护就足够了。 但是您是完全正确的,因为我们考虑了一个相当粗糙的例子。

想象一下,在此DATE行的String To Sign示例中,我们将获得值“ Monday,June 4”。 然后,如果攻击者以某种方式可以访问所有这些内容,则他将能够重复用户的请求。 事实是,AWS允许您使用这些东西的到期日期。 因此,您可以做的一件事是在此处添加Expires字段,我们将假定已设置了到期日期。

然后,我可以将此链接提供给一群不同的人,服务器将检查他们的请求是否已过期。
听众:即使到期日期只有200毫秒,但攻击者正在监视网络,他仍然可以发送请求的多个副本,而不是一个。
教授:如果攻击者攻击网络并看到这些东西是如何通过有线方式传输的,并且在有效期内有足够的回旋余地,那绝对是可以的。
因此,这是无状态Cookie的工作原理的概述。 这就提出了一个有趣的问题:使用这种类型的cookie注销意味着什么? 答案是您并没有真正走出去。 我的意思是,您拥有此密钥,只要您想发送请求,就可以发送它。 但是服务器可以撤消您的密钥。
假设服务器撤销了密钥。 但是您可以创建这些GET之一,当您向服务器发送消息时,它会显示:“是的,我已经知道您的用户ID,密钥已被撤消,所以我无法满足您的请求。” 但是,存在细微差别,如果我们谈论SSL之类的东西,那么授权一个人要比召回它们容易得多。
因此,如果要避免使用传统的cookie来实现身份验证,则可以使用其他几种方法。 其中之一是使用DOM-存储,其中包含有关客户端身份验证的信息。 您可以使用DOM存储库存储通常放置在cookie中的某些会话状态。

如果您还记得上一堂课,则DOM存储库是浏览器提供给每个源的值的关键接口,也就是说,浏览器从那里获取它们并将它们插入到字符串中。
好处是,DOM没有关于相同来源的相同策略的愚蠢规则。 因此,如果这些是常规Cookie,则可以执行所有这些子域操作等。 DOM存储库实际上严格地绑定到单个源,因此您不能扩展任何子域。 因此,诸如Meteor之类的框架都使用此存储。
但是请注意,如果要将身份验证信息保存在DOM存储库中,则需要自己编写JavaScript代码以将该信息传输到服务器,对其进行加密等。 在这种情况下,您需要执行以下操作。
可以使用客户端证书,例如x.509格式,其中包含有关所有者的信息,公共密钥,有关证书颁发机构的信息和电子数字签名。 这些证书的好处是JavaScript没有用于访问这些证书的显式接口。 因此,与cookie不同的是,在cookie中总是存在“军备竞赛”来查找相同来源的策略错误,而证书对此没有明显的JavaScript接口。 因此,从安全角度来看,这是非常好的。
我简短提到的问题之一,证书的吊销是我们将在以后的讲座中详细讨论的问题。 如果用户离开您的组织,您如何获得他的证书? 这很复杂。

另外,这些东西使用起来不是很方便,因为没有人愿意为您访问的每个站点安装一堆证书。 因此,认证证书不是很流行,除了对安全性负有重大责任的公司或组织之外。 至此,我们对cookie的讨论结束了。
现在让我们谈谈网络堆栈中的协议漏洞。 有趣的攻击类型之一是在浏览器组件中使用错误,例如,在解析URL时。 那么URL解析如何给我们带来麻烦?
假设我们有这样一种URL,出于某种原因,该URL的末尾嵌入了奇怪的字符:
example.com:80 @ foo.com。
问题是,此特定URL的来源是什么? Flash会认为主机名是example.com。 但是,当浏览器分析地址时,他会认为这种情况下主机的来源是foo.com。

这是非常糟糕的,因为当我们有两个不同的实体在同一个资源的原产地中混淆时,这会带来不愉快的问题。
例如,闪存代码可能是恶意的,并从example.com下载了一些资料。 如果利用foo.com将漏洞利用程序内置到页面中,它也可能在那里做一些邪恶的事情。 然后,他从example.com中获取一些代码,并使用foo.com的功能运行它。 像这样的许多复杂的解析规则使生活变得非常困难。 它一直在发生。
我们刚刚检查了内容的消毒,其主要思想是,当有更简单的解析规则来处理这种情况时,通常会更好。 但是,回顾起来很难做到,因为HTML已经存在。
现在让我们谈谈我最喜欢的安全漏洞-扩展名为.jar的文件,这些文件是Java程序的一部分的ZIP存档。 浏览器JAR文件成为攻击的目标,主要是Java applet。 在2007年左右,一个名为lifehacker.com的优秀网站介绍了如何在图像中嵌入zip文件。 尚不清楚您要通过此操作隐藏谁,但是lifehacker.com确保您可以这样做。
它们主要使用以下事实:如果您查看图像格式(例如GIF),则解析器通常从上到下工作。 首先,他在标头中找到信息,然后查看位于底部的其余位。

事实证明,通常操纵ZIP文件的程序从下而上工作,即与图像解析的方向相反。 首先,他们在文件的页脚中找到信息,然后解压缩存档中的内容。 因此,如果您放置一个包含ZIP存档的图像文件,它将像所有其他图像一样通过所有检查,甚至Flickr检查,甚至会在您的浏览器中显示为图像。
但是只有你会知道隐藏的真相。 只有您会意识到,如果您使用此文件,则可以将其解压缩并使用其中包含的信息。 这似乎是个便宜的把戏,但是黑客们从不睡觉,他们一直想破坏我们的生活。 那么他们如何实现这个想法?
他们知道JAR文件是从.zip格式派生的。 这意味着您可以在底部创建一个具有JAR文件(即JavaScript可执行代码)的GIF动画或静态图像。
后来,人们将这种攻击方法称为GIFAR,一半GIF,一半JAR,而这两个部分都是邪恶的。 太棒了 当人们第一次发现这样的机会时,他们发现它是惊人的,但根本不了解如何使用它。 但是事实证明,在此基础上可以完成以下操作。

那你怎么做呢? 您仅使用CAD。 以.gif,.jar为准,使用自解压的归档文件繁荣-GIFAR攻击了您!
那么,一旦有了这个,该怎么办? 有一些敏感站点允许用户提供数据,但不能提供任意数据类型。 因此,Flickr或类似的东西可能不允许您发送任意的ActiveX或任何其他任意的HTML。 但是您将被允许发送图像。 因此,您可以构建其中之一,然后将其提交到允许您发送图像的这些机密站点之一。 在这种情况下,您需要怎么做才能成功进行攻击?

首先,将此“填充”图像发送到这些站点之一。 其次,使用XSS跨站点脚本攻击方法,利用现有漏洞。 为此,您需要插入小程序,用JavaScript编写这样的表达式:
该代码利用了跨站点脚本漏洞,因此将在站点内容中启动。 GIFAR将通过来源检查,因为它来自具有共同来源的站点,尽管该代码是由攻击者插入的。
因此,攻击者现在有机会在受害者网站的上下文中使用所有原始权限运行此Java applet。 这些东西之一实际上将被正确识别为GIF图像。 但是这里有隐藏的代码。 让我提醒您,起初浏览器会解压缩存档文件,因此,首先,它将启动JAR部分,而忽略GIF的上部。 因此,这实际上是非常惊人的。
有一些相当简单的方法可以解决此问题。 例如,您可以使用applet加载程序,该程序知道不应有任何随机垃圾。 在许多情况下,使用元数据信息来显示该资源的长度。 在这种情况下,加载程序将按预期从顶部开始,分析其长度,查看小程序在顶部结束并停止。 他不在乎下部,甚至有可能是0。在我们的情况下,这样的加载器将无济于事,因为他将开始处理来自归档下部的请求,并在上部的前面停止,而忽略它。
我喜欢它的地方在于它确实显示了Internet软件堆栈的宽度。 仅采用GIF和JAR这两种格式,您就可以制造出令人讨厌的攻击。
您可以对PDF文件执行相同的操作。 您可以放入PDF而不是GIF,并将这种攻击称为PDFAR的危险。 但是最后,人们发现了这个问题,现在已经消除了此类漏洞。
受众:您可以使用这种攻击来做些什么,而常规的XSS跨站点脚本攻击是做不到的?
教授:这是一个很好的问题。 因此,这样做的好处是Java通常可以比常规JavaScript更加强大,因为它使用了略有不同的规则,相同的原始策略等。 但是您说对了,如果您可以运行跨站点脚本,那么自己运行JavaScript可能会造成很大的破坏。 但是这种方法的主要优点是,这种攻击技术可以在applet内部运行,并且可以执行普通恶意脚本代码无法完成的工作。
因此,正如我所说,这是我有史以来最喜欢的攻击,主要是因为它使著名的计算机安全人员想到了GIFAR之类的词。
另一个有趣的事情是使用基于时间的攻击。 通常,人们不会将时间视为资源,而资源可能是攻击的载体。 但是正如我在几分钟前指出的那样,这段时间实际上可以作为将漏洞利用引入系统的一种手段。
我要与您讨论的特定攻击是秘密通道攻击。 这种攻击的想法是,攻击者找到一种在两个应用程序之间交换信息的方式,并且这种交换操作未经授权。 攻击者正以某种方式使用系统的某些部分在两个不同资源之间传输信息位。
嗅探CSS攻击就是一个很好的例子。 这是什么攻击?
假设攻击者拥有一个用户可以访问的网站。 让用户访问网站实际上非常简单。 您制作广告或发送网络钓鱼电子邮件。
因此,攻击者拥有用户访问的网站。 攻击者的目标是找出用户访问过哪些其他站点。 攻击者可能出于多种原因想知道这一点。 也许他对用户的搜索查询感兴趣,或者他试图找出此人的工作地点,或者他想知道此人是否正在访问某些“可耻”的网站,等等。

如果攻击者唯一控制的是他要说服用户访问的网站,那么该怎么办? 一种可能的方法是使用链接颜色。 如您所知,如果您跟踪链接一次,那么下次它在浏览器中以另一种颜色显示时,表明您已经过渡到该链接。 这实际上是一个安全漏洞。
因为这意味着在您的网站上,攻击者可以生成大量可能访问的URL,然后使用JavaScript来查看这些URL的颜色。 如果URL链接的颜色为紫色,则表示您访问了此站点。 因此,这是一个非常巧妙的技巧。
有趣的是,在许多情况下,您甚至不需要显示URL。 您可以根据多米诺骨牌类型在屏幕上以标题的形式排列链接,如果用户使用此链接,这些标题将更改颜色。 也许您会认为抓取用户访问的网站的所有这些URL太麻烦了? 但是,可以通过使用地址列表中的多个过滤段落来优化此过程。 例如,您可以首先查看用户是否访问了顶级URL-cnn.com,Facebook.com等。 如果答案是肯定的,则可以选择访问量最大的顶层页面。 这样,您可以真正限制搜索。
因此,浏览器支持的无害功能可以帮助用户,说:“嘿,伙计,这就是您要去的地方!”攻击者可以利用它来破坏您的证据。

如何防止隐蔽通道攻击? 实际上,这样做是为了使浏览器简单地使JavaScript知道链接的正确颜色。 JavaScript , , . , . , , JavaScript , . , , ? , .
, , — . – , .
, , . , , .

, — , , , , , . , , , , . ?
, . . , .
, Google Map Tiles. , «» Google Map, , , , . .
? , . , , , . , .
, , , JavaScript . , , DNS.
: , , DNS , . , , -, , -. , , DNS . , , DNS , .
: JavaScript .
: , !
: , , , , ?
: , . , — - , , , - URL. , API– , .
: - , , ?
: . , API — . , ? , DNS , .
, , IP — ? ! , JavaScript . . , , ! .
这里的主要思想是更快地渲染您之前访问的URL。
<iframe>, , , , , , , , <iframe>. <iframe> , , <iframe> . , origin, .
因此,攻击者无法再触摸任何东西,并得出结论,他能够确定您之前访问的站点。
下节课见!
该课程的完整版本可
在此处获得 。
感谢您与我们在一起。 你喜欢我们的文章吗? 想看更多有趣的资料吗? 通过下订单或将其推荐给您的朋友来支持我们,
为我们为您发明的入门级服务器的独特模拟,为Habr用户提供
30%的折扣: 关于VPS(KVM)E5-2650 v4(6核)的全部真相10GB DDR4 240GB SSD 1Gbps从$ 20还是如何划分服务器? (RAID1和RAID10提供选件,最多24个内核和最大40GB DDR4)。
VPS(KVM)E5-2650 v4(6核)10GB DDR4 240GB SSD 1Gbps至12月免费,在六个月内付款时,您可以
在此处订购。
戴尔R730xd便宜2倍? 仅
在荷兰和美国,我们有
2台Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100电视(249美元起) ! 阅读有关
如何构建基础架构大厦的信息。 使用价格为9000欧元的Dell R730xd E5-2650 v4服务器的上等课程?