最近,我对一个 FreeIPA 环境进行测试。因此我想花些时间分享一些关于 FreeIPA 的一些测试心得:它的工作原理及攻击手法。

0x00 前言

首先,什么是 FreeIPA?我为什么对它感兴趣?

老实说,直到我在野外遇到 FreeIPA环境之后,我才知道它。经过一番调研后,才知道它是 Microsoft Windows Active Directory 的开源替代品,主要用作 Unix 环境的集成管理解决方案。与Active Directory类似,FreeIPA 实现了一个完整的 LDAP 目录基础架构,由 MIT 的 Kerberos 密钥分发中心支持。它使用 Dogtag 证书系统进行 CA 和 RA 证书管理,使其能够处理包括智能卡在内的多因素身份验证。SSSD 用于将 FreeIPA 集成到标准 Unix 身份验证过程中。

由于文章内容过多,为了使其有更好的可读性,将其分成一个系列。这篇文章主要涵盖以下内容:

  • 公共文件环境变量二进制文件等指纹标志,分辨当前机器是否已加入 FreeIPA 环境。
  • 使用存储在内存中的 Keytab 文件,CCACHE 票据文件和 CCACHE 票据在 FreeIPA 环境中进行身份验证。

0x01 机器识别

加入到 FreeIPA 域中的 Linux 主机都有一些指纹标志,操作者可以通过这些指纹来获取有关主机和域的信息。让我们简单回顾一下能够证明当前主机已加入 FreeIPA 域的标志文件、环境变量和二进制文件。

以下文件应该在每个加入 FreeIPA 域的主机上都存在:

  • /etc/krb5.conf:krb5.conf 文件包含了在域中注册所需的 Kerberos 客户端信息。这包括 KDC 和管理服务器在 Kerberos 领域的位置、当前领域和 Kerberos 应用程序的默认值,以及主机名与 Kerberos 领域的映射。
  • /etc/ipa/default.conf:这是 IPA 服务器的默认配置文件,它用于设置运行 IPA 客户端和服务器时应用的全系统默认值。
  • /etc/krb5.keytab:krb5.keytab 文件在域内的所有主机上都需要。它是 KDC 认证过程的一部分。默认情况下,它允许不受限制地访问其主机,并且只有 root 才能读取。

此外,还有几个环境变量,如果设置好了,可能表明当前主机已加入了 Kerberos 域:

  • KRB5CCNAME:如果已设置,则此变量指向用于认证的 CCACHE 票据的位置。
  • KRB5_KTNAME:如果已设置,则此变量指向用于认证的 Keytab 文件的位置。
  • KRB5_CONFIG:如果已设置,则此变量只想给 Kerberos 配置文件的位置。
  • KRB5_KDC_PROFILE:如果已设置,则此变量指向 KDC 配置文件的位置,该文件包含用于密钥分发中心守护程序的其他配置指令。
  • KRB5RCACHETYPE:此变量指定用于服务器的默认重播缓存类型。
  • KRB5RCACHEDIR:此变量指定服务器使用的重播缓存的默认目录。
  • KRB5_TRACE:此变量指定要写入跟踪日志输出的文件名。跟踪日志可以帮助阐明 Kerberos 库在内部所做的决策。
  • KRB5_CLIENT_KTNAME:此变量设置默认的客户端密钥表文件名。
  • KPROP_PORT:此变量设置供 kprop 使用的默认端口。

还有一些二进制文件可将主机标识为已加入 FreeIPA 域:

  • ipa:该二进制文件是管理 FreeIPA 域的标准。它可以用于管理主机、用户、sudo 规则等。
  • kdestroy:该二进制文件用于销毁用户会话中的任何当前 Kerberos 票据。
  • kinit:该二进制文件用于建立和续订 Kerberos 票据。
  • klist:该二进制文件列出了当前使用的所有 Kerberos 票据,以及票据提供访问权限的主体。
  • kpasswd:该二进制文件用于更改 Kerberos 主体的密码。kpasswd 首先提示输入当前的 Kerberos 密码,然后两次提示用于输入新密码,最后更改密码。
  • ksu:该二进制文件可以用作 su 二进制文件的替代方案,以切换当前用户上下文。
  • kswitch:该二进制文件将切换当前正在使用的凭证缓存。
  • kvno:该二进制文件获取了指定的 Kerberos 主体的服务票据,并输出每个密钥主体的密钥版本号。

0x02 认证方式

了解用于身份验证和授权的基础知识和流程对于攻击者来说至关重要。在不了解每种身份验证机制的情况下,攻击者可能会错过可能已启用横向移动或整个环境中另一条有效的攻击路径。让我们简单回顾一下在 FreeIPA 环境中,身份验证过程是如何工作的。

由于 FreeIPA 使用 Kerberos 进行身份验证,所以这个过程与 Active Directory 中的身份验证非常相似。为了访问域中的资源,用户必须有一个有效的 Kerberos 票据才能访问该资源。根据 FreeIPA 域的配置,这些票据可以存储在许多不同的位置。简要回顾一下每个验证机制,包括如何从攻击者的角度分析和重用这些东西。

2.1、CCACHE Ticket Files

当票据被设置为磁盘上的文件时,标准格式和类型是 CCACHE 文件。这是一种简单的二进制文件格式,用于存储 Kerberos 凭证。这些文件通常存储在 /tmp 中,并带有 600 权限。从攻击者的角度来看,这很重要,原因如下。

  • 可以利用有效的票据进行身份验证,不需要相应的用户明文密码。
  • CCACHE 票据具有高度的可移植性。它们可以被下载并加载到另一台主机上,而不需要更新或验证票据。

解析 CCACHE 票据有很多不同的方法可以轻松完成。最简单的方法是用 klist 命令解析它。

对于攻击者来说,重新使用 CCACHE 票据非常容易。要重新使用有效的CCACHE 票据,请将 KRB5CCNAME 导出到有效票据文件的路径。系统应该会识别环境变量,并在与域交互时尝试使用该凭证。

2.2、Unix Keyring

FreeIPA 管理员的另一个选择是将 CCACHE 票据存储在 Linux 的 Keyring 中。keyring 位于内核内部,使管理员可以更好地控制已存储票据的检索和使用。票据可以通过以下几种不同方式进行范围划分:

  • KEYRING:name:票据的作用域仅限于一个名为 Keyring 的特定名称。

  • KEYRING:process:name:票据的范围仅限于特定的进程 ID。

  • KEYRING:thread:name:票据的作用域为特定线程。

  • KEYRING:session:name:票据的范围仅限于特定的用户会话。

  • KEYRING:persistent:uidnumber:票据的范围仅限域特定用户(无论会话如何)

根据管理员对存储在 Unix Keyring 中的票据进行范围划分,解析出来可能会有困难。不过,Unix keyring 中的 CCACHE 票据的默认范围是 KEYRING:persistent:uidnumber。幸运的是,如果你是在用户的上下文中,klist 可以为我们解析出这些信息。

作为攻击者,根据票据的范围,重新使用存储在Unix keyring 中的 CCACHE 票据是相当困难的。幸运的是,@Tarlogic@Zer1t0 已经构建出了可以从 Unix keyring 提出 Kerberos 票据的工具。该工具称为 Tickey,可以在此处找到。

2.3、Keytab

Keytabs 是 FreeIPA 和 Kerberos 中使用的另一种形式的凭证材料。它由一对 Kerberos 委托人和加密密钥组成,这些密钥来自于与委托人相关的 Kerberos 密码。由于这些密钥来自于委托人的密码,因此,如果密码发生变化,keytab 将失效。
Keytab 文件可以用来获得它所覆盖的委托人的有效的授权票(TGT)。这个认证过程不需要密码,因为它包含从密码中派生的密钥。
解析 Keytab 文件非常简单,可以通过以下几种方法来完成。最简单的方法是用 klist 解析 keytab 文件。第二种方法是利用 Cody Thomas 创建的一个伟大的 Python 工具。他的 KeytabParser 项目将解析主体及其相关的加密密钥。

攻击者可以通过 kinit 命令生成 CCACHE 票据,从而重复使用存储在 keytab 文件中的凭证。

0x03 结论

对于攻击者来说,了解操作环境、包括各种正在使用的技术以及如何应用这些技术是最基本的。我希望这个系列文章能够给大家作为一个参考。
这是在一系列文章中的第一篇文章,记录了我在对 FreeIPA 环境进行测试的一些经验。在接下来的帖子中,我将会以以下内容为目标。

  • 简单概述 FreeIPA 内部的各种对象,以及它们之间的交互方式。如何在 FreeIPA 环境中从 IPA 服务器上枚举这些对象的信息。特别是实现横向移动的信息。
  • 在自定义的实验室环境中对整个攻击链进行开发利用。
  • 最后,概述了攻击者在 FreeIPA 环境中可以滥用的一些错误配置和独特场景。

0x04 参考

原文:https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖