Contents

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

1
password -> hex -> unicode -> md4

本地认证流程

1
winlogon.exe -> 接收用户输入 -> lsass.exe -> 认证
  • Windows Logon Process(即 winlogon.exe)是 Windows NT 用户登录程序,用于管理用户登录和退出。
  • LSASS用于微软Windows系统的安全机制,它用于本地安全和登录策略。lsass.exe进程中会保存一份明文密码将其加密成NTLM Hash。

LM Hash

NTLM Hash的前身就是 LM Hash (LAN Manager) 协议。
LM与NTLM协议的认证机制相同,但是加密算法不同

  1. 将所有小写字母转化成大写字母;
  2. 将密码转换成十六进制,分为两组,填充为14个字符,空余位使用0x00填补;
  3. 再将密码分割为两组7个字节的块;
  4. 将每组转化为比特流,不足56bit则再左边加0
  5. 将比特流按照7比特一组,分出8组,末尾加0
  6. 将每组转化为十六进制作为被加密的值,使用DES加密,字符串KGS!@#$%为key,得到8个结果,每个结果转化为十六进制
  7. 连接两个DES加密字符串即为LM Hash
1
上面的加密步骤可以看出,因为DES加密的key是固定的,所以有了key就能解密出明文。并且根据LM Hash的特征,也能判断出密码是否大于等于7位

网络认证

假设主机A和主机B处于一个工作组当中,当主机A想要访问主机B中的资源时,主机A需要提供一个存在于主机B中的凭证,经过认证后才能继续访问。比如SMB共享文件,SMB的默认端口是445。

NTLM 协议

NTLM是一种网络认证协议,基于挑战(Challenge)/响应(Response)认证机制的一种认证模式。

Challenge/Response

NTLM协议的认证分为3步:

  1. 协商:主要用于确认双方协议版本
  2. 质询:就是挑战(Challenge)/响应(Response)认证机制起作用的范畴
  3. 验证:主要是在质询完成后,验证结果
1
2
3
4
5
6
质询的完整过程:
1. 客户端向服务端发送用户信息(用户名)请求;
2. 服务器接收请求,生成一个16位的随机数,被称为"Challenge",使用客户端对应的NTLM hash加密 Challenge
生成challenge1,同时将challenge发送给客户端;
3. 客户端接收到Challenge后,再用提供给服务端账号对应的NTLM Hash加密Challenge生成Response,然后将Response
发送至服务端。

其中,经过NTLM Hash加密Challenge生成的结果被称为Net NTLM Hash。最后,服务端将Response与Challenge1进行对比,成功则通过验证。

NTLM V2协议

NTLM v1NTLM 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。
如果想清除假冒,重启服务器即可。