FreeIPA Pentesting
基本信息
FreeIPA 是 Microsoft Windows Active Directory 的开源替代品,主要用于Unix环境。它将完整的LDAP 目录与类似 Active Directory 的 MIT Kerberos 密钥分发中心相结合。利用 Dogtag 证书系统进行 CA 和 RA 证书管理,支持包括智能卡在内的多因素身份验证。SSSD 用于 Unix 认证过程的集成。
指纹
文件和环境变量
位于
/etc/krb5.conf
的文件存储着 Kerberos 客户端信息,用于域注册所必需。其中包括 KDC 和管理员服务器的位置、默认设置和映射。位于
/etc/ipa/default.conf
的文件设置了 IPA 客户端和服务器的系统范围默认值。域内的主机必须在
/etc/krb5.keytab
处拥有一个krb5.keytab
文件,用于认证过程。各种环境变量(
KRB5CCNAME
、KRB5_KTNAME
、KRB5_CONFIG
、KRB5_KDC_PROFILE
、KRB5RCACHETYPE
、KRB5RCACHEDIR
、KRB5_TRACE
、KRB5_CLIENT_KTNAME
、KPROP_PORT
)用于指向与 Kerberos 认证相关的特定文件和设置。
二进制文件
诸如 ipa
、kdestroy
、kinit
、klist
、kpasswd
、ksu
、kswitch
和 kvno
等工具对于管理 FreeIPA 域、处理 Kerberos 凭据、更改密码以及获取服务票据等功能至关重要。
网络
提供了一个示例来描述典型的 FreeIPA 服务器设置。
认证
FreeIPA 中的认证利用Kerberos,与Active Directory中的认证类似。访问域资源需要有效的 Kerberos 票据,根据 FreeIPA 域配置的不同,可以将其存储在不同位置。
CCACHE 票据文件
CCACHE 文件通常存储在 /tmp
中,权限为 600,是用于存储 Kerberos 凭据的二进制格式,由于其可移植性,对于无需用户明文密码进行认证很重要。使用 klist
命令可以解析 CCACHE 票据,重用有效的 CCACHE 票据涉及将 KRB5CCNAME
导出到票据文件的路径。
Unix 密钥环
另外,CCACHE 票据可以存储在 Linux 密钥环中,提供对票据管理的更多控制。票据存储的范围不同(KEYRING:name
、KEYRING:process:name
、KEYRING:thread:name
、KEYRING:session:name
、KEYRING:persistent:uidnumber
),klist
能够解析用户的此信息。然而,从 Unix 密钥环中重用 CCACHE 票据可能会带来挑战,可使用类似 Tickey 的工具来提取 Kerberos 票据。
Keytab
Keytab 文件包含 Kerberos 主体和加密密钥,对于获取有效的票据授予票据(TGT)而无需主体密码至关重要。使用类似 klist
和 KeytabParser 的实用工具可以轻松地解析和重用来自 keytab 文件的凭据。
备忘单
您可以在以下链接中找到有关如何在 Linux 中使用票据的更多信息:
pageLinux Active Directory枚举
您可以通过 ldap 和其他 二进制工具执行枚举,或者连接到 FreeIPA 服务器的端口 443 上的网页进行枚举。
主机、用户和组
可以创建主机、用户和组。主机和用户被分类到称为“主机组”和“用户组”的容器中。这类似于组织单位(OU)。
在 FreeIPA 中,默认情况下,LDAP 服务器允许匿名绑定,并且大量数据可以无需身份验证进行枚举。这可以枚举所有可用的未经身份验证的数据:
要获取更多信息,您需要使用一个经过身份验证的会话(请查看身份验证部分以了解如何准备经过身份验证的会话)。
从加入域的计算机,您将能够使用已安装的二进制文件来枚举域:
FreeIPA 的 admin 用户相当于 AD 中的 domain admins。
Hashes
IPA 服务器 的 root 用户可以访问密码 hashes。
用户的密码哈希以 base64 形式存储在 “userPassword” attribute 中。该哈希可能是 SSHA512(旧版本的 FreeIPA)或 PBKDF2_SHA256。
如果系统与 AD 集成,密码的 Nthash 以 base64 形式存储在 “ipaNTHash” 中。
要破解这些哈希:
• 如果 FreeIPA 与 AD 集成,ipaNTHash 容易破解:您应该 decode base64 -> 重新编码为 ASCII 十六进制 -> John The Ripper 或 hashcat 可以帮助您快速破解
• 如果使用旧版本的 FreeIPA,那么使用 SSHA512:您应该解码 base64 -> 找到 SSHA512 hash -> John The Ripper 或 hashcat 可以帮助您破解
• 如果使用新版本的 FreeIPA,那么使用 PBKDF2_SHA256:您应该解码 base64 -> 找到 PBKDF2_SHA256 -> 其长度为 256 字节。John 可以处理 256 位(32 字节)-> SHA-265 用作伪随机函数,块大小为 32 字节 -> 您只能使用 PBKDF2_SHA256 哈希的前 256 位 -> John The Ripper 或 hashcat 可以帮助您破解
要提取哈希,您需要成为 FreeIPA 服务器 中的 root 用户,然后可以使用工具 dbscan
来提取它们:
HBAC-Rules
这些规则授予用户或主机对资源(主机、服务、服务组等)的特定权限。
Sudo规则
FreeIPA通过sudo规则实现对sudo权限的集中控制。这些规则允许或限制在域内的主机上使用sudo执行命令。攻击者可能通过检查这些规则集来识别适用的主机、用户和允许的命令。
基于角色的访问控制
一个角色由各种特权组成,每个特权包含一组权限。这些角色可以分配给用户、用户组、主机、主机组和服务。例如,考虑默认的FreeIPA中的“用户管理员”角色来说明这种结构。
用户管理员
角色具有以下特权:
用户管理员
组管理员
阶段用户管理员
使用以下命令可以枚举角色、特权和权限:
攻击场景示例
在https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e中,您可以找到一个简单的示例,说明如何滥用某些权限来 compromise 域。
Linikatz/LinikatzV2
提权
root 用户创建
如果您可以创建一个名为 root
的新用户,您可以冒充他,然后您将能够以 root 身份 SSH 进入任何机器。
此问题已修复。
您可以在https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b中查看详细说明。
参考资料
最后更新于