安全矩阵

 找回密码
 立即注册
搜索
楼主: sandalwood

马鹏雲的学习日记

[复制链接]

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
 楼主| 发表于 2022-1-14 22:19:20 | 显示全部楼层
票据和令牌
票据
白银票据
白银票据的原理
白银票据(Silver Tickets)是伪造Kerberos票证授予服务(TGS)的票也称为服务票据。如下图所示,与域控制器没有AS-REQ 和 AS-REP(步骤1和2),也没有TGS-REQ / TGS-REP(步骤3和4)通信。由于银票是伪造的TGS,所以没有与域控制器通信。

(图为kerberos协议部分认证过程)
白银票据伪造TGS,通过已知的授权服务密码生成一张可以访问该服务的TGT。

白银票据的特点

1.白银票据是一个有效的票据授予服务(TGS)Kerberos票据,因为Kerberos验证服务运行的每台服务器都对服务主体名称的服务帐户进行加密和签名。

2.黄金票据是伪造TGT并且有效的获得任何Kerberos服务,而白银票据是伪造TGS。这意味着白银票据仅限于特定服务器上的任何服务。

3.大多数服务不验证PAC(通过将PAC校验和发送到域控制器进行PAC验证),因此使用服务帐户密码哈希生成的有效TGS可以完全伪造PAC

4.攻击者需要服务帐户密码哈希值

5.TGS是伪造的,所以没有和TGT通信,意味着DC从验证过。

6.任何事件日志都在目标服务器上。

白银票据的服务列表
Service Type        Service Silver Tickets
WMI        HOST
RPCSS
PowerShell Remoting        HOST
HTTP
WinRM        HOST
HTTP
Scheduled Tasks        HOST
Windows File Share (CIFS)        CIFS
LDAP operations including
Mimikatz DCSync        LDAP
Windows Remote Server Administration Tools        RPCSS
LDAP
CIFS

黄金票据
黄金票据的原理
黄金票据是伪造票据授予票据(TGT),也被称为认证票据。如下图所示,与域控制器没有AS-REQ或AS-REP(步骤1和2)通信。由于黄金票据是伪造的TGT,它作为TGS-REQ的一部分被发送到域控制器以获得服务票据。

(图为kerberos协议的部分认证过程)
黄金票据的特点
1.域控制器中的KDC服务不验证TGT中的用户帐户,直到TGT超过20分钟,这意味着攻击者可以使用禁用和删除的帐户,甚至是在Active Directory中不存在的虚拟帐户。
Kerberos V5不提供对TGS请求的帐户撤销检查,只要TGT有效,即使该帐户已被删除,TGT更新和服务票据也可以发布。KILE提供了一个可以将利用时间限制在较短的时间内(20分内)。当TGT大于20分钟时,KILE KDC需要在域中检查账户。

2.由于在域控制器上由KDC服务生成的域设置了Kerberos策略,如果提供票据,则系统信任票据的有效性。这意味着,即使域策略声明Kerberos登录票据(TGT)只有10小时有效,如果票据声明有效期为10 年,那么也会信任票据的有效性期为10年。

3.该KRBTGT帐户密码从不更改*和直到KRBTGT密码被更改(两次),攻击者可以创建黄金票据。请注意,即使伪造用户更改其密码,创建用于模拟用户的Golden Ticket仍然存在。

4.它绕过了SmartCard身份验证要求,因为它绕过了DC在创建TGT之前执行的常规验证。

5.这个精心创建的TGT要求攻击者拥有Active Directory域的KRBTGT密码哈希值(通常从域控制器转储)。

6.KRBTGT NTLM哈希可用于生成一个有效的TGT(使用RC4)模拟任何用户访问Active Directory中的任何资源。

7.在主机上都可以生成和使用黄金票据(TGT),即使没有加入域也是如此。只要网络可以访问域。

8.用于从AD森林中的DC获取有效的TGS票据,并提供一个坚持在一切域访问所有的主机的好办法。


黄金票据的局限性
黄金票据 “欺骗”了当前域的管理权限,当KRBTGT帐户密码哈希显示在作为多域AD的林一部分的子域中时存在此局限性。因为是根(root)域包含全森林管理组Enterprise Admins。由于Mimikatz通过相对标识符(RID)向票据添加了组成员资格,因此Kerberos票据中的519(企业管理)RID在其创建的域中(基于KRBTGT帐户域)被标识为本地。如果通过获取域SID和附加RID创建的域安全标识符(SID)不存在,那么Kerberos票据的持有者不会收到该级别的访问权限。换句话说,在一个多域AD森林中,如果创建的Golden Ticket域不包含Enterprise Admins组,则Golden Ticket不会向林中的其他域提供管理权限。在单个域Active Directory林中,由于Enterprise Admins组驻留在此域中,这时创建Golden Ticket不存在局限性。
除非在Enterprise Admins中,否则黄金票据不能跨域信任使用,。标准的黄金票据仅限于其创建的子域
绕过黄金票据的局限性
在迁移方案中,从DomainA迁移到DomainB的用户将原始DomainA用户SID值添加到新的DomainB的 SID History属性中。当用户使用新帐户登录DomainB时,DomainA SID将与确定访问的DomainB用户组一起验证。这意味着可以将SID添加到SID历史记录以扩展访问。

  一旦Mimikatz支持Golden Ticket(和Silver Tickets)中的SID History,事情会变得更加有趣,因为AD Forest中的任何组都可以被包含并用于授权访问。使用最新版本的Mimikatz,我们现在可以将SID历史记录添加到Forest Enterprise Admins组的Golden Ticket中。一旦单个域名的KRBTGT帐户密码哈希被获取到,通过黄金票据可伪造用户登录到整个森林中。 总而言之,一旦一个域名受到威胁。黄金门票现在可以用来微机AD森林中的任何域
防御被利用黄金票据

1.限制域管理员登录到除域控制器和少数管理服务器以外的任何其他计算机(不要让其他管理员登录到这些服务器)将所有其他权限委派给自定义管理员组。这大大降低了攻击者访问域控制器的Active Directory的ntds.dit。如果攻击者无法访问AD数据库(ntds.dit文件),则无法获取到KRBTGT帐户密码。

2. 禁用KRBTGT帐户,并保存当前的密码以及以前的密码。KRBTGT密码哈希用于在Kerberos票据上签署PAC并对TGT(身份验证票据)进行加密。如果使用不同的密钥(密码)对证书进行签名和加密,则DC(KDC)通过检查KRBTGT以前的密码来验证。

3.建议定期更改KRBTGT密码(毕竟这是一个管理员帐户)。更改一次,然后让AD备份,并在12到24小时后再次更改它。这个过程应该对系统环境没有影响。这个过程应该是确保KRBTGT密码每年至少更改一次的标准方法。

4.一旦攻击者获得了KRBTGT帐号密码哈希的访问权限,就可以随意创建黄金票据。通过快速更改KRBTGT密码两次,使任何现有的黄金票据(以及所有活动的Kerberos票据)失效。这将使所有Kerberos票据无效,并消除攻击者使用其KRBTGT创建有效金票的能力。
操作
生成白银票据
手工生成的条件
1.域名
2.域SID
3.目标的FQDN(全限定域名)
4.可利用的服务
5.服务账号的NTLM
6.需要伪造的用户名

手工生成白银票据
主域控:windows server 2012 IP地址:192.168.107.146
域内机器(Client):windows 7地址:192.168.107.164
生成黄金票据
手工生成的条件
1.域名称[AD PowerShell模块:(Get-ADDomain).DNSRoot]
2.域的SID 值[AD PowerShell模块:(Get-ADDomain).DomainSID.Value]
3.域的KRBTGT账户NTLM密码哈希
4.伪造用户名

一旦攻击者拥有管理员访问域控制器的权限,就可以使用Mimikatz来提取KRBTGT帐户密码哈希值。





令牌
概念
Token, 令牌,代表执行某些操作的权利的对象
访问令牌(Access token)表示访问控制操作主体的系统对象

Token, Petri 网(Petri net)理论中的Token
密保令牌(Security token),或者硬件令牌,例如U盾,或者叫做认证令牌或者加密令牌,一种计算机身份校验的物理设备
会话令牌(Session token),交互会话中唯一身份标识符
令牌化技术 (Tokenization), 取代敏感信息条目的处理过程
Windows 访问令牌(Access Tokens) 是一个描述进程或线程安全上下文的对像。

令牌中的信息包括与进程或线程关联的用户帐户的标识和特权。当用户登录时,系统通过将用户密码与安全数据库中存储的信息进行比较来验证用户密码。如果密码通过身份验证,则系统将生成访问令牌。该用户执行的每个进程都有此访问令牌的副本。

当线程与安全对象进行交互或尝试执行需要特权的系统任务时,系统使用访问令牌来标识用户。访问令牌包含以下信息:
    用户帐户的安全标识符(SID)
    用户帐户所属的用户群的SIDs
    一个logon SID,标识当前登录会话
    用户或用户群的特权清单
    所有者的SID
    基本群的SID
    当用户创建可安全对象(securable object)且没有给出安全描述符时,系统使用的缺省的自主访问控制列表(DACL)
    访问令牌资源
    是否为primary或impersonation token
    限制性SIDs的可选列表
    当前impersonation级别
    其他统计

攻击者可以使用访问令牌在不同的用户或系统安全性上下文下进行操作,以执行操作并逃避检测。

攻击者可以使用内置的Windows API函数来复制现有进程中的访问令牌。这被称为令牌窃取。

攻击者必须已经在特权用户上下文(即管理员)中才能窃取令牌。攻击者通常使用令牌窃取将其安全上下文从管理员级别提升到SYSTEM级别。如果帐户对远程系统具有适当的权限,则对手可以使用令牌作为该令牌的帐户向远程系统进行身份验证。
操作
攻击者可以通过以下三种方法来利用访问令牌:

令牌模拟/盗窃 -使用 DuplicateToken(Ex) 函数创建一个新的访问令牌,该令牌复制自现有令牌。然后可以将该令牌用于 ImpersonateLoggedOnUser 函数,允许调用线程模拟已登录用户的安全上下文,或者使用 SetThreadToken 函数将模拟令牌分配给线程。当目标用户在系统上具有非网络登录会话时,这很有用。

使用令牌创建进程 - 通过DuplicateToken(Ex)复制令牌,并使用CreateProcessWithTokenW 把复制的令牌用于创建在模拟用户的安全上下文下运行的新进程。这对于在其他用户的安全上下文下创建新进程很有用。

制作和模拟令牌 - 攻击者具有用户名和密码,但用户未登录到系统。可以使用LogonUser 函数为用户创建登录会话。该函数将返回新会话的访问令牌的副本,并且可以使用 SetThreadToken 函数用来将令牌分配给线程。

任何标准用户都可以使用 runas 命令和 Windows API 函数来创建模拟令牌。它不需要访问管理员帐户。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-5-19 11:01 , Processed in 0.012562 second(s), 16 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表