本地用户认证
本地认证的意思就是,我们的电脑上存储着自己的账号密码,无论电脑是否联网,只要能开机,就可以输入账号密码登录到电脑中,工作组就是采用本地认证
本地认证流程
winlogon.exe -> 接收用户输入 -> lsass.exe -> (认证)
首先,用户注销、重启、锁屏后,操作系统会让winlogon.exe显示登录界面,也就是输入框,接收输入后,将密码交给lsass进程,这个进程中会存一份明文密码,将明文密码加密成NTLM Hash,对SAM数据库比较认证。
WindowsLogonProcess(即winlogon.exe):是WindowsNT用户登陆程序,用于管理用户登陆和退出.用户注销、重启、锁屏后,操作系统会让winlogon.exe显示登陆界面
LSASS:用于微软Windows系统的安全机制。它用于本地安全和登陆策略
SAM文件是位于C\windows\system32\config\目录下的,用于储存本地所有用户的凭证信息,但是这并不代表着你可以随意去查看系统密码
SAM文件是Windows的用户账户数据库,所有用户的登录名及口令等相关信息都会保存在这个文件中,简单如下:
用户名称:LM-HASH值:NTLM-HASH值
Lsass.exe进程的作用非常重要,它主要负责管理本地安全策略和认证机制。这些策略包括密码策略、账户策略、用户权限、域策略等等。同时,它还负责对用户进行身份验证,以确保只有授权的用户才能访问系统资源。
1、将winlogon传过来的明文账号密码进行加密,然后和SAM文件中的密文账号密码作对比。如果对比成功就登陆成功
2、将收到的明文账号密码在本地内存中保留一份用作备用
LM Hash/NTLM Hash
系统支持:
Windows XP、Windows 2000、Windows 2003 系统默认使用 LM HASH 加密。
之后的 Windows 2008、Windows 7、Windows Vista、Windows 8、Windows 10 、Windows 2016 禁用了 LM,默认使用 NTLM HASH。
LM Hash的全名为"LAN Manager Hash",是微软为了提高 Windows操作系统的安全性而采用的散列加密算法,其本质是DES加密。尽管 LM Hash较容易被破解,但为了保证系统的兼容性, Windows只是将LM Hash禁用了(从 Windows vista和 Windows Server2008版本开始, Windows操作系统默认禁用 LM Hash)。
LM Hash明文密码被限定在14位以内,也就是说,如果要停止使用 LM Hash,将用户的密码设置为14位以上即可。如果 LM Hash被禁用了,攻击者通过工具抓取的 LM Hash通常为“aad3b435b51404eead3b435b51404ee”(表示 LM Hash为空值或被禁用)
NTLM Hash是微软为了在提高安全性的同时保证兼容性而设计的散列加密算法。NTLM Hash 是基于MD4加密算法进行加密的。个人版从 Windows vista以后,服务器版从 Windows Server2003以后, Windows操作系统的认证方式均为 NTLM Hash
- LM Hash
LM Hash生成流程
1、将明文口令转换为其大写形式 假设这里以明文Admin@123为例,转换为大写格式为:Admin@123----> ADMIN@123
2、将字符串大写后转换为16进制字符串
ADMIN@123---> 41 44 4D 49 4E 40 31 32 33
3、密码不足14字节要求用0补全
41 44 4D 49 4E 40 31 32 33---> 41 44 4D 49 4E 40 31 32 33 00 00 00 00 00
4、将上述编码分成2组7字节
第一组:41 44 4D 49 4E 40 31
第二组:32 33 00 00 00 00 00
- 将每一组7字节的十六进制转换为二进制,每7bit一组末尾加0,再转换成十六进制组成得到2组8字节的编码
- 将以上步骤得到的两组8字节编码,分别作为DES加密key为魔术字符串KGS!@#$% 进行加密 KGS!@#$%的16进制为 4B47532140232425
最终结果拼接即可6F08D7B306B1DAD4B75E0C8D76954A50
LM Hash生成规则:
1.用户的密码被限制为最多14个字符。
2.用户的密码转换为大写。
3.系统中用户的密码编码使用了OEM内码页
4.密码不足14字节将会用0来补全。
5.固定长度的密码被分成两个7byte部分。每部分转换成比特流,在分7bit为一组末尾加0,然后再次进行16进制编码
6.上步骤得到的8byte二组,分别作为DES key为“KGS!@#$%”进行加密,KGS!@#$%的16进制为 4B47532140232425。
7.将二组DES加密后的编码拼接,得到最终LM HASH值。
LM HASH的特点和问题:
1、口令不区分大小写
2、口令长度最大为14字节,另外如果口令长度不超过7字节,则LM Hash的后8字节是固定值
3、DES算法强度不够
技巧:根据LM Hash特征,也能够判断用户的密码是否是大于等于7位。
- NTLM Hash
NTLM Hash生成过程:
1.转换为十六进制,比如Admin@123转换为16进制:41646d696e40313233
2.Unicode转换后:410064006d0069006e004000310032003300
3.再调用MD4加密算法加密:570a9a65db8fba761c1008a51d4c95ab
手动计算密码后,可以使用密码抓取工具进行验证
mimikatz.exe:
Privilege::debug
Sekurlsa::logonpasswords
- Hash存储
在本地登录Windows的情况下,操作系统会使用用户输入的密码作为凭证去与系统中的密码进行验证,操作系统中的密码存储在:%SystemRoot%\system32\config\sam
当我们登录系统的时候,系统会自动地读取SAM文件中的“密码”与我们输入的“密码”进行比对,如果相同,证明认证成功。
这个SAM文件中保留了计算机本地所有用户的凭证信息,可以理解为是一个数据库。
Windows本身不保存明文密码,只保留密码的Hash。
在域环境中,域用户的密码hash全部保存在C:\Windows\NTD\的ntds.dit中。
- 总结
当密码超过14位时候会采用NTLM加密
test:1003:E52CAC67419A9A22664345140A852F61:67A54E1C9058FCA16498061B96863248:::
前一部分是LM Hash,后一部分是NTLM Hash 当LM Hash是 AAD3B435B51404EEAAD3B435B51404EE 这表示空密码或者是未使用LM_HASH
Hash一般存储在两个地方: 1、SAM文件,存储在本机 对应本地用户 2、NTDS.DIT文件,存储在域控上对应域用户
根据LM Hash特征,LM Hash的后8字节是固定值,也能够判断用户的密码是否是大于等于7位,是的话则小于,不是的话则大于
网络身份认证协议
本地认证的方式满足不了日常所需
网络认证:Windows网络认证是指在Windows操作系统中进行网络通信和资源访问时,验证用户身份和授权权限的过程。它确保只有经过身份验证的用户能够访问网络资源,并根据其权限级别进行授权操作。
网络认证有哪些?
1.用户名和密码认证:这是最常见的认证方式,用户需要提供有效的用户名和密码,以验证其身份。这种认证方式适用于本地计算机账户或域账户。
2.Kerberos认证:Kerberos是一种网络身份验证协议,在Windows域环境中广泛使用。它通过使用票据和票据授予票据(TGT)来验证用户身份,并生成会话密钥用于加密通信。
3.NTLM认证:NTLM(NT LAN Manager)是一种早期的Windows网络认证协议,它使用基于挑战-响应的方式进行身份验证。尽管Kerberos已成为首选的认证协议,但NTLM仍然在某些情况下使用,特别是在与旧版Windows系统或非Windows系统进行交互操作时。
4.密钥身份认证:Windows还支持使用密钥来进行身份验证。这种方式涉及使用预先共享的密钥对用户进行身份验证,通常用于特定的场景和应用。
5.远程桌面认证(Remote Desktop Authentication):远程桌面是一种远程访问Windows计算机的功能。在远程桌面连接时,用户需要提供目标计算机的凭据进行认证,以验证身份并获得远程访问权限。
NTLM认证协议
- NTLM Hash与NTLM协议的关系
在Windows中,密码Hash目前称之为NTLM Hash,其中NTLM全称是:"NT LAN Manager"。
这个NTLM是一种网络认证协议,与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。
也就是说,NTLM与NTLM Hash相互对应。
早期SMB协议在网络上传输明文口令。后来出现 LAN Manager Challenge/Response 验证机制,它是如此简单以至很容易就被破解,后来微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。
发展历程
SMB -> LM -> NTLM -> NTLM v2
- NTLM认证协议被使用
在平时的测试中,经常会碰到处于工作组的计算机,主机A想要访问主机B上的资源,就要向主机B发送一个存在于主机B上的一个账户,主机B接收以后会在本地进行验证,如果验证成功,才会允许主机A进行相应的访问。
NTLM(NT LAN Manager)认证是一种早期的Windows网络身份验证协议。它在Windows系统中用于验证用户的身份,并提供对网络资源的访问控制
NTLM认证协议使用在Windows NT和Windows 2000 Server(or later)工作组环境中(Kerberos用在域模式下)。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。较之Kerberos,基于NTLM的认证过程要简单很多。NTLM采用一种质询/应答(Challenge/Response)消息交换模式。NTLM适用范围非常广,既可用于域内的认证服务,也可用于没有AD的环境,让两台独立电脑相互认证。
NTLM是一种网络认证协议,它是基于挑战(challenge)/响应(Response)认证机制的一种认证模式。
- NTLM协议在Workgroup环境下的认证过程
应用场景:
NTLM协议的认证过程分为三步:
- 协商:主要用于确认双方协议版本(NTLM v1/NTLM V2)。
2、质询:这一步便是Challenge/Response认证机制的关键之处。
3、验证:对质询的最后结果进行一个验证,验证通过后,即允许访问资源
认证肯定分为认证失败和认证成功两种
认证成功 :
1、首先,client会向server发起请求连接协商一些相关东西,比如客户端向服务器端发送用户信息(用户名)请求
- Server将会本地生成一个(16位或8位)随机字符,即Challenge,并保存在本地中,同时将Challenge发送给客户端
3、当client接收到Challenge时,将使用用户的LM Hash或NTLM-hash对Challenge进行加密、和用户名、域名、机器名等相关信息,生成Response,并Response发送给server。
4、Server在收到Response后,将其和相同的方式进行加密生成另一个Response,如果相同,则验证成功,如果不同就失败
其中,经过NTLM Hash加密Challenge的结果Response,在网络协议中称为Net NTLM Hash。
如果上述数据包被恶意第三方截获得到Challenge和加密后的Hash值,那么LM_Hash和NT_Hash也容易泄露,所以微软改进后加入了TimeStamp时间戳来防止这种攻击,也就是NTLM v2
自Windows Vista/Server2008开始,系统默认禁用Net-NTLMv1,使用Net-NTLMv2
Kerberos认证协议
存在的最大问题是什么呢??
最大的问题:双方不能证明自己是自己,就好比对暗号,其实是不安全的
Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
Kerberos的三大要素
在古希腊神话故事中,kerberos是一只具有三颗头颅的地狱恶犬,他守护在地狱之外,能够识别所有经此路过的亡灵,防止活着的入侵者闯入地狱
kerberos协议中也存在三个角色,分别是
1、客户端(client):发送请求的一方
2、服务端(Server):接收请求的一方
3、密钥分发中心(Key Distribution Center,KDC),而密钥分发中心一般又分为两部分,分别是:
AS(Authentication Server):认证服务器,专门用来认证客户端的身份并发放客户用于访问
TGS的TGT(票据授予票据)
TGS(Ticket Granting Service):票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据(Ticket)
Kerberos认证协议的基础概念
1、票据(Ticket):是网络对象互相访问的凭证。
2、TGT(Ticket Granting Ticket):入场券,通过入场券能够获得票据,是一种临时凭证的存在。
3、KDC(Key Distribution Center)负责管理票据、认证票据、分发票据,但是KDC不是一个独立的服务,它由以下服务组成:
①Authentication Service(简称AS): 为client生成TGT的服务
②Ticket Granting Service(简称TGS): 为client生成某个服务的ticket(ST ServiceTicket)
Kerberos认证流程
如何去解决这个问题呢?
此时还存在什么问题吗?
最大问题:卖票窗口凭什么给你卖票(你是合法的公民吗?)
那到底是如何认证呢?
计算机是如何认证呢?
客户端和AS通信原理
第一步:客户端拿着身份证去AS认证,认证通过后返回一张去卖票窗口买票的票(TGT)
a
身份信息:
TGT:
提供身份信息的数据包是AS-REQ(AS-requests)。发送TGT的数据包是AS-REP(AS-response)
当用户收到TGT时候对TGT进行解密
客户端和TGS通信原理
第二步:客户端拿着TGT去卖票窗口(TGS)买一张去动物园的票
TGT: ST:
TGS接收到TGT后,对其进行解密,然后再将TGS封装成ST发送给客户端
客户端和服务端通信原理
第三步:客户端拿着ST去动物园
服务端收到客户端发送的ST之后,对其进行解密
1、使用本机的机器用户HASH值解密ST得到 CS_SK
2、拿着CS_SK解密第一部分得到相关信息
3、进行对比后成功访问建立信任
TGT和ST是Kerberos认证的两个重要票据,如果TGT和ST被伪造了那么将会造成安全问题
伪造的TGT被称作黄金票据,伪造的ST被称为白银票据
kerberos协议安全问题
横向移动AS-REQ:PTH(Pass The Hash)、域内用户枚举,密码喷洒
域内用户枚举,密码喷洒
即域内用于枚举可以在无域内有效凭据的情况下,枚举出域内存在的用户名,
并对其进行密码喷洒以此获得域内有效凭据。
面试小帮手:
什么是黄金票据与白银票据?
黄金票据就是伪造了Kerberos协议中的身份票据(TGT)
黄金票据可以访问该用户身份的所有服务
白银票据就是伪造了Kerberos协议通信流程中服务票据(SGT)
白银票据只能访问某一个服务
使用域管理员身份创建的票据就是黄金票据,可以访问域内的所有服务
kerberos认证流程?
客户端先去找AS服务进行认证,获取身份票据TGT。
然后拿着TGT票据寻找TGS服务,获取服务票据。
拿着服务票据访问具体的服务