Windows系统存在着两种主要认证方式,它们分别是NTLM和Kerbose
Windows认证机制
Hash存储位置
- 本机用户:C:\Windows\system32\config\SAM (系统运行时不可访问)
- 域用户:C:\Windows\NTDS\ntds.dit (系统运行时不可访问)
Widows的两种认证方式
认证方式 | 应用场景 | 类型 | 参与者 | 特点 |
---|---|---|---|---|
NTLM | 主要用于Windows NT及Windows 2000 server及以后工作组环境中 | Challenge/Response based | 客户端,服务端,域控 | |
Kerberos | 主要用于Windows 2000 server 及以后的域环境中 | Ticket based | 客户端,服务端,KDC(Key Distribution Center,一般由域控担任) | 无状态,双向认证 |
NTLM
LM只适用于小于14个字符的密码,如果大于14个字符则使用NTLM
2000 | xp | 2003 | Vista | win7 | 2008 | 2012 | |
---|---|---|---|---|---|---|---|
LM | 默认 | 默认 | 默认 | ||||
NTLM | 大于14字符使用 | 大于14字符使用 | 大于14字符使用 | 默认 | 默认 | 默认 | 默认 |
当LM Hash是AAD3B435B51404EEAAD3B435B51404EE时有以下三种情况
- 空密码
- 大于十四位的密码
- 故意设置为此值
NTLM认证过程如下所示:
Kerberos
Kerberos是基于票据的认证方式,在这种认证方式下客户端想要访问某个服务时必须持有一张票据,但是这张票据不是随便领取的,在获得这张票据之前你首先得有一张认购权证。这种机制让我想起了现实中的一些例子,比如你要参加一个重要会议或者活动时你需要有门票吧,但是为了安全起见你必须首先去公安机关或者有关部门开一张你是良民的证明然后才能拿着这个证明买到参会的门票。Kerberos认证流程大体上可以分为六个步骤,如下图所示:
图中一些缩写以及稍后将要用到的缩写的解释如下表所示:
缩写 | 解释 |
---|---|
KDC | Key Distribution Center,秘钥分发中心,它包括AS及TGS两个服务 |
AS | Authentication Service,认证服务 |
TGS | Ticket Granting Service,票据授权服务 |
TGT | Ticket Granting Ticket,认购权证 |
AD | Account Database,账户数据库,用于存储用户名及对应的密码hash值,这个数据库一般由活动目录维护 |
ST | Service Ticket,最终的服务票据 |
LSK | Logon Session Key,客户端与KDC之间通信安全的会话秘钥 |
SSK | Service Session Key,客户端与服务器之间的通话秘钥 |
一些总结:
- Authenticator在Kerberos认证过程中参与了每个环节,在上述1,3,5三个请求过程中它分别被客户端用户密码hash,LSK,SSK进行加密,其在认证过程中起到了标识客户端身份的重要作用。
- LSK,SSK都是Short Term Key即这种秘钥可能频繁的更换所以就算在交互过程中泄露也不会影响太大,并且这两个秘钥每个都有两份。而用户密码,krbtgt用户密码,服务器密码则属于Long Term Key,因为我们通常不会频繁的变换自己的密码,这也是为什么会出现黄金票据及白银票据攻击方式的原因。
- AD在上述认证的过程中也几乎参与了每个环节,需要通过它获得第一步中Username对应的密码从而生成加密Authenticator的秘钥从而对Client进行身份验证,还需要通过它获取KDC服务即krbtgt用户角色的密码由于加密TGT,最后还需要通过它获取Server Name对应的密码用于加密ST。
- 6个步骤中涉及到的加密过程都是对称加密。这六个步骤可以进一步的分为三