彻底理解Kerberos
本地的账号认证
当我们登陆系统的时候,系统会把摄入的密码和%SystemRoot%/system32/config/sam文件进行比对,我们的密码在SAM文件中以NTLM hash的形式存储。用户登录的时候,会将输入的密码已hash的格式进行加密,与本地的sam中的hash进行比对
NTML HASH生成过程
- 先将数据进行hex编码
- 再将hex编码转为unicode编码
- 再将unicode编码的数据进行MD4加密
本地认证流程
开机后,winlogon.exe进程接收用户输入的信息,然后由lsass.exe将密码进行加密,读取用户的用户名和密码进行比对
SMB文件共享协议的作用只是在文件的操作,认证走的是NTLM协议,windows内部广泛使用的是NTLM协议,其他的一些工具可以依赖NTLM认证协议
NTML协商过程
第一步:协商
客户机在这一步向服务器确认协议版本
第二部: 质询
客户端向服务端发送包括用户名在内的用户信息
服务器接收到之后,生成一个16位的随机数,称为
challenge,使用存在SAM文件中的该用户名所对应的NTML HASH对challeng进行加密,生成Net-NTMLhash,其存在于服务器的内存中。同时,将challeng发送给客户端客户端在接收到challenge之后,会使用将要登录到服务器的账户所对应的NTLM hash对challenge进行加密,其表现形式是
NET-ntmlhash,生成response,并将Response返回给服务端服务端在接收到response之后,会将
challenge1与response进行比对,若相等,则通过哈希传递攻击的原理其实就是使用用户名对应的NTLM HASH对服务器传递来的challenge进行加密,生成一个response
域环境
- 活动目录是用来管理的,不是用来进行认证的,参与认证的是Kerberos协议
- 域认证的参与角色:Client server KDC(域控上的一种服务)也可以说是DC(域控)
域认证过程
client向KDC发送username等信息,kdc向as查询看看是否该username在白名单中
验证通过后,AS返回一个随机的session_key 还有两个票TGT1(里面包含session_key tgs服务信息 结束信息) 该票据使用的是NTLM hash进行加密。TGT2(包含session_key 客户信息 结束信息) 使用KDC NTLM HASH进行加密
客户端拿到两个TGT 先用自己的NTLM_hash解密出TGT1,得到sessionkey,tgs服务信息,结束时间 ,然后生成认证因子(客户信息 当前时间等) 使用解密出来的sessionkey进行加密 。 把认证因子+TGT2+客户端的信息+服务信息 发送给TGS
TGS拿到 认证因子+TGT2+客户端的信息+服务信息
先用KDC NTLM hash解密TGT2 得到(session key 用户信息等)再用session key解密认证因子,得到客户信息,时间戳
经过各种校验之后,自己随机生成server session key 生成
TGT3(server session key ,服务器时间 票据到期时间)(使用session key加密)
TGT4(server session key ,服务器时间 票据到期时间)(使用服务器的NTLM hash进行加密)
客户端收到TGT3-4
首先解密TGT3,得到server session key,服务器信息 票据到期时间
再次生成认证因子2(服务器信息 票据到期时间)sever session key进行加密 发送认证因子2+TGT4
服务器收到
解密TGT4 得到 server session key,客户信息,票据到期时间
用server session key解密得到 服务器信息 票据到期时间

