ATT&CK-CN V1.0 Last Update: 2019-03 [返回索引页]

译者: 林妙倩(清华大学网络研究院网络空间安全实习生) 原创翻译作品,如果需要转载请取得翻译作者同意。

数据来源:ATT&CK Matrices

原文: https://attack.mitre.org/techniques/T1003

术语表: /attack/glossary

凭据转储

凭据转储是从操作系统和软件获取帐户登录和密码信息的过程,这些信息通常以散列或明文密码的存储。然后利用凭据进行横向移动从而访问受限信息。

攻击者和专业安全测试人员都可以使用此技术中提到的几种工具。同时可能还有其他自定义工具。

Windows

SAM(安全帐号管理器)

SAM 是一个数据库文件,其中包含主机的本地帐户,通常是通过“net user”命令获取的帐户。要遍历 SAM 数据库,需要进行系统级访问。许多工具可以通过内存技术检索 SAM 文件:

  • pwdumpx.exe
  • gsecdump
  • Mimikatz
  • secretsdump.py 或者,可以使用 Reg 命令从注册表中提取 SAM :
  • reg save HKLM\sam sam
  • reg save HKLM\system system 然后可以使用 Creddump7 在本地处理 SAM 数据库以检索哈希值。 [1]

注:Rid 500 帐户是本地内置管理员。Rid 501 是访客帐户。用户帐户以 RID 1,000+开头。

缓存的凭据

DCC2(域缓存凭据 v2)哈希在 Windows Vista 中使用,当域控制器不可用时,会更新缓存的凭据。默认缓存的凭据数量会有所不同,每个系统都可以修改该值。此 Hash 不允许 Pass The Hash 这类攻击。许多工具可以利用内存技术检索 SAM 文件。

也使用 reg.exe 从 Registry 和用于收集凭据的 Creddump7 中提取。

注:Windows Vista 缓存的凭据是使用 PBKDF2 导出的。

本地安全颁发机构(LSA) Secrets

通过 SYSTEM 访问主机,LSA Secrets 通常允许从本地帐户到基于域的帐户凭据的简单访问。注册表用于存储 LSA Secrets。当服务在本地或域用户的上下文中运行时,其密码存储在注册表中。如果启用了自动登录,则此信息也将存储在注册表中。许多工具可以利用内存技术检索 SAM 文件。

  • pwdumpx.exe
  • gsecdump
  • Mimikatz
  • secretsdump.py 也使用 reg.exe 从 Registry 和用于收集凭据的 Creddump7 中提取。

注:由此机制提取的密码是 UTF-16 编码的,这意味着它们以明文形式返回。Windows 10 增加了对的 LSA Secrets 的保护,这将在缓解中阐述。

域控制器的 NTDS

Active Directory(活动目录) 存储有关域成员的信息,包括用于验证凭据和定义访问权限的设备和用户。Active Directory (活动目录)域数据库存储在 NTDS.dit 文件中。默认情况下,NTDS 文件位于域控制器的%SystemRoot%\ NTDS \ Ntds.dit 中。[2]

可以使用以下工具和技术遍历 NTDS 文件和整个 Active Directory 活动目录哈希的内容。 - Volume Shadow Copy - secretsdump.py - Using the in-built Windows tool, ntdsutil.exe - Invoke-NinjaCopy

组策略首选项(GPP)文件

组策略首选项(GPP)允许管理员使用嵌入式凭据创建域策略。这些策略除了其他作用还可以允许管理员设置本地帐户。

这些组策略存储在域控制器上的 SYSVOL 中,这意味着任何域用户都可以查看 SYSVOL 共享并破解密码(AES 私钥已在网上泄露。 [3] [4]

可以使用以下工具和脚本从组策略首选项 XML 文件中收集和破解密码文件:

  • Metasploit’s post exploitation module: "post/windows/gather/credentials/gpp"
  • Get-GPPPassword [5]
  • gpprefdecrypt.py

注:在 SYSVOL 共享中,以下命令可用于枚举潜在的 XML 文件。dir / s * .xml

服务主体名称 (SPNs)

查看 Kerberoasting

明文证书

用户登录系统后,会生成各种凭据并将其存储在内存中的本地安全机构子系统服务(LSASS)进程中。这些凭据可以由管理用户或 SYSTEM 收集。

SSPI(安全支持提供程序接口)用作多个安全支持提供程序(SSP)的公共接口:安全支持提供程序(SSP)是一个动态链接库(DLL),它提供一个或多个安全包给应用程序使用。

以下 SSP 可用于访问凭据:

Msv:交互式登录,批量登录和服务登录通过 MSV 身份验证包完成。

W​​digest:摘要式身份验证协议旨在用于超文本传输​​协议(HTTP)和简单身份验证安全层(SASL)交换。

[6] Kerberos:在 Windows 2000 及更高版本系统中进行服务器双向域身份验证的首选。

CredSSP:为远程桌面服务提供 SSO 和网络级别身份验证。
以下工具可用于枚举凭据:

例如,在目标主机上使用 procdump:* procdump -ma lsass.exe lsass_dump

在本地,mimikatz 可以运行:

  • sekurlsa::Minidump lsassdump.dmp
  • sekurlsa::logonPasswords

DCSync

DCSync 是凭据转储的变体,可用于从域控制器获取敏感信息。该操作通过滥用域控制器的应用程序编程接口(API) [8] [9] [10][11]来模拟来自远程域控制器的复制过程。而不是执行可识别的恶意代码。任何一个域控制器上的管理员,域管理员,企业管理员组或计算机帐户都能够运行 DCSync 以从 Active Directory 中提取密码数据 [12],其中可能包括潜在有用的帐户的当前和历史哈希,例如 KRBTGT 和 Administrators。然后可以使用哈希来创建用于票据传递的 Golden Ticket(黄金票据) 或更改帐户操作中记录的帐户密码。 DCSync 功能已包含在 Mimikatz 的“lsadump”模块中。[15] Lsadump 还包括 NetSync,它通过传统复制协议执行 DCSync [16]

Linux

Proc 文件系统

Linux 上的/proc 文件系统包含有关正在运行的操作系统状态的大量信息。以 root 权限运行的进程可以使用此工具来获取其他正在运行的程序的实时内存。如果这些程序中的任何一个在内存中以明文或密码哈希存储密码,则可以通过日常使用或爆破获得。此功能已在 MimiPenguin中实现,MimiPenguin 是一个受 Mimikatz启发的开源工具。该工具转储进程内存,然后通过查找文本字符串和正则表达式模式来获取密码和哈希值,以了解给定应用程序(如 Gnome Keyring,sshd 和 Apache)如何使用内存来存储此类身份验证构件。

缓解

Windows

使用允许进程白名单的工具监视/加强对 LSASS 和 SAM 表的访问。限制跨系统的凭据重叠,以防止在攻击者获得密码和散列值后使用有效帐户 (Valid Accounts) 进行横向移动。确保本地管理员帐户在网络上的所有系统中都具有复杂且唯一的密码。除非受到严格控制,否则不要将用户或管理域帐户放在跨系统的本地管理员组中,因为这通常等同于在所有系统上使用具有相同密码的本地管理员帐户。遵循设计和管理企业网络的最佳实践,以限制跨管理层的特权帐户使用。[82]

在 Windows 8.1 和 Windows Server 2012 R2 上,为 LSA 启用受保护的进程指示灯(Protected Process Light)。[83]

在适当的情况下使用白名单 [84] 工具(如 AppLocker, [85] [86] 或软件限制策略 [87] ),识别并阻止可能用于转储凭据的潜在恶意软件。 [88]

在 Windows 10 中,Microsoft 实施了名为 Credential Guard 的新保护措施,以保护可用于通过凭据转储形式获取凭据的 LSA Secrets。该保护默认情况下没有配置,并具有硬件和固件系统要求。 [89]它无法阻止所有形式的凭据转储。[90]

管理“Replicating Directory Changes”的访问控制列表以及与域控制器复制相关的其他权限。 [91] [92]

考虑禁用或限制 NTLM 流量。 [93]

Linux

从内存中获取密码需要 root 权限。遵循限制特权提升的最佳实践,以避免恶意程序访问此类敏感内存区域。

检测

Windows

诸如 Mimikatz 之类的公共凭据转储器通过打开 LSA 子系统服务(LSASS)进程,查找 LSA Secrets 密钥以及解密存储器中存储凭据详细信息的的部分来访问 LSA 子系统服务(LSASS)进程。凭据转储也可以使用反射进程注入的方法来减少潜在的恶意活动指标。

散列转储程序在本地文件系统(%SystemRoot%/ system32 / config / SAM)上打开安全帐户管理器(SAM),或者创建注册表 SAM 密钥的转储以访问存储的帐户密码哈希值。一些哈希转储器将打开本地文件系统作为设备并解析到 SAM 表以避免文件访问防御。其他人将在读取哈希值之前制作 SAM 表的内存副本。检测攻击者正在使用的被盗取的有效帐户也可能有所帮助。

在 Windows 8.1 和 Windows Server 2012 R2 上,监视 Windows 日志以创建 LSASS.exe 以验证 LSASS 是否作为受保护进程启动。

监视程序执行的进程和命令行参数,这些参数可能表示凭据转储。远程访问工具可能包含内置功能或包含 Mimikatz 等现有工具。还会有包含凭据转储功能的 PowerShell 脚本,例如 PowerSploit 的 Invoke-Mimikatz 模块, [94] 可能需要在操作系统中配置其他日志记录功能以收集分析所需的信息。

监视域控制器日志以查找可能与 DCSync 关联的复制请求和其他未安排的活动。[8] [9] [10] 注意:域控制器可能不会记录来自默认域控制器帐户的复制请求。[95]另外监视来自与已知域控制器[91]无关的 IP 的网络协议[8] [16] 和其他复制请求 [96]

Linux

要获取存储在内存中的密码和哈希,进程必须在/ proc 文件系统中打开要分析的进程的映射文件。该文件存储在/proc//maps路径下,其中目录是被查询用于此类认证数据的程序的唯一 pid。AuditD 监控工具在许多 Linux 发行版都有,可用于监视在 proc 文件系统中打开此文件的恶意进程,对 pid,进程名称和此类程序的参数告警。