前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蜜罐账户的艺术:让不寻常的看起来正常

蜜罐账户的艺术:让不寻常的看起来正常

作者头像
Khan安全团队
发布2022-01-24 16:04:47
1.7K0
发布2022-01-24 16:04:47
举报
文章被收录于专栏:Khan安全团队

本文介绍如何创建用作蜜罐(或蜜令牌)的帐户,这些帐户看起来像是提供了攻击者想要的东西(访问),但最终提供了防御者想要的东西(检测)。重点是使蜜罐帐户在 Active Directory 中看起来正常且“真实”,并且此前提应该在某种程度上可以移植到其他系统。

AD Recon 101 我之前曾在演示文稿中介绍过 AD 侦察( DEF CON 2016:超越 MCSE,Red-Teaming Active Directory),但在此处提供了更多关于特权 AD 帐户侦察的详细信息。 当攻击者对 Active Directory 进行侦察时,需要查看几个关键项目: 

  1. 识别特权帐户 
  2. 使用旧密码识别特权帐户
  3. 使用 Kerberos 服务主体名称 (SPN) 识别特权帐户
  4. 通过常规工作站上的网络会话识别特权帐户

在大多数 Active Directory 环境中,我们可以作为普通 AD 用户(在某些情况下没有有效的 AD 凭据)扫描所有这些 AD 森林。

1. 识别特权账户 

让我们从#1 开始。我们可以递归枚举 AD 森林中每个域中的管理员组,也可以扫描每个域中用户属性“AdminCount”设置为 1 的所有 AD 用户帐户。我介绍了 AdminCount 属性在 2015 年的用途(DerbyCon – “红色与蓝色 Active Directory 攻击与防御”)。

在添加到特权 AD 组(例如管理员、域管理员、企业管理员等)的任何 AD 帐户上,AdminCount 属性自动设置为 1。此技术有用性的限制因素是,我们还可能找到用于属于特权 AD 组,但不再是成员。这意味着扫描 AdminCount=1 的 AD 帐户会提供 潜在特权帐户的快速列表(没有组枚举)。

2.使用旧密码识别特权帐户

一旦我们有了特权帐户列表,我们就想检查旧密码。我通常将“旧密码”定义为超过 5 年,因为 Active Directory 安全性实际上只是在过去 5 年左右(大约从 2014/2015 年左右开始)成为大多数组织的关注点。任何密码超过 5 年的帐户都可能不是很好,任何超过 10 年的密码可能更糟。作为攻击者,我更有可能针对使用旧密码的帐户。

3. 使用 Kerberos 服务主体名称 (SPN) 识别特权帐户

我们还可以检查特权帐户列表以查看它们是否具有关联的 Kerberos 服务主体名称 (SPN)。对于任何具有至少一个 SPN 的帐户,我们可以使用一种称为“ Kerberoast ”的攻击” 可能会离线破解密码。攻击者需要做的就是为 SPN 请求一个 Kerberos 服务票证(通常使用 RC4,它使用 NTLM 密码哈希来加密票证)并将其保存到我们的密码破解系统。破解方法是遍历潜在密码(包括键盘映射/步行类型密码,这些密码只是基于字符在键盘上的位置的简单模式——在管理员中很流行),将它们转换为 NTLM,并尝试使用此打开服务票证NTLM 密码哈希。如果我们能打开票,我们就成功猜到了密码。所有这些都只有用户权限和企业网络上的最少活动。

4. 在常规工作站上识别具有网络会话的特权帐户

我将在此 AD 侦察速成课程中介绍的最后一项检查是检查常规工作站上特权帐户的网络会话。这是一项已执行多年的检查,Will (Harmj0y) 过去已广泛涵盖此内容 ( I Hunt SysAdmins )。有一个原始的 NT 方法(NetSessionEnum) 为任何经过身份验证的用户(“经过身份验证的”包括通过信任连接的帐户)提供从 Windows 服务器请求与其有会话的帐户的能力(包括帐户名称、帐户调用的计算机、会话时间等) )。此信息使攻击者能够收集网络会话信息并识别正在使用哪些计算机特权帐户。借助此信息,攻击者可以确定如何破坏单台计算机以获取对管理员凭据的访问权限并破坏 AD。这是管理系统对于保护管理帐户至关重要的原因之一。

特权账户——攻击者的视角

既然攻击者拥有特权 AD 帐户列表并确定了潜在目标,那么攻击者可以执行哪些检查来“验证”这些帐户以及防御者可以采取哪些措施来反击?

从攻击者的角度来看,如果 Domain Admins 中有一个密码为 15 年且具有关联 SPN 的 AD 帐户,那看起来就像是赢家。Kerberoast 该帐户,从那里获取密码和 pwn AD!

但是攻击者如何在攻击之前验证多汁的目标(可能存在漏洞的帐户)呢?

有一些关键的 AD 用户属性是通过帐户的正常使用而更新的。这包括帐户上次登录的时间、上次登录的位置、上次更改密码的时间等。攻击者希望检查以下内容:

  • 帐户是什么时候创建的? 在过去一年左右创建的帐户可能是可疑的。
  • 帐户最后一次登录是什么时候? 如果该帐户自创建日期以来未登录或未登录,则该帐户可能是蜜罐帐户。
  • 上次更改密码是什么时候?如果密码自创建之日起未更改,则可能存在疑问。
  • 我们可以确定 (NetSessionEnum) 帐户的使用位置吗?缺少网络会话数据的帐户并不意味着它是蜜罐。
  • 如果是管理员帐户,是否有相关的用户帐户处于活动状态?如果有一个名为 adm-smetcalf 的管理员帐户,但没有用户帐户 smetcalf 并且所有其他 AD 管理员帐户都可以通过这种方式关联,这可能是一个蜜罐帐户。我已经使用这种技术在现实环境中识别了蜜罐帐户。[肖恩注意:如果您希望红队在您的环境中非常小心地进行并仔细检查所有内容,请在 AD 中创建一个“Sean Metcalf”帐户。或者有人告诉我😊]
  • 如果有关联的 Kerberos SPN,该 SPN 是否有效?“验证” SPN 的一种快速方法是提取计算机名称并检查 AD 以查看是否在 AD 林中找到计算机名称。如果不是,这可能是可疑的(或一个非常旧的帐户)。

攻击者尝试发现蜜罐帐户的一些简单方法是检查帐户的创建时间,并将该日期与上次密码更改和上次登录日期进行比较。如果这些都大致相同,则该帐户很可能是假的或不活跃的。

以下是我们可以用来检查 AD 帐户有效性的一些查询:

  • Pwdlastset : 上次设置帐户密码时的整数8 格式的日期/时间。
  • BadPasswordTime:最后一次尝试为帐户输入错误密码的日期/时间,整数 8 格式。这仅在身份验证域控制器上进行跟踪,并且不会被复制。
  • LastLogon、LastLogonTimeStamp 和 LastLogonDate:跟踪登录日期/时间的属性。只有 LastLogonTimeStamp 被复制到域中的所有 DC,尽管有时仅在最近 2 周内复制。
  • logoncount:每次帐户成功通过身份验证时域控制器上的更新(属性不会复制,因此可靠地捕获此信息需要连接域中的每个 DC 以确定总数)。
  • Logonhours:配置以控制帐户何时可以登录。
  • userworkstations(微软表示不应再使用):配置以控制帐户可以登录的位置。

建立我们的蜜罐帐户

我们想要一个攻击者想要的目标(又名“诱饵”),并为防御者提供一种新的检测方法,攻击者与目标的交互可以识别正在发生的恶意活动。理想情况下,防御者会收到足够有用的详细信息,例如“2020 年 7 月 7 日下午 3:17 在 COMP01 计算机上检测到利用 ADMINM3 帐户的活动”。

作为后卫,我们有主场优势;我们可以配置环境,因为我们希望在检测潜在恶意活动时提供更好的保真度。

既然我们已经决定创建我们的蜜罐(或蜜令牌)帐户,那么是什么让 Active Directory (AD) 帐户看起来“真实”?

由于我们已经审查了攻击者对特权帐户的看法,因此我们对攻击者的兴趣有所了解。我们可以使用这些信息来使蜜罐帐户看起来更受欢迎和真实。

我们需要确保我们的蜜罐账户:

  • 不是最近创建的帐户:可以重新使用旧帐户,即不活动且从未清理过的帐户。这会使帐户“老化”并提供一定程度的合法性。在 10 到 20 年的 AD 环境中,一个 10 到 15 年的帐户通常会被认为是真实的。虽然可能有一些方法可以确定帐户是否已通过 AD 复制元数据“重新利用”,但这是一个更复杂的 AD 主题,超出了本文的范围。
  • 有一个旧密码,但只有在类似帐户有旧密码的情况下:如果这个帐户有一个 7 年的密码,但所有其他 AD 管理员帐户每两年更改一次密码(包括服务帐户)。
  • 如果它应该是一个服务帐户,它看起来真的像一个服务帐户:服务帐户通常需要各种奇怪的配置,并且没有与人相关的限制帐户。这通常是更容易配置的蜜罐帐户(并且不需要关联的常规用户帐户)。
  • 已至少登录一次(最好更多):非活动帐户看起来很可疑,尤其是在所有其他帐户定期登录时。在受保护的服务器上配置计划任务以每天/每周使用此帐户登录以增加合法性。如果假设蜜罐帐户要显示为非活动(并被遗忘),请确保有多个登录与其关联,因为攻击者可能会检查 logoncount 属性(尽管此属性不会被复制,因此需要检查多个 DC 才能获得准确的计数)。
  • 有一个关联的用户帐户:这是一个关键项目,特别是如果蜜罐帐户应该是与一个人关联的管理员帐户。
  • 密码错误尝试:真实帐户有相关的错误密码尝试,因为人们会犯错误——甚至是服务帐户。由于不会复制跟踪该属性的属性,因此这不是攻击者验证的可靠检查,但如果找到,可能足以将帐户标识为“有效”。
  • 看起来像其他管理员帐户:这是关键。如果这个帐户看起来是最好的目标,但它似乎真的很脆弱,而其他环境非常紧张,这可能是攻击者的一个危险信号,并且可以避免这个帐户。

蜜罐帐户的最大挑战之一是使其成为一个明确的目标,一个攻击者情不自禁地追击的目标,但如果攻击者可以访问它,则限制该帐户可以做什么(或以某种方式限制它)它不提供攻击者利益)。

有几种方法:

  1. 将蜜罐帐户添加到具有真实权限的特权 AD 组,并确保其具有长而复杂的密码。一个简单的方法是打开帐户,选中用户选项“使用智能卡登录”,单击应用,然后取消选中应用。这会将密码随机化为无法猜测的密码,因为它像 AD 计算机帐户密码一样长且复杂。
  2. 将蜜罐帐户添加到特权 AD 组,并为攻击者提供获取假密码的能力。这可以通过看起来像服务帐户的蜜罐帐户来完成。使用“供应商密码:HPSIMple2005!”之类的内容更新信息属性。并且不要将密码设置为此。
  3. 将蜜罐帐户添加到特权 AD 组并为攻击者提供获取真实密码的能力(添加攻击者将 Kerboeroast 的 SPN),但以某种方式限制帐户。LogonWorkstations 属性可能是保护帐户的最简单方法,因为它只能登录到特定计算机。LogonHours 是另一种限制此帐户登录能力的好方法。

注意:如果您决定使用 LogonWorkstations 来限制蜜罐帐户的登录能力,如果攻击者能够发现相关密码,并且 至少有 1 个计算机帐户在 AD 中不存在,则存在潜在的升级路径。Active Directory 的默认配置允许任何用户将 10 个计算机帐户添加到 AD 域(技术上更多,因为每个计算机帐户可以添加 10 个)。这意味着,如果没有与 LogonWorkstations 中的所有值相关联的计算机帐户,攻击者可能会使用受感染的用户帐户创建新的计算机帐户,并最终将其与未加入的计算机相关联,最终使用这台新加入域的计算机帐户以与蜜罐帐户交互登录。

Trimarc 建议

Trimarc 不建议将帐户置于域管理员等特权 AD 组中,并将此帐户的有效凭据保留在 AD 中。如果此帐户的保护不完善,您最终可能会因此配置而导致 AD 受到威胁。

在您的环境中创建多个蜜罐帐户以使攻击者绊倒。无论您决定部署什么,请确保这些帐户看起来像环境中的其他帐户。

Kerberoast 蜜罐帐户(服务帐户或管理员帐户):监视此帐户的 Kerberos 服务票证请求。

组策略首选项密码蜜罐(不一定是帐户):在每个域的 DC 上的 SYSVOL 共享中创建一个随机 GUID 文件夹名称,并在该文件夹上设置一个 SACL(审计条目)(确保域控制器审计配置为启用对象访问 - 高级审计策略配置中的审计文件系统)。如果有人试图阅读它,那可能是恶意的,因为它没有与真正的组策略对象相关联。

  • 示例 GUID:BD5739C3-484F-40EB-CA0B-E88F987FBC63

本文末尾提供了用于创建随机 GUID 的 PowerShell 代码。

我们还可以在这些包含凭据的 GUID 文件夹中放置一些 XML 文件,以查看是否有人尝试使用它们。组策略首选项密码在 XML 中存储为“cpassword”。这是一个示例“groups.xml”文件,可以调整它以放置在 SYSVOL GUID 文件夹结构中:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}">
<User clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}" name="Administrator (built-in)" image="2" changed="2019-03-17 03:17:23" uid="{D5FE7352-81E1-42A2-B7DA-118402BE4C33}">
<Properties action="U" newName="TRDAdmin" fullName="" description="Standard Admin Account" cpassword="RI133B2Wl2CiIOCau1DtrtTe3wdFwzCiWB5PSAxXMDstchJt3bLOUie0BaZ/ 7rdQiuqTonF3ZWAKa1iRvd4JGQ" changelogon="0" noChange="0" neverExpires="0" acctDisabled="0" subAuthority="RID_ADMIN" userName="Administrator (built-in)" expires="2019-03-16" />
</User>
</Groups>

文本属性(信息或描述)中密码错误的服务帐户:监控身份验证尝试和错误密码尝试。

用于创建随机 GUID 的 PowerShell 代码

代码语言:javascript
复制
# GPO GUID Structure: 8-4-4-4-12
Function Get-HexString
 {
 Param
 ([int]$Length)
 (1..$Length | %{ '{0:X}' -f (Get-Random -Max 16) }) -join ''
 }
 
$HexLengthArray = @(
'8',
'4',
'4',
'4',
'12'
)
 
$RandomGUIDString = $NULL
ForEach ($HexLengthItem in $HexLengthArray)
 {
 [string]$RandomGUIDString += $(Get-HexString -Length $HexLengthItem) + '-'
 [string]$RandomGUIDString2 += $(Get-HexString -Length $HexLengthItem) + '-'
 }
 
$RandomGUID = $RandomGUIDString.Substring(0,$RandomGUIDString.Length-1)
$RandomGUID2 = $RandomGUIDString2.Substring(0,$RandomGUIDString2.Length-1)
 
# Ensure generated GUID doesn't match Microsoft defaults
# Default Domain Policy 31B2F340-016D-11D2-945F-00C04FB984F9 
# Default Domain Controllers Policy 6AC1786C-016F-11D2-945F-00C04fB984F9
 
IF ( ($RandomGUID -eq '31B2F340-016D-11D2-945F-00C04FB984F9') -OR ($RandomGUID -eq '6AC1786C-016F-11D2-945F-00C04fB984F9') )
 { $RandomGUID2 }
ELSE
 { $RandomGUID } 

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档