概述

这篇Paper深入研究了 Windows 10下的Pass-the-Hash攻击:
本文分析了PtH攻击在windows 10 v1903环境下的可行性。
本文展示了几种hash提取技术。
本文演示了在哪些情况下攻击者可以使用这些hashes进行身份验证(各种协议下执行PtH攻击的条件和方法)。
本文说明了一个企业可以考虑使用的"安全管控"(security controls)措施,可以最大程度降低PtH攻击的风险。

最终,做了的这些测试证明了PtH攻击仍然是一个真正的威胁,每个企业都需要直面这种风险。

意义

  • 研究Pass-the-Hash攻击的意义:
    • 1.有助于已授权的渗透测试
    • 2.有助于企业防御PtH攻击、横向移动
    • 3.有助于安全研究人员继续探索
    • ...

意义较大,故逐字翻译,带上了注释,以供参考。

Paper: 《Pass-the-Hash in Windows 10》
Author: Lukasz Cyra,
Advisor: Sally Vandeven
Accepted: September 25, 2019

摘要

20多年来,攻击者一直在使用传递散列(Pass-the-Hash, PtH)攻击。
为了防御这种攻击,Windows设计发生了几个变化。这些变化影响了攻击的可行性、攻击工具的有效性。
与此同时攻击技术也在提高,出现了新的PtH攻击方法。

所以会有几个问题:
Windows具体环境下,怎么样能够PtH攻击成功?
Windows具体环境下,什么样的配置是脆弱的?
...

本Paper研究了各种方法的哈希提取、各种方法执行PtH攻击(列出攻击的先决条件)、PtH防御建议。

文章最后,本文使用windows 10 v1903展示了PtH对Windows具体环境造成的风险等级。

1.介绍

说明写本文的背景、以及写本文的目的。

背景:
攻击者通常在获得Windows机器的管理员访问权限后,首先要做的事情之一就是提取密码hashes。他们可以使用这些hashes进行离线分析,甚至在"传递散列"(Pass-the-Hash,PtH)攻击中直接访问系统。20多年来,攻击者一直在使用这种技术来促进横向移动(Ewaida, 2010)。
与"hash提取"、"PtH攻击"相关的安全风险是众所周知的。微软一直试图通过Windows的安全升级来提高攻击的难度,其中最近最值得注意的变化是用AES (Deneut, 2018)替换了RC4encryption,并引入了Credential Guard(Joyce, 2019a)。这些变化使得窃取凭证的老方法无效,甚至有从业者提出了“PtH攻击结束”(Green, 2017)。
Windows 10 Authentication: The End of Pass the Hash?

与此同时,攻击技术也在不断发展。新颖、巧妙的攻击方法也被设计出来,如内心独白"Internal Monologue" (Fortuna, 2018),带来了新的安全风险。

  • 所以有这些问题:
    • 1.具体管控措施不明 - 人们对管控措施(防御措施)本身产生了许多困惑。在Windows 10的各种版本中,哪些是可行的,哪些是不可行的;以及流行的攻击工具是否仍然有效,这些问题往往没人研究清楚。
    • 2.被错误信息误导 - 好多地方提供了误导、过时、不正确的信息(Strand, 2018b),不适用于当代系统的信息(Ewaida, 2010)。
    • 3.系统更迭 - 随着微软对Windows 7支持的快速终结,基于Windows的企业正在将桌面环境迁移到Windows 10。这些企业需要获得有关Windows 10安全的"可靠信息",当然其中包括有关PtH攻击的信息。

最终,为了学习这门“PtH攻防”学科,一个人至少需要几个小时的学习和实验。如果借助了碎片化和不可靠的信息来源,还需要再次实际测试去验证。

所以本文的目的是,用实际测试来验证,确认"PtH to Windows 10"可造成的风险。

2. Pass-the-Hash Theory

2.1 Paper Scope

论文范围。

本文假设攻击者已经获得了对主机的远程访问,并试图提取用户多个凭证的hashes,以便于进行横向移动。
在此假设下,本文排除了多种已知的攻击技术:
1.排除“物理攻击”,通过物理访问进行hash提取超出了本文的范围。这同样适用于从损坏的域控制器中提取散列。
2.排除提取“凭证管理器”,本文不考虑从Windows Credential Manager中提取凭据,而是明确地关注用于登录操作系统的密码hashes。

  • 本文只关注3种hashes:
    • NT hashes (也称为 NTLM hashes)
    • NTLMv1 hashes(也称为Net-NTLMv1 hashes)
    • NTLMv2 hashes (也称为Net-NTLMv2 hashes)

为什么关注NT hashes ?
主机是以NT hashes的形式存储OS凭证的(见 Section 4 )。Windows 10使用NT hashes,所以在本文的研究范围内。

为什么关注NTLMv1 hashes 和 NTLMv2 hashes ?
身份验证协议(Authentication protocols),特别是NTLMv1和NTLMv2,不会在网络上传递NT hashes,而是传递来自于NT hashes的值(pass values derived from the NT hashes),分别称为NTLMv1 hashes和NTLMv2 hashes。

各自分别地来看:

  • NTLMv1 hashes - Windows 10环境默认不支持NTLMv1 (Shamir, 2018)。但是,在某些攻击中,可以启用NTLMv1 hashes,因此需要考虑NTLMv1 hashes。
  • NTLMv2 hashes - 在大多数网络中,NTLMv2是启用的,因此本文将考虑NTLMv2 hashes。
    • "工作组配置"(workgroup configuration)中的现代网络使用NTLMv2 (Gombos, 2018)。
    • 基于域的环境默认也支持NTLMv2 hashes (微软,2017)。
    • Kerberos专有环境仍然很少,因为它们可能存在兼容性问题(Renard, 2017)。

为什么本文没有关注以下类型的hashes ?

LM hashes - 是在Windows中存储登录凭证的一种较老的方法,它没有被本文考虑在内。
当使用默认设置时,LM hashes不会存储在Windows 10计算机上(Strand, 2018a)。不过,通过GPO(Group Policy Objects)设置来启用LM hashes是可能的(Gombos, 2018)。

SHA1/SHA2 hashes和MSCach2(即DCC2) hashes - PtH攻击不适用于SHA1/SHA2 (Delaunay, 2017)和MSCach2 (Lundeen, 2014)。

MD5 hashes - 不考虑WDigest身份验证中使用的MD5 hashes,因为Windows 10在默认情况下不使用WDigest (Joyce, 2019b)。

2.2. Hashing Algorithms

如Figure 1所示,从明文密码生成NT hash这一过程,需要将MD4散列函数应用于密码的UTF-16小端序编码(Gombos, 2018)。

注:小端序(LE,Little Endian)

NT_Hash(password) = MD4(UTF-16-LE(password))
NT_Hash("pass1") = "8D7A851DDE3E7BED903A41D686CD33BE"

Figure 1 NT Hashing Algorithm and Example

在存储密码时使用salt是一个好习惯。salt是计算一个hash时使用的随机数据块,这使得hash更难破解和重用。必须注意的是,NT散列并没有使用salt。因此,它很容易受到"预计算攻击"(precomputation attacks):也就是可以有个映射表(如彩虹表),可以根据hashes快速找到对应的明文密码。此外,相同的密码可以仅基于NT hashes来识别,不需要破坏加密(breaking the encryption)。值得注意的是,在许多场景中NT hashes相当于密码本身。它们只允许基于散列信息的身份验证。这种攻击称为散列传递(Pass-the-Hash, PtH)。

参考Figure 2可知,NTLMv1散列算法步骤

共有2个输入参数
1.密码的NT hash
2.服务器提供的challenge

NTLMv1散列算法将NT散列与5个字节的零(zeros)连接起来,将这个字符串分成3个7字节的密钥(keys)。
这3个密钥(keys)用于使用DES算法对challenge进行加密,得到3个cryptograms,把3个cryptograms串接起来得到NTLMv1散列。

The NTLMv1 hashing algorithm takes as input the NT hash of a password and a challenge provided by the server. It concatenates the NT hash with five bytes of zeros. It splits this string into three 7-byte keys. Those keys are used to encrypt the challenge using DES. The cryptograms are concatenated to create the NTLMv1 hash (see Figure 2).

// c – challenge
K1 | K2 | K3 = NT_Hash(password) | “0000000000”

NTLMv1(password, c) = DES( K1, c) | DES( K2, c) | DES( K3, c)

c = "1122334455667788"

NTLMv1("pass1", c) = "151814cebe6083b0551173d5a42adcfa183c70366cffd72f"

Figure 2 NTLMv1 Hashing Algorithm and Example

必须注意的是,NTLMv1 hashes可以被破解,从而可得到用于生成这个NTLMv1 hash的那个NT hash。存在针对选定的NTLMv1 challenges的彩虹表,可以在数分钟内获得哈希值(Shamir,2018)。例如,https://crack.sh 可以用于此目的。因此,本文将视NTLMv1 hash与对应的NT hash等效。但是,必须明白PtH攻击使用的是真正的"NT hash"。

参考Figure 3可知,NTLMv2散列算法步骤
第1步:NTLMv2散列算法将用户名(user name)和域的名称(domain name)连接在一起,然后使用密码的NT hash作为key,来应用HMAC-MD5散列函数。
第2步:将上一步的计算结果作为key,将server和client的challenges串起来,并再次应用HMAC-MD5散列函数。

// u – user name | d – domain name | s – server challenge | c – client challenge
v2_Hash = HMAC-MD5(u+d, NT_Hash(password))
NTLMv2(password, u, d, s, c) = HMAC-MD5(s+c, v2_Hash)
u = “local_used1”; d = “GIAC-MSFT”; s = “1122334455667788”
c = “0F2795EDCC2AB44DCE77EC3031EBF595”
NTLMv2(“pass1”, u, d, s, c) = “0101000000000000C0653150DE09D20180DD46755
D637E72000000000200080053004D004200330001001E00570049004E002D005000
52004800340039003200520051004100460056000400140053004D00420033002E00
6C006F00630061006C0003003400570049004E002D0050005200480034003900320
0520051004100460056002E0053004D00420033002E006C006F00630061006C0005
00140053004D00420033002E006C006F00630061006C0007000800C0653150DE09
D20106000400020000000800300030000000000000000100000000200000F8E6D0C
07977EB77F39274A491B01EA3BE82BF0C85E35DFDAF1902D989438F1B0A001
000000000000000000000000000000000000900100063006900660073002F00640064
006400000000000000000000000000”

Figure 3 NTLMv2 Hashing Algorithm and Example

NTLMv2比NTLMv1强。通常,NTLMv2需要使用如hashcat、john之类的工具实现暴力枚举(brute-force)、字典攻击(dictionary attacks)来进行破解(Siddhu,2016)。这些攻击是可行且普遍使用的(Stankovic,2017),从而可以恢复明文密码 而不是NT hash。因此,本文并不探讨这种类型的攻击,本文关注于直接使用NTLMv2 hashes的中间人攻击(man-in-the-middle attacks)。

2.3. Pass-the-Hash Attack

"Windows 10中的PtH" 与 "NTLMv2身份验证协议" 密切相关。Windows实现了单点登录(SSO)系统,该系统在首次身份验证后缓存了凭据(credentials),并在此之后使用缓存了的凭据去访问主机(hosts),文件共享(file shares)和其他资源(此过程对用户透明)。单点登录系统的优点是,避免了用户每次访问网络资源时都需要重新输入密码。

NTLMv2身份验证过程应用了challenge/response交换,该交换不使用用户的明文密码,而是使用其NT hash。 此功能允许攻击者在不知道相应密码的情况下使用NT hash进行身份验证 (Pass-the-Hash)。

此外,在中间人攻击中,可以直接使用捕获到的NTLMv2 hash进行身份验证,即使不知道NT hash也没关系。

  • PtH攻击包括2个主要步骤:
    • 1.Extraction of hashes
      • 通过网络通信从已经控制的主机提取 hashes (在Section 4中进行了说明)
      • 通过另一个尚未被控制的主机中提取 hashes (在Section 5 中进行了说明)
    • 2.gain access
      • 使用提取到的hashes来访问同一个机器、或不同的机器 (在Section 6中进行了说明)

看下Figure 4 中的演示。


Figure 4 PtH Authentication

Figure 4 演示了使用Metasploit成功建立了PtH连接。这次攻击中使用的NT hash是以32个零开头的,代表LM hash。因为Windows 10不使用LM hashes,所以零是被接受的。

3. Test Environment

本文的目的是,测试并确认在最新的Windows环境中PtH攻击所带来的风险等级。

为此,多个"用户帐户"(user accounts)被使用。

如下,Figure 5展示了这些"帐户"(accounts)的配置。NTLMv1 hashes使用1122334455667788作为challenge.

Account details

User name: local_used1 | Type: local | Groups: Administrators
Password: pass1A?1 | NT hash: D1E534455F97DBB7FBE436CD25CE661B
NTLMv1: C59DAC0FD53CCC70991990CB8EC3084AE1BF3881312D3280
Comment: The user has already logged in to the computer.

User name: local_used2 | Type: local | Groups: Administrators
Password: pass1A?2 | NT hash: 43BDCF65BD4D6603BBD8311D4B1670B1
Comment: The user has already logged in to the computer.


User name: local_notused | Type: local | Groups: Administrators
Password: pass1A?3 | NT hash: B85CA2C4BA3911C6DC427392FD7B7F7D
Comment: The user has never logged in to the computer.


User name: domain_used1 | Type: domain | Groups: Domain Admins
Password: pass1A?4 | NT hash: 7BBC9C60C62A1204364B66D678FCA2C9
NTLMv1: 04753E2350DB855B4A1BF6F7F693D3AFF9F3CEE75B64A7F6
Comment: The user has already logged in to the computer.


User name: domain_used2 | Type: domain | Groups: Domain Admins
Password: pass1A?5 | NT hash: 5E64EA6FBAFAC1289CE092AED46790A5
Comment: The user has already logged in to the computer


User name: domain_notused | Type: domain | Groups: Domain Admins
Password: pass1A?6 | NT hash: 05CF392F7B89860C6AC0F6FD85B87A3E
Comment: The user has never logged in to the computer.


User name: msft_used@outlook.com | Type: Microsoft | Groups: Administrators
点击收藏 | 2 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖