0x00 前言

通过Fox-IT我们可以让客户了解其企业组织中出现的常见安全风险。当攻击者可以利用NT LAN Manager身份验证协议(以下简称:NTLM身份验证)时,凭据重用就有这样的风险,即这种协议通常在Microsoft Active Directory中保持启用状态。NTLM认证中的不安全性已有超过15年。该协议可能被滥用,是通过一个被称为“中继”的过程劫持受害者的会话,该过程通过将受害者的凭据转发到与预期不同的服务来滥用受害者的凭据。在许多情况下,默认情况仍然支持和启用NTLM身份验证,即使它已被更安全的Kerberos替换为默认身份验证方法。

在本文中,我们将演示如何使用NtlmRelayx将凭证中继到LDAP、IMAP和MSSQL,NtlmRelayx是著名的smbrelayx工具的FOX IT扩展。要防御此类攻击:

  • 如果可能,请完全禁用企业组织内的NTLM并切换到Kerberos。
  • 如果无法禁用NTLM,请参阅此文中讨论的设置和指南,以降低凭据重用的风险。

0x01 NTLM中继简要说明

NTLM身份验证是一种基于挑战 - 响应的协议。挑战- 响应协议使用一个通用的共享秘密(在本例中是用户密码)来验证客户端。服务器发送一个质询,客户端回复此质询的响应。如果质询与服务器计算的质询相匹配,则接受身份验证。NTLM身份验证是一种复杂的协议,这里只是简单的阐述。可以在http://davenport.sourceforge.net/ntlm.html中找到非常详细的描述。

1.NTLM身份验证流程

NTLM身份验证协议有3个步骤:

  1. 协商身份验证:NTLM身份验证的第一步是协议协商,以及客户端支持的功能。在此阶段,客户端将身份验证请求发送到服务器,包括客户端接受的NTLM版本。
  2. 服务器挑战:服务器响应自己的消息,指示它接受的NTLM版本以及要使用的功能。此消息还包括“质询”值,这在身份验证中很重要。
  3. 身份验证响应:客户端根据质询返回响应,并包含所属的用户名和域的密码

交互3条消息后,服务器将回复一条消息,表明身份验证成功,或者身份验证失败。根据使用的协议,客户端与服务器之间的会话现在已经过身份验证。此过程如下图所示:

2.滥用NTLM

作为攻击者,如果客户端能够被劫持连接到攻击者,那么这个过程可能会被滥用。如何做到这一点将在下一节中阐述。一旦攻击者拥有一个进行身份验证的连接客户端,他们就可以轻松地将3条消息转发到客户端和服务器之间的服务器,直到质询 - 响应周期完成。

在连接通过身份验证时,攻击者可以简单地向客户端发送错误消息,或者断开连接。之后,攻击者可以使用该会话从中继身份验证的用户中与服务器进行交互。

3.跨协议(cross)中继

NTLM身份验证被封装在其他协议中,但无论上层协议如何,消息都是相同的。这允许在其他协议中使用NTLM消息。例如,使用HTTP进行身份验证的客户端会在“授权”标头中发送NTLM身份验证消息。攻击者可以从HTTP标头中取出这些消息,并在其他协议(如SMB)中使用它们。

NTLM在多种协议中被支持,例如SMB,HTTP(S),LDAP,IMAP,SMTP,POP3和MSSQL。

4.获得中继流量

还有一点尚未解释,那就是如何让客户端与攻击者连接,而不是与真正的服务器连接。有几种方法可以获得可中继的流量:

  • 以不安全的方式向以其解析IP的主机的流量
  • 滥用AutoDiscovery协议导致的流量
  • 通过中间人攻击获得的流量

4.不安全的名称解析协议

在Fox-IT中经常遇到使用不安全协议的名称解析流量。工作站或服务器通常被配置为网络中不再存在的主机或无法使用DNS解析其主机名的主机。当这种情况发生时,Windows工作站会退回到名称解析协议,如NBNS和LLMNR,它们依赖广播流量来请求同一网络中的主机将主机名解析为IP地址。由于同一网段中的所有主机都可以查看此流量(取决于防火墙配置),因此任何主机都可以回复请求。这使攻击者有机会伪造所请求名称的地址。该过程如下所示。

5.自动发现(WPAD)协议

也许过去几年黑客中最臭名昭著的功能是Windows代理自动检测(WPAD)功能。此功能基本上会通过DNS查找名为WPAD的主机名,如果不成功,则可以通过上面描述的llmnr和nbns进行攻击,然后连接到它能找到的第一个主机。滥用此功能变得更加容易,因为当提示进行身份验证时,工作站将自动尝试使用NTLM身份验证进行验证,然后攻击者可能会中继该身份验证。微软在2016年6月修补了这方面的一些问题,但有时Fox-IT仍在网络中遇到这种情况。

6.中间人攻击

攻击者接管受害者流量的中间人攻击通常在企业网络中具有很大的破坏性,尤其是在使用诸如ARP欺骗之类的技术时。但是,当企业设备连接到不受信任的网络(例如公共WiFi网络)时,攻击者可以攻击受害者并拦截不受TLS保护的流量,将其重定向到受害者工作站信任的位置。然后,如果启用了自动内部网检测(这是默认设置),受害者将自动进行身份验证。

7.使用Ntlmrelayx在任何地方中继NTLM

有几种工具可以滥用NTLM身份验证。其中一个是smbrelayx,它是Core Security的impacket 库的一部分。Ntlmrelayx是由Fox-IT开发的smbrelayx工具的扩展和部分重写。它具有适用于各种协议的中继功能。该工具接受多个目标,在每个目标之间循环,以找到要进行身份验证的系统。该工具具有一个SMB和HTTP服务器,从中它可以将NTLM身份验证中继到SMB、HTTP(S)、IMAP、LDAP和MSSQL。

8.中继到SMB

中继到smb是一种经典攻击,它已经是smbrelayx的一部分。如果您不熟悉此攻击,中继到SMB允许攻击者在禁用了SMB签名的主机上执行文件,前提是被中继的用户在设备上具有管理权限。对于非管理用户,ntlmrelayx添加了启动smbclient shell的选项,允许攻击者与共享进行交互,例如下载或上传文件。可以使用交互式标志(-i)完成此攻击,该标志将生成本地TCP shell,该shell可以与例如netcat连接。

9.中继到LDAP

中继到LDAP是Ntlmrelayx中的一个新增功能。LDAP是一个有趣的协议,因为它用于直接查询目录,该目录包含了许多攻击者感兴趣的信息。更有趣的是,在默认情况下,域中的所有帐户(包括计算机帐户)都可以读取这些信息的大部分。这就是Ntlmrelayx与另一个Fox IT开发工具ldapdomaindump集成的地方。此工具尝试从域中收集尽可能更多的信息,包括用户,其组成员身份,域计算机和域策略。

除了收集信息之外,还可以通过LDAP写入目录。如果ntlmrelayx遇到具有域管理员权限的用户,它将创建一个新的域管理员帐户,该帐户立即使攻击者可以完全控制域:

10. 中继到IMAP

虽然在当前版本的Exchange中默认情况下未启用,但许多企业组织在其Exchange服务器上通过IMAP进行NTLM身份验证。这允许中继到IMAP,使攻击者可以直接访问受害者的电子邮件。当中继到IMAP时,ntlmrelayx可以选择在电子邮件中搜索关键字,或者只在用户的指定收件箱中下载所有最新的电子邮件。

11.中继到MSSQL

中继到MSSQL目前仅作为理论证明存在,但可以在命令行上指定查询,这些查询将在数据库的受害者上中被执行

0x02 缓解措施

那么,在企业组织可以做些什么来抵御这些攻击呢?上述所有攻击都滥用了NLTM身份验证协议,因此唯一完整的解决方案是完全禁用NTLM并切换到Kerberos。但是,许多企业组织都有不支持Kerberos身份验证的旧产品或操作系统,因此禁用NTLM将对业务产生相当大的影响。作为缓解措施,那么可以启用多种设置以减少最小化的中间人攻击风险。

  • 启用SMB签名:SMB签名将通过要求对所有流量进行签名来阻止中继到SMB。签名要求用户密码对消息进行身份验证,因此中继连接的攻击者无法发送服务器接受的任何通信,因为攻击者没有拥有受害者的密码。
  • 启用LDAP签名:与SMB签名类似,LDAP签名可防止与LDAP的未签名连接。应该注意的是,通过TLS到LDAP的连接被认为是签名的,因此此设置不会阻止通过TLS到LDAP的中继攻击。
  • 启用身份验证扩展保护:身份验证的扩展保护有助于防止某些中继攻击,方法是确保用于连接到服务器的TLS通道与客户端进行身份验证时使用的通道相同。此设置主要适用于IIS。
  • 启用SPN目标名称验证:SPN目标名称验证是另一种缓解措施,它可以通过验证客户端认为正在进行身份验证的目标名称来阻止中间人攻击到SMB。如果名称与服务器不匹配,则拒绝身份验证。
  • 确保内部网站使用HTTPS:当通过不安全的HTTP协议访问内部网站时,用户无法验证连接的真实性。通过强制所有内部网站仅通过HTTPS方法,中间人攻击变得不那么有效。

一般强化以防止中间人攻击

除了这些特定的服务器端设置之外,以下一般强化可以防止NTLM中继:

  • 禁用自动Intranet检测:如果域中需要NTLM身份验证,请确保浏览器(主要是Internet Explorer)仅自动对受信任的网站进行身份验证。通过组策略,可以禁用自动Intranet检测,并且只能自动对应应用自动身份验证的内部网站白名单进行身份验证。如上所述,强烈建议仅在此处使用HTTPS网站。
  • 禁用Windows代理自动检测:虽然WPAD的安全问题主要由Microsoft MS16-077安全更新解决,但仍然建议通过组策略禁用WPAD。
  • 禁用LLMNR / NBNS:在配置良好的网络中通常不需要这些不安全的名称解析协议。禁用它们会减少攻击者进行名称解析欺骗的可能性,从而使攻击者更难以欺骗受害者身份连接到攻击者服务器。

0x03 获取Ntlmrelayx

Ntlmrelayx已经提交到Impacket存储库中,可以在Impacket 示例目录中找到

0x04 更多资源

我们在尝试理解NTLM方面的大部分研究都是在以下资源的帮助下完成的:

 
 
 
 
 

使用ntlmrelayx在任何地方进行中继凭据的更多相关文章

  1. 结合NTLM中继和Kerberos委派攻击AD

    0x00 前言 在上个月我深入演讲了无约束委派之后,本文将讨论一种不同类型的Kerberos委派:基于资源的约束委派.本文的内容基于Elad Shamir的Kerberos研究,并结合我自己的NTLM ...

  2. mitm6:通过IPv6攻破IPv4网络

    一.前言 虽然IPv6正在互联网上逐步推广,但在内部网络环境中使用IPv6的公司依然非常稀少.然而,大多数公司并不知道,即使他们没有主动去使用IPv6,但从Windows Vista以来,所有的Win ...

  3. 搭建域环境,安装Exchange Server 2013,复现CVE-2019-1040

    搭建域环境 操作系统: 域控:Windows server 2008 R2    域成员: Windows Server 2012 . Windows 7 对于将要安装成为DC的服务器来讲,其系统配置 ...

  4. 第六章 系统配置:DHCP和自动配置

    系统配置:DHCP和自动配置 写在开头:今天和导师见了个面,抛给我一堆材料以及论文,感觉自己学业更加繁重.有些知识现阶段我可能没办法掌握,但是至少在我需要进一步理解它的时候,要知道在哪个地方能够找到. ...

  5. Salesforce学习之路-developer篇(二)利用Jenkins和Bitbucket实现Salesforce的CI/CD功能

    上文提到,基于CRM的二次开发是必不可少的,但是在实际项目中CI/CD是不可忽略的一个重要部分,与传统的Java,Python项目不同,如果对Salesforce进行持续集成和持续部署呢? 结合找到的 ...

  6. Salesforce学习之路(四)利用Jenkins和Git实现Salesforce的CI/CD功能

    上文提到,基于CRM的二次开发是必不可少的,但是在实际项目中CI/CD是不可忽略的一个重要部分,与传统的Java,Python项目不同,如果对Salesforce进行持续集成和持续部署呢? 结合找到的 ...

  7. Android手机做无线中继路由器

    为什么要拿手机做路由器?因为我现在每天要带着一个火柴盒大小的路由器(703n).它提供了一个f了q的无线网络,电脑,手机,平板等设备连接上这个无线网络之后之后就可以自由上twitter,看youtub ...

  8. 构建混合应用方式之WCF中继

    使用VPN或者ER服务建立云服务和本地服务网络通道来搭建混合应用的方式,需要网络设备的配合和比较复杂的网络配置,所以不是特别的方便.如果是不希望对本地网络环境做修改,而只是服务层面的混合,那么可以使用 ...

  9. [转]自建Syncthing中继服务器(私密传输或造福大众)

    自建Syncthing中继服务器(私密传输或造福大众) 一.介绍 我之前介绍了Syncthing,作为一款开源的文件同步程序,它的功能还是非常强大的,我也很高兴能看到它被越来越多的人知道和使用,前几天 ...

随机推荐

  1. 【php增删改查实例】第十三节 - EasyUI列格式化

    因为easyUI的datagrid组件是横着一格一格加载数据的,一行加载好了之后才会去加载下一行.所谓的列格式化,就是在加载某一列的所有单元格时,对即将加载到这些单元格的数据进行二次包装. 比如,我们 ...

  2. NIO之缓冲区

    NIO引入了三个概念: Buffer 缓冲区 Channel 通道 selector 选择器 1.java.io优化建议 操作系统与Java基于流的I/O模型有些不匹配.操作系统要移动的是大块数据(缓 ...

  3. 用PHP山寨一款软件

    什么是我国软件工程师引以为豪的能力?山寨.山寨,山寨! 我国程序员的山寨能力是世界一流的.这一点在世界范围内令人闻风丧胆.世界上根本就找不到一款我国工程师不能山寨的软件. 今天,锋哥教大家来山寨一款软 ...

  4. Centos6下关于系统用户密码规则-运维笔记

    随着linux使用的普遍,对于linux用户以及系统的安全要求越来越高,而用户密码复杂程度是系统安全性高低的首要体现.因此如何对linux下用户的密码进行规则限制,以保证用户必须使用复杂的密码,杜绝用 ...

  5. Spring RPC 入门学习(2)-获取Map对象

    Spring RPC传递Map用例编写 1. 新建RPC接口类 package com.cvicse.ump.rpc.interfaceDefine; import java.util.Map; pu ...

  6. 《Linux课本》读书笔记 第十七章 模块

    设备与模块: 设备类型:块设备(blkdev).字符设备(cdev).网络设备: 模块: 分析hello,world模块代码.Hello_init是模块的入口点,通过module_init()注册到系 ...

  7. Linux课题实践三——程序破解

    2.3   程序破解 20135318 刘浩晨 1.     掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即“空指令”.执行到NOP指令时,CPU什么也不做,仅仅当做一 ...

  8. Opentsdb 启动显示配置文件不存在

    今天 重新启动opentsdb  出现本地配置文件不存在   这不知道  我查了一下官网 了解到 You can use the --config command line argument to s ...

  9. Android中加解密算法大全

    Base64编码 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,本质上是一种将二进制数据转成文本数据的方案,对于非二进制数据,是先将其转换成二进制形式,然后每连续6比特(2的6次 ...

  10. Spring Cloud集成EDAS(替代Eureka)

    https://help.aliyun.com/document_detail/72618.html?spm=5176.7946893.821398.spring-cloud.603123beXemW ...