freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Active Directory 安全基础知识第一部分-Kerberos
2022-04-26 14:08:24
所属地 海外
1、Active Directory 安全概述

不同的AD对象的信息是以对象和属性的格式存储在AD中的,所有这些都是在我们前面讨论的活动目录模式中定义的。因为AD具有高度的可扩展性,其设计方式是通过验证请求并以访问所需资源的方式处理大量的读取和搜索操作以及更改和更新。所以这些存储在Active Directory中的数据会在整个森林中复制。在这一节中,我们将从安全的角度讨论Active Directory,并了解AD环境中身份认证是如何进行的。我们将讨论在AD中使用的不同安全协议,以及不同级别的权限。

2、Kerberos

Kerberos是一种身份验证协议,最初由 MIT开发并使用对称密钥加密技术。为了验证用户身份,AD需要可信的第三方授权。微软使用Kerberos作为域环境中的首选认证协议。Kerberos(或 Cerberus)是希腊神话中守卫地狱入口的三头犬的名字,就像它的名字一样,它需要三个实体来进行认证:

  • 客户端(或需要访问某项服务的用户)
  • KDC(密钥分发中心)
  • 资源服务器(托管用户所需的服务)

有关Kerberos协议的详细信息可以在RFC 4120https://datatracker.ietf.org/doc/html/rfc4120中找到。

3、Kerberos的组成部分

Kerberos有以下几个组成部分:

  • 委托人(Principal):客户端(用户)或服务。
  • 领域(Realm):一个逻辑 Kerberos 网络。
  • 票据(Ticket):验证主体身份的数据。
  • 凭据(Credentials):一个票据和一个服务密钥。
  • KDC:密钥分发中心,负责验证委托人的身份。
  • TGT:授予票据
  • TGS:票据授权服务
  • C/S:客户服务器,关于两者之间的通信。

Active Directory环境中,每个域控制器就像一个密钥分配中心,提供两个核心服务:

  • 认证服务:对客户进行认证并向他们发放票据。
  • 票据授予服务:向经过认证的客户发放票据,以访问其他资源。

在这种情况下,用户被允许证明他们的身份,以安全地访问域资源。Kerberos使用票据来允许用户对一个主体(如服务)进行身份验证。要请求一个服务的票据,你必须指定它的服务主体名称,例如HTTP/RDSWEB01SPN是服务账户的唯一标识符。

4、TGT

TGT是 "Ticket Granting Ticket(授予票据)"的缩写。授予票据 (TGT) 是一种特殊票据,它允许客户端在同一Kerberos领域内获得额外的 Kerberos票据。当客户端向密钥分发中心(KDC)发送票据请求时,KDC为客户端创建一个票据授予票据(TGT),(用客户端的密码作为密钥对其进行加密)并将加密的TGT发回给客户。然后,客户使用其密码来解密TGT。如果客户成功地解密了TGT(即,如果客户给出了正确的密码),它将保留解密的TGT,该TGT用于表明客户端的身份的证明。

TGT 允许客户端获得额外的票证(如 TGS),从而获得特定服务的许可。

5、TGS

TGS是 "Ticket granting service(票据授予服务)"的缩写。TGS是一个 KDC组件,当客户端请求连接到 Kerberos服务时,它将签发服务票据。客户端需要有一个有效的 TGT,只有这样 TGS才会被签发给它。

6、Inter-Realm TGT(跨领域TGT)

如果在森林间信任的认证中,则不是使用Domain1krbtgt账户进行加密。而是用各域之前交换的域间信任密钥对票据进行加密/签名,这被称为 "域间票据-授予-票据/TGT"。然后Domain2验证转介中包含的TGT,使用先前协商的跨域信任密钥对其进行解密并继续进行后续工作。跨领域的TGT是可以伪造的。我们将在后续文章中进行介绍。将在后续文章中详细解释执行kerberoasting时的Kerberos过程。

假设一个来自Domain1的客户想要访问位于Domain2的服务器。以下是它的发生过程:

1、一个来自Domain1的客户向DC1请求一个TGT

2、DC1返回一个TGT(使用用krbtgt哈希加密)。

3、客户端出示TGT并请求TGS以访问Domain2的服务器。

  • 由于DC1在当前域中没有找到服务器,并且意识到TGS需要由(Domain2的)DC2发出,因为服务器位于Domain2中。所以它用Inter-Realm TGT响应给客户。

4、客户端向Domain2中的DC2出示Inter-Realm信任密钥加密的TGT,并请求TGS访问服务器。

5、DC2 发回使用服务器帐户哈希加密的服务器的 TGS

6、客户端向服务器出示TGS(用服务器的账户哈希值加密),以便访问。

7、Kerberos 认证流程

image-20220414103511527

Kerberos认证的工作方式是这样的:

  • 客户端向密钥分发中心(KDC)请求认证票据(TGT)。
  • 密钥分发服务器验证证书,并发回一个加密的TGT和会话密钥。
  • TGT由客户端存储,当它过期时,本地会话管理器将请求另一个TGT

当客户端需要访问网络上的服务/资源时,遵循以下流程:

  • 客户端向TGS发送当前的TGT,并附上想要访问的资源的服务主体名称(SPN)。
  • KDC验证客户的TGT,同时验证客户是否有权访问服务。
  • TGS向客户端发送一个有效的服务会话密钥。
  • 客户端将会话密钥转发给服务,以证明它有访问权,而服务则授予访问权。

PAC validation(PAC 验证)

在上图中,PAC验证发生在资源服务器和KDC之间。让我们更多地讨论一下PAC验证。PAC(Privilege Attribute Certificate )(特权属性证书)代表一种结构(几乎包括在所有票据中),它包含有用的信息,如安全标识符、组成员资格、用户配置文件信息和密码凭证。PAC是用KDC的密钥签署的。

PAC验证是根据活动目录验证用户在服务器上的PAC以确保它其有效的过程。服务器的操作系统执行Kerberos PAC验证,以防止中间人攻击篡改PAC结构,避免伪造的PAC

可以使用注册表项ValiateKdcPacSignature启用它,该注册表项位于以下位置:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters
"ValidateKdcPacSignature"=dword:00000001

当这个条目的值为0时,Kerberos不会对作为服务运行的进程进行PAC验证。当这个条目的值为1时,Kerberos执行PAC验证。修改此注册表项后,你必须重新启动计算机。当该条目不存在时,系统的行为就像该条目存在并且值为1。在Windows Server 2008中,该条目的默认值为0

8、NTLM

NTLMNT Lan Manager的缩写。它是一种质询-响应身份验证协议。在 Kerberos之前,Microsoft 使用 NTLM进行身份验证。目标计算机或域控制器对密码进行质询和检查,并存储密码哈希值以便继续使用。它仍然适用于工作组中的老旧客户端和系统。

NTLM依靠一个质询-响应身份验证协议来确认用户,而无需他们提交密码。

参考资料:

https://docs.microsoft.com/en-us/archive/blogs/openspecification/understanding-microsoft-kerberos-pac-validation

9、说明

本文由笔者在原文上编译,转载请注明原文出处。

原文出处:Active Directory Security Fundamentals (Part 1)- Kerberos

# 渗透测试 # 域渗透
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者