麻省理工学院的课程“计算机系统安全”。 讲座12:网络安全,第1部分

麻省理工学院。 讲座课程#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部分
讲座10:“符号执行” 第1 部分 / 第2 部分 / 第3部分
第11课:“ Ur / Web编程语言” 第1 部分 / 第2 部分 / 第3部分
讲座12:网络安全性第1 部分 / 第2 部分 / 第3部分

今天,我们将讨论网络安全性,尤其是,我们将讨论Stephen Bellovin的文章“回顾一下” TCP / IP协议套件中的安全性问题”。 这个人曾经在AT&T工作,现在在哥伦比亚工作。 这项工作的有趣之处在于它相对较旧-已有10多年的历史了,实际上,这些是对1989年前的一篇文章的评论。

你们中的许多人问,如果今天所述版本的TCP协议中解决的许多问题都得到解决,我们为什么要研究这个问题。



的确,斯蒂芬所描述的一些问题此后已经解决,其中有些仍然存在。 考虑到这一点,我们将对它们进行排序,然后看看会发生什么。 您可能想知道为什么人们在设计TCP时没有首先解决所有这些问题? 他们只是在想什么?

这实际上还不清楚。 你觉得呢 考虑到所有这些注意事项,为什么TCP协议没有必要的安全性? 有什么建议吗?

学生:那时,互联网是一个更容易被骗的地方。

教授:是的,这实际上是这家伙文章的引言。 是的,一般来说...我认为大约40年前开发了一套Internet协议。 要求完全不同。 只是有必要将一堆相对易受攻击的站点连接在一起,这些站点在名称上相互了解,并且名称相同。

我认为这通常会在任何成功的系统中发生-需要更改。 它曾经是少数站点的协议,现在该协议已覆盖整个世界。 而且您不再以连接到Internet的所有人的名字知道。 如果他们做的不好,就不能打电话给他们,依此类推。

因此,我认为这个故事对于我们正在考虑的许多协议都是相同的。 你们中的许多人都在问类似的问题,“这些人到底在想什么? 这太有缺陷了!” 但是实际上,他们设计了一个完全不同的系统,只是简单地对其进行了调整以满足现代需求。

在过去的几周中,我们对同一件事和Internet进行了完全不同的设计。 但是它扩展了,我们对如何使该协议适应现代要求有了新的担忧。

还有另一件事突然发生了,人们不得不高估安全问题的严重性。 过去,您确实不了解应该担心的所有事情,因为您不知道攻击者能够对系统执行什么操作。



我认为部分由于这个原因,看看TCP安全性发生了什么,出了什么问题,我们如何解决它等等将很有趣。 结果,我们必须找出在开发自己的协议时应避免什么类型的问题,以及什么构成对这种攻击的正确思考。 为了避免此类陷阱,在刚开发协议时,您如何知道攻击者在自己的协议中能够做什么?

好吧,让我们把序言放在一边,讨论一下这篇文章。

那么我们应该如何考虑网络安全? 我认为我们可以从第一个原则开始,然后尝试弄清楚我们的威胁模型是什么。 那么,攻击者可以在我们的网络上做什么?

他可能具有拦截数据包的能力,并且也许可以修改数据包。 因此,如果您正在通过网络发送数据包,则明智的做法是假定某些坏人会看到您的数据包并能够在其到达目的地之前对其进行更改。 它也可以删除它,并使用输入从未发送过的任意内容的自定义程序包的功能。



但是,更危险的是坏蛋可能会干扰您在本文中描述的协议。 攻击者拥有自己的计算机,由他完全控制。 即使您信任的所有计算机都运行正常,拥有自己计算机的坏人也会干扰您的协议或系统。

因此,如果您有一个路由协议,其中包含很多人互相交谈,并且进行一些扩展可能不切实际,无法将坏蛋留在外面。 如果有10个参与者的路由协议正在运行,则也许您可以将所有参与者都呼叫,然后说:“是的,伙计们,我认识所有人。”

但是,在当今的Internet规模上,不可能直接找出其他网络成员正在使用此协议的人。 因此,可能会有一些坏人要加入您的协议或分布式系统。 因此,重要的是设计分布式系统,尽管如此,它仍然可以做到这一点。

好的,这一切意味着什么? 我想我们会仔细核对一下清单。 拦截数据包通常很容易理解,如果您希望坏人拦截它们,或者至少不以纯文本形式发送它们,则无法通过网络发送任何重要数据。 也许您应该加密您的数据。



似乎相对容易理解,尽管在开发协议时仍然需要记住这一点。 引入或注入软件包会导致一系列有趣的问题,本文将对此进行讨论。 特别是,攻击者可以注入可假冒来自其他任何发送者的数据包的数据包。 由于数据传输路径基于IP的使用,因此数据包本身具有标头,该标头指示数据包的源IP和目标IP。 但是,没有人检查来源是否正确。 这些天有一些过滤,但是它并不完美,很难依靠。

因此,首先,攻击者可以在其中插入任何IP地址作为源,并将其发送到正确的目的地。 找出攻击者可以发送任意数据包的功能是很有趣的。

在前几周,我们从网络安全性角度研究了缓冲区溢出问题。 我们研究了攻击者如何使用诸如缓冲区溢出之类的实现错误。 有趣的是,本文的作者对实现错误并不真正感兴趣;他对协议错误更感兴趣。

那么,这有什么特别之处呢? 尽管我们花了数周的时间来检查它们,但为什么他不注意实现错误呢? 为什么重要呢?

学生:因为编写协议时必须排除这些错误。

教授:是的,由于协议设计错误,这确实是一个很大的失败,因为它很难更改。 因此,如果您遇到实现错误,但是memcpy或打印输出没有检查内存范围,则不会注意到此错误。 但是,如果您进行了范围检查并且仍然有效,那么可以避免缓冲区溢出,所以这很好。

但是,如果协议规范,协议的工作方式上存在某种错误,则要修复此错误将需要修复整个协议,这意味着对使用该协议的所有系统都有潜在的影响。 因此,如果我们在TCP协议中发现某种问题,则可能会造成很大的破坏。 因为每台使用TCP的计算机都必须进行更改,因为使修改后的协议与旧计算机兼容可能非常困难。

Stephen非常担心的TCP协议错误是根本的,因此他决定谈论它们。 在第一个示例中,他研究了TCP SN号的工作方式。

学生:这有点题外话,但是我很好奇。 假设您发现TCP错误。 您如何进行更改? 您如何告诉世界上所有计算机都需要进行更改?

教授 :是的,我认为这是一个很大的问题。 如果发现TCP错误,该怎么办? 好吧,目前尚不清楚该怎么做。 我认为这里的作者正在为此而苦苦挣扎。 如果您可以重新设计TCP,那么如果您事先知道要查找的内容,那么其中许多错误就相对容易修复。

但是由于TCP很难修复或更改,因此最终会发生以下情况:开发人员试图找到向后兼容的设置,这些设置允许将旧的实现与新的实现结合使用,或者添加一些使连接更安全的字段。



但这是一个大问题。 如果这是植根于TCP的某种安全性问题,那么它将成为每个人的大问题,因为即使简单地切换到TCP版本(假设n加1)也非常困难。

可以将IPv6视为没有发生这种情况的示例,并且我们知道此问题还会再出现15年或20年。 IPv6已经存在了10多年,但是很难说服人们摆脱IPv4。 IPv4对他们来说足够了,它似乎可以工作,并且他们认为切换到新的Internet协议将太昂贵。 他们说:“没有人再说IPv6了,那我为什么要开始谈论这种无人问津的奇怪协议呢?” 无论如何,这都是一种前进,但我认为这将需要很多时间。 确实会有一些迁移的动机,在这种情况下,向后兼容会很有帮助。

IPv6具有许多向后兼容选项,例如,您可以使用IPv6与IPv4主机通信。 因此,开发人员正在尝试设计所有这些支持,但是仍然很难说服人们进行升级。

因此,考虑到TCP序列号,我们将实际考虑与TCP握手如何工作有关的两个问题。 因此,让我们花一些时间看一下最初如何建立TCP连接。

发送三个数据包以建立新的TCP连接。 我们的客户端生成一个程序包以连接到服务器,该程序包说这是我的客户端IP地址,我将其发送到服务器。 同时,有一个包头结构,由不同的区域组成,但是我们会对序列号的区域感兴趣。 在这里,我们将具有SYN标志:“我想同步状态并建立新的连接”,其中包括SNc客户端序列号。



然后,当服务器收到此数据包时,他说:“客户端希望与我连接,所以无论谁说它试图与我联系,我都会将数据包发送回该地址。” 因此,服务器会将数据包发送到客户端,其中包括自己的SN服务器同步序列号和ACK客户端确认号(SNc)。 最后,客户端使用第三个数据包响应服务器,确认同步并发送服务器ACK服务器确认号(SN)。 现在,客户端可以开始发送数据了。

因此,为了发送数据,在连接开始时,客户端必须在数据包中包括一些数据,并附加SNc客户端序列号以指示这实际上是合法的客户端数据。 他指出,例如,这不是现在才到达的以后消息中的某些数据,因为服务器错过了数据的某些初始部分。



因此,通常,所有这些序列号都旨在提供数据包传送。 如果客户端传输两个数据包,则具有起始序列号的是第一数据,下一个序列号是下一个数据。 这对于提供某些安全要求也很有用。

在此之前,我举了一个例子,说明这些要求正在发生变化。 因此,最初没有人认为TCP应该提供任何安全功能。 但是随后,TCP开始使用应用程序,并且它们似乎依赖于这些TCP连接,并认为它们无法被任何攻击者破坏,或者认为攻击者无法将恶意数据注入到现有的TCP连接中。 似乎突然之间,最初只用于订购软件包的这种机制开始保证这些连接的安全性。

因此,在这种情况下,我认为问题与服务器有关此TCP连接的建议有关。 通常,服务器会-就像您可以想象的那样-隐式地假定此连接是在此IP地址C上与所需客户端建立的,他自然会这样认为。 但是,有什么理由做这样的假设吗? 如果服务器收到包含有关此客户机/服务器连接的某些数据的消息,并且该消息的序列号为C,则服务器为什么会得出结论,即真实客户机已发送此数据?

学生:因为序列号很难猜测。
教授:对,所以这是一种隐含的东西,暗示必须有正确的SNc序列号。 并且为了建立此连接,客户端必须具有已确认的SNs服务器序列号,并且服务器序列号仅由服务器发送到客户端的IP地址。

学生:序列号有多少位可用?

教授: TCP序列号长32位,尽管这不是一个随机数,但不容易猜测,但会占用大量带宽。

学生:序列号是否比初始序列号高?

教授:是的,原则上,这些事情正在增加。 因此,每次发送SYN时,它被认为比序列号多1个字节。 也就是说,如果在第一行中有参数(SNc),那么在第四行中将已经有(SNc + 1),然后从此处继续编号。 因此,如果您传输5个字节,则以下值将是(SNc)+6。 它仅计算发送的字节数,每个SYN计数1个字节。 TCP规范建议选择这些序列号,以使它们的增量以大致固定的速度发生。 RFC协议的初始工作文档建议您将这些内容增加大约250,000个单位,外加每秒250,000个。



这不是完全随机的原因是因为这些序列号实际上是用于防止数据包干预或将来自先前连接的数据包与新连接混合在一起的。 每次建立新连接时,都选择一个完全随机的序列号。 同时,如果您一遍又一遍地安装一系列连接,则来自前一个连接的数据包将具有与新连接的序列号非常相似的序列号,因此将被服务器接受为新连接的有效数据部分。

因此,这就是TCP开发人员非常担心的-这些无序数据包或延迟数据包。 结果,他们确实希望这些序列号即使在化合物之间也要是相当单调的时间序列。

如果打开一个连接,则它可以具有相同的源和目标,端口号,IP地址等。 但是自从我现在(而不是更早)建立此连接以来,我希望以前发送的消息中的数据包不会与新连接中的序列号一致。 因此,这是一种防止重复连接之间混淆的机制。

学生:如果您不确切知道包装程序的步骤是什么,您如何知道收到的包装是下一个包装,而不是上一个包装的一部分...

教授:通常,您会记得收到的最后一个数据包。 下一个序列号恰好是该序列中的下一个数据包。 因此,例如,服务器知道我看到的是日期(SNc +1)数据的一部分,那么下一个将是SYN(SNc +1)数据包,因为连接开始时的前一个数据包是SYN(SNc)。

学生:所以,您说的是,设置序列号后,甚至...

教授:好吧,当然,这些序列号最初是在安装时根据某个计划选择的。 我们将讨论这个计划。 您可能会认为它们是随机的,但是随着时间的流逝,它们应该表示连接的初始序列号中的某些顺序变化流。

但是在一个连接中,一切一建立就结束了-序列号是固定的。 当数据通过它发送时,它们只是标记该连接。

有计划建议管理这些序列号。 , . , , , .

, - , 250000. , , , 64k 128k, . , – , SYN .

, 64 . , .

, . , , , , IP-.
, , , , , . , , .

, ? , , , — SNc. , , - , , , .

, . ACK (SNs).

- .



SNs , , , IP- C.

, . , : , , , data (SNc +1).



(SNs). ?

: , ?

: . , , , , . , , , , .

: , , ?

: . , ?

, . , , 32 , , .

, .

: , , , . …

: , TCP .

: , .

: , .

: , , .

: , , , . , , 1000 , 2 32 .

, - , , . . , .



: - , ?

: , . , , IP-, ?

: ?

: — ? , . ?

: , , , , - .

: , , , , , . IP-, TCP , , , .

TCP , - , , , C RST (SN…), , .



- , , C , .

, C , . , S , : «, , , ».

, , , , , C .

, «» C , . , «» C , . , TCP.

: , . , SYN , .

: , , . , , , , NAT, . , NAT RST , . , , , , , Comcast , RST .

: ?

: , , TCP. , . , , , . /, .

, data (SNc +1). , IP- , : « », , S.



SYN (SNs) (SNs) , . — , IP-, . , SNS SNS .

25:50

麻省理工学院的课程“计算机系统安全”。 12: « », 2


.

感谢您与我们在一起。 你喜欢我们的文章吗? 想看更多有趣的资料吗? 通过下订单或将其推荐给您的朋友来支持我们, 为我们为您发明的入门级服务器的独特模拟,为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 Cores) 10GB DDR4 240GB SSD 1Gbps , .

戴尔R730xd便宜2倍?在荷兰和美国,我们有2台Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100电视(249美元起) 阅读有关如何构建基础架构大厦的信息。 使用价格为9000欧元的Dell R730xd E5-2650 v4服务器的上等课程?

Source: https://habr.com/ru/post/zh-CN426325/


All Articles