4-Windows认证及协议

Windows 本地认证

本地认证即用户的账户密码存储在本机电脑中,无论电脑是否联网,都可输入正确的账户密码进行登录。

工作组内的电脑采用的就是本地认证

本地认证流程

image-20230904232918041

winlogon.exe

Windows Logon Process(即winlogon.exe),是Windows NT 用户登陆程序,用于管理用户登录和退出。

该进程的正常路径应是C:\Windows\System32,且是以 SYSTEM 用户运行

image-20230904233537797

lsass.exe

lsass.exe是一个系统进程,用于微软Windows系统的安全机制。 它用于管理本地安全策略和认证策略。
在这里插入图片描述

这些策略包括密码策略、账户策略、用户权限、域策略等等,除此之外,还对用户进行身份验证,以确保只有授权的用户才能访问系统资源。

lsass程序的作用:

1、将winlogon传过来的明文账户密码进行加密,然后和SAM文件中的密文账户密码作对比,如果对比成功则登录成功。

2、将收到的明文账户密码在本地内存中一份作为备用

SAM文件

对于Windows,SAM文件是位于C:\windows\system32\config\sam,用于存储本地所有用户的凭证信息。

但对应普通用户而言,不能进行增加、修改、查看、复制。

image-20230904234607231

详解

  • 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的支持:

加密类型2000XP2003VistaWin72008Win82012Win102016Win11
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

image-20230905113621304

两组进行拼接

用户密码 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

image-20230905114739048

SAM文件值

用户名为administrator

密码为a1b2c3…

存储后的密文格式为 administrator:500:FCEECFE68DE61CD85AACD84CD494924F:B6FEDCBB1AB4F59DD213D03EB992B759

hash值对比

使用工具提取系统中sam文件的存储值

QuarksPwDump.exe

image-20230905115756523

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。如果相同,则验证成功, 如果不同,则验证失败。

image-20230925110108517

Wireshark抓包分析

实验环境

两台Windows server 2008 R2机器进行NTLM认证抓包分析

机器IP地址机器名机器用户
192.168.110.7lmadministrator
192.168.110.8WIN-LUOQFIF9141administrator

在机器192.168.110.7上执行net use \IP /u:账号名 密码 进行认证,同时进行抓包

image-20231228153927832

流量分析

image-20231228154001492

前四条数据都是用于信息协商
在这里插入图片描述

第五个数据包是用户的身份验证信息和某些规则,主要为flag里面的规则

第六条数据包 包含同意列表和challenge值

image-20231228154422412

可以观察到该challenge值为16位,这是因为采用的是NTLM v2协议。如果是NTLM v1协议,则challenge值为8位。

第七个数据包是发送response的数据包,包含账户名和response等相关信息

image-20231228154804348

第8个数据包返回的是结果,用于表示成功还是失败

image-20231228154923905

challenge值与response值

Challenge是服务器端发送给客户端的一串随机字符,NTLM-v1协议中是8位,NTLM-v2协议中是16位,自从Windows vista之后就开始默认使用v2协议了。

Reponse值是由客户端生成发送给服务端,用于进行校验。

协议对比

  1. LM-HASH:针对早期Windows用户密码进行加密的hash值
  2. NTLM-HASH:针对目前Windows用户密码进行加密的hash值
  3. NTLM协议认证:一种认证方式,用于建立两台计算机的信任,分为NTLM-v1协议和NTLM-v2协议
  4. NTLM-v2-hash:在NTLM-v2协议认证过程中的一段加密的hash值
  5. NET-NTLM v1 hash:是由不同字段组成的值,用于计算机进行对比

NTLM协议安全问题

  1. PTH攻击:因为在NTLM认证过程中,会使用到用户的NTLM-HASH值进行计算,如果攻击者知道计算机中用户的hash值,就可以进行PTH攻击
  2. NET-NTLM hash relay攻击:NTLM中间人攻击,如果获得net-NTLM v1 hash可以重放,进行认证
  3. 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进行解密

image-20231228161947534

客户端与TGS通信原理

image-20231228162133584

票据信息内容

image-20231228162217535

客户端与服务端通信原理

客户端拿着ST去找WEB系统
在这里插入图片描述

服务端收到客户端发过来的ST之后进行解密

  • 首先使用本机的机器用户HASH值解密ST得到CS_SK
  • 再使用CS_SK解密第一部分信息
  • 最后进行对比,对比成功后建立信任

AS数据包分析

客户端与认证服务器(AS)进行通信的数据包,提供身份信息的数据包为AS-REQ(AS-require),发送给TGT的数据包为AS-REP(AS-response)。

环境准备

两台Windows server 2008机器

机器名当前登录用户IP地址
hdhd192.168.110.8
lmlm192.168.110.7

使用kekeo工具完成kerberos攻击,工具命令如下

tgt::ask /user:域用户 /domain:域名 /password:密码

在hd机器上使用该条命令同时进行Wireshark抓包,生成TGT

image-20231229130937364

image-20231229131031462

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:请求的服务名

image-20231229131745598

AS-REP

当KDC收到AS-REQ之后,解密其中的PA-DATA pA-ENC-TIMESTAMP ,如果成功返回AS-REP。

image-20231229132036858

第一个enc-part值是由krbtgt用户hash值加密部分

第二个enc-part值是由用户hash值加密部分

AS发送到客户端的TGT为:

image-20231229132205541

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.com@XBXAQ.COM.kirbi /service:cifs/lm.xbxaq.com

image-20231229133005017

筛选下数据包
在这里插入图片描述

TGS-REQ

客户端解密AS发送过来的TGT后,再重新封装TGT

在这里插入图片描述

客户端发送给TGS的数据包,其中包含如下内容:

  • authenticator:使用CT_SK加密内容
  • ticket:原始的TGT,使用krbtgt加密
  • cname:请求的用户名
  • sname:请求的服务名

image-20231229133547795

TGS-REP

TGS发送给客户端的信息,其中包含有:

  • ticket:票据内容
  • 第一个enc-part:ticket中的part值为服务密钥加密的内容
  • 第二个enc-part:外层的part值为CT_SK加密内容

TGS封装后发送的ST

image-20231229133849796

image-20231229134008183

AP数据包分析

客户端与服务端的通信数据包,AP-REQ是客户端发送ST给服务端的数据包,AP-REP是服务端发送给客户端的数据。

客户端接收到TGS发送过来的ST之后,会对其进行解密,认证再重新封装ST

image-20231229134158450

环境准备

两台Windows server 2008机器

机器名当前登录用户IP地址
hdhd192.168.110.8
lmlm192.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.com /password:a1b2c3..

tgs::ask /tgt:TGT_administrator@XBXAQ.COM_krbtgt~xbxaq.com@XBXAQ.COM.kirbi /service:cifs/lm.xbxaq.com /ptt

image-20231229135345195

image-20231229135355577

查看当前计算机的票据

image-20231229140317913

wireshark中搜索smb or smb2

image-20231229140834400

AP-REQ数据包

客户端发送给服务端的票据,其中包含有如下内容:

  • ticket:包含服务端hash加密内容
  • authenticator:包含CS_SK加密内容

image-20231229141032297

image-20231229141054250

AS-REP数据包

服务端发送给客户端的信息,其中包含客户端验证服务端信息

image-20231229141238618

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值