#根据自己所学分享,若有误请您联系我,我好更正学习中积累错了的知识点
目录
一、Windows本地认证
Windows用户密码文件保存在系统的SAM文件中(但是SAM文件是不可访问的),用户登录Windows时系统时会运行WinLogon.exe(显示注销页面),用户输入账号密码登录时系统会执行lsass.exe即windows系统安全机制(用于本地安全和登录策略),将用户密码转为NTLM Hash然后与本地系统文件SAM文件中的值对比(注意:密码会在lsass.exe进程中明文存储)
windows本地认证原理图
LM Hash和NTLM Hash是Windows认证加密的两种方法。Windows操作系统中的密码一般由两部分组成,LM Hash和NTLM Hash。在Windows操作系统中,Hash的结构如下:
username:RID:LM-HASH:NT-HASH
LM Hsah的全称为"LAN Manager Hash",为了提高Windows操作系统的安全性而采用散列加密算法,本质为DES加密。LM Hash较容易被破解,但是Windows操作系统为了兼容性,只将LM Hash禁用了(Windows vista和Windows Server 2008版本开始禁用LM Hash),使用NTLM Hash加密算法是基于MD4加密算法进行加密的,为了提高Windows系统安全性并且保证了系统的兼容性而设计的散列加密算法。在Windows vista和Windows Server 2003版本以后使用NTLM Hash方法加密,作为windows的认证。
LM Hash原理
前提:假设明文为Abcde@666
1.将用户输入的密码明文转为大写,将其密码转为大写:ABCDE@123
2.将转为大写的字符转为十六进制:41 42 43 44 45 40 31 32 33
3.如果不满足14字节用0补全:41 42 43 44 45 40 31 32 33 00 00 00 00 00
4.将上面十四字节的十六编码数分为两组:
第一组: 41 42 43 44 45 40 31
第二组: 32 33 00 00 00 00 00
5.将每组转为二进制,在将其分为7bit为一组末尾加0,在转换为十六进制,得到8字节的编码
第一组:
十六进制:41 42 43 44 45 40 31
转为二进制:0100 0001 0100 0010 0100 0011 0100 0100 0100 0101 0100 0000 0011 0001
分为7bit一组补全为1Byte:
0100 0000
1010 0000
1001 0000
0110 1000
0100 0100
0010 1010
0000 0000
0110 0010
合并:0100 0000 1010 0000 1001 0000 0110 1000 0100 0100 0010 1010 0000 0000 0110 0010
再转为十六进制:40 A0 90 68 44 2A 00 62
40A09068442A0062
第二组:
十六进制:32 33 00 00 00 00 00
转为二进制:0011 0010 0011 0011 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
分为7bit一组补全为1Byte:
0011 0010
0001 1000
1100 0000
1100 0000
0000 0000
0000 0000
0000 0000
0000 0000
合并:0011 0010 0001 1000 1100 0000 1100 0000 0000 0000 0000 0000 0000 0000 0000 0000
再转为十六进制:32 18 C0 C0 00 00 00 00
6.将两组得到的8字节十六进制编码分别进行DES加密key为魔术字符串KGS!@#$%的十六进制进行加密,即:4B47532140232425。 第一组加密结果:574A31B73009E651;第二组加密结果:7CCDB0D954D509F0
7.将其拼接起来即是LM Hash值:574A31B73009E6517CCDB0D954D509F0
NTLM Hash原理
前提:假设明文为Abcde@666
1.将明文密码转为十六进制,在转换为Unicode格式,Unicode格式即是在每个字节后添加00
明文十六进制:416263646540363636
Unicode格式密文:41 00 62 00 63 00 64 00 65 00 40 00 36 00 36 00 36 00
2.在对Unicode密文进行MD4加密,生成32位十六进制字符串: 136075c87c5e619e5668ab7162e68081
二、Windows网络认证
Windows网络认证原理
Windows网络认证基于挑战响应认证的NTLM协议,处于工作组的计算机无法建立一个可信的信托机构,只有点对点建立访问链接,即需要输入被访问电脑的用户密码。
NTLM协议是一种基于挑战(Chalenge)/响应(Response)认证机制,仅支持windows网络认证的协议。
它主要分为协商、质询和验证三步骤:
协商:确定双方传输协议版本等各种信息。
质询:挑战(chalenge)/响应(response)认证机制
验证:对质询的最后一个结果进行验证
Windows网络认证流程
1.客户端(client)向服务端(server)发送一个账号和密码
2.服务端(server)会在本地查询是否存在这个用户,如果存在,将会生成一个16位的随机字符,即Challenge,然后用查询到这个用户的NTLM Hash对Challenge进行加密,生成Challenge1,将Challenge1存储在本地,并将Challenge传给客户端。若不存在这个用户,即认证失败。
3.客户端(client)收到Challenge时,将发送账号的NTLM Hash对Challenge进行加密,并且Response发送给服务端(server)。
4.服务端(server)收到Response后,与本地的Challenge对比,相同则验证成功,否则失败。
NTLM协议v1版本和v2版本的区别
区别:两个版本加密算法与Chalenge不同。NTLM v1的challenge为8位,加密算法是DES;NTLM v2的challenge为16位,加密算法是HMAC-MD5;
相同点:加密原料都是NTLM Hash进行加密。
三、Windows域认证
Windows域认证之Kerberos协议认证
Kerberos是一种网络认证协议,是一种可信的第三方认证服务,是通过密钥系统为客户机/服务器应用程序提供认证服务,通过传统的密码技术执行认证服务。其分为三部分,分别是:客户端(Client)、服务端(Server)、密钥分发中心(Key Distribution Center,KDC),密钥分发中心又分为认证服务器(AS)、票据授予服务器(TGS)
Kerberos认证流程
1、客户端向KDC发送明文请求,请求体携带自己的用户名、主机IP和当前时间戳;
2、密钥分发中心(KDC)的认证服务器(AS)接受请求后取Kerberos认证数据库中根据用户名查找是否存在该用户,当前之查找是否有相同用户名不会验证身份;
3、如果用户名不存在,认证失败,服务结束;存在用户名则认证服务器(AS)返回响应,其中响应包含两部分:
第一部分:票据授予票据(TGT),内容使用TGS密码加密,内容为Kerberos数据库中存在的该用户的用户名、主机IP、当前时间戳、TGS Name、TGT 有效时间、Session_key(CT_SK)。因为TGS 密钥没有在网络传输过,所有不存在密钥劫持。
第二部分:使用客户端密钥加密,其中包括当前时间戳、TGS Name、TGT有效时间、Session_key(CT_SK)。因为客户端密钥没有在网络传输过,所有不存在密钥劫持。即假客户端解密失败从此认证失败。
4、客户端收到来自密钥分发中心(KDC)的认证服务器(AS)服务器的响应,并获得两部内容,客户端使用自己密钥将第二部分内容进行解密,获取时间戳和将要访问的TGS的信息,和用于TGS通信的密钥CT_SK。首先会将自己发送时的时间戳与响应的时间戳对比若时间差大于5分钟则认为认证服务器(AS)是伪造的,认证失败服务终止;时间合理,客户端准备向票据授予服务器(TGS)发送请求。
5、客户端使用CT_SK加密自己的客户端信息发送给密钥分发中心(KDC)的票据授予服务器(TGS)其中包括用户名9、IP、当前时间戳;以明文方式将访问访问的Server服务发送给密钥分发中心(KDC)的票据授予服务器(TGS)并且携带TGS密码加密的票据授予票据(TGT)
6、此时密钥分发中心(KDC)的票据授予服务器(TGS)接受客户端发送的请求,首先检查明文传输的Server服务IP是否在Kerberos系统可以被用户访问。如果不存在认证失败。如果存在,票据授予服务器(TGS)使用自己的密钥将TGT进行解密,此时看到经过AS认证并记录的用户信息、Session_key(CT_SK)、时间戳,更具时间戳判断是否真实可靠有无超时。未超时,则票据授予服务器(TGS)使用CT_SK对客户端使用CT_SK加密的信息解密 ,取出其中的用户信息和TGT中用户信息对比,全部正确认为客户端身份正确
7.此时密钥分发中心(KDC)返回响应给客户端,响应内容包括两部分:
第一部分:用于客户端访问网络服务使用Server密码加密的Server Ticket(ST),其中包括客户端的用户名、IP、需要访问的网络服务的Server IP、ST有效时间、时间戳和客户端与服务端通信的Session_key(CS_SK)
第二部分:使用CT_SK加密的内容,其中包含CS_SK、时间戳、ST的有效时间。由于在第一次通信中AS已将CT_SK通过客户端密码交给客户端,并且客户端缓存了CT_SK,所以该部分内容客户端接收到是可以解密的。
8.客户端使用CS_SK将自己主机信息和时间戳进行加密作为第一部分内容,然后将ST(服务授予票据)作为第二部分内容发送给服务端。
9.服务器收到客户端的请求,使用Server密钥将客户端第二部分内容进行解密,核对时间戳之后将其中CS_SK取出,使用CS_SK将客户端发送的第一部分解密,从而获得经过TGS认证过后的客户端具有真实身份。此时服务端返回一段使用CS_SK加密的内容表示接收请求响应给客户端,客户端收到请求之后,使用缓存在本地CS_SK解密之后确定了服务端的身份,服务端在通信过程中还会使用数字证书证明自己的身份。
黄金票据原理
Windows系统中的krbtgt用户是系统在创建域时自动生成的一个账号,是密钥分发中心的服务账号,密码是随机生成的,无法登录主机
TGT使用的是krbtgt的HTLM Hash加密
1.Kerberos中的TGT和Logon Session Key(CT_SK)是AS返回给客户端的,TGT是krbtgt加密和签名并且krbtgt的NTLM Hash又是固定的,而CT_SK并不会保存在KDC中,所以得到krbtgt的NTLM Hash就可以伪造TGT和Logon Session Key(CT_SK)。
2.客户端与服务端交互中,已经有TGT,就可以跳过AS验证并且不用验证用户和密码,也不用担心域管密码修改,从而控制域控
白银票据原理
通过伪造ST实现对某个服务的访问,在Kerberos认证中客户端带着ST和客户端使用CS_SK将自己主机信息和时间戳进行加密向Server服务器的某个服务发起请求,服务端接收到客户端的请求后通过自己的服务账号密码进行解密ST,从而获得CS_SK,通过CS_SK解密第一部分内容,进而验证对方身份,验证成功则可以访问对应服务。即伪造ST只需要知道Server用户的Hash就可以伪造,不会经过KDC且只对部分服务起作用。