资料
NTLM的工作原理:
NTLM协议用于在客户端和服务器之间建立经过身份验证的通信。客户端必须在连接服务器之前对自身进行身份验证,这将验证客户端是否确实是合法客户端而不是攻击者。
经过身份验证的连接有3个步骤:
1.客户端在服务器端请求身份验证(NTLM身份验证)。
2.服务器使用质询(NTLMSSP_CHANGLISK)进行响应--一个随机的字符序列。
3.客户端使用其密钥加密质询并将其发回。
在身份验证过程中,客户端使用MD4指纹作为其密码的DES密钥(如果使用的是NTLMv1)来加密质询。在任何可能的情况下,在身份验证过程中都不会使用明文密码。唯一使用的版本是hash版本,称为NT hash,它是明文密码的简单hash。
当服务器收到客户端的响应时,可能出现两种情况:
1.当客户端为本地帐户时:
在这种情况下,服务器已经知道该帐户并拥有该帐户秘密的副本。然后,服务器将使用客户端的秘密密钥或带有MD4 hash的秘密密钥发送加密口令验证。在客户端响应之后,服务器将检查他是否使用了正确的密码对其进行身份验证。
本地帐户的hash密码(以加密版本)存储在安全帐户管理器(SAM)数据库中,只有在您配置为SYSTEM时才能通过注册表访问该数据库。请注意,尽管hash是加密存储的,但解密它们所需的信息也存储在SAM中。
2.当客户端为域帐户时:
域帐户的NThash存储在域控制器中。服务器必须使用域控制器(DC)来检查客户端的答案是否有效。服务器和DC之间的通信使用Netlogon服务完成。服务器将向DC发送有关客户端的多个详细信息,并且DC将在名为NTDS.DIT的文件中查找客户端的NT hash。
一旦DC获得hash,它将知道预期的响应,将其与客户端的响应进行比较,并将信息发送给服务器。
攻击方式
NTLM中间人攻击
NTLM中间人攻击使用NTLM基本认证方法作为攻击矢量,因此只要NTLM在使用,它就会有意义。
在这种攻击方法中,攻击者使用中间人技术在客户端和服务器之间转发信息。攻击者设法使自己处于一种客户认为他是服务器,而服务器认为他是客户的方式。
在攻击过程中,攻击者会接触到客户端和服务器之间传输的信息。在客户端与服务器的通信过程中,客户端的密码是没有用的,只有经过hash处理的版本。但是,当理解了认证过程后,很容易发现,偷窃hash值与偷窃密码本身是一样的,因为你可以通过使用它来获得认证。事实上,拥有NT的hash值和拥有明文的密码一样有用。
服务器不知道与他通信的是一个攻击者而不是一个客户,客户也不知道他提供的信息在这次通信中被一个不速之客所利用。最终,攻击者在服务器进行了认证,获得了客户执行任务和访问服务器资源的能力。
NTLM传递hash值
NTLM传递hash值攻击是基于NTLM中间人攻击方法。
当使用一个主模板配置一个新客户的工作区时,所有使用该模板配置的客户都有相同的账户信息。如果这些账户之一被攻破,攻击者设法获取把他的NT hash,那么他就可以开始检查任何他想要的帐户,希望这个账户的模板与他偷取hash的那个账户相同。
攻击者使用这个hash值的另一个选择是利用用户的分组。一旦攻击者掌握了NT的hash值,他就可以把所有的主机作为原始用户所在的组的一部分进行认证。例如,如果拥有被盗hash值的用户在某些组中被设置为管理员,攻击者就可以利用它,在任何他想要的主机中以管理员身份进行认证。回到第一种情况,只要实现了一个主模板,它的分组也会被添加到主机的配置中。
样本
自解压可执行文件
执行流程
运行后,通过批处理文件执行regedit /s nl.reg将如下信息导入注册表
reg文件信息
REGEDIT4
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa]
"LMCompatibilityLevel"=dword:00000001
导入此注册表文件后会让客户端设备使用LM和NTLM身份验证,并且如果服务器支持,它们使用NTLMv2会话安全。域控制器接受LM、NTLM和NTLMv2身份验证。
动机分析
在执行红队行动时,攻击者有可能会遇到无法使用Mimikatz的情况。这可能是因为几乎所有的杀毒软件或恶意软件都会在Mimikatz进入目标机时检测到它的存在。在这种情况下,攻击者可以进行内部攻击。要进行这种攻击,需要一个由Missing Link Security的Elad Shamir开发的工具。
在接触到Windows安全机制后,你会对NetNTLM很熟悉。这是一个基于口令验证响应的协议,在Windows无法应用基于Kerberos的认证时使用。在这种方法中,服务器向用户发送一个以NTLM哈希值为密钥的8字节口令验证。该哈希值是用户密码的MD4哈希值。有两个版本的NetNTLM。两者都存在漏洞。第一版的NetNTLM已经推出了相当长的时间,目前默认是禁用的。
从一般意义上讲,降级攻击是通过Mimikatz本身进行的。在利用了目标机器后。攻击者可以使用Mimikatz或手动编辑注册表键,如LMCompatibilityLevel的值,如0,1,2,可以使被攻击的设备使用NTLM降级或旧版本与其他SMB服务器互动,并可以导致转向其他用户和服务器。
然而,在演示中描述的这种攻击中,没有使用Mimikatz,而是攻击者通过SSPI从用户模式的应用程序调用本地过程到NTLM认证包。这就计算出了我们前面讨论的登录用户的NetNTLM响应。这种攻击本质上是禁用了NetNTLMv1的预防性控制,然后它继续从当前运行的进程中提取所有非网络登录令牌,并冒充相关用户。对于每个被冒充的用户,NTLM SSP在本地调用NTLMv1对所选口令验证的响应,然后恢复前面讨论的注册表键的原始值。现在,捕获的哈希值可以用你喜欢的工具来破解,如John the Ripper或Hash Cat。
相关资料
资料来源如下地址:为方便理解进行了翻译
https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-security-lan-manager-authentication-level
LAN Manager身份验证级别设置决定了网络登录使用哪种口令验证(challenge)/响应认证协议。这一选择会影响客户端使用的认证协议级别、计算机协商的会话安全级别以及服务器接受的认证级别。下表确定了策略设置,描述了该设置,如果你选择使用注册表来控制该设置而不是策略设置,则确定了相应注册表设置中使用的安全级别。
环境 |
描述 |
注册表安全级别 |
发送 LM 和 NTLM响应 |
客户端设备使用LM和NTLM身份验证,并且从不使用NTLMv2会话安全性。域控制器接受LM、NTLM和NTLMv2身份验证。 |
0 |
发送 LM & NTLM – useNTLMv2session security if negotiated |
客户端设备使用LM和NTLM身份验证,如果服务器支持,则使用NTLMv2会话安全。域控制器接受LM、NTLM和NTLMv2身份验证。 |
1 |
仅发送NTLM响应 |
客户端设备使用NTLMv1身份验证,如果服务器支持,则使用NTLMv2会话安全。域控制器接受LM、NTLM和NTLMv2身份验证。 |
2 |
仅发送NTLMv2响应 |
客户端设备使用NTLMv2身份验证,如果服务器支持,则使用NTLMv2会话安全。域控制器接受LM、NTLM和NTLMv2身份验证。 |
3 |
仅发送NTLMv2响应。拒绝LM |
客户端设备使用NTLMv2身份验证,如果服务器支持,则使用NTLMv2会话安全。域控制器拒绝接受LM身份验证,并且只接受NTLM和NTLMv2身份验证。 |
4 |
仅发送NTLMv2响应。拒绝LM和NTLM |
客户端设备使用NTLMv2身份验证,如果服务器支持,则使用NTLMv2会话安全。域控制器拒绝接受LM和NTLM身份验证,并且只接受NTLMv2身份验证。 |
5 |
风险
必须将LAN Manager认证级别设置为只发送NTLMv2响应,并拒绝LM和NTLM。
资料来源:https://www.stigviewer.com/stig/windows_server_2016/2019-01-16/finding/V-73691
查找 ID |
版本 |
规则 ID |
告警级别 |
V-73691 |
WN16-SO-000380 |
SV-88355r1_rule |
高 |
Kerberos v5认证协议是默认的,用于认证登录到域账户的用户。NTLM的安全性较低,在以后的Windows版本中被保留下来,以便与运行早期Windows版本的客户和服务器或仍然使用它的应用程序兼容。它也被用来验证运行较晚版本的独立计算机的登录。
手工验证
如果下面的注册表值不存在或没有按指定的方式配置,则存在安全风险
符合要求的示例:
Registry Hive: HKEY_LOCAL_MACHINE
Registry Path: \SYSTEM\CurrentControlSet\Control\Lsa\
Value Name: LmCompatibilityLevel
Value Type: REG_DWORD
Value: 0x00000005 (5)
级别5对应于“仅发送NTLMv2响应。拒绝LM和NTLM。“。是最令人向往的状态。
级别3(“仅发送NTLMv2响应”)是继续与NETID DC交互所需的最低级别。但请注意,如果您使用级别3而不是级别5,您将继续在您的域中允许NTLMv1,并且您的域的帐户仍将面临风险。
在微软NTLM中发现的两个漏洞CVE 2019-1166和CVE-2019-1338,允许攻击者绕过MIC保护并修改NTLM消息流与签名要求。
Windows NTLM 安全功能绕过漏洞
CVE-2019-1338
Microsoft Windows中存在一个安全功能绕过漏洞,当客户端也发送LMv2响应时,中间人攻击者能够成功绕过NTLMv2保护。成功利用此漏洞的攻击者可能获得降级NTLM安全功能的能力。
Windows NTLM篡改漏洞
CVE-2019-1166
当中间人攻击者能够成功绕过NTLM MIC(消息完整性检查)保护时,Microsoft Windows中存在篡改漏洞。成功利用此漏洞的攻击者可能获得降级NTLM安全功能的能力。
安全事件
网络环境:一家总部位于美国东海岸的金融服务公司,拥有数百台服务器和工作站。
预期:IT部门需要临时员工来处理激增的工作。这种“专家”可以根据需要在短期和特定任务的基础上列入工资单。
问题:Netsurion的EventTracker在两台服务器上检测到特定注册表项的修改,其中一台服务器托管了后端MS SQL,另一台服务器托管了基于Web的前端应用程序。这个特定的键HKLM\SYSTEM\CurrentControlSet\Control\Lsa\LmCompatibilityLevel。这被称为有史以来最容易被误解的Windows安全设置。该设置将在下次重新启动时生效。
发现:一名由IT部门雇用并提供管理员权限的合同员工对提前终止合同感到不满,并安装了恶意软件来窃听前端和后端系统之间的流量。这位前员工想要对他的雇主认为的错误进行“惩罚”。
修复:将注册表项设置恢复到其所需的级别(即5)。
存在隐患的解决方案
问题:Windows XP SP2、Vista、Windows 7客户端无法连接到Netware CIFS
原因:这与NTLM的版本有关。Windows XP SP2之前的微软操作系统使用NTLM版本1。然而,Windows XP SP2、Vista和Windows 7客户端默认使用NTLM版本2。
Netware 6.5 CIFS无法通过NTLM版本2协议进行通信。
解决:
- 打开 "regedit"
- 到 "HKEY_LOCAL_MACHINE" -->"SYSTEM" -->"CurrentControlSet" -->"Control" -->"Lsa"
- 在右边的窗格中,将 "LmCompatibiltyLevel "改为 "1"