攻击 FreeIPA 域(上):认证过程解析 - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com

攻击 FreeIPA 域(上):认证过程解析

丝绸之路 安全工具 2019-12-30 11:18:12
收藏

导语:最近,我有机会在一个通过 FreeIPA 管理的环境中工作。

最近,我有机会在一个通过 FreeIPA 管理的环境中工作。我想花点时间分享一些我从 FreeIPA 中学到的经验教训,还有它是如何工作的,以及我攻击它的方法。

首先,什么是 FreeIPA,我为什么要关心它?

说实话,直到我真的在野外遇到了 FreeIPA,我才知道这个东西。经过一番研究,我发现它是微软 Windows 活动目录的一个开源替代品,主要用作 Unix 环境的集成管理解决方案。与活动目录类似,FreeIPA 实现了一个完整的 LDAP 目录基础设施,该基础设施由 MIT Kerberos 密钥分发中心支持。它使用 Dogtag 证书系统管理 CA & RA 证书,使其能够处理双重身份验证和认证,包括智能卡。 SSSD 用于将 FreeIPA 集成到标准的 Unix 身份验证过程中。

所以,综上所述,我们现在拥有了一个 Unix 主机管理系统,带有 LDAP 和 Kerberos 协议,允许使用双重身份验证。

由于内容太多,为了使这些博客文章更具可读性,我将把它们分成一系列。这篇文章旨在涵盖以下内容:

· 通用文件 / 环境变量 / 二进制文件,以帮助在态势感知期间识别主机

· FreeIPA 环境中的身份验证,使用存储在内存中的 Keytab 文件、 CCACHE 票证文件和 CCACHE 票证

态势感知

注册在 FreeIPA 域中的 Linux 主机通常有一些指示器,操作员可以通过这些指示器来分类以获得关于主机和域的信息。让我们简要回顾一下一些文件、环境变量和二进制文件,这些信息表明主机已经注册到 FreeIPA 域。

下面的文件应该可以在 Kerberos 域中注册的每个主机上都能找到:

/etc/krb5.conf

· krb5.conf文件包含在域中注册所需的Kerberos客户端信息。这包括用于Kerberos域的KDC和管理服务器的位置、当前域和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

· 此变量设置默认的客户端 keytab 文件名。

KPROP_PORT

· 这个变量设置 kprop 使用的默认端口。

还有一些二进制文件标识注册到 FreeIPA 域中的主机:

ipa

· 这个二进制文件是管理 FreeIPA 域的标准文件。它可以用来管理主机、用户、 sudo 规则等等。

kdestroy

· kdestroy 二进制用于在用户会话中销毁任何当前的 Kerberos 票证。

kinit

· kinit 二进制用于建立或更新 Kerberos 票证

klist

· klist 二进制列出了当前使用的所有 Kerberos 票证,以及票证提供的访问权限

kpasswd

· kpasswd 命令用于更改 Kerberos 主体的密码。 kpasswd 首先提示输入当前 Kerberos 密码,然后提示用户输入两次新密码,并更改密码

ksu

· 可以使用 ksu 作为 su 二进制文件的替代,以切换当前用户上下文

kswitch

· kswitch 命令将切换正在使用的当前凭据缓存

kvno

· kvno 二进制文件获取指定 Kerberos 主体的服务票证,并输出每个主体的密钥版本号

认证

了解用于身份验证和授权的底层技术和进程对攻击者来说至关重要。如果不了解每种身份验证机制,攻击者可能会错过可能启用横向移动的有效凭据,或者在整个环境中的其他攻击路径。让我们简要回顾一下身份验证过程在 FreeIPA 管理的环境中是如何工作的。

由于 FreeIPA 使用 Kerberos 进行身份验证,这个过程与活动目录中的身份验证非常相似。为了访问域上的资源,用户必须拥有该资源的有效 Kerberos 票证。这些票证可以根据 FreeIPA 域的配置存储在许多不同的位置。我将简要地回顾每个身份验证机制,包括如何从攻击者的角度解析和重用这些材料。

CCACHE 票证文件

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

· 可以利用有效票证进行身份验证,而不需要各自的用户明文密码

· CCACHE 票证便于移动。它们可以被下载并加载到另一台主机上,而无需更新或验证票证

解析 CCACHE 票证可以通过多种不同的方式轻松完成。最简单的方法是使用 klist 二进制进行解析。

image.png

使用 Klist 二进制解析 CCACHE 票证

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

image.png

重用磁盘上找到的有效的 CCACHE 票证文件

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 可以为我们解析这些信息。

image.png

解析存储在 Keyring 中的 CCACHE 票证

作为攻击者,根据票证的作用域,重新使用存储在 Unix keyring 中的 CCACHE 票证相当困难。幸运的是来自@Tarlogic@Zer1t0已经构建了一个工具,可以从 Unix keyring 中提取 Kerberos 票证。这个工具叫做 Tickey,可以在这里找到

image.png

使用 Tickey 提取和重用存储在 Keyring 中的 CCACHE 票证

Keytab

Keytab 是 FreeIPA 和 Kerberos 中使用的另一种形式的凭证。它由一对 Kerberos 主体和从与主体关联的 Kerberos 密码派生的加密密钥组成。因为这些密钥是从主体的密码派生的,所以如果密码发生更改,keytab 将无效。

Keytab 文件可用于获取其作用域为的主体的有效票证授予票证(TGT)。此身份验证过程不需要密码,因为它包含从密码派生的密钥。

解析 Keytab 文件非常简单,可以通过几种方式完成。解析 keytab 文件最简单的方法是使用 klist。第二种方式利用了 Cody Thomas 创建的一个庞大的 python 实用程序。他的 KeytabParser 项目将解析出主体及其相关的加密密钥。

 image.png

使用 Klist 和 KeytabParser 解析 KeyTab 文件

攻击者可以通过 kinit 二进制文件生成一个 CCACHE 票证,从而重用存储在 keytab 文件中的凭据。

 image.png

利用 Keytab 文件获取有效的 CCACHE 票证

总结

对于攻击者来说,理解操作环境(包括正在使用的各种技术以及如何应用这些技术)是至关重要的。希望本系列文章可以作为在 FreeIPA 管理的环境中进行操作的参考。具体来说,就是从攻击者的角度提供对底层技术以及如何进行滥用的初步理解。

这是一系列文章中的第一篇文章,文中记录了我学会了如何在托管的 FreeIPA 环境中操作。在后续的文章中,我的目标是涵盖以下内容:

· 简要概述 FreeIPA 内部的各种对象,以及它们如何相互作用。如何从 IPA 服务器枚举 FreeIPA 环境中有关这些对象的信息。特别是有助于横向移动的信息

· 在自定义实验室环境中成功利用整个攻击链

· 最后,概述了 FreeIPA 环境中攻击者可能滥用的一些错误配置和独特场景

参考文献:

· MIT Kerberos 文档:https://web.mit.edu/kerberos/krb5-latest/doc/

· Kerberos凭证窃取(GNU/Linux)、Ronan Loftus和Arne Zismer:https://www.delaat.net/rp/2016-2017/p97/report.pdf

·  https://github.com/TarlogicSecurity/tickey

· 科迪 · 托马斯的KeytabParser项目:https://github.com/its-a-feature/KeytabParser

· 使用Keytab,印第安纳大学:https://kb.iu.edu/d/aumh

  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论