集权攻防——身份认证协议之NTLM

news2024/11/16 17:36:49

在Kerberos出现之前,NTLM被广泛应用于工作组和域环境,是更早的用于对用户进行身份验证的协议。

相比于Kerberos,NTLM的认证原理比较简单,主要通过对比客户端和服务端加密后的数据,判断其是否一致,以确定用户身份。

如果用做菜来比喻,那么被加密的数据就是“原材料”,加密密钥就是“秘方”,原理就是“用不同的秘方做出来的菜味道不一样”。当秘方只有客户端和服务端知道,服务端确定用户身份时,只需要用该秘方和客户端做同一盘菜,对比两盘菜的味道,如果一样,那就是真实的客户端。

 目前NTLM有两个版本,别是NTLMv1和NTLMv2,他们间最主要的区别体现在被加密数据的长度上,也就是“原材料”的种类。在v1版本中数据长度是8位,而v2版本中增加到16位。

v2版本相较于v1安全性更高,在网络中应用较多。因此,本篇文章中,我们将基于NTLMv2的认证原理,详细介绍“客户端登录”、“访问服务器资源”和“域环境下申请服务”这三种情况的认证过程。

客户端登录 

回忆我们平常登录电脑的过程,输好密码后就直接跳转到了桌面,整个过程不过一两秒钟。但其实在这短暂的两秒中,电脑内部发生了多重“反应”,从而实现对我们身份的验证。

首先,我们输入的密码会被交给Lsass进程,这个进程对明文密码进行加工,生成唯一的密码哈希。

然后,Lsass进程将从本地内存中,找到该用户账户对应的密码哈希。

最后再比较两者,如果相同,证明该用户的身份是真实的,则允许登录。

 

这之中有个关键点:原本存在于本地内存中的密码哈希,是从何而来的呢?

原理是这样的,这个值早在用户注册时,就由Lsass存储在系统中了。这样做的目的,就是为了在系统重启时,快速帮助验证用户身份,保障用户数据安全。

访问服务器资源

在开放网络环境下,用户要访问服务器资源,就需要向服务器提交申请。在NTLM认证过程中,服务器接到申请后,除了验证用户身份,还要判断该用户是否有使用资源的权限、自己是否有能力提供服务等。

接下来我们说说这个过程。

同本地账户类似,用户在访问服务器之前,也需要先在服务器中存有自己的账号,以便在身份验证时进行信息对比。

首先用户注册一个账号,该账号密码以哈希形式存储在服务器中,形成只有用户和服务器知道的“秘方”。

用户请求访问服务时,先将自己的用户名提供给服务器,并且附上想要访问的服务内容。

 

服务端接收到请求后,先检查该用户是不是有资格访问服务,也就是查找该用户是否存在于数据库中;如果存在,再进一步确认自己是否能满足请求。

如果该用户确实存在,服务器就会发送一个随机数给客户端,叫用户做“一道菜”来证明自己不是伪冒的,这个随机数就是“原材料“。这时候,伴随着“原材料”一起发送给客户端的,还有它能提供的服务列表。

客户端收到数据后,将随机数取出,用自己的密钥哈希加工,得到色香味唯一的菜肴。然后将“做好的菜”和原料以及自己的用户名放在一起,组成身份验证包,再次发给服务端。

 

服务端从自己的数据库中找到该用户的“秘方”,使用同样的“原材料”——随机数做菜。然后比较两道菜,如果相同,则认为用户身份真实,就可以响应其请求了。

 

域环境下申请服务

域环境下申请服务时,NTLM的认证过程和第二种情况基本一样,只是在最后验证用户身份时,并不是由服务器来进行,而是域控。

这是为什么呢?

在AD域安全管理系列科普文章中,我们提到,AD域内所有账户信息都存储在域控上。这说明,域环境下的服务器上并没有用户“秘方”,“秘方”只存在于域控上。

所以服务器接收到身份验证包后,会将它转发给域控,由域控来进行验证。

域控在数据库中找到该用户对应的密码哈希,同样加工该随机数,得到加密后的值。将这个值与客户端加密的值进行比较,最后把结果返回给服务器。

 

 结语 

由上可见,无论哪种情况下,NTLM在认证过程中,都没有在网络上单独传递密码,这减少了密码泄露的可能,提高了系统安全性。

但NTLM的认证方式也不是绝对安全的,基于密码哈希的认证方式,让攻击者在不需要获取明文密码的情况下,也能直接传递密码哈希通过认证。有的攻击者甚至将客户端发送给服务器的验证信息截获,用来进行明文爆破或NTLM中继攻击。

为了防范这样的威胁,我们需要选择安全性更高的认证协议或采取专门的安全运营方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅析Spring生命周期

前言 Spring框架是一个非常流行的Java企业级应用程序框架,已经成为许多生产环境中的首选技术。它提供了一种便捷的方法来帮助开发人员构建可扩展和模块化的企业级应用程序。在Spring框架中,Bean生命周期是非常重要的一部分,它负责Bean的创建…

【教程】ChuanhuChatGPT本地化部署支持多语言模型支持上传分析文档附件的GPT

原文:【教程】本地化部署支持多语言模型支持上传分析文档附件的GPT_腾讯新闻 说明 该项目要是为 ChatGPT API 和其他多种语言模型(Language Language Models,简称 LLM)提供一个用户友好的 Web 图形界面(GUI)。这个项目的 GUI 支…

# 文盘Rust -- tokio绑定cpu实践

作者: jiashiwen 原文来源: https://tidb.net/blog/18804515 notice"Rust is a trademark of the Mozilla Foundation in the US and other countries." tokio 是 rust 生态中流行的异步运行时框架。在实际生产中我们如果希望 tokio 应用程…

AI浪潮下,企业如何保障数据安全,不泄露

随着数字经济蓬勃发展,数据对于企业的价值与重要性不断攀升,随之而来的数据安全风险也不断涌现。再加上ChatGPT诞生,推动ai算力技术大步跃进,而算力提升的背后是史诗量级规模的数据投入,数据量越大,用户数据…

函数调用的机器级表示

文章目录 1.Call和ret指令2. 如何访问栈帧里面的数据为什么栈底放在上面,栈顶放在下面X86中的寄存器EBP、ESP寄存器push 、pop 指令mov 指令总结如何访问栈帧 3. 如何切换栈帧函数调用时函数返回时 4. 完整的函数调用过程1. 一个函数的栈帧内包含哪些内容2. 汇编代码…

配置数据库

🌳🌳🌳前言:下载数据库,安装配置数据库,连接Navicat 又又又重新配置数据库害。 目录 一、下载数据库 二、安装 三、解决3306端口占用 四、验证 五、连接Navicat 一、下载数据库 官方链接:M…

Glibc——堆利用机制[拓展]

目录 1、什么是堆 2、使用动态分配的内存 3、系统调用brk和mmap 3.1 brk() 3.2 mmap() 4、多线程与Arena 5、维护多个堆 1、什么是堆 堆是每个程序被分配到的一块内存区域,和栈的区别主要在于堆内存是动态分配的。也就是说,程序可以从“heap“段请…

LPC1114 - AD采集

一、基础知识 1.1位操作 对寄存器的bit5写0&#xff1a; 寄存器&~&#xff08;1<<5&#xff09;&#xff1b; 现在运用你的C语言知识分析一下&#xff0c;把十进制的1写成二进制32位数就是&#xff1a; 00000000000000000000000000000001 &#xff08;1<<5&…

微服务下如何选择OAuth2授权之四种模式

OAuth2.0是一个授权框架&#xff0c;他规定了客户从授权服务器获取令牌Token的规则。 一、OAuth2的组成部分 1.OAuth2.0需要解决的问题 要理解OAuth2.0&#xff0c;先要知道为什么会有这个东西产生&#xff0c;或者说他能帮我们解决什么问题&#xff0c;其实简单说他就是帮我…

【解决】跨设备访问Ubuntu接口文档,请求超时,ping不通问题

文章目录 一、问题描述二、系统环境三、问题原理说明1. 常见问题原因2. 说说IP 地址和子网掩码不匹配问题 四、有风险的解决方法1. 一般的解决方法&#xff1a;2. 我们的解决方法&#xff1a;第一&#xff1a;第二&#xff1a; 选择网络适配器第三&#xff1a;桥接模式第四&…

js常用的一些技巧【一行】

前言 总结一些常用的&#xff0c;但是一时可能想不起来的一些js小技巧&#xff0c;方便CV 数组 生成数组 当你需要要生成一个0-99的数组 方案1 const createArr (n) > Array.from(new Array(n), (v, i) > i) const arr createArr(100) // 0 - 99 数组方案2 const c…

相同性能和体积的磁体,吸力是一样的吗?

很多小伙伴可能都会有这样一个疑问&#xff0c;相同性能和体积的磁体&#xff0c;它们的吸力一样吗&#xff1f;网上有说钕铁硼磁铁的吸力是自身重量的640倍&#xff0c;这可信吗&#xff1f; 这个问题其实可以发散开&#xff0c;那就是磁铁的吸力与哪些因素有关。首先需要明确…

【已解决】qt4安装包下载含下载链接(完全版)

总所周知&#xff0c;c qt4.8是一个稳定版本&#xff0c;而qt4.8去网上找的我好辛苦&#xff0c;而且官网时而挂机一样&#xff0c;网站崩溃一样&#xff0c;即使找到了&#xff0c;它们也会让你下载qt4.8版本&#xff0c;而那些&#xff0c;比如这里就会显得手足无措。 问题…

爱创科技闪“药”亮相第62届全国制药机械博览会!

2023年5月28日-30日&#xff0c;第62届&#xff08;2023年春季&#xff09;全国制药机械博览会暨2023中国国际制药机械博览会在青岛国际世界博览城完美收官。全国药机展是业界公认的专业化、国际化、规模大、展品全、观众多&#xff0c;集贸易、研讨于一体的制药装备行业交流平…

FPGA实战开发-基于的ddr图像缓存设计(上)

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 例如&#xff1a; 本文主要基于DDR的图像缓存设计 整体架构流程 提示&#xff1a;这里可以添加技术整体架构 先用图像产生模块产生一个1080P60Hz的测试图像&#xff0c;然…

内网程序配置外网访问方案

该方案可解决客户公司没有固定IP&#xff0c;内网IIS程序配置外网访问。如果有固定IP&#xff0c;可以直接在公司主路由器上映射端口即可。 一、申请一个公司域名和云服务器 二、在申请的公司一级域名下&#xff0c;解析一个二级域名&#xff0c;使用泛域名方式&#xff0c;解…

Mysql版本升级教程【5.x到8.x】

目录 0.查看当前版本1.备份导出原数据2.停止Mysql服务3.卸载Mysql相关组件4.删除Mysql安装目录5.删除Mysql数据目录6.官网下载新版安装包7.安装新版Mysql8.配置环境变量 0.查看当前版本 1.备份导出原数据 可以在Navicat里将相关数据库存到.sql文件中&#xff0c;到时候直接导入…

阿里面试太为难我了,阿里面试了7轮(拿下P7岗offer)

前言 今年的大环境非常差&#xff0c;互联网企业裁员的现象比往年更严重了&#xff0c;可今年刚好是我的第一个“五年计划”截止的时间点&#xff0c;说什么也不能够耽搁了&#xff0c;所以早早准备的跳槽也在疫情好转之后开始进行了。但是&#xff0c;不得不说&#xff0c;这…

准备跳槽的兄弟可以看看...

八股文为什么这么火爆&#xff1f; 因为只要大家技术和能力过关&#xff0c;八股文能帮助大家在面试时有很好的表现和稳定的发挥&#xff0c;让面试官预估到你能带来的价值&#xff0c;从而实现薪资高涨幅。 总结了一些小伙伴的面试经验&#xff0c;和我自己多年的资料库存&a…

Zabbix“专家坐诊”第194期问答汇总

问题一 Q&#xff1a;请问一下&#xff0c;我这个监控上了光交和V7000通过trap&#xff0c;mib文件也上传了&#xff0c;usr/snmp/mibs/V7000目录&#xff0c;是创建的监控项调用此文件夹下的mib文件&#xff0c;还是自动找呢&#xff1f; A&#xff1a;mib文件只用于mib内容…