开发者社区> 玄学酱> 正文

Active Directory域渗透之白银票证后门

简介: 本文讲的是Active Directory域渗透之白银票证后门,本文的内容描述了一种方法,通过该方法,攻击者可以在拿到域管理级别的权限约5分钟后,就可持久的对Active Directory的管理进行访问。
+关注继续查看
本文讲的是Active Directory域渗透之白银票证后门本文的内容描述了一种方法,通过该方法,攻击者可以在拿到域管理级别的权限约5分钟后,就可持久的对Active Directory的管理进行访问。

这篇文章将探讨攻击者如何利用计算机帐户凭据来持久的访问和控制企业内网,以及企业如何缓解这类潜在的安全问题。

计算机帐号

加入Active Directory(AD)的每台计算机在AD中都有一个关联的计算机帐户。AD中的计算机帐户是一个安全主体(与用户帐户和安全组相同),因此它具有与用户帐户一样多的属性(包括安全标识符(SID),memberOf,lastlogondate,passwordlastset等。计算机帐户可以属于安全组,并且通常由于各种原因,最常见的是用于组策略过滤,以便某些组策略仅适用(或不适用)于特定的计算机组。

计算机帐户密码在计算机加入域时进初始设置,并以与用户密码大致相同的方式进行身份验证。不同的是,计算机的密码不必定期更改,以便计算机可以在域中进行身份验证(与用户帐户不同)。有一个设置可以配置计算机的帐户密码“应该”多久进行一次更改,域中的计算机通常会每隔30天更改其计算机帐户密码(默认情况下)。也就是说,这个门槛是可以改变的,用来改变计算机帐号密码的过程可以完全被禁用

计算机帐户密码的更改更符合一些规则,我之前已经发表了关于如何使用计算机帐户密码在系统中提升权限。但是,在这篇博文中我没有涵盖本文中探讨的其他角度。

默认情况下,计算机帐户是“域计算机”AD组的成员,并且是为了组策略管理的目的,通常将其添加到了Active Directory组,尽管还有其他原因可能会将计算机帐户添加到AD组。

计算机组中计算机的常见示例:

  • 域控制器是“域控制器”组的成员。

  • 只读域控制器(RODC)是“只读域控制器”组的成员。

  • Exchange服务器通常是不同Exchange AD组的成员,例如“Exchange Server”。

把计算机作为管理员?

一个显而易见的问题是“管理员组中的计算机的影响会是什么?”

当计算机通过Kerberos在域中进行身份验证时,就会创建一个票证或令牌,其中包含计算机的SID和计算机所属的安全组的所有SID,就像用户登录时一样。这意味着经过身份验证的计算机对域或林中的资源具有与属于同一个组的成员的用户类似的权限。如果计算机帐户在管理员组中,则计算机帐户就具有了管理员权限,并且该计算机上的任何管理员都可以获得相同的权限。

计算机帐户可以拥有更高的资源权限,包括Active Directory的完整管理员权限。

计算机如何利用这些权限或访问权限?

计算机中的SYSTEM帐户“拥有”包含这些权限的SID具有的票证或令牌(从技术上来说“SYSTEM”并不是帐户,只是适用于此描述而已)。任何在计算机上具有(本地)管理权限的人都可以将其权限的上下文改为“SYSTEM”   ,以便有效地掌握计算机帐户在AD中的权利。Mimikatz提供了在系统上抓取所有Kerberos票证和令牌的能力,因此重用这些票证最终利用这些权限将是一件微不足道的小事。

请注意,具有权限的计算机帐户与服务帐户之间的功能差异与存储在作为服务运行的系统上的凭据的权限无关。如果系统受到威胁,这两个都会导致凭据泄露。但是,服务帐户的管理方式与计算机帐户完全不同,在大多数情况下使用服务帐户更好一些。

特权升级

攻击者可以简单的将权限从计算机上的管理员权限提升到域中的权限,因为计算机的帐户已经加入到了管理员组中。

例如,如果管理服务器加入到具有域控制器的备份权限的组中,则所有攻击者都需要做的是入侵具有该管理服务器权限的管理员帐户,然后在该管理服务器上获取系统权限就拿下了整个域。

显然,这个工作必须有几个事情要做:

1.修改管理员权限的帐户到管理服务器。

2.管理服务器计算机帐户需要域控制器的权限。

根据我的个人经验以及别人的经验,我发现这是不仅仅是一个可能的情况,而且在许多企业组织的内网中确实可以做到。

请注意,还有其他几种方法可以利用与这种类似的场景,这并不是唯一的潜在攻击方式。

漏洞利用与权限持久化

域控制器白银票证

如果攻击者已经转储了Active Directory数据库或者是已经获得了域控制器计算机帐户密码的一些知识,那么攻击者就可以使用Silver Tickets(银票)针对域控制器的服务拿到管理员权限,并在Active Directory中拿到完整的管理员权限

一旦攻击者获得域控制器计算机帐户的知识,这些信息就可以用于创建一个Silver Tickets(银票),从而在该DC中拿到长久的管理员权限。

计算机主机服务,最常见的一个是利用“cif”服务的Windows文件共享。由于计算机本身承载此服务,创建银票所需的密码数据是相关联的计算机帐户的密码哈希。当计算机加入Active Directory时,将创建一个新的计算机帐户对象并将其链接到计算机。密码和关联的哈希存储在拥有该帐户的计算机上,并且NTLM密码哈希存储在该域的域控制器上的Active Directory数据库中。

如果攻击者可以获得计算机的管理员权限(主要是为了获得调试访问权限)或者能够以本地SYSTEM权限运行代码,则攻击者可以使用Mimikatz从系统中转储AD计算机帐户密码哈希(NTLM密码哈希用于加密RC4 Kerberos票证):Mimikatz“privilege :: debug”“sekurlsa :: logonpasswords”exit

Active Directory域渗透之白银票证后门

为DC创建一个Silver Ticket就可以通过PowerShell远程连接以管理员权限访问域控制器了

为“ http ”服务和“ wsman ”服务创建银票,以获得目标系统上的WinRM和或PowerShell Remoting的管理员权限。

Active Directory域渗透之白银票证后门

Active Directory域渗透之白银票证后门

注入两个Silver Tickets(httpwsman) 后,我们可以使用PowerShell Remoting(或WinRM)连接目标系统打开一个shell(假设配置了PowerShell Remoting和/或WinRM)。New-PSSession是PowerShell的一个 cmdlet,用于使用PowerShell创建一个远程系统的会话,Enter-PSSession可以进入远程shell。

Active Directory域渗透之白银票证后门

Active Directory域渗透之白银票证后门

创建DC的银票可以使用管理员访问权限连接到域控制器的LDAP并运行DCSYNC。

为“ ldap ”服务创建银票,以获得目标系统(包括Active Directory)上的LDAP服务的管理员权限。

Active Directory域渗透之白银票证后门

凭借LDAP银票,我们可以使用Mimikatz并运行DCSync 从 DC “复制”凭据。

Active Directory域渗透之白银票证后门

通过计算机帐户实现权限持久控制

假设一个攻击者能够拿下该域,一个保持域权限的方法是添加一个计算机帐户(或包含计算机的组),以便能有权限对Active Directory进行持久控制

这种方法是双交叉的:

1. 在允许访问该系统的环境中拿下管理员或备份服务器上的计算机帐户密码禁用计算机帐户密码更新以确保持续访问)

2. 从该服务器的计算机帐户委派权限(或含有计算机账户的组)到重要的AD组件。

利用计算机帐户进行AD持续控制的另一种方法是将计算机帐户放在具有其他帐户的特权组中。这是一个常见的例子:有一个名为“AD备份”的组,其中有一个名为“svc-backup”的服务帐户。

当枚举域管理员组的组成员身份(其具有完整的AD管理员权限以及域中的域控制器的完整管理员权限)时,我们看到包含“AD备份”组。这是一个很常见的配置,尽管作为域管理员的成员会有些糟糕。理想情况下,备份组或服务帐户只能是域中的“备份操作组”的成员,以备份AD域的数据。

Active Directory域渗透之白银票证后门

攻击者将拿到的计算机帐户添加到“AD备份”组中,不执行任何操作。ADSAP01计算机帐户现在为攻击者提供了域和所有域控制器的完整管理员权限,并可以随意运行Mimikatz的DCSync,以便能够抓取任何帐户的密码数据

Active Directory域渗透之白银票证后门

缓解措施

缓解此问题的最简单的方法是确保没有计算机帐户是属于管理组的成员。制定此策略并通过定期检查计算机帐户的管理员组来执行此策略。
使用PowerShell进行扫描是非常简单的,因为需要完成的所有操作都是使用名称(或类似于你的环境中定制的关键字)中的“admin”关键字搜索所有组,并标记objecttype ='computer'的任何成员。

这是一个快速实现的PowerShell脚本(需要Active Directory PowerShell模块),将查找“管理员”组,并将为具有计算机帐户成员的组做标记。

Import-Module ActiveDirectory
$AdminGroupsWithComputersAsMembersCountHashTable  = @{}
[array]$DomAdminGroups = get-adgroup -filter {Name -like “*admin*”}
[int]$DomAdminGroupsCount = $DomAdminGroups.Count
Write-Output “Scanning the $DomAdminGroupsCount Admin Groups in $ForestDomainItem for computer accounts as members”
ForEach ($DomAdminGroupsItem in $DomAdminGroups)
{
[array]$GroupContainsComputerMembers = Get-ADGroupMember $DomAdminGroupsItem.DistinguishedName -Recursive | Where {$_.objectClass -eq ‘computer’} $AdminGroupsWithComputersAsMembersCountHashTable.Set_Item($DomAdminGroupsItem.DistinguishedName,$GroupContainsComputerMembers.Count)
[int]$DomainAdminGroupsWithComputersCount = $DomainAdminGroupsWithComputersCount + $GroupContainsComputerMembersCount
}
Write-Output “$DomainAdminGroupsWithComputersCount Forest Admin groups contain computer accounts”
$AdminGroupsWithComputersAsMembersCountHashTable

PowerView现已集成到了PowerSploit中,包括帮助识别管理员组中的计算机账户的功能:

Get-NetGroup -AdminCount | Get-NetGroupMember -Recurse | ?{$_.MemberName -like ‘*$’}

另一个缓解措施是确保所有计算机帐户的密码每30 – 60天更改一次,特别是服务器(域控制器!)。




原文发布时间为:2017年5月12日
本文作者:丝绸之路
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
20434 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29861 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
13909 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
22861 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
17002 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
21057 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14918 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
20683
文章
438
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载