麻省理工学院的课程“计算机系统安全”。 讲座13:网络协议,第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部分
讲座13:“网络协议” 第1 部分 / 第2 部分 / 第3部分

因此,今天我们将讨论Kerberos,这是一种加密的安全协议,旨在对网络上的计算机和应用程序进行相互身份验证。 这是用于在客户端和服务器之间建立连接之前对客户端和服务器进行身份验证的协议。

因此,现在,最后,我们将使用密码学,与上一堂课不同,在上一堂课中,我们仅讨论了使用TCP SYN序列号进行保护。



因此,让我们谈谈Kerberos。 什么试图支持该协议? 它是25或30年前在我们研究所创建的,是Athena项目的一部分,目的是确保多台服务器计算机和多台客户端计算机之间的交互。

假设您在某处有文件服务器。 也许这是连接到网络或其他网络服务(例如打印机)的邮件服务器。 所有这些都只是连接到某个网络,而不是在一台计算机上进行处理。



创建Athena和Kerberos的先决条件是您有一台用于同时共享的机器,其中的一切都是一个单独的过程,每个人都可以登录到同一系统并将其文件存储在那里。 因此,开发人员希望创建一个更方便的分布式系统。



因此,这意味着您将在一侧使用这些服务器,在另一侧使用一堆工作站,供用户使用它们并在其上运行应用程序。 这些工作站将连接到这些服务器并存储用户文件,接收其邮件,等等。

他们要解决的问题是如何对在服务器端所有这些不同计算机上使用这些工作站的用户进行身份验证,而不必信任网络并验证其正确性。 从各方面来看,这都是合理的设计要求。 我应该提到,那时,Kerberos的替代者是R登录团队,在上一堂课中进行了讨论,这似乎是一个糟糕的计划,因为他们仅使用IP地址来对用户进行身份验证。

Kerberos已经相当成功,它实际上仍在MIT网络上使用,并且是Microsoft Active Directory服务器的骨干。 几乎每种基于Microsoft Windows Server的产品都以一种形式或另一种形式使用Kerberos。

但是该协议是25或30年前开发的,从那时起就需要进行更改,因为今天人们对安全性有了更多的了解。 因此,Kerberos的当前版本在许多方面与本讲座材料中描述的版本明显不同。 我们将考虑今天哪些特定假设还不够好,第一个版本中有什么错误。 对于真正使用加密技术来对成熟系统中的网络参与者进行身份验证的第一个协议,这是不可避免的。

无论如何,板上所描绘的图是一种用于创建Kerberos的安装。 找出信任模型是很有趣的。 因此,我们的方案中引入了一个额外的结构-Kerberos服务器,位于侧面。



因此,如上一讲所述,我们的第三个模型在某种程度上基于网络不可靠的事实。 我们应该信任谁这个Kerberos方案? 当然,所有网络参与者都必须信任Kerberos服务器。 因此,系统的创建者一次建议Kerberos服务器以一种形式或另一种形式负责网络身份验证的所有检查。 您可以信任这个网络上还有什么呢?

学生:用户可以信任自己的计算机。

教授:是的,这是一个很好的论点。 这里有我尚未吸引的用户。 但是这些人使用某种工作站,实际上,在Kerberos中,用户信任他的工作站非常重要。 如果您不信任工作站,该怎么办? 因为如果用户不信任工作站,那么您可以在那里简单地“嗅出”密码并代表您执行操作。



学生:攻击者可以做更多的事情,例如,通过学习Kerberos服务器的票证。

教授:好的。 登录时,您输入的密码比票证还要糟糕。 因此,实际上,如果您不信任工作站,则Kerberos会有一个小问题。 如果您使用自己的笔记本电脑,它并不那么令人恐惧,但是公用计算机的安全性令人怀疑。 我们将考虑在这种情况下到底会出现什么问题。

学生:您必须信任服务器管理员,并确保他们可以特权访问彼此的服务器。

教授:我认为机器本身不必彼此信任,例如,邮件服务器不必信任打印服务器或文件服务器。

学生:不信任,但具有访问不支持通过其他服务器访问服务器的能力。

教授:是的,是的。 如果您在邮件服务器和打印服务器之间建立了信任关系,但是为了方便起见,仅允许邮件服务器访问文件服务器上的文件,则可能会滥用该权限。 因此,在此处引入其他级别的信任或冗余信任时应格外小心。

还有什么重要的吗? 服务器应该以某种方式信任用户或工作站吗? 我想不是。 Kerberos的全球目标是,先验服务器不应该知道所有这些用户或工作站,也不知道如何进行身份验证,直到这些用户可以通过密码证明自己是合法用户并且必须有权访问其数据或其他东西为止超出服务器的管理范围。

让我们看看Kerberos是如何工作的以及它的一般体系结构。 让我们大规模地绘制一个Kerberos服务器。 如今,它称为KDC-密钥分发中心或密钥提供中心。 在某些地方可以连接用户和服务。 该计划是Kerberos服务器将负责存储共享密钥,以便在Kerberos服务器与它周围的每个计算机实体之间进行通信。 因此,如果用户具有某种客户端密钥Kc,则Kerberos服务器会记住该密钥并将其存储在其内部的某个位置。 同样,服务的Ks密钥只有该服务本身,Kerberos服务器才知道,而其他人则不知道。 因此,当您知道密码并且Kerberos知道但没有其他人知道它时,可以将其视为密码的一种常见用法。



这就是您要互相证明“我是同一个人”的方式。 当然,Kerberos服务器将必须跟踪谁拥有此密钥,因此它应该具有一个表,该表将存储用户名和服务名,例如serv afs(这是一个文件服务器),以及与之对应的密钥。

同时,KDC负责存储一个巨大的表,该表的字节数不是很大,但是记录的数量却非常庞大,因为它考虑到Kerberos服务器应该知道的MIT网络中的任何计算机实体。 因此,我们有两种界面。



讲义材料讲得不够清楚,也就是说,仅暗示这两个接口的存在。 实际上,一台机器实际上有两个接口。 其中一个称为Kerberos,第二个称为TGS,票证授予服务或票证服务。

实际上,最后,这只是谈论同一件事的两种方式,并且协议对于这两件事只是略有不同。 因此,最初,当用户登录时,他与上层接口Kerberos“对话”,并向其发送客户名称C,这可能是您在雅典娜大学网络上的用户名。

服务器使用tgs票证或票证信息响应此请求,稍后我们将讨论此信息的详细信息。 然后,当您想与某些服务聊天时,首先需要进入TGS界面并告诉它:“我已经通过Kerberos接口登录,现在我想与S服务器通信,它将为我提供某些服务。”

因此,您将要与之交谈的服务器告诉TGS,之后它将返回给您类似与服务器S对话的票证。然后,您最终可以使用接收到的服务器S票证与您需要的服务器对话。

这是一种高级计划。 那么为什么在这里使用2个接口呢? 对此有很多疑问。 对于Ks服务器,此服务可能会存储在磁盘上。 在用户端该Kc会发生什么? 这个Kc来自Kerberos的哪里?



学生:此Kc应该在数据库中的KDC服务器表中。

教授:是的,好吧,这个巨大的数据库中的C键在表中。 但这也必须为用户所了解,因为用户必须证明自己是用户。

学生:这是单向功能,然后需要密码吗?

教授:是的,他们实际上有一个聪明的计划,其中Kc是通过对用户密码或某种密钥生成函数进行散列来获得的,为此,有几种不同的方法。 但是基本上,我们采用密码,以某种方式进行转换,然后获得此密钥Kc。 因此,这似乎是一个好方法。

但是为什么我们需要两个协议? 毕竟,您可以想象您只是直接从第一个Kerberos接口请求票证,并告诉他:“嘿,我想要这个特殊名称的票证!”,他会将票证发回给您,您可以使用Kc对其解密。

学生:也许他们不希望用户每次想访问其他服务时都重新输入密码吗?

教授:是的,两个接口之间存在差异的原因是,从第一个接口开始,所有响应都使用您的Kc密钥加密返回,并且Kerberos的创建者担心可能会长时间保存此Kc。 因为您要么每次都要要求用户输入密码(这很烦人),否则他会不断地“坐在”内存中。 基本上,这和用户密码一样好,因为具有Kc访问权限的人可以保持对用户文件的访问,直到用户可能更改其密码甚至更长的时间为止。 稍后我们将更详细地考虑此问题。

因此,泄漏此Kc密钥是非常危险的事情。 因此,对所有后续请求使用第一个接口然后使用第二个接口的全部目的是,一旦您解密了来自Kerberos服务器TGS接口的响应,您实际上就可以忘记Kc。 从现在开始,即使发生钥匙泄漏,其功能也将取决于所收到的票证。 因此,在最坏的情况下,某人将在几个小时内(而不是无限时间)访问您的帐户。 这就是采用两个具有相同资源访问路径的方案的原因。

因此,在深入研究这些协议在网络上的外观机制之前,让我们先谈谈Kerberos名称的方面。 从某种意义上说,Kerberos可以看作是名称的注册机构。 他负责将这些密码密钥显示为小写名称。 这是Kerberos执行的基本操作。 在下一讲中,您将看到为什么我们需要类似的功能。 它的实现方式与Kerberos的实现方式不同,但是从根本上说,在几乎所有分布式安全系统中都具有相似的功能非常重要。 因此,让我们看看Kerberos如何处理名称。

Kerberos对网络成员数据库中的每个计算机实体都有类似系统调用的内容,并且此数据的主要形式只是一个字符串。 因此,您可以以例如nickolai的形式使用一些基本名称。 这是名称字符串。



它是Kerberos某些区域中的主要参数,实际上,这是KDC表左栏中的内容。 该协议还支持一些其他参数。 例如,我可以输入另一个名称,例如nickolai.extra sec,除了昵称nickolai之外,还将使用该名称来访问需要额外安全性的资源。 因此,也许我将为一个真正安全的东西使用一个密码,并为我的普通帐户使用另一个密码。

Kerberos提到了这一方面。 因此,您可能想知道-影响来自何处? Kerberos服务将您的名称映射到某些密钥,但是当您与某台计算机交谈时,如何知道要询问的名称或期望作为响应的名称? 也就是说,我问什么名字出现在Kerberos服务器外部,或者这些用户名确切出现在什么地方? 你有什么想法吗?

学生:想必您可以从MIT服务器要求用户名。

教授:当然可以。 这就是您可以列出这些东西的方式。 此外,用户只需在登录时输入即可,这正是他们来自的地方。 用户名是否出现在其他地方? 他们应该出现在其他地方吗?

学生:可能在各种服务的列表中指示了用户访问权限。

教授:是的,这很重要,对吗? Kerberos的目标是简单地将密钥映射到名称。 但这并不能告诉您该名称应具有的访问权限。

实际上,应用程序通常使用Kerberos的方式是这些服务器之一使用Kerberos来确定它正在与哪个小写名称通信。 当邮件服务器从某个工作站接收到连接时,它会收到Kerberos票证,这证明该用户是Nikolai。 之后,邮件服务器在内部找出该用户有权访问的内容。 文件服务器执行相同的操作。

因此,在所有这些服务器中都有访问控制列表,可能是组列表或执行授权的其他内容。 因此,Kerberos提供身份验证,该身份验证向您显示与之交谈的人。 服务本身负责实现授权的那部分,授权的这一部分根据用户名决定您应具有的访问级别。 因此,我们确定了用户名的显示位置。 Kerberos支持与服务交互的其他基本名称。

根据讲座材料,服务看起来像这样:rcmd.hostname。 您需要为这些服务之一命名的原因是,例如,当您连接到文件服务器时,您想要执行相互身份验证。 这意味着在此过程中,不仅目标服务器会发现我是谁,而且我(用户或工作站)也要确保我正在与正确的文件服务器通信,而不是与那些伪造我的文件服务器进行通信文件。 因为也许我想查看包含我的评分的文件并将其发送给注册服务商。 因此,如果其他文件服务器可以充当正确的服务器并向我提供错误的评级文件,那将太糟糕了。

因此,服务也需要它们自己的名称,并且工作站应该找出连接到该服务时希望看到的名称。



通常,这在某种程度上来自用户。 因此,例如,如果我键入ssh.foo,这意味着我应该期望Kerberos主名称(如rcmd.foo)出现在此连接的另一端。 如果有人在那儿,那么SSH客户端应该断开连接,不要让我连接,因为那样我会被误导并开始与其他计算机通信。

这就提出了一个有趣的问题。 什么时候可以在Kerberos中重用名称? 例如,你们所有人都在雅典娜学院系统中拥有帐户。 毕业后,MIT可以销毁您的数据库条目并允许其他人注册相同的用户名吗? 那是个好主意吗?

学生:不仅是Kerberos数据库,而且服务都有用户名列表吗?

教授:是的,因为这些名称实际上只是由文件或邮件服务器上ACL中某个位置的字符串条目表示。 如果我们删除了Kerberos服务器数据库中的条目,则并不意味着您的条目已完全消失。 这些条目与版本无关。

例如,一条记录说爱丽丝可以使用某些雅典娜储物柜。 然后,爱丽丝毕业,并删除了她的记录,但是一些新的爱丽丝进入了学院,该学院在Kerberos数据库中进行了注册过程。 同时,她获得的主名与旧Alice的名称完全相同,因此文件服务器可以授予新Alice对旧Alice的文件的访问权限。

, Kerberos , Kerberos . , , , .

. , , , , , . , , , - . , . , , .

, . , , , TGS.



, , Kerberos, «». : s , IP – addr, time stump, life, , , Kc,s, . .



.

, Kerberos «». Ac , IP- , , . , . K,s, , Kerberos Ks. , .



, , Kerberos TGS. , , Kerberos, , . : C, , S, TGS. .

Tc,s, Ks, , Ks, , Kc. .



. , Kerberos ? , ?

: , , , Kc.

: , , Kerberos , . : «, , . , , , Kc». , .

, , , Kerberos, Kerberos , . , , - Kerberos, , .
: …

: , , Kerberos, ? , ? , , , , , , , , , .



«», , , , , . , , . . Kerberos, , . , , .

: ? , …

: , . , Kerberos , . , , - , , , . 30 , .

Kerberos 5 : , — . , , , , .

Kerberos 4 , , , . , . , , .

因此,这是告诉客户其机票是否有效的计划。他们只是试图解密它,看看它是如何工作的。另一个有趣的问题-为什么将此密钥Kc以某种形式包含在票证中两次?它作为密钥Kc,s单独存在于票证中,并且隐含地存在于票证本身Tc,s中。为什么我们有密钥Kc,s的两个副本?MIT

27:10分

“计算机系统安全”课程。讲座13:网络协议,第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核)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服务器的上等课程?

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


All Articles