Netwrix 1Secure 提供跨数据和身份的统一可见性——免费试用14天,享有完全访问权限。开始免费试用

资源中心博客

使用 NetCease 和 SAMRi10 进行内部侦察防护

使用 NetCease 和 SAMRi10 进行内部侦察防护

Aug 12, 2025

什么是内部侦察?

内部侦察是攻击者一旦在你的网络中入侵了用户或计算机账户后会采取的最早步骤之一。攻击者会使用各种工具或脚本,对信息进行枚举和收集,从而帮助他们识别:为了获得他们想要的结果,接下来应尝试入侵哪些资产。 例如,BloodHound 将绘制出攻击路径,使对手能够将权限从普通用户提升到管理员。

几乎所有常见的枚举(enumeration)方法都可以由非特权用户执行,这使得它们极难检测和阻止。在这篇文章中,我将解释如何用于防御两种类型的内部侦察:

侦察类型

为了查找有关他们已渗透的网络的信息,攻击者通常会枚举以下类型的数据:

  • 会话 — 查明是谁在何处登录
  • 用户 — 了解域中的所有用户,理想情况下包括他们的组成员身份
  • — 查看域中的所有组,理想情况下包括它们的成员
  • Active Directory 访问控制列表(ACL) — 了解哪些安全主体(例如用户和组)可以访问哪些资源
  • 本地组成员资格 — 用于查看谁在该计算机上拥有访问权限(尤其是哪些用户拥有管理员权限)

使用 NetCease 阻止会话枚举

这篇博客文章重点介绍会话枚举(session enumeration)。它可以让对手确定用户账号和服务账号分别登录在哪些位置。掌握这些信息后,他们就能更好地决定首先尝试入侵哪些主机——例如已登录管理员的主机。

注意:Windows 10 中已更改默认权限,以阻止攻击者执行会话枚举;不过,仍然值得检查。

NetCease 是一个简短的 PowerShell 脚本,可通过更改控制 NetSessionEnum 方法权限的注册表键来帮助防止会话枚举。(之所以用脚本而不是手动完成,是因为该键 SrvsvcSessionInfo 只能在 reg 二进制值中进行编辑。)下面是 SrvsvcSessionInfo 键的路径:

路径: HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/LanmanServer/DefaultSecurity

SrvsvcSessionInfo 注册表项的默认值是允许使用 NetSessionEnum 方法的 ACL。该值分配给以下对象:

  • Administrators 的成员
  • Server Operators 的成员
  • Power Users 的成员
  • 已验证用户

“已验证用户”(Authenticated Users) 权限使攻击者能够使用任何被入侵的用户帐户进行会话侦察。

NetCease 脚本的作用是先备份当前的注册表值,然后修改权限,因此下列 ACE 将出现在 ACL 中:

  • InteractiveSid
  • ServiceSid
  • BatchSid
  • Administrators
  • Server Operators
  • PowerUsers

检查 ACL

如果你想查看安全描述符,可以使用下面的 PowerShell 代码片段,它会向你显示 ACL:

      #Registry Key Information
$key = "HKLM:SYSTEMCurrentControlSetServicesLanmanServerDefaultSecurity"
$name = "SrvsvcSessionInfo"

#Get the Registry Key and Value
$Reg_Key = Get-Item -Path $key
$BtyeValue = $reg_Key.GetValue($name, $null)

#Create a CommonSecurityDescriptor Object using the Byte Value
$Security_Descriptor = New-Object -TypeName System.Security.AccessControl.CommonSecurityDescriptor -ArgumentList $true, $false, $ByteValue, 0

#Output of the ACL to make it simple to see for document. Use only $Security_Descriptor.DiscretionaryAcl if you want to see the full ACL!
$Security_Descriptor.DiscretionaryAcl | Select-Object SecurityIdentifier, ACEType | Format-Table -AutoSize
      
运行 NetCease 之前的输出:

NetCease SAMRi10 1
运行 NetCease 之后的输出:

NetCease SAMRi10 2

注: 有关常见(well-known)的 SID 的信息可在此处找到这里

测试会话枚举

要轻松测试是否已通过普通用户账户阻止会话枚举(session enumeration),可以使用 NetSess Joeware.net 提供的工具;不过还有很多其他选项,包括 SharpHound。在执行此操作时,请确保使用的用户帐户不是 Administrators、Server Operators 或 Power Users 的成员。

使用 NetCease 之前的输出
      Netsess.exe [Computer]
      

NetCease SAMRi10 3
使用低权限帐户使用 NetCease 之后的输出
      Netsess.exe [Computer]
      

NetCease SAMRi10 4
使用具有特权的用户帐户使用 NetCease 之后的输出
      Netsess.exe [Computer]
      

NetCease SAMRi10 5

使用远程 SAM(SAMR)阻止侦察(Reconnaissance)

攻击者可以使用 SAMR 协议进行侦察(reconnaissance)。该协议既可以远程查询设备,也可以查询 Active Directory。使用 SAMR 时,即使攻击者没有任何管理权限,也可以找到高度特权的组和用户,以及网络中每台系统对应的本地用户和组。随后,诸如 BloodHound 之类的工具可以自动将这些信息映射到攻击路径(attack paths),以攻陷(compromise)Active Directory。

Microsoft 在 Windows 10 中引入了用于查询 SAMR 的保护措施;随后在 2017 年通过使用 RestrictRemoteSAM 注册表键(registry key),为早期操作系统(最低到 Windows 7 和 Server 2008 R2)添加了更新。该键是一个字符串(REG_SZ),其中包含用于保护远程 SAM 调用(Remote SAM calls)的安全描述符(security descriptor)的 SDDL。

在 Windows 10(1607)的周年纪念版以及 Windows Server 2016 及更高版本中,默认 SDDL 已被更改为仅允许本地管理员查询远程 SAM(Remote SAM)。

下表汇总了所有操作系统的要求、默认行为以及保护选项:

OS

KB required

Who can query by default

SAMR protection options

Prior to Windows 7 and Server 2008 R2

N/A

Any domain user

None

Windows 7

KB 4012218

Any domain user

Registry Key or Group Policy

Windows Server 2008 R2

KB 4012218

Any domain user

Registry Key or Group Policy

Windows 8.1

KB 4102219

Any domain user

Registry Key or Group Policy

Windows Server 2012

KB 4012220

Any domain user

Registry Key or Group Policy

Windows Server 2012 R2

KB 4012219

Any domain user

Registry Key or Group Policy

Windows 10 1507

KB 4012606

Any domain user

Registry Key or Group Policy

Windows 10 1511

KB 4103198

Any domain user

Registry Key or Group Policy

Windows 10 1607 and later

N/A

Local Administrators

Registry Key or Group Policy

Windows Server 2016 and later

N/A

Local Administrators

Registry Key or Group Policy

设置 RestrictRemoteSAM 注册表键(registry key)有三种方式:

  • 注册表
  • 组策略
  • SAMRi10(Samaritan)

让我们逐一回顾它们。

注册表选项

RestrictRemoteSAM 注册表项提供给管理员按需进行更新:

路径:HKLM/System/CurrentControlSet/Control/Lsa

名称:RestrictRemoteSAM

Windows 10 中的默认值(SDDL):O:SYG:SYD:(A;;RC;;;BA)

SDDL 的组成部分

NetCease SAMRi10 6

如您所见,Windows 10 设置的默认值是:所有者(Owner)和主组(Primary Group)为 SYSTEM;内置管理员(Built-in Administrators)为 Read Control。

应用前检查 SDDL

在应用更改之前,若要检查 SDDL 是否正确,可以使用 PowerShell 中的 ConvertFrom-SDDLString 命令将其转换为更易读的安全描述符(security descriptor)。

NetCease SAMRi10 7

组策略(Group Policy)或本地安全策略选项(Local Security Policy Option)

组策略(Group Policy)和本地 安全策略(Security Policy) 设置使管理员能够轻松地设置此密钥(key)。如果管理员希望在每台系统或多个系统组中设置相同的值,这种方式会很有效(例如:允许特定 OU 中所有服务器的远程 SAM(Remote SAM)连接,或允许某一组特定的应用服务器)。

有关该设置的详细信息如下:

Policy name

Network access: Restrict clients allowed to make remote calls to SAM


Location

Computer Configuration|Windows Settings|Security Settings|Local Policies|Security Options

Possible values

· Not defined

· Defined, along with the security descriptor for users and groups who are allowed or denied to use SAMRPC to remotely access either the local SAM or Active Directory

SAMRi10(Samaritan)选项

SAMRi10 是一种 PowerShell 脚本,相比以前的选项具有关键优势:它创建一个新的本地组,并将权限委派给该组,使其能够执行远程 SAM(Remote SAM)调用。这样,管理员就可以在组策略首选项(Group Policy Preferences)中完全控制此功能,或在需要时手动将权限授予相应账号。

SAMRi10 脚本执行以下操作:

  1. 创建名为“Remote SAM Users”的本地组
  2. 修改 SDDL 以包含新创建的组:
    • 如果没有默认 SDDL,则授予内置管理员(Built-in Administrators)访问权限。
    • 如果存在 SDDL,则对其进行修改,以包含针对 Remote SAM Users 组的新 ACE。
使用 SAMRi10 的好处
  • 轻松授予用于 Remote SAM 访问的细粒度权限
  • 帮助希望实施最小特权访问的组织
  • 可与 本地组成员身份 组策略结合使用,通过基于“按项”级别的定向将访问权限集中授予用户
  • 可由 特权访问管理 (PAM) 系统使用;当帐户或进程需要此特定权限时,可轻松授予动态(按需/即时)访问权限

借助 Netwrix 解决方案防御侦察(Reconnaissance)

Netwrix StealthAUDIT 包含攻击路径分析器,可让管理员深入了解其 Active Directory ACL,从而在对手利用这些漏洞之前及时弥补所有差距。 Netwrix StealthINTERCEPT 可以监控 LDAP 查询,然后将其传递给 Netwrix StealthDEFEND,它可开箱即用地检测多种侦察场景和查询,包括 BloodHound、对所有 SPN 的查询,以及针对所有具有 password never expires 的账户的查询。

常见问题

什么是内部侦察,为什么你应该关心?

当攻击者已成功获得对你网络的初始访问权限后,开始绘制(映射)你的环境以寻找有价值的目标时,就会发生内部侦察。此时他们不再需要“破门而入”——他们已经登录并在四处查看。这也是大多数安全策略的薄弱环节:在攻击者借助合法凭据在内部自由活动时,防御却往往只侧重于边界防护。

事实很直接:你无法保护看不见的事物,也无法控制你不理解的事物。内部侦察是关键阶段——攻击者会收集关于 Active Directory 结构的信息,识别高价值账户,并绘制通往你最敏感数据的路径。 Data security 从身份(identity)开始;这意味着首先要阻止攻击者枚举你的身份基础设施。

如何实施 NetCease 以实现对会话枚举(session enumeration)的防护?

NetCease 可通过阻止未经授权的用户在域控制器和服务器上列出活动会话,从而拦截会话枚举攻击。实施过程相对直接,但仍需要提前规划。首先,从官方仓库下载 NetCease,并确认你正在其上运行的系统具备 PowerShell 5.1 或更高版本。

前提条件:

  • 管理权限
  • PowerShell 5.1 或更高版本
  • Windows Server 或已加入域的系统

该工具通过修改注册表设置来实现其功能,该设置用于控制 Windows Server 服务如何响应会话枚举请求。请在需要保护的每台服务器上使用管理员权限运行 NetCease,并先从非关键系统开始进行测试。更改会在不需要重启的情况下立即生效,但您应验证合法的管理工具和监控解决方案仍能正常运行。

最佳实践是在整个环境中逐步实施 NetCease,而不是一次性在所有地方都部署。先从不承载业务关键型应用的服务器开始,监控是否出现任何中断,然后再扩展到域控制器和其他高价值目标。请记住,阻止侦察并不是让网络“不可见”——而是让攻击者付出更高的代价,并为您的检测系统争取更多时间来识别恶意活动。

SAMRi10 与基于组策略(Group Policy)的 SAM 限制有什么区别?

SAMRi10 和 Group Policy 都会限制对安全帐户管理器(Security Account Manager,SAM)数据库的访问,但它们在不同层级上工作,并适用于不同的使用场景。SAMRi10 是一个 PowerShell 脚本,会直接修改各个机器上的注册表设置,从而让您能够对特定系统上的 SAM 访问限制进行更精细的控制。

基于组策略(Group Policy)的 SAM 限制是在域级别上生效的,这使您能够同时将一致的策略推送到多个系统。对于需要在大量机器上提供统一保护的大规模部署,Group Policy 方式更合适。SAMRi10 适用于特定服务器、测试环境,或需要自定义配置且不适配标准 Group Policy 模板的场景。

技术实现方式也不同。SAMRi10 直接修改 RestrictRemoteSAM 注册表项,而组策略(Group Policy)通过管理模板系统实现相同的结果。两种方法都很有效,但 SAMRi10 在故障排查和自定义配置方面提供了更大的灵活性。对于大多数组织来说,混合方法最合适:使用 Group Policy 作为整个域的基础 SAM 限制策略,然后对需要额外加固的特定系统使用 SAMRi10。

如何验证侦察(reconnaissance)防护措施是否正在发挥作用?

测试侦察防护需要采用有条理的方法:在不影响业务运行的情况下模拟真实攻击者的技术。先从使用 NetSess 等工具,或在非管理员账户下运行 PowerShell 的 Get-WmiObject 命令进行基本的会话枚举测试开始。如果 NetCease 配置正确,这些尝试应当失败,或仅返回有限的信息。

针对 SAM 限制,使用 Linux 系统上的 enum4linux 或 rpcclient 等工具,或使用 Windows 上的 net use 命令来测试对 Security Account Manager 数据库的远程访问。配置正确的 SAM 限制应当阻止未授权的枚举尝试,同时仍允许合法的管理员访问。

关键在于从攻击者的视角进行测试。创建具有标准用户权限的测试账户,并尝试诸如域枚举、共享发现以及用户账户列表等常见的侦察技术。记录哪些有效、哪些无效,然后相应调整你的防护措施。请记住,有效的安全并不是为了阻止一切,而是要在确保合法业务功能持续正常运行的同时,控制信息向谁提供以及可用哪些信息。

你应在何时回滚 NetCease 和 SAMRi10 的更改?

回滚场景通常与合法的管理工具存在兼容性问题、应用程序出现意外故障,或在测试阶段未识别到的业务流程中断有关。NetCease 和 SAMRi10 都提供回滚选项,但具体流程因工具而异。

对于 NetCease,回滚需要撤销用于控制会话枚举的注册表修改。该工具包含用于恢复原始设置的参数,但在进行更改之前,你应始终记录 基线配置(baseline configuration)。先在实验室环境中测试回滚流程,以确保你理解所涉及的步骤和时间安排。

SAMRi10 的回滚更为复杂,因为它涉及多个注册表项,并且可能需要与组策略(Group Policy)发生交互。如果你通过组策略实现了 SAM 限制,请使用策略管理工具来撤销更改。对于直接的注册表修改,SAMRi10 包含恢复功能,但仍需进行手动验证,以确保回滚已完全生效。

最好的做法是主动预防:在维护窗口期间实施更改,提前记录并测试回滚流程,并在实施后至少 24-48 小时内密切监控受影响的系统。大多数兼容性问题会很快暴露出来,但也有一些可能只会在特定的业务流程或系统操作过程中才逐渐显现。

分享到

了解更多

关于作者

Asset Not Found

Joe Dibley

安全研究员

Netwrix 的安全研究员,并且是 Netwrix Security Research Team 的成员。Joe 是 Active Directory、Windows 以及各类企业软件平台与技术方面的专家;他/她研究新的安全风险、复杂的攻击技术,以及相应的缓解措施与检测方法。