本地认证流程
Windows Logon Process(即 winlogon.exe),Winlogon 是负责处理安全相关的用户交互界面的组
件。
Winlogon的工作包括加载其他用户身份安全组件、提供图形化的登录界面,以及创建用户会话。
LSASS(本地安全认证子系统服务)用于微软Windows系统的安全机制。它负责Windows系统安全策略。
它负责用户在本地验证或远程登陆时验证用户身份,管理用户密码变更,并产生访问日志。
用户注销、重启、锁屏后,操作系统会让winlogon显示图形化登录界面,也就是输入框,接收域名、用
户名、密码后交给lsass进程,将明文密码加密成NTLM Hash,对SAM数据库比较认证,相同则认证成
功。
- winlogon.exe -> 接收用户输入 -> lsass.exe -> (认证)
- Windows Logon Process(即winlogon.exe),是Windows NT户登陆程序,用于管理用户登录
和退出。 - LSASS用于微软Windows系统的安全机制,它用于本地安全和登陆策略。
Windows网络认证
认证
你怎么证明你知道你所声称的用户的密码?(如何证明你是你)
认证分类
- 账号密码认证
通过向服务端发送“账号密码”来证明自己的身份
- 挑战认证
通过向服务端发送“一段计算结果”来证明自己的身份
- Kerberos 认证
通过向服务端发送一张“票”,来证明自己的身份
密钥
长期密钥:被长期密钥加密的数据不应该在网络上传输,因为有的密钥可能长期内保持不变,比如密码
短期密钥:由于被长期密钥加密的数据包不能在网络上传送,所以需要使用另一种密钥来加密需要进行
网络传输的数据。这种密钥只在一段时间内有效,即使加密过的数据包被黑客截获,等他把密钥计算出
来的时候,这个密钥早就已经过期了。我们把这种密钥称为短期密钥。
NTLM认证
Client(客户端)、Server(服务端)
历史版本
NTLMv1:服务器通过发送一个8字节的随机数(挑战)来验证客户端,客户端返回两个24字节Hash进
行计算并返回计算结果。NTLMv2:它通过加强协议来抵御许多欺骗攻击,并增加服务器向客户端进行身份验证的能力,从而增
强了NTLM的安全性。服务器通过发送一个16字节的HMAC - MD5随机数(挑战)来验证客户端。NTLM认证 认证流程图解(工作组)

NTLM认证 认证流程(工作组)
[1] 协商
1.Clint向Server发送TYPE 1 Negotiate 协商信息,确定协议版本
2.服务端接收到客户端发送过来的 TYPE 1 消息,会读取其中的内容,并从中选择出自己所能接收的服
务内容,加密等级,安全服务等等。然后
[2] 质询
1.Client向Server发送明文用户名消息作为请求
2.Server收到请求,验证是否存在Client发来的用户名,如果存在,传入 NTLM SSP ,得到
NTLM_CHALLENGE 信息。
3.将16位的随机数(Challenge)发送给Cilent,并使用SAM中查询用户名对应的NTLM Hash加密
Chanllenge,生成Net-NTLM Hash存放在内存中。
4.Client使用发送的用户名对应的NTLM Hash加密Challenge,将结果(Response)发送给Server
[3] 验证
Server收到Client发送的Response,将接收的Response与Net-NTLM Hash进行比较,如果相同,则认
证通过。
注:每次生成的16字节的Challenge都不同,保证的安全性。
NTLM认证 认证流程图解(域)

NTLM认证 认证流程(域)
1.用户通过输入Windows账号和密码登录客户端主机,客户端会缓存密码的哈希值NTLM-Hash。成功
登录客户端的用户如果试图访问服务器资源,需要向对方发送一个请求,该请求利用 NTLM SSP 生成
NTLM_NEGOTIATE 消息(被称为 TYPE 1消息,Negotiate 协商消息),并将 TYPE 1 消息发送给服务
端中,该TYPE 1消息中包含一个以明文表示的用户名以及其他的一些协商信息(认证的主题,机器以及
需要使用的安全服务等等信息)
2.服务端接收到客户端发送过来的 TYPE 1 消息,会读取其中的内容,并从中选择出自己所能接受的服
务内容,加密等级,安全服务等等。然后传入 NTLM SSP,得到 NTLM_CHALLENGE 消息(被称为
TYPE 2消息,Challenge 挑战信息),并将此 TYPE 2消息发回给客户端。此TYPE 2消息中包含了一个
由服务端生成的16位随机值,此随机值被称为 Challenge,服务器将该Challenge保存起来。
3.客户端收到服务器端返回的 TYPE 2消息, 读取出服务端所支持的内容,并取出其中的随机值
Challenge,用缓存的密码的哈希值NTLM-Hash对其进行加密,得到 Net NTLM-Hash(加密后的
Challenge),并且将 Net NTLM-Hash封装到 NTLM-AUTH 消息中(被称为 TYPE 3 消息,
Authenticate认证消息),发往服务端。
5.DC根据用户获取该账号的密码哈希值 NTLM-Hash,用密码哈希值 NTLM-Hash 对原始的 Challenge
进行加密得到Net NTLM-Hash。如果加密后的Challenge和服务器发送的一致,则意味着用户拥有正确
的密码,验证通过,否则验证失败。DC将验证结果发给服务器。
6.服务器根据DC返回的结果,对客户端进行回复。
double-hop (双跃点)
1 | impersonate: |
Kerberos
1 | 地狱三头犬 |
Kerberos会使用的端口
1 | TCP和UDP的88(Kerberos)端口:身份验证和票证授予 |
Kerberos 认证流程
Client(客户端)
Server(服务端)
KDC(也就是参与认证的域控制器)
1.Client请求KDC的AS服务拿到TGT
2.Client拿着TGT 请求 KDC 的 TGS 服务拿到ST
3.Client拿着ST访问Server

Kerberos 认证流程图解

Client向KDC-AS申请TGT(1)
Client—–>KDC-AS(AS-REQ)
客户端发送由client Authenticator1到AS 通过Client NTLM hash(长期密钥)加密的
时间戳(防止重放攻击)
Client Name
Service Name
AS-REQ域用户枚举
Client向KDC-AS申请TGT(2)
KDC-AS ——-> Client(AS - REP)
1.身份验证服务(KDC-AS)使用用户NTLM解密时间戳,解密成功(KDC-AS)检查用户的信息(登录
限制.组成员身份等)并创建TGT
2.向本地LSA(Local Security Authority)请求生成一个特殊的数据PAC(使用krbtgt密钥进行签名)KDC
随机生成一个短期会话密钥(Session Key),此时AS向Client发送两条信息
(1)TGT(使用krbtgt NTLM Hash加密),内容包含:
User Name、Domain Name、组成员资格
TGS Name时间戳、IP地址
TGT的生命周期、Session Key
(2)另一条信息T(C)(使用Client申请TGT时使用的用户名对应的NTLM Hash加密),内容包含:TGS
Name、时间戳、TGT的生命周期、Session Key
SESSION KEY 离线爆破
Client拿着TGT 请求 KDC的TGS服务拿到ST(1)
1 | Client->KDC-TGS (TGS_REQ) |
Client拿着TGT 请求 KDC的TGS服务拿到ST(2)
1 | KDC-TGS->Client(TGS-REP) |
Client拿着ST访问Server(1)
1 | Client -> Server (AP-REQ) |
Client拿着ST访问Server(2)
1 | Server: |