跳到主要内容

Windows本地认证

Windows本地认证

Hash概述

Hash的概念

一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。

这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来

唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

常用的Hash算法

1.MD4:它是基于32位操作数的位操作来实现的。

2.MD5:比MD4更复杂,并且速度较之要慢一点,但更安全。

3.SHA-1及其他:对长度小于264的输入,产生160bit的散列值,抗穷举性更好。

MD4,MD5 密文长度都为32,SHA-1 密文长度为40。

Hash算法在信息安全方面的应用

主要体现在以下三点:

1.文件校验:比较熟悉的校验算法有奇偶校验和CRC校验,但没有抗数据篡改的能力MD5算法是目前应用最广泛的一种文件完整性校验和算法。

2.数字签名:对 Hash 值,又称“数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。

3.基于口令的加密:Hash有很多密文类型,如:md5(md5($pass)),md4,mysql等。

Windows系统登陆账号密码存储位置:

C:\Windows\System32\config\SAM

在Windows系统中,对用户账户的安全管理采用了SAM(Security Account Manager,安全账号管理)机制,用户账户以及密码经过Hash加密之后,都保存在SAM数据库中。

SAM两种加密方式LM加密和NTLM加密

对于Windows2003之前,包括win2003系统,采用的是LM口令散列,对于Windows 2003之后的系统,采用的是NTLM口令散列。LM和

NTLM都是基于Hash加密,LM口令散列的安全性相对比较差。尽管现在已很少有人使用Windows2000之前的老版本系统,但为了保持向

后兼容性,默认情况下,系统仍会将用户密码分别用这两种机制加密后存放在SAM数据库里。

本地认证过程:

Windows的登陆密码是储存在系统本地的SAM文件中的,在登陆Windows的时候,系统会将用户输入的”密码”与SAM文件中的”密码”进行

对比,如果相同,则认证成功。

SAM文件是位于 %SystemRoot%\system32\config\ 目录下的,用于储存本地所有用户的凭证信息,但是这并不代表着可以随意去查看系

统密码。

C:\windows\system32\config\sam

image-20221110141445795

LM Hash生成

LAN Manager(LM)哈希是 Windows 系统所用的第一种密码哈希算法,是一种较古老的 Hash,在 LAN Manager 协议中使用,非常容易通过暴力破解获取明文凭据。它只有唯一一个版本且一直用到了 NT LAN Manager(NTLM)哈希的出现,在 Windows Vista/Windows 7/Windows Server 2008 以及后面的系统中,LM 哈希算法是默认关闭的,LM 算法是在 DES 基础上实现的,不区分字母大小写。

LM hash是NTLM hash的前身,它本身是非常脆弱的,LM与NTLM协议的认证机制相同,但是加密算法不同。

目前大多数的Windows都采用NTLM协议认证,LM协议已经基本淘汰了。

LM Hash规则:

1.用户的密码被限制为最多14个字符

2.将明文密码转换为大写

3.密码转换为16进制字符串,不足14字节将会用0补全

4.密码的16进制字符串被分成两个7byte部分。

5.分别将两组数据,用str_to_key()函数处理得到两组8字节数据

6.这两组8字节数据将做为DESKEY对魔术字符串”KGS!@#$%”进行标准DES加密

7.将加密后的这两组数据简单拼接,就得到了最后的LM Hash

LM Hash加密过程

image-20221110143528672

LM Hash 缺点

  1. 密码长度最大只能为 14 个字符
  2. 密码不区分大小写 PASSWORD123
  3. 如果密码强度是小于 7 位,那么第二个分组加密后的结果肯定是 aad3b435b51404ee
  4. Des 密码强度不高

NTLM Hash的生成:

Windows本身是不会存储明文密码的,在SAM文件中所储存的是密码的hash值,在登陆对比的时候,也是先将用户的输入转换为hash值,才进行对比的。

目前在Windows中所使用的密码hash被称为NTLM hash,全称为:NT LAN Manager,它是一个由数字和字母组成的32位的值,是经过hex、Unicode、MD4三层加密后得到的。

  1. 先将用户密码转换为十六进制格式。
  2. 将十六进制格式的密码进行 Unicode 编码。
  3. 使用 MD4 摘要算法对 Unicode 编码数据进行 Hash 计算

加密过程:

image-20221110143658248

Windows 本地认证流程

首先,用户注销、重启、锁屏后,操作系统会让winlogon.exe 显示登录界面,让用户输入密码之后将密码交给lsass.exe,这个进程中会保存一份明文密码到内存,将明文密码加密成NTLM Hash,在sam数据库查询对应用户的hash值,再与SAM数据库比较认证。

注意:

Winlogon.exe 是Windows NT用户登陆程序,用于管理用户登录和退出。

Lsass.exe 是windows系统的安全机制,它用于本地安全和登陆策略。

image-20221110143809922