2. Kerberos 基础设施概述

2.1. Kerberos 简介

Kerberos 是麻省理工学院 (MIT) 作为 Athena 项目的一部分开发的身份验证系统。Kerberos 使用加密技术和一个可信的第三方仲裁者,在开放网络上执行安全身份验证。具体来说,Kerberos 使用加密票据以避免通过网络传输明文密码。Kerberos 基于 Needham-Schroeder 协议。

目前正在使用的 Kerberos 版本有两个,版本 4 和版本 5。Kerberos 版本 1 到 3 是内部开发版本,从未发布。Kerberos 版本 4 有许多已知的弱点,不应再使用。本文档仅讨论 Kerberos 5。Kerberos 5 的定义在 RFC1510 中。

术语 "Kerberos 基础设施" 指的是软件、服务器和客户端配置,这些允许管理员使用 Kerberos 协议在其网络上执行身份验证。具体来说,Kerberos 基础设施包括 Kerberos 软件本身、安全冗余的身份验证服务器、集中的帐户和密码存储以及配置为通过 Kerberos 协议进行身份验证的系统。本文档将引导您完成安装、配置和部署此类基础设施的步骤。

2.2. Kerberos 的优点

对于不熟悉 Kerberos 协议的个人来说,在其网络中部署 Kerberos 的好处可能并不明显。然而,所有管理员都熟悉 Kerberos 旨在缓解的问题。这些问题包括密码嗅探、密码文件/数据库盗窃以及维护大量帐户数据库所需的高强度工作。

正确部署的 Kerberos 基础设施将帮助您解决这些问题。它将使您的企业更加安全。使用 Kerberos 将防止明文密码通过网络传输。Kerberos 系统还将集中管理您的用户名和密码信息,这将使维护和管理这些数据更加容易。最后,Kerberos 还将防止您必须在本地机器(无论是工作站还是服务器)上存储密码信息,从而降低单台机器被入侵导致更多入侵的可能性。

总而言之,在大型企业中,Kerberos 的优势将转化为通过更轻松的帐户和密码管理以及改进的网络安全性来降低管理成本。在较小的环境中,可扩展的身份验证基础设施和改进的网络安全性是显而易见的好处。

2.3. Kerberos 的工作原理

Kerberos 是一种身份验证协议,它使用共享密钥和可信的第三方仲裁者来验证客户端的身份。在 Kerberos 中,客户端可以是用户、服务器或软件组件。可信的第三方仲裁者是一个名为密钥分发中心 (KDC) 的服务器,它运行 Kerberos 守护进程。共享密钥是用户密码转换为的加密密钥。对于服务器或软件系统,将生成随机密钥。

在 Kerberos 中,用户被称为主体 (principals)。KDC 拥有一个主体及其密钥的数据库,用于执行身份验证。在 Kerberos 中,密钥的知识被认为是身份证明的充分条件。由于密钥的知识在 Kerberos 中转化为身份证明,因此可以信任 Kerberos 服务器来验证任何客户端到任何其他客户端的身份。Kerberos 身份验证的完成无需通过网络发送任何明文密码。下面我将解释 Kerberos 协议如何映射到 GNU/Linux Kerberos 软件。

KDC 运行两个重要的 Kerberos 守护进程。这些守护进程是 kadmindkrb5kdc。虽然 GNU/Linux 守护进程命名约定表明,名称以 "k" 开头的进程与内核相关或内核空间进程有关,但这在 krb5kdckadmind 的情况下并非如此。这两个守护进程作为 root 用户在用户空间中运行。

kadmind 是 Kerberos 服务器的管理守护进程。kadmind 由名为 kadmin 的程序使用,以维护主体数据库和策略配置。如果您选择禁止通过 ssh 在您的 Kerberos 硬件上进行任何远程登录,kadmin 将允许您远程管理服务器的 Kerberos 组件。

krb5kdc 是 Kerberos 服务器的核心组件。它负责在 Kerberos 身份验证中执行可信的第三方仲裁者的角色。当用户想要向系统或服务验证自己的身份时,用户会向 KDC 请求票据。票据是一个数据报,其中包含客户端的身份、会话密钥、时间戳和一些其他信息。该数据报使用服务器的密钥进行加密。

详细来说,该过程的工作方式如下:首先,身份验证请求被发送到 krb5kdc 守护进程。当守护进程收到此请求时,它会在主体数据库中查找尝试进行身份验证的客户端(主体)。它从该数据库中读取客户端的密钥,并加密一个称为票据授予票据 (TGT) 的特殊票据,然后将其发送回客户端。客户端接收到这个加密的 TGT,其中包含一个会话密钥。如果客户端知道密码(存储在主体数据库中的密钥)并且可以成功解密 TGT,则它可以将用包含的会话密钥加密的票据呈现给票据授予服务 (TGS)。然后,TGS 将颁发后续票据,该票据将为客户端提供使用特定系统或服务所需的身份验证。

通过使用只有在客户端知道密钥时才能解密的加密票据,实现了安全身份验证。票据中包含时间戳信息以防止重放攻击。重放攻击是指欺诈性地表示先前颁发的票据以获得未经授权的访问。

2.4. Kerberos 基础设施的安全性问题

攻击者尝试 compromise Kerberos 基础设施的主要方式是攻击 Kerberos 服务器。如果攻击者可以获得 KDC 的 root 访问权限,则攻击者将可以访问主体加密密码的数据库。攻击者还将可以访问 Kerberos 软件和配置文件,他们可以修改这些文件以使系统执行不应成功的身份验证。

攻击 Kerberos 基础设施的其他方法包括重放攻击和密码猜测攻击。重放攻击将涉及拦截或以其他方式获取 Kerberos 票据,然后欺诈性地表示该票据以尝试获得身份验证。在 Kerberos 系统中进行密码猜测可以通过从网络拦截 Kerberos 票据,然后进行暴力破解尝试以解密拦截的票据来完成。

攻击者可能会利用基础设施中过时的软件。例如,Kerberos 版本 4 存在许多问题。最重要的是,Kerberos 版本 4 在使用的加密中存在基本的协议弱点。Kerberos 4 的设计包括在标准模式下使用 DES,这使得攻击者可以以无法检测的方式拦截和修改 Kerberos 票据的密文。为了防止这些攻击,Kerberos 5 已被修改为在密码块链接 (CBC) 模式下使用三重 DES。

在讨论 Kerberos 4 的强度时,同样重要的是要注意,许多 Kerberos 版本 4 的实现都存在缓冲区溢出漏洞。虽然版本 5 的参考实现修复了版本 4 中的缓冲区溢出弱点,但 Kerberos 5 的发行版通常附带软件以提供向后兼容性,以支持旧的 Kerberos 4 应用程序。Kerberos 版本 5 版本中用于版本 4 支持的一些向后兼容性代码仍然被认为容易受到缓冲区溢出攻击。

因此,由于版本 4 中的协议弱点以及版本 4 实现和版本 4 向后兼容性代码中缓冲区溢出攻击的可能性,最好不要支持或使用 Kerberos 版本 4。

总之,从关于 Kerberos 基础设施如何受到威胁的描述中,我们意识到我们必须高度重视 Kerberos 服务器本身的安全性,运行最新的 Kerberos 软件,并在选择好的密码和设置良好的密码策略方面保持警惕。