Windows认证协议
windows 认证部分主要包含四个部分:本地认证,网络认证,域认证(kerberos)和 Windows Access Token。
- 本地认证:用户直接操作计算机登录账号
- 网络认证:用户远程连接到某个工作组中的设备
- 域认证:用户登录到域中的某个设备
本地认证
当用户操作计算机登录账号,输入账号和密码后,计算机需要将用户输入的密码与本地保存的密码直接进行比对,如果正确则登录成功。但有一点,计算机并不会保存用户的明文密码,所以输入的密码需要先进行加密成NTLM Hash
之后才能验证,而计算机本地用户的NTLM Hash
存储在%SystemRoot%\system32\config\sam
这个文件相当于一个数据库,计算机本地所有的用户NTLM Hash
都存储在这里。
NTLM Hash 的产生
NTLM Hash
的全程为:NT LAN Manager
假设用户输入的明文密码为password
,那么操作系统会先将password
转换成十六进制,再进行unicode转换,最后再调用MD4算法进行加密,最后得到的结果就是NTLM Hash
|
|
本地认证流程
|
|
- Windows Logon Process(即 winlogon.exe)是 Windows NT 用户登录程序,用于管理用户登录和退出。
- LSASS用于微软Windows系统的安全机制,它用于本地安全和登录策略。lsass.exe进程中会保存一份明文密码将其加密成NTLM Hash。
LM Hash
NTLM Hash的前身就是 LM Hash (LAN Manager) 协议。
LM与NTLM协议的认证机制相同,但是加密算法不同
- 将所有小写字母转化成大写字母;
- 将密码转换成十六进制,分为两组,填充为14个字符,空余位使用0x00填补;
- 再将密码分割为两组7个字节的块;
- 将每组转化为比特流,不足56bit则再左边加0
- 将比特流按照7比特一组,分出8组,末尾加0
- 将每组转化为十六进制作为被加密的值,使用DES加密,字符串
KGS!@#$%
为key,得到8个结果,每个结果转化为十六进制 - 连接两个DES加密字符串即为LM Hash
|
|
网络认证
假设主机A和主机B处于一个工作组当中,当主机A想要访问主机B中的资源时,主机A需要提供一个存在于主机B中的凭证,经过认证后才能继续访问。比如SMB共享文件,SMB的默认端口是445。
NTLM 协议
NTLM是一种网络认证协议,基于挑战(Challenge)/响应(Response)认证机制的一种认证模式。
Challenge/Response
NTLM协议的认证分为3步:
- 协商:主要用于确认双方协议版本
- 质询:就是挑战(Challenge)/响应(Response)认证机制起作用的范畴
- 验证:主要是在质询完成后,验证结果
|
|
其中,经过NTLM Hash加密Challenge生成的结果被称为Net NTLM Hash。最后,服务端将Response与Challenge1进行对比,成功则通过验证。
NTLM V2协议
NTLM v1
与NTLM v2
主要不同之处在于Challenge与加密算法不同,共同点则是加密的原料都是NTLM Hash。
不同之处:
- Challenge:NTLM v1的Challenge有8位,NTLM v2的Challenge有16位。
- Net-NTLM Hash:NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5
Kerberos域认证
Active Directory(活动目录)概念
Windows提供了为企业管理资产、服务、网络对象进行组织化的管理,这非常符合企业架构的管理模式。而承载这些管理机制的就是活动目录服务。
- Active Directory存储了有关网络对象的信息,并且让管理员和用户能够轻松地查找和使用这些信息。Active Directory使用了一种结构化的数据储存方式。并以此为基础对目录信息进行合乎逻辑的分层组织。
- 网络对象分为:用户、用户组、计算机、域、组织单位以及完全策略等。
Active Directory(活动目录)功能
- 服务器及客户端计算机管理:管理服务器及客户端计算机账号,所有服务器及客户端计算机加入域管理并实施组策略。
- 用户服务:管理用户域账号、用户信息、企业通讯录(与电子邮件集成)、用户组管理、用户身份认证、用户授权管理等,按省实施组管理策略。
- 资源管理:管理打印机、文件共享服务等网络资源。
- 桌面配置:系统管理员可以集中的配置各种桌面配置策略,如:用户使用域中资源权限限制、界面功能的限制、应用程序执行特征限制、网络连接限制、安全配置限制等。
- 应用系统支持:支持财务、人事、电子邮件、企业信息门户、办公自动化、补丁管理、防病毒系统等各种应用系统。
在域中,网络对象可以相互访问,但是在现实中需要对某些部门的计算机进行限制。所以就需要用Kerberos认证协议来验证网络对象间的权限。
关于Kerberos协议文章可参考之前笔记:
https://www.yuque.com/zengjiahua-njuti/kb/czppr4
Windows Access Token
简介
Windows Access Token(访问令牌),它是描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后,都会生成一个Access Token,这个Token在用户创建进程或线程时会被使用,不断拷贝,这也解释了A用户创建一个进程而该进程没有B用户的权限。
Access Token种类:
- 主令牌
- 模拟令牌
通常情况下,当用户双击一个应用程序,都会拷贝"explorer.exe"的Access Token。
当用户注销后,系统会将主令牌切换为模拟令牌,不会将令牌清除,之后系统重启后才会清除。
Windows Access Token 组成
- 用户账号的安全标识符(SID)
- 用户所属的组的SID
- 用于标识当前登录会话的登录SID
- 用户或用户组所拥有的权限列表
- 所有者的SID
- 主要组的SID
- 访问控制列表
- 访问令牌的来源
- 令牌是主令牌还是模拟令牌
- 限制SID的可选列表
- 其他统计数据
Windows Access Token - SID (Security Identifiers) 安全标识符
安全标识符是一个唯一的字符串,它可以代表一个账户、一个用户组、或者一次登录。通常它还有一个SID固定列表。
SID的表现形式:
- 域SID - 用户SID
- 计算机SID - 用户SID
- SID列表都会存储在域控的AD或者计算机本地账户数据库中
Windows Access Token 产生过程
每个进程创建时都会根据登录会话权限由LSA(Local Sercurity Authority)分配一个Token(如果CreateProcess时指定了Token,LSA会用该Token,否则就用父进程Token的一份拷贝)。
Windows Access Token 令牌假冒防御
禁止Domain Adminis登录对外且未做安全加固的服务器,因为一旦服务器被入侵,域管理员的令牌可能会被攻击者假冒,从而控制DC。
如果想清除假冒,重启服务器即可。