在本博客中,我将解释如何在 Active Directory 环境中快速清点、利用和修复配置有过多权限的网络共享。过多的共享权限代表了一种风险,可能导致企业环境中的数据泄露、权限升级和勒索软件攻击。因此,我还将探讨为什么在经过 20 年的主流漏洞管理和渗透测试之后,配置了过多权限的网络共享仍然困扰着大多数环境。
最后,我将分享一个名为 PowerHuntShares 的新开源工具,它可以帮助简化 Active Directory 环境中过多的 SMB 共享权限的共享搜索和修复。此内容也可在此处以演示格式提供。或者,如果您想听我谈论这个话题,请查看我们的网络研讨会,*如何大规模评估 Active Directory SMB 共享*。
这对于负责在 Active Directory 环境中管理网络共享访问的人员(身份和访问管理/IAM 团队)以及负责利用该访问的红队/渗透测试人员来说应该很有趣。
TLDR;我们可以利用 Active Directory 来帮助创建系统和共享清单。配置有过多权限的共享可能会以多种方式导致远程代码执行 (RCE),可以通过简单的数据分组技术加快修复工作,并且可以使用一些常见的事件 ID 和一点相关性来检测恶意共享扫描(总是说起来容易做起来难)。
如果只是一个问题就好了。我不认识没有涉及未经授权的网络共享访问的战争故事的渗透测试人员。在现实世界中,这个故事通常以勒索软件的部署和双重勒索而告终。这就是为什么我们尝试了解这个问题背后的一些根本原因很重要。下面总结了在大多数 Active Directory 环境中经常导致大量网络共享暴露的根本原因。
在企业环境中跟踪实时系统是困难的,而跟踪不断变化的共享库存和所有者则更加困难。即使身份和访问管理 (IAM) 团队通过发现找到了网络共享,它也会提出以下问题:
如果您拥有正常运行的配置管理数据库 (CMDB),则可以回答大多数问题。不幸的是,并不是每个人都这样做。
许多漏洞管理程序从未构建用于识别向经过身份验证的域用户提供未经授权访问的网络共享配置。他们的大部分重点是识别经典漏洞(缺少补丁、弱密码和应用程序问题),并优先处理不需要身份验证的漏洞,这当然不全是坏事。
但是,根据我的观察,业界只是在过去五年中才对 Active Directory 生态系统产生了浓厚的兴趣。这似乎主要是由于 Active Directory (AD) 攻击的曝光率和意识增加,这些攻击严重依赖于配置并且不会丢失补丁。
我也不是说 IAM 团队没有努力完成他们的工作,但在许多情况下,他们陷入了相当于团队管理的困境,而忘记(或没有时间)查看实际全局/通用组可以访问的资产。那是一口深井,不过今天的重点是网络股。
渗透测试人员一直都知道共享是一种风险,但在 Active Directory 环境中实施、管理和评估最小权限是一项不小的挑战。即使对安全社区越来越感兴趣,也很少有解决方案可以有效地清点和评估整个 Active Directory 域(或多个域)的共享访问权限。
根据我的经验,很少有组织从一开始就执行经过身份验证的漏洞扫描,但即使是那些似乎确实缺乏关于常见过度特权、继承权限和提炼摘要数据的环境的发现,这些数据提供了大多数 IAM 团队需要的洞察力做出正确的决定。长期以来,人们一直过度依赖这些类型的工具,因为许多公司的印象是,它们提供的覆盖范围比网络共享权限方面的覆盖范围更大。
简而言之,良好的资产库存和攻击面管理为更好的漏洞管理覆盖率铺平了道路——许多公司还没有做到这一点。
大多数大型环境都有主机、网络和 Active Directory 域边界,在执行任何类型的身份验证扫描或代理部署时都需要考虑这些边界。试图准确盘点和评估网络份额的公司经常错过一些事情,因为他们没有考虑隔离其资产的边界。在评估资产时,请确保在这些范围内工作。
云就在这里,它支持各种出色的文件存储介质,但这并不意味着本地网络共享会消失。公司需要确保他们仍然向后看,因为他们继续期待文件共享的安全控制。对于许多公司来说,可能需要十年后的大部分时间,他们才能将大部分文件存储基础设施迁移到他们最喜欢的凝结水蒸气漂浮物——你知道的,云。😜
多年来,有很多与共享权限管理相关的不良做法已经被 IT 文化所吸收,仅仅是因为人们不了解他们的工作方式。过度共享权限的最大贡献者之一是通过本机嵌套组成员身份进行的特权继承。此问题也不限于网络共享。十多年来,我们一直在滥用相同的特权继承问题来访问 SQL Server 实例。在接下来的部分中,我将概述该问题以及如何在网络共享的上下文中利用它。
网络共享只是使网络上的远程用户可以使用本地文件的一种媒介,但两组权限控制远程用户对共享文件的访问。要了解权限继承问题,快速回顾一下 NTFS 和共享权限如何在 Windows 系统上协同工作会有所帮助。让我们探索基础知识。
NTFS 权限
共享权限
简而言之,从远程用户的角度来看,首先审查网络共享权限(远程),然后审查 NTFS 权限(本地),但无论如何,最严格的权限总是胜出。下面是一个简单示例,显示 John 对共享具有完全控制权限,但对关联的本地文件夹只有读取权限。大多数限制性获胜,因此 John 仅被提供对通过共享文件夹远程提供的文件的读取访问权限。
所以这些是基础。最重要的想法是限制性最强的 ACL 获胜。但是,有一些细微差别与继承域组的本地组有关。为了弄清楚这一点,让我们简要介绍一下受影响的当地群体。
每个人组在大多数配置中为所有经过身份验证和匿名的用户提供访问权限。这个组在许多环境中被过度使用,并且经常导致过度的特权。
默认情况下会添加新的本地用户。当系统未加入域时,它会按照您的预期运行。
该组嵌套在 Builtin\Users 组中。当系统未加入域时,它不会在影响访问方面做太多事情。但是,当系统加入Active Directory 域时,Authenticated Users 隐含地包括“域用户”和“域计算机”组。例如,IT 管理员可能认为他们只提供对 Builtin\Users 组的远程共享访问权限,而实际上他们将其提供给域中的每个人。下图有助于说明这种情况。
这里的教训是,对本地和域组关系的小误解可能会导致未经授权的访问和潜在风险。下一节将介绍如何清点共享及其访问控制列表 (ACL),以便我们可以定位和修复它们。
事实证明,多亏了几个本机和开源工具,快速清点您的域计算机和相关共享并不难。诀窍是获取足够的信息来回答那些修复工作所需的人员、内容、地点、时间和方式问题。共享和权限的发现归结为几个基本步骤:
PowerHuntShares 可用于自动执行上述任务(在最后一节中介绍),但无论您使用什么进行发现,了解未经授权的共享访问如何被滥用将有助于您的团队确定补救工作的优先级。
配置有过多权限的网络共享可以通过多种方式被利用,但是共享的性质和特定的共享权限将最终决定可以执行哪些攻击。下面,我概述了一些最常见的攻击,这些攻击利用对共享的读写访问来帮助您入门。
勒索软件和其他威胁参与者经常利用共享的过多读取权限来访问敏感数据,例如他们可以利用的个人身份信息 ( PII ) 或知识产权(源代码、工程设计、投资策略、专有公式、收购信息等),出售或敲诈您的公司。此外,我们在渗透测试中发现,密码通常以明文形式存储,可用于登录数据库和服务器。这意味着在某些情况下,对共享的读取访问可以在 RCE 中结束。
以下是对网络共享的过度读取访问如何导致 RCE 的简单示例:
下面是该过程的简单说明:
写访问提供了读访问的所有好处,并且能够添加、删除、修改和加密文件(如勒索软件威胁参与者)。写访问还提供了将共享访问转变为 RCE 的更多潜力。以下是十个更常见的 RCE 选项的列表:
您可能已经注意到,我列出的许多技术也常用于持久性和横向移动,这很好地提醒了旧技术可以有多个用例。
下面是一个简单的图表,试图说明基本的 web shell 示例。
下面是另一个简化图,显示了可用于执行我的前 10 个列表中的攻击的通用步骤。让我们关注被滥用的 C 共享是 Windows 中的默认隐藏共享,标准域用户不应访问。它映射到 C 驱动器,该驱动器通常包括系统上的所有文件。不幸的是,devOops、应用程序部署和单用户错误配置意外(或故意)使 C 共享的写入访问权限超过一半的时间。
在过度的共享修复工作中追踪系统所有者、应用程序和有效的业务案例对于 IAM 团队来说可能是一个巨大的痛苦。对于大型企业而言,这可能意味着对数十万个共享 ACL 进行分类。因此,在该工作期间有办法对共享进行分组和优先级排序可以节省大量时间。
我发现成功分组的诀窍是收集正确的数据。为了确定要收集哪些数据,我会问自己谁、什么、在哪里、何时以及如何提出问题的标准,然后确定我可以从哪里获取这些数据。
哪些股票被曝光?
谁有权访问它们?
它们是什么时候创建的?
谁创造了它们?
他们在哪里?
如果我们在发现过程中收集了所有这些信息,我们可以使用它来根据共享名称、所有者、子网、文件夹列表和文件夹列表哈希执行分组,以便我们可以识别大量可以立即修复的相关共享。不想自己编写代码?我写了 PowerHuntShares 来帮助你。
PowerHuntShares 旨在自动清点、分析和报告分配给已加入 Active Directory 域的计算机上的 SMB 共享的过多特权。它旨在供 IAM 和其他安全团队使用,以更好地了解他们的 SMB 共享攻击面,并提供数据洞察力以帮助对共享修复工作进行分组和优先级排序。以下是 PowerHuntShares 设置、执行(收集和分析)和报告的快速指南。
从https://github.com/NetSPI/Powerhuntshares下载项目。
从非域系统中,您可以使用以下命令加载它:
runas /netonly /user:domain\user PowerShell.exe
Set-ExecutionPolicy bypass -scope process
Import-Module Invoke-HuntSMBShares.ps1
或者,您可以使用以下 PowerShell 脚本直接从 Internet 加载它。
[System.Net.ServicePointManager]::ServerCertificateValidation
Callback = {$true}
[Net.ServicePointManager]::SecurityProtocol =[Net.Security
ProtocolType]::Tls12 IEX(New-Object System.Net.WebClient).DownloadString
("https://raw.githubusercontent.com/NetSPI/
PowerHuntShares/main/PowerHuntShares.psm1")
Invoke-HuntSMBShares 集合函数包装了一些来自 PowerView 和 Invoke-Parallel 的修改函数。修改获取更多信息,自动化常见任务序列,并为报告生成摘要数据。无论如何,为 Warren F. 和 Will Schroeder 所做的出色工作大声疾呼(但很久以前)。下面是一些命令示例。
Invoke-HuntSMBShares -Threads 100 -OutputDirectory c:\temp\test
runas /netonly /user:domain\user PowerShell.exe
Invoke-HuntSMBShares -Threads 100 -RunSpaceTimeOut 10`
-OutputDirectory c:\folder\`
-DomainController 10.1.1.1`
-Credential domain\user
===============================================================
PowerHuntShares
===============================================================
This function automates the following tasks:
o Determine current computer's domain
o Enumerate domain computers
o Filter for computers that respond to ping requests
o Filter for computers that have TCP 445 open and accessible
o Enumerate SMB shares
o Enumerate SMB share permissions
o Identify shares with potentially excessive privileges
o Identify shares that provide reads & write access
o Identify shares that are high risk
o Identify common share owners, names, & directory listings
o Generate creation, last written, & last accessed timelines
o Generate html summary report and detailed csv files
Note: This can take hours to run in large environments.
---------------------------------------------------------------
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---------------------------------------------------------------
SHARE DISCOVERY
---------------------------------------------------------------
[*][03/01/2021 09:35] Scan Start
[*][03/01/2021 09:35] Output Directory: c:\temp\smbshares\SmbShareHunt-03012021093504
[*][03/01/2021 09:35] Successful connection to domain controller: dc1.demo.local
[*][03/01/2021 09:35] Performing LDAP query for computers associated with the demo.local domain
[*][03/01/2021 09:35] - 245 computers found
[*][03/01/2021 09:35] Pinging 245 computers
[*][03/01/2021 09:35] - 55 computers responded to ping requests.
[*][03/01/2021 09:35] Checking if TCP Port 445 is open on 55 computers
[*][03/01/2021 09:36] - 49 computers have TCP port 445 open.
[*][03/01/2021 09:36] Getting a list of SMB shares from 49 computers
[*][03/01/2021 09:36] - 217 SMB shares were found.
[*][03/01/2021 09:36] Getting share permissions from 217 SMB shares
[*][03/01/2021 09:37] - 374 share permissions were enumerated.
[*][03/01/2021 09:37] Getting directory listings from 33 SMB shares
[*][03/01/2021 09:37] - Targeting up to 3 nested directory levels
[*][03/01/2021 09:37] - 563 files and folders were enumerated.
[*][03/01/2021 09:37] Identifying potentially excessive share permissions
[*][03/01/2021 09:37] - 33 potentially excessive privileges were found across 12 systems.
[*][03/01/2021 09:37] Scan Complete
---------------------------------------------------------------
SHARE ANALYSIS
---------------------------------------------------------------
[*][03/01/2021 09:37] Analysis Start
[*][03/01/2021 09:37] - 14 shares can be read across 12 systems.
[*][03/01/2021 09:37] - 1 shares can be written to across 1 systems.
[*][03/01/2021 09:37] - 46 shares are considered non-default across 32 systems.
[*][03/01/2021 09:37] - 0 shares are considered high risk across 0 systems
[*][03/01/2021 09:37] - Identified top 5 owners of excessive shares.
[*][03/01/2021 09:37] - Identified top 5 share groups.
[*][03/01/2021 09:37] - Identified top 5 share names.
[*][03/01/2021 09:37] - Identified shares created in last 90 days.
[*][03/01/2021 09:37] - Identified shares accessed in last 90 days.
[*][03/01/2021 09:37] - Identified shares modified in last 90 days.
[*][03/01/2021 09:37] Analysis Complete
---------------------------------------------------------------
SHARE REPORT SUMMARY
---------------------------------------------------------------
[*][03/01/2021 09:37] Domain: demo.local
[*][03/01/2021 09:37] Start time: 03/01/2021 09:35:04
[*][03/01/2021 09:37] End time: 03/01/2021 09:37:27
[*][03/01/2021 09:37] Run time: 00:02:23.2759086
[*][03/01/2021 09:37]
[*][03/01/2021 09:37] COMPUTER SUMMARY
[*][03/01/2021 09:37] - 245 domain computers found.
[*][03/01/2021 09:37] - 55 (22.45%) domain computers responded to ping.
[*][03/01/2021 09:37] - 49 (20.00%) domain computers had TCP port 445 accessible.
[*][03/01/2021 09:37] - 32 (13.06%) domain computers had shares that were non-default.
[*][03/01/2021 09:37] - 12 (4.90%) domain computers had shares with potentially excessive privileges.
[*][03/01/2021 09:37] - 12 (4.90%) domain computers had shares that allowed READ access.
[*][03/01/2021 09:37] - 1 (0.41%) domain computers had shares that allowed WRITE access.
[*][03/01/2021 09:37] - 0 (0.00%) domain computers had shares that are HIGH RISK.
[*][03/01/2021 09:37]
[*][03/01/2021 09:37] SHARE SUMMARY
[*][03/01/2021 09:37] - 217 shares were found. We expect a minimum of 98 shares
[*][03/01/2021 09:37] because 49 systems had open ports and there are typically two default shares.
[*][03/01/2021 09:37] - 46 (21.20%) shares across 32 systems were non-default.
[*][03/01/2021 09:37] - 14 (6.45%) shares across 12 systems are configured with 33 potentially excessive ACLs.
[*][03/01/2021 09:37] - 14 (6.45%) shares across 12 systems allowed READ access.
[*][03/01/2021 09:37] - 1 (0.46%) shares across 1 systems allowed WRITE access.
[*][03/01/2021 09:37] - 0 (0.00%) shares across 0 systems are considered HIGH RISK.
[*][03/01/2021 09:37]
[*][03/01/2021 09:37] SHARE ACL SUMMARY
[*][03/01/2021 09:37] - 374 ACLs were found.
[*][03/01/2021 09:37] - 374 (100.00%) ACLs were associated with non-default shares.
[*][03/01/2021 09:37] - 33 (8.82%) ACLs were found to be potentially excessive.
[*][03/01/2021 09:37] - 32 (8.56%) ACLs were found that allowed READ access.
[*][03/01/2021 09:37] - 1 (0.27%) ACLs were found that allowed WRITE access.
[*][03/01/2021 09:37] - 0 (0.00%) ACLs were found that are associated with HIGH RISK share names.
[*][03/01/2021 09:37]
[*][03/01/2021 09:37] - The 5 most common share names are:
[*][03/01/2021 09:37] - 9 of 14 (64.29%) discovered shares are associated with the top 5 share names.
[*][03/01/2021 09:37] - 4 backup
[*][03/01/2021 09:37] - 2 ssms
[*][03/01/2021 09:37] - 1 test2
[*][03/01/2021 09:37] - 1 test1
[*][03/01/2021 09:37] - 1 users
[*] -----------------------------------------------
PowerHuntShares 将清点配置有“过度特权”的 SMB 共享 ACL 并突出显示“高风险”ACL。以下是在这种情况下如何定义它们。
过多的读写共享权限已被定义为任何网络共享 ACL,其中包含针对“所有人”、“经过身份验证的用户”、“BUILTIN\Users”、“域用户”或“域计算机”的显式 ACE(访问控制条目)团体。由于特权继承问题,它们都为域用户提供了对受影响共享的访问权限。
在本报告的上下文中,高风险共享被定义为提供对系统或应用程序的未经授权的远程访问的共享。默认情况下,这包括 wwwroot、inetpub、c 和 c$ 共享。但是,可能存在其他未提及的风险。
该脚本将生成 HTML 报告、csv 数据文件和 html 文件。
HTML 报告应包含指向所有内容的链接。下面是仪表板的快速屏幕截图。它包括计算机、共享和共享 ACL 级别的摘要数据。它还有一个有趣的共享创建时间表,因此您可以识别前面提到的那些共享创建集群。这是我第一次尝试使用 PowerShell 生成这种类型的 HTML/CSS,因此虽然它可能会更好,但至少它是功能性的第一次尝试。😊 它还包括“数据洞察”部分中的数据分组摘要。
注意:创建时间线图表中显示的数据似乎可信,但最后访问/修改的时间线图表似乎不太可靠。我相信这与操作系统如何使用它们有关,但那是另一天的研究项目。
Invoke-HuntSMBShares 脚本将生成各种 .csv 文件,但感兴趣的主要文件将是“Inventory-Excessive-Privileges.csv”文件。它应该包含本博客前面讨论的所有数据,并且可以作为额外离线分析的良好数据来源。
PowerShell 可用于导入 .csv 文件并在现场进行额外分析,这从蓝队和 红队的 角度来看都很方便。
这是一个有趣的博客,我们涵盖了很多内容,所以下面是一个快速回顾:
从长远来看,我希望用 C# 重写 PowerHuntShares 以提高性能并消除一些错误。希望此博客中共享的信息有助于引起人们对在 Active Directory 环境中分配给 SMB 共享的过多权限问题的一些认识。或者至少可以作为一个开始挖掘解决方案的地方。
请记住,应定期进行共享审核,以便您可以在高风险共享权限成为威胁之前识别和修复它们。它是良好的 IT 和攻击性安全卫生的一部分,就像渗透测试、 对手模拟或 红队操作一样。
有关此主题的更多信息,请观看 NetSPI 的网络研讨会, 如何大规模评估 Active Directory SMB 共享。
祝你好运,狩猎愉快!
近期阅读文章
,质量尚可的,大部分较新,但也可能有老文章。开卷有益,不求甚解
,不需面面俱到,能学到一个小技巧就赚了。译文仅供参考
,具体内容表达以及含义, 以原文为准
(译文来自自动翻译)尽量阅读原文
。(点击原文跳转)每日早读
基本自动化发布(不定期删除),这是一项测试
最新动态: Follow Me
微信/微博:
red4blue
公众号/知乎:
blueteams