admin管理员组文章数量:1529447
Windows 本地认证
本地认证即用户的账户密码存储在本机电脑中,无论电脑是否联网,都可输入正确的账户密码进行登录。
工作组内的电脑采用的就是本地认证
本地认证流程
winlogon.exe
Windows Logon Process(即winlogon.exe),是Windows NT 用户登陆程序,用于管理用户登录和退出。
该进程的正常路径应是C:\Windows\System32,且是以 SYSTEM 用户运行
lsass.exe
lsass.exe是一个系统进程,用于微软Windows系统的安全机制。 它用于管理本地安全策略和认证策略。
这些策略包括密码策略、账户策略、用户权限、域策略等等,除此之外,还对用户进行身份验证,以确保只有授权的用户才能访问系统资源。
lsass程序的作用:
1、将winlogon传过来的明文账户密码进行加密,然后和SAM文件中的密文账户密码作对比,如果对比成功则登录成功。
2、将收到的明文账户密码在本地内存中一份作为备用
SAM文件
对于Windows,SAM文件是位于C:\windows\system32\config\sam,用于存储本地所有用户的凭证信息。
但对应普通用户而言,不能进行增加、修改、查看、复制。
详解
-
SAM文件是Windows的用户账户数据库,所有用户的登录名及口令等相关信息都会保存在这个文件中。
-
SAM文件中的密码并不是以明文的形式存在,而是加密后存储在SAM文件中
-
文件中的账户存储格式为:
用户名:LM-HASH值:NTLM-HASH值,例如:administrator:LM-HASH值:NTLM-HASH值
SAM文件和lsass.exe文件关系
LM-HASH
对于Windows操作系统通常使用两种方法对用户的明文密码进行加密处理,一部分为LM-HASH,另一部分为NTLM-HASH。
SAM文件中的hash值结构为username:RID:LM-HASH:NTLM-HASH
LM-HASH概述
挑战/响应验证机制
LM Hash的全名为"LAN Manager Hash",是微软为了提高 Windows操作系统的安全性而采用的散列加密算法,其本质是DES加密。
尽管 LM Hash较容易被破解,但为了保证系统的兼容性,Windows只是将LM Hash禁用了(从 Windows vista和 Windows Server2008版本开始, Windows操作系 统默认禁用 LM Hash)。
LM Hash明文密码被限定在14位以内,也就是说,如果要停止使用 LM Hash,将用户的密码设置为14位以上即可。
如果 LM Hash被禁用了,攻击者通过工具抓取的LM Hash通常为 “aad3b435b51404eead3b435b51404ee”(表示 LM Hash为空值或被禁用) 。
操作系统所用HASH
为了解决LM加密和身份验证方案中固有的安全弱点,Microsoft 于1993年在Windows NT 3.1中引 入了NTLM协议。
下面是各个版本对LM和NTLM的支持:
加密类型 | 2000 | XP | 2003 | Vista | Win7 | 2008 | Win8 | 2012 | Win10 | 2016 | Win11 |
---|---|---|---|---|---|---|---|---|---|---|---|
LM-HASH | √ | √ | √ | √ | |||||||
NTLM-HASH | √ | √ | √ | √ | √ | √ | √ |
LM-HASH值的加密流程
用户密码例如:a1b2c3…
1、将明文口令转换为大写
A1B2C3…
2、将大写的字母转换为16进制
41 31 42 32 43 33 2E 2E
3、密码不足14字节,要求 用0补齐
41 31 42 32 43 33 2E 2E 00 00 00 00 00 00
4、将上述编码分为2组7字节
第一组:41 31 42 32 43 33 2E
第二组:2E 00 00 00 00 00 00
5、将每一组7个字节的16进制转换为2进制,每7bit一组末尾加0,再转换为16进制
第一组:41 31 42 32 43 33 2E
二进制:01000001001100010100001000110010010000110011001100101110
每7bit一组末尾补0
01000000
10011000
01010000
01000110
00100100
00011000
11001100
01011100
合并后:0100000010011000010100000100011000100100000110001100110001011100
转为16进制:409850462418CC5C
第二组:2E 00 00 00 00 00 00
二进制:00101110000000000000000000000000000000000000000000000000
每7bit之后补0
00101110
00000000
00000000
00000000
00000000
00000000
00000000
00000000
合并后:0010111000000000000000000000000000000000000000000000000000000000
转为16进制:2E00000000000000
6、将上述步骤得到的两组8字节编码,分别作为DES加密,key为魔术字符串 KGS!@#$% 进行加密。
KGS!@#$% 的16进制为4B47532140232425,最后将两组加密后的密文进行拼接,即得到LM-HASH值
第一组:FCEECFE68DE61CD8
第二组:5AACD84CD494924F
两组进行拼接
用户密码 a1b2c3…的LM-HASH值为FCEECFE68DE61CD85AACD84CD494924F
NTLM-HASH
概述
NTLM Hash是微软为了在提高安全性的同时保证兼容性而设计的散列加密算法。
NTLM Hash 是基于MD4加密算法进行加密的,个人版从 Windows vista以后,服务器版从 Windows Server 2003以后, Windows操作系统的认证方式均为 NTLM Hash
加密规则
1、将明文口令转换为16进制
以a1b2c3…为例
16进制:61 31 62 32 63 33 2e 2e
2、将16进制转换为Unicode格式,即在每个字节之后添加0X00
6100310062003200630033002E002E00
3、对Unicode字符串作为MD4加密,生成32位的16进制值
b6fedcbb1ab4f59dd213d03eb992b759
SAM文件值
用户名为administrator
密码为a1b2c3…
存储后的密文格式为 administrator:500:FCEECFE68DE61CD85AACD84CD494924F:B6FEDCBB1AB4F59DD213D03EB992B759
hash值对比
使用工具提取系统中sam文件的存储值
QuarksPwDump.exe
mimikatz.exe
网络认证
概述
网络认证:Windows网络认证指在Windows操作系统中进行网络通信和资源访问时,验证用户身份和授权权限的过程。确保只有经过身份验证的用户才能够访问网络资源,并根据其权限级别进行授权操作。
认证方式
1、用户名和密码认证
最为常见的认证方式,用户提供有效的用户名和密码用于验证身份,这种认证方式适用于本地计算机账户或域账户。
2、Kerberos认证
Kerberos是一种网络身份验证协议,在Windows域环境中被广泛使用, 通过使用票据和票据授予票证(TGT)来验证用户身份,并生成会话密钥用于加密通信。
3、NTLM协议
NTLM(NT LAN Manager)是一种早期的Windows网络认证协议,基于挑战(Challenge)-响应(Response)的方式进行身份验证。
目前Kerberos已成为首选的认证协议,但NTLM仍然在少数情况下使用,特别是与旧版Windows系统或非Windows系统进行互操作时。
4、密钥身份认证
Windows支持使用密钥来进行身份的验证,这种方式涉及使用预先共享的密钥对用户进行身份验证,通常用于特定的场景和应用。
5、远程桌面认证(Remote Desktop Authentication)
在进行远程桌面连接时,用户需要提供目标计算机的凭证进行认证,以验证身份并获得远程访问权限。
NTLM协议
主机A想要访问主机B上的资源,就要向主机B发送一个存在于主机B上的一个账户,主机B接收以后会在本地进行验证,如果验证成功,才会允许主机A进行相应的访问。
NTLM(NT LAN Manager)认证是一种早期的Windows网络身份验证协议,在Windows系统中用于验证用户的身份,并提供对网络资源的访问控制。
NTLM协议是一种基于挑战(Challenge)/响应(Response)认证机制
NTLM协议 挑战 /响应认证机制
大致流程如下:
1、协商:双方确定传输协议的版本等信息
2、质询:Challenge/Response 认证机制的关键之处
3、验证:对质询的最后结果进行一个验证,验证通过后,即允许访问资源
认证过程
认证分为认证成功与认证失败两种
1、client端会向server端发起请求连接商议信息
2、server端会在本地生成一个(16位或8位)随机字符,即challenge,并将生成的challenge 传递给client端
3、当client端接收到challenge信息时,将username的NTLM-hash对challenge进行加密,并和用户名、域名、机器名等相关信息生成response,并将response发送给给server端
4、server端在收到response后,将其和相同的方法进行加密生成另一个response。如果相同,则验证成功, 如果不同,则验证失败。
Wireshark抓包分析
实验环境
两台Windows server 2008 R2机器进行NTLM认证抓包分析
机器IP地址 | 机器名 | 机器用户 |
---|---|---|
192.168.110.7 | lm | administrator |
192.168.110.8 | WIN-LUOQFIF9141 | administrator |
在机器192.168.110.7上执行net use \IP /u:账号名 密码 进行认证,同时进行抓包
流量分析
前四条数据都是用于信息协商
第五个数据包是用户的身份验证信息和某些规则,主要为flag里面的规则
第六条数据包 包含同意列表和challenge值
可以观察到该challenge值为16位,这是因为采用的是NTLM v2协议。如果是NTLM v1协议,则challenge值为8位。
第七个数据包是发送response的数据包,包含账户名和response等相关信息
第8个数据包返回的是结果,用于表示成功还是失败
challenge值与response值
Challenge是服务器端发送给客户端的一串随机字符,NTLM-v1协议中是8位,NTLM-v2协议中是16位,自从Windows vista之后就开始默认使用v2协议了。
Reponse值是由客户端生成发送给服务端,用于进行校验。
协议对比
- LM-HASH:针对早期Windows用户密码进行加密的hash值
- NTLM-HASH:针对目前Windows用户密码进行加密的hash值
- NTLM协议认证:一种认证方式,用于建立两台计算机的信任,分为NTLM-v1协议和NTLM-v2协议
- NTLM-v2-hash:在NTLM-v2协议认证过程中的一段加密的hash值
- NET-NTLM v1 hash:是由不同字段组成的值,用于计算机进行对比
NTLM协议安全问题
- PTH攻击:因为在NTLM认证过程中,会使用到用户的NTLM-HASH值进行计算,如果攻击者知道计算机中用户的hash值,就可以进行PTH攻击
- NET-NTLM hash relay攻击:NTLM中间人攻击,如果获得net-NTLM v1 hash可以重放,进行认证
- NET-NTLM v1 & v2 hash破解:v1破解比较简单,使用DES容易破解。如果是V2就要使用碰撞的方式,可以使用彩虹表等方式,获取明文的账号及密码
Kerberos认证
协议简介
Kerberos协议是一种网络认证协议,设计目的是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。
认证过程中的实现不依赖于主机操作系统的认证,不需要基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意读取、修改和插入数据。
Kerberos协议作为一种可信任的第三方认证服务,是通过传统的密码技术(如共享密钥)执行认证服务的。
角色划分
-
客户端(client):发送请求的一方
-
服务端(server):接收请求的一方
-
密钥分发中心(key distribution center,KDC),密钥分发中心分为两部分:
AS(authentication server):认证服务器,专门用于认证客户端的身份并发放客户用于访问TGS的TGT(票据授予票据)
TGS(ticket granting ticket):票据授予服务器,用于发放整个认证过程以及客户端访问服务端时所需的服务授予票据(ticket)
认证流程
大致流程
客户端与AS通信原理
客户端拿着身份信息去AS服务器认证,认证通过后返回一张用于访问TGS的TGT
身份信息内容包含如下
- name(用户名)
- IP地址
- Time(当前时间)
TGT包含的内容如下图
提供身份信息的数据包为AS-REQ(AS-require),发送TGT的数据包为AS-REP(AS-response)
当用户收到TGT后,会对TGT进行解密
客户端与TGS通信原理
票据信息内容
客户端与服务端通信原理
客户端拿着ST去找WEB系统
服务端收到客户端发过来的ST之后进行解密
- 首先使用本机的机器用户HASH值解密ST得到CS_SK
- 再使用CS_SK解密第一部分信息
- 最后进行对比,对比成功后建立信任
AS数据包分析
客户端与认证服务器(AS)进行通信的数据包,提供身份信息的数据包为AS-REQ(AS-require),发送给TGT的数据包为AS-REP(AS-response)。
环境准备
两台Windows server 2008机器
机器名 | 当前登录用户 | IP地址 |
---|---|---|
hd | hd | 192.168.110.8 |
lm | lm | 192.168.110.7 |
使用kekeo工具完成kerberos攻击,工具命令如下
tgt::ask /user:域用户 /domain:域名 /password:密码
在hd机器上使用该条命令同时进行Wireshark抓包,生成TGT
AS-REQ
主要包含用户的身份信息,由客户端发送给AS的数据包,其中有几个重要信息
-
PA-DATA pA-ENC-TIMESTAMP:使用用户的hash值或者AES key加密时间戳生成的key
PA-DATA pA-PAC-REQUEST:是否包含有pac(PAC 包含用户的SID、用户所在组等信息)
-
kdc-options:协商字段
-
cname:请求的用户名
-
realm:域名
-
sname:请求的服务名
AS-REP
当KDC收到AS-REQ之后,解密其中的PA-DATA pA-ENC-TIMESTAMP ,如果成功返回AS-REP。
第一个enc-part值是由krbtgt用户hash值加密部分
第二个enc-part值是由用户hash值加密部分
AS发送到客户端的TGT为:
TGS数据包分析
客户端与票据授予服务器(TGS)的通信数据包,TGS-REQ是客户端发送给TGS的数据包,TGS-REP是TGS发送给客户端的数据包。
环境准备
使用kekeo工具本地生成ST票据,同时进行Wireshark抓包。
kekeo工具命令如下
tgs::ask /tgt:tgt票据 /service:服务名/域名地址
例如:tgs::ask /tgt:TGT_lm@XBXAQ.COM_krbtgt~xbxaq@XBXAQ.COM.kirbi /service:cifs/lm.xbxaq
筛选下数据包
TGS-REQ
客户端解密AS发送过来的TGT后,再重新封装TGT
客户端发送给TGS的数据包,其中包含如下内容:
- authenticator:使用CT_SK加密内容
- ticket:原始的TGT,使用krbtgt加密
- cname:请求的用户名
- sname:请求的服务名
TGS-REP
TGS发送给客户端的信息,其中包含有:
- ticket:票据内容
- 第一个enc-part:ticket中的part值为服务密钥加密的内容
- 第二个enc-part:外层的part值为CT_SK加密内容
TGS封装后发送的ST
AP数据包分析
客户端与服务端的通信数据包,AP-REQ是客户端发送ST给服务端的数据包,AP-REP是服务端发送给客户端的数据。
客户端接收到TGS发送过来的ST之后,会对其进行解密,认证再重新封装ST
环境准备
两台Windows server 2008机器
机器名 | 当前登录用户 | IP地址 |
---|---|---|
hd | hd | 192.168.110.8 |
lm | lm | 192.168.110.7 |
登录hd的计算机,使用域控administrator账户申请票据,使用kekeo工具
注意:申请票据得用高权限用户!!!
相关命令如下
# 申请TGT票据
tgt::ask /user:域用户 /domain:域名 /password:域用户密码
# 申请ST并注入到内存中
# tgs::ask /tgt:tgt票据 /service:服务名\域名地址 /ptt
tgt::ask /user:administrator /domain:xbxaq /password:a1b2c3..
tgs::ask /tgt:TGT_administrator@XBXAQ.COM_krbtgt~xbxaq@XBXAQ.COM.kirbi /service:cifs/lm.xbxaq /ptt
查看当前计算机的票据
wireshark中搜索smb or smb2
AP-REQ数据包
客户端发送给服务端的票据,其中包含有如下内容:
- ticket:包含服务端hash加密内容
- authenticator:包含CS_SK加密内容
AS-REP数据包
服务端发送给客户端的信息,其中包含客户端验证服务端信息
版权声明:本文标题:4-Windows认证及协议 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1726614743a1078104.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论