麻省理工学院。 讲座课程#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部分 受众:为什么随机令牌始终包含在URL中,而不包含在请求正文中?
教授: HTTPS是以这种方式使用的,但是没有充分的理由不在请求正文中包含随机变量。 只是有些继承形式通过URL起作用。 但是实际上,您可以将此信息放在HTTPS请求中的其他位置(标头除外)。
但是,请注意,如果攻击者可以猜测到某些信息,仅将这些信息移动到请求正文中可能是不安全的。 然后,攻击者仍然可以以某种方式调用他需要的URL。 例如,当我发出HTTP XML请求,然后将一些内容明确放入攻击者可以猜测的正文中时。

如果仅在URL中设置框架,则攻击者可以控制它。 但是,如果您使用XML HTTP请求,并且攻击者可以生成其中一个,则HTTP XML接口允许您设置请求的正文。 HTTP XML请求仅限于相同的来源。 但是,如果攻击者可以执行以下操作:
<script> var x = “ntrusted”; </script>
然后,他将能够实现HTTP XML请求,该请求将在嵌入式页面的权限下执行。
这完全取决于攻击者可以访问的内容。 如果它可以强制页面执行未经检查的脚本(如上所示),则可以使用称为内部HTML的JavaScript属性并获取页面的所有HTML内容。 如果攻击者可以或不能生成AJAX请求,这是一回事,如果攻击者可以或不能看到正确的HTML代码,则是另一回事,依此类推。 简而言之,此随机生成的令牌能够防止CSRF攻击。
您还需要注意的另一件事是网络地址。 它们与我们的会话部分有关,攻击者说谁无法通过XML HTTP请求进行通信。
关于网络地址,框架可以将HTTP和HTTPS请求发送到与其来源相对应的(主机+端口)。 请注意,同一来源的同一策略的安全性与DNS基础结构的安全性非常相关,因为所有此类策略均基于您所称的内容。
因此,如果您可以控制他们的名字,那么您可以进行一些相当恶意的攻击,例如DNS重新绑定攻击。 这种攻击的目的是使用受害者网站(或代表受害者的网站)的权限(或代表受害者)启动攻击者控制的JavaScript。 在这种情况下,攻击者使用同一源策略的规则,并且将以某种方式在另一个站点的允许下启动他编写的代码。
这样做如下。 首先,攻击者注册一个域名,例如Attacker.com。 这非常简单,只需支付几美元即可-随时随地,您都有自己的域名。 攻击者还必须配置DNS服务器,以响应位于Attacker.com中的对象名称中的请求。

应该发生的第二件事是用户必须访问Attacker.com。 特别是,他必须访问一些依赖此域名的站点。 在这部分攻击中也没有什么棘手的问题。
查看是否可以创建广告系列,例如,提供免费的iPad。 每个人都想要免费的iPad,尽管我不知道有谁赢得过免费的iPad。 因此,单击网络钓鱼电子邮件中的此类消息,您已经在攻击者的站点上。 没什么特别的,这部分并不复杂。
那之后会发生什么呢? 浏览器将开始为Attacker.com生成DNS查询,因为您访问的页面包含链接到Attacker.com上对象的对象。 但是浏览器会说:“我以前从未见过此域,所以让我发送DNS请求许可以联系Attacker.com”!

攻击者的DNS服务器会回答此请求,但其响应包含很短的TTL生存期,从而阻止了对该响应的缓存。 因此,浏览器会认为它仅在非常短的时间内有效,然后才需要退出并确认,这实际上意味着禁止缓存。
事实证明,用户进入黑客域后,攻击者的DNS服务器首先返回为用户提供恶意代码的Web服务器的真实IP地址。 该客户端代码访问Attacker.com,因为源策略允许此类请求。 用户收到响应,现在恶意网站在客户端运行。
同时,攻击者将配置他控制的DNS服务器,以绑定名称Attacker.com和受害者.com的IP地址。 这意味着,如果用户的浏览器要求对Attacker.com内的内容进行域名解析,则实际上它将获得某种受害人的内部地址。

为什么攻击者DNS可以这样做? 因为黑客为此进行了设置,并且入侵者的DNS服务器无需咨询即可与受害者网站重新连接。
此外,如果我们的站点希望通过AJAX获得新对象,则它将认为此AJAX请求发往外部某个地方的Attacker.com,但实际上,此AJAX请求发往受害者内部。 这很不好,因为现在我们在Attacker.com网页所在的一侧上有此代码,实际上可以访问来自不同来源的受害者.com的数据。

简而言之,如果由于先前的DNS响应过时而在受害者的浏览器中执行了脚本,则会对该域进行新的DNS查询,由于禁止缓存,该查询将进入攻击者的DNS服务器。 他回答说,如今Attacker.com似乎已拥有其他网站的新IP地址,并且该请求发送到另一台服务器。 然后,为了返回由代码收集的信息,攻击者将在以下DNS查询之一中提供其正确的IP地址。
听众:相反,从受害者网站获取所有攻击者的cookie之类的攻击是否明智?
教授:是的,该选项也将起作用。 这将使您能够做端口扫描之类的好事情。 我的意思是,您的方法将正确运行。 因为您可以逐步将hacker.com不断地重新分配给受害者计算机网络中的各种计算机名称和不同端口。 换句话说,攻击者网站始终会认为它进入了攻击者网站并从那里接收到AJAX请求。
实际上,每次DNS服务器重新连接Attacker.com时,它就会将请求发送到受害人.com网络中的其他IP地址。 这样,他可以简单地一个接一个地“遍历” IP地址,看看是否有人在响应这些请求。
受众:但是,您要攻击的用户不一定具有对受害人网络的内部访问权限。
教授:通常,这种攻击是因为某些防火墙规则可能阻止外部站点Attacker.com查看受害者网站内部的IP地址。 但是,如果您位于公司防火墙后的corp.net之类的公司网络内,则计算机通常可以连接到其网络外部的计算机。
受众:这种攻击方法通过HTTPS起作用吗?
教授:这是一个有趣的问题! 事实是HTTPS使用密钥。 如果您使用HTTPS,则在发送AJAX请求时,受害人的计算机将没有攻击者的HTTPS密钥,并且受害人.com上的加密验证将显示密钥不匹配。 因此,我认为HTTPS排除了这种攻击的可能性。
听众:如果受害者仅使用HTTPS怎么办?
教授:我认为这将阻止攻击者。
听众:为什么攻击者主要使用受害者的IP地址来响应受害者的计算机?
教授:因为攻击者必须采取某种措施才能在受害者的计算机上运行自己的代码,然后他才能采取进一步的措施来在受害者的网络中查找某些东西。 但是,不要浪费时间,因此,如果您对DNS的重新分配有疑问,请在讲座后与我联系。
那么如何解决呢? 解决此漏洞的一种方法是修改DNS客户端解析器,以便永远不允许外部主机名访问内部IP地址。
网络外部的某人应该能够创建绑定到网络内部某物的DNS,这是一种愚蠢的做法。 这是最简单的解决方案。

您可以想象浏览器可以执行称为“ DNS固定”或DNS固定的操作。 结果,如果浏览器收到解析的DNS记录,则它将始终认为该记录是可接受的,例如,对于30分钟之内的交互而言,无论攻击者分配了哪个TTL,都可以抵御攻击。
该解决方案有点复杂,因为有些站点故意将动态DNS用于平衡服务器负载之类的事情。 因此,第一个使用DNS固定的解决方案是最佳选择。
现在,我们将研究相同的源策略所保护的内容。 像素呢? 来源政策如何保护像素?
事实证明,像素实际上没有原点。 因此,每个框架都有自己的小边界框,基本上只有一个正方形,并且框架可以在该区域内的任何位置绘制。
这实际上是一个问题,因为它意味着父框架可以在子框架之上绘制。 而这又可能导致非常隐蔽的攻击。
假设一个攻击者创建了一个页面,上面写着“单击此处赢取iPad”。 相同的标准技巧。 这是父框架。

这个父框架可以创建一个子框架,该子框架实际上是Facebook网站上“赞”按钮的框架。 因此,Facebook允许您运行可放在页面上的这段Facebook小代码。
您知道,如果用户单击“喜欢”,则意味着他将去Facebook并说:“嘿,我喜欢这个特定页面”! 因此,我们现在有了“喜欢”按钮的此子框架。

现在,攻击者可以将此框叠加在用户必须单击以获得免费iPad的屏幕区域上,并使该框不可见,CSS允许这样做。
那么会发生什么呢? 我们已经安装了,每个人都想获得免费的iPad。 用户将通过单击屏幕的此区域来转到该站点,请确保他完全单击免费的iPad给他的东西。 但实际上,他单击了不可见的“赞”按钮。 就像在索引C上分层一样。
这意味着,也许现在,该用户最终进入了一个Facebook个人资料,他在该个人资料中指出自己喜欢Attacker.com。 你知道,他甚至都不记得是怎么回事。 因此,这实际上就是所谓的点击劫持攻击-支持点击攻击。 同样,您可以做很多坏事-窃取密码,获取个人数据,总之,这很疯狂。 我强调-这是可能的,因为父框架能够在此边界框中绘制任何内容。
因此,父框架是您在页面上看到的内容,是获得免费平板电脑的调用,子框架是“喜欢”按钮,该按钮透明地叠加在父框架上。
有各种解决此问题的方法。 第一种是使用帧清除代码。 这样,您可以使用JavaScript表达式来确定是否有人在框架中嵌入了自己的框架。 例如,这些测试之一是对以下形式的比较:if(self!= Top)。
在此,self语句指的是顶部框架的顶部,将其与整个框架的层次结构进行比较。 因此,如果您执行此测试并发现self不等于父框架的顶部,那么您将了解您拥有子框架。 在这种情况下,您可以拒绝下载。
例如,如果您尝试为CNN.com创建框架,则会发生这种情况。 如果您查看JavaScript的源代码,则可以看到它执行了此测试,因为CNN.com不希望其他人使用其内容。 因此,该框架始终占据最高位置。 因此,这是可以在此处使用的解决方案之一。
第二种解决方案是让您的Web服务器发送一个名为x-Frame options的HTTP标头作为响应。 因此,当Web服务器返回响应时,可以设置此标头,该标头将显示:“嘿,浏览器,不要让任何人将我的内容放入框架中!”。 该解决方案允许浏览器执行强制措施。
因此非常简单。 但是,您仍然可以组织许多其他疯狂的攻击。
正如我前面提到的,我们现在生活在国际互联网上这一事实在使用域名或主机名时造成了问题。
假设我们有字母C。但是用什么语言? 这封拉丁字母的字母是什么字母,或者西里尔字母是C? 这使您可以组织使用不同解释和使用不同但看似相似的字母的攻击。 例如,攻击者将注册cats.com域名。 用户将进入该域,以为他们将访问“ cats.Com”站点,但实际上,他们将到达攻击者“ sats.com”的站点,因为此处的第一个字母不是拉丁字母,而是西里尔字母。
攻击者可以注册fcebook.com域,但人们不专心,他们会将其作为facebook.com并转到那里。 因此,如果您控制Facebook.com,就会从认为他们已登录Facebook的人那里获得大量流量。

您可以通过域名注册系统发起许多不同类型的古怪攻击,这些攻击很难防御,因为您如何防止用户输入错误? 或者浏览器如何向用户指示:“嘿,这是西里尔字母,而不是拉丁字母”!
如果浏览器每次打开西里尔字体都向用户发出警告,它将激怒实际使用西里尔字体作为其本机字体的用户。 因此,从技术的角度来看,如何解决此类问题尚不完全清楚,这就是为什么这里会出现非常敏感的安全问题。
另一个有趣的事情是插件。 插件如何与原始政策互动? 相对于同一来源,插件通常与浏览器的其余部分不兼容。 例如,如果您查看Java插件,则假定具有相同IP地址的不同主机名也具有相同的来源。
实际上,这与相同来源的政策的标准解释存在很大差异。 这种方法意味着,如果您有xycom和zycom之类的东西,并且它们被投影到相同的IP地址上,则Java将假定它们具有相同的来源。 这可能是一个问题,因为实际上一个站点具有可信的来源,而另一个站点则没有。 插件还有很多其他困难,您可以从Internet上的公开资源或讲义中找到这些困难。
我最后要讨论的是屏幕共享攻击或屏幕共享攻击。
HTML5实际上定义了一个新的API,通过该API网页可以共享其所有位以与另一个浏览器或服务器共享。 这似乎是一个很酷的主意,因为它使多个用户可以同时处理同一文档。 这很棒,因为我们生活在未来。
但是最有趣的是,当他们开发这个新的API时,他们根本没有考虑通用的源代码政策!
假设您有一个页面,上面有几个框架,每个框架都有权对整个显示器进行截图。 他可以截取屏幕上所有帧以及所有内容的屏幕截图,无论它们来自什么来源。

因此,实际上,这是同一来源来源的策略中的一个相当破坏性的缺陷,因此您应该考虑修复它。 例如,如果来自右边框的人具有拍摄屏幕截图的能力,那么他将只能拍摄右帧的截图,而不是整个屏幕的截图。
浏览器开发人员为什么不以这种方式实现它? 因为他们承受着竞争压力,并且被迫将精力集中在开发越来越多的新功能,新功能上,而不是专注于改进已开发的产品。
学生在互联网上就本次讲座提出的许多问题是:“开发人员为什么不做他们可以做的事情? 不清楚吗?” 或:“看来这个特定方案已经死了。 另一个会更好吗?” 等等。
我会坦白地告诉您-是的,可以肯定的是,如果开发人员负责任地采取行动,几乎所有事情都会变得更好。 因此,我为此感到connected愧。
但是事实是,这就是我们以前所拥有的。 如果您查看以前存在的所有元素,您将看到Web浏览器正在开发,人们对安全性的关注程度有所提高。 但是在屏幕共享的情况下却不是这样,开发人员非常担心浏览器的创新功能,以至于他们完全忘记了泄漏的可能性。

因此,请您时刻注意我们今天讨论的内容。 想象一下,如果我们要从头开始,销毁摆在我们面前的一切,并试图提出更好的安全策略,您认为呢?有多少个站点对我们有用? 我认为不超过2%。 因此用户可能会抱怨我们。
还有另一个与安全性有关的有趣属性。
一旦将功能提供给用户,即使使用它并不安全,也很难将其重新调用。因此,今天我们讨论了很多与原产地政策有关的事情,我们将在下一堂课中继续讨论这一问题。.
, . ? ? ,
30% entry-level , : VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps $20 ? ( RAID1 RAID10, 24 40GB DDR4).
VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps ,
.
Dell R730xd 2 ? 2 Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 $249 ! . c Dell R730xd 5-2650 v4 9000 ?