导语:在最近的安全评估中,securifera团队发现自己新开发的远程收集服务帐户凭据工具——serviceFu可以获取客户网络的初始访问权限。
在最近的安全评估中,securifera团队发现自己新开发的远程收集服务帐户凭据工具——serviceFu可以获取客户网络的初始访问权限。他们发现,这些网络都是企业投入了大量的时间和精力来维护的,企业安全客户域中的大多数用户需要智能卡身份验证,禁用凭据缓存(没有Mimikatz的sekurlsa::logonPasswords),并且存在重要的基于主机的日志记录(Powershell,Sysmon,HIPS)。
出于研究的目的,研究人员选择了高价值目标服务器进行了研究。经过研究,他们发现,因为网络上的高权限管理员使用这些服务器执行了管理任务,研究人员在服务器上发现了一个鲜为人知的Nday漏洞,并编写了一个获得系统特权的本地漏洞代码。
NDay漏洞对关键基础设施来说是个大问题,一方面Nday漏洞在大型关键基础设施中大量存在。另一方面受限于技术复杂性和行动缓慢的供应链限制,打补丁是个相当麻烦的事情。
通过系统,研究人员可以获得通过注入用户进程或仅仅窃取用户令牌来模拟当前登录到服务器上的任何用户的能力。虽然这种技术在升级域名权限和传染能力方面很有效,但它需要找到要模拟的活动会话。这通常要借助那些具有足够权限的用户,只有当他们登录时,这种技术才能实现,如果用户退出,则研究人员也将失去使用其帐户的能力。所以,理想的解决方案是找到使用凭据而不是智能卡身份验证的域用户帐户。
此时,你可能会问自己,既然已经通过令牌模拟拥有了与域管理相同的权限,那么为什么要关心获取密码的问题呢?这个问题有几个方面的解释。首先,拥有高价值用户帐户的凭据可以保持对网络的持续性访问,并且可以根据需要启用它。其次,有时感染传播的能力仅限于RDP等服务,研究人员目前不知道如何使用被盗用户令牌来利用RDP。最后,使用现有高权限用户帐户凭据的可疑性要远小于创建新用户或升级现有帐户。
幸运的是,企业的Active Directory设置在整个域中的各种服务器上,且使用了几个高权限服务帐户。这些域服务帐户使用凭据进行身份验证以便进行操作。在HKLM的注册表中,Windows为每个服务的域服务帐户存储了加密版本的\Security\Policy\Secrets。研究人员发现了几个公开可用的代码片段,这些代码可以从注册表中解密凭据,其中最受欢迎的是Mimikatz lsadump :: secrets模块。
这样我们的问题就变成了,哪些计算机的服务可以在域服务帐户的上下文中运行?有哪些系统可以手动运行mimikatz?怎样才能收集系统和安全性注册表配置单元来脱机执行此步骤?我希望尽可能多地自动化这个过程,下面是mimikatz转储服务帐户凭据的截图。
假设serviceFu工具将在具有目标计算机管理员权限的用户的上下文中运行,那我们可以利用Win32 API远程查询目标服务。我们可以利用这个工具解析服务起始名称,以确定运行的上下文是否是正常的系统运行帐户。如果受到攻击,我们可以使用远程注册表API来保存系统和安全注册表配置单元。然后,mimikatz可以解析配置单元以解密存储的服务帐户凭据。使用C ++开发该工具的一个优点是,我们可以轻松的将其作为模块集成到任何现有的本机C2框架中。
实现serviceFu非常简单,只要从mimikatz源代码中提取lsadump::secrets代码并将其直接集成到项目中。开发人员的目标是只提供解析注册表配置单元和解密密码所需的最低限度,这主要是因为他们怕mimikatz可能会触发的任何杀毒软件的安全检测。serviceFu是C和C ++的混合体,在Visual Studio 2012中创建并静态编译,因此可以在任何地方复制和运行。它支持通过主机名或IP输入目标,IP地址可以采用多种格式,如逗号分隔列表,CIDR表示法和‘-‘分隔范围。其他参数则会允许你指定是否要执行部分或全部功能,这是为了防止你想要跳过注册表保存或mimikatz。
虽然该工具目前仅在某些情况下有用,但当这些情况出现时,它则是非常给力的,因为它能够远程扫描整个域以获取明文域服务凭据。