【发布时间】:2016-11-08 15:49:54
【问题描述】:
Win32API 函数 LookupAccountSID() 允许解析与 SID 对应的名称。根据文档: LookupAccountSid function
LookupAccountSid 函数尝试通过首先检查已知 SID 的列表来查找指定 SID 的名称。如果提供的 SID 不对应于众所周知的 SID,则该函数会检查内置和管理定义的本地帐户。接下来,该函数检查主域。主域无法识别的安全标识符将根据与其 SID 前缀对应的可信域进行检查。
有没有办法只在本地查找名称?也就是说,如果在调用该函数的 PC 中找不到该名称,则该函数将失败,而不是检查主域。
编辑:明确一点,我想解析非本地用户的名字,而不访问主域(只检查信息是否已经存储在本地)
【问题讨论】:
-
您可以反转问题:确定 SID 是否为域 SID,如果是,则不要查找。域 SID 是那些以 S-1-5-21 开头然后不使用machine SID 作为其域值的 SID。剩下的是内置帐户和本地帐户。免责声明:未经测试。
-
问题是我想查找本地存储的域用户信息。如果非本地用户在某个时间点登录,即使计算机处于离线状态,LookupAccountSid 也会返回正确的名称。
-
这由 LSA 缓存管理。没有官方接口。有一些工具可以转储它(如 mimikatz),但这些工具往往是出于黑客目的,大多数网络管理员都不会张开双臂欢迎。您对在域上查找信息的担忧究竟是什么——网络流量发生的事实,查找可能需要很长时间的事实,还有其他什么?您可以简单地通过在本地查找从未超过的一小段时间后取消查找来处理超时。
-
如果您只想知道哪些域帐户登录了这台机器,最好通过审核和安全事件日志来处理。 LSA 缓存不是可靠的信息来源,对于初学者来说,作为安全措施,可以在机器上完全禁用它。
标签: c# windows powershell sid