浅谈windows认证
2022-8-31 00:4:16 Author: LemonSec(查看原文) 阅读量:29 收藏

本地认证的基础知识 


HTLM Hash加密的方式(即NTLM Hash的由来)

HTLM协议是什么?答:因为早期SMB协议与LMLAN Manager Challenge/Response验证机制)很容易就被破解;于是微软提出了WindowsNT挑战/响应验证机制,简称为NTLM。在Windows中,密码Hash目前称之为NTLM Hash;其中NTLM全称是:"NT LAN Manager"

HTLM加密解析 

1.首先明文转换为16进制ASCII码 
2.后将其再转换为Unicode格式(0x80之前的标准ASCII码转换成Unicode码,就是简单地从0x??变成 0×00??。此类标准ASCII串按little-endian序转换成Unicode串,就是简单地在原有每个字节之后添加 0×00)
3.最后对所获取的 Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值
4.admin -> hex(16进制编码) = 61646d696e 61646d696e -> Unicode = 610064006d0069006e00 610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634

HTLM加密解析本地认证过程

本地认证流程路线:winlogon.exe -> 接收用户输入 -> lsass.exe -> (认证)
 首先,用户在经历注销;重启.....时,操作系统会让winlogon显示登录界面,也就是密码账号的输入框,操作系统接收输入后,将密码交给lsass进程后。lass进程中会存一份明文密码,将明文密码加密成NTLM Hash,对SAM数据库比较认证。

补充:

1. Windows Logon Process( winlogon.exe),是Windows NT 用户登 陆程序,用于管理用户登录和退出

2. lsass.exe用于微软Windows系统的安全机制;它用于本地安全和登陆策略(mimikatz的原理就是依靠这个程序获得Hash

3. 本地认证的过程,其实就是将用户输入的密码转换成为NTLM Hash后与SAM中的NTLM Hash进行比较

加密的存储

在本地登录Windows的时候,计算机操作系统中的密码存储在哪里呢?答:%SystemRoot%\system32\config\sam

SAM是什么?答:可以理解为是一个数据库;它的地址为(C:\Windows\system32\config\SAM),这个SAM

文件中保存了计算机本地所有用户的凭证信息,当我们登录系统的时候,系统会自动地读取SAM文件中的”密码与我们输入的密码进行比对,如果相同,证明认证成功!

补充Windows本身不保存明文密码,只保留密码的Hash(但是在无KB2871997补丁或win10winsever2012R2以下(eg:较老的XP版本)的情况下可能会存在明文密码)

网络认证(工作组)

工作组

在内网渗透中,经常遇到工作组环境,而工作组环境是一个逻辑 上的网络环境(工作区),隶属于工作组的机器之间无法互相建 立一个完美的信任机制,只能点对点,是比较落后的认证方式, 没有信托机构;假设A主机与B主机属于同一个工作组环境,A想访问B主机上的资料,需要将一个存在于B主机上的账户凭证发送至B主机,经过认证才能够访问B主机上的资源。这是我们接触比较多的SMB共享文件的案例,SMB的默认端口是445可能存在永恒之蓝;永恒之黑....漏洞

NTLM协议

但是 SMB协议 和 LAN Manager Challenge/Response 验证机制 (简称LM;但是他并没有退休,还在XP与sever 03中继续工作)很容易受到攻击被破解,所以现在才又有了NTLM以及Kerberos。因此NTLM认证协议是,它与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。也就是说,NTLMNTLM Hash相互对应。(这个协议只支持Windows

NTLM V2协议(进阶)

NTLM v1NTLM v2最显著的区别就是Challenge与加密算法(一个是DES另一个是MD5加密)不相同 ,共同点就是加密的原料都是NTLM Hash;我们可以使用Responder等工具获取到的就是Net-NTLMHet-Hash可能通过暴力破解来获取明文密码
因为从Windows 2000开始,在Windows中算法为默认为NT哈希,所以可以通过BruteForce/Dictionary攻击将其还原成明文密码,也可以用于中继攻击

Chalenge/Response(挑战回应认证)

HTLM协议认证的主要步骤:

协商:主要用于确认双方协议版本(这个产生的原因是windows存在向下兼容

质询:就是挑战(Chalenge/响应(Response)认证机制起作用的原理(我们可以看成《计算机网络》中的三次握手,只不过他们发送的是加密的消息)

验证:验证主要是在质询完成后,验证结果,是认证的最后一步

Chalenge/Response流程:

1.客户端向服务器发出认证请求;
2.认证服务器从用户数据库中查询用户是否是合法的用户,若不是,则不做进一步的处理;
3.认证服务器内部产生一个随机数,作为Challenge,发送给用户;
4.客户将口令和随机数合并,使用单向Hash函数 ( 例如MD5算法 ) 生成一个字节串作为Response;
5.认证服务器将Response与自己的计算结果比较,如两者相同,则通过一次认证,反之认证失败;
6.认证服务器通知客户端认证成功或失败

下面我就拿倾旋大佬的图来举列子(好吧我承认是我懒):

Pass The Hash攻击

Pass The Hash(利用)

什么是哈希传递?答:哈希传递是能够在不需要账户明文密码的情况下完成认证的一个技术;所以在内网渗透中,我们经常会需要抓取管理员的密码、NTLM Hash,通过搜集这些信息有助于我们在域环境下进行提权与横向移动
利用哈希传递的原因?答:其中重要的是windows使用系统API(LsaLogonUser)生成hash进行认证,而不是用明文,所以利用hash即可模拟用户登录进行操作。(还可以死确认的是密码小于7位可以一眼判断出来,并且如果密码长度大于15则不存在LM Hash)

利用Pass The Hash攻击(必要)条件

Pass The Hash攻击(必要)条件如下:要完成一个NTLM认证,第一步需要客户端将自己要参与认证的 用户名发送至服务器端,等待服务器端给出的Challenge⋯⋯其实哈希传递就是使用用户名对应的NTLM Hash将服务器给出的 Chanllenge加密,生成一个Response,来完成认证。(Pass The Hash能够完成一个不需要输入密码的NTLM协议认证流程,针对内网渗透,有不错的效果)

Kerberos域认证(域环境)

Windows提供了为企业管理资产、服务、网络对象进行组织化的管理,这非常符合企业架构的管理模式。而承载这些管理机制的就是活动目录服务。如果要搭建一个域,就需要安装活动目录服务,当然,这个不在我们的讨论范围。

活动目录服务以域名来划分域的边界,域外就不属于管理范围了,也就是说,一个域对应一个域名,域之间也可以相互信任。Active Directory存储了有关网络对象的信息,并且让管理员和用 户能够轻松地查找和使用这些信息。Active Directory使用了一种 结构化的数据存储方式,并以此作为基础对目录信息进行合乎逻辑的分层组织。

1.哈希传递需要被认证的主机能够访问到服务器(废话)2.哈希传递需要被传递认证的用户名3.哈希传递需要被传递认证用户的NTLM Hash

Kerberos域攻击手段

域外用户枚举:当我们不在域内时,可以通过kerberos中的AS_REQ工作原理来进行枚举域内账号。
hash传递攻击(PTH):哈希传递(pth)攻击是指攻击者可以通过捕获密码的hash值(对应着密码的值),然后简单地将其传递来进行身份验证,以此来横向访问其他网络系统
密码喷洒攻击(Password Spraying)∶确定域策略后,设置密码次数使用工具对应的协议爆破密码
黄金票据:获得域控权限后用来做"万能钥匙"后门
AS-REP Roasting攻击:是一种对"特定设置"用户账号,进行离线爆破的攻击方式
SPN: SPN全程Service Principal Names,是服务器上所运行服务的唯一标识,每个使用kerberos认证的服务都需要一个SPN
Kerberosast攻击:这种攻击方法主要利用了TGT_REP阶段使用对方NTLMHash返回的加密数据,通过碰撞加密数据破解用户密码(利用条件苛刻)
白银票据:获取某域账号HASH之后,伪造服务票据ST。通过伪造的TGS,可以直接发送给Server,访问指定的某个服务,来进行攻击。此过程无需KDC(如果域控服务器进行了相应的KDC签名效验,那么白银票据无用)
委派攻击

下面就面试与hvv常问的两个票据——黄金与白银,进行详细的解说

票据攻击

黄金票据(Golden Tickets)

Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个Session key_ASTGT,Session key_AS并不会保存在KDC中,krbtgtNTLM Hash又是固定的,所以只要得到krbtgtNTLMHash(也就是KDC hash),就可以伪造TGTSession key_AS来进入下一步ClientTGS的交互。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。因为krbtgt只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门(当然也可以当做提权的手段使用)

黄金票据特点:黄金票据(Golden Tickets)

1.由于在域控制器上由KDC服务生成的域设置了Kerberos策略,如果提供票据,则系统信任票据的有效性。这意味着,即使域策略声明Kerberos登录票据(TGT)只有10小时有效,如果票据声明有效期为10 年,那么也会信任票据的有效性期为10年。
2.该KRBTGT帐户密码从不更改*和直到KRBTGT密码被更改(两次),攻击者可以创建黄金票据。请注意,即使伪造用户更改其密码,创建用于模拟用户的Golden Ticket仍然存在。
3.在AS-REP阶段,由于返回的认购,这就造成了黄全票据攻击拥有krbtgt 的 hash 就可以自己制作一个TGT认购权证,这就造成了黄金票据攻击伪造黄金票据的前提:要伪造的域用户(这里我们一般填写域管理员账户)·域名·域的SID值(就是域成员SID值去掉最后的)·krbtgt账号的哈希值或AES-256值
4.它绕过了SmartCard身份验证要求,因为它绕过了DC在创建TGT之前执行的常规验证。
5.这个精心创建的TGT要求攻击者拥有Active Directory域的KRBTGT密码哈希值(通常从域控制器转储)。
6.KRBTGT NTLM哈希可用于生成一个有效的TGT(使用RC4)模拟任何用户访问Active Directory中的任何资源。
7.在主机上都可以生成和使用黄金票据(TGT),即使没有加入域也是如此。只要网络可以访问域。
8.用于从AD森林中的DC获取有效的TGS票据,并提供一个坚持在一切域访问所有的主机的好办法。

黄金票据(Silver Tickets)漏洞分析

攻击面来看,获取krbtgt用户的hash后,可以在域中 进行持久性的隐藏,并且日志无法溯源,但是需要拿到DC权限,使用黄金票据能够在一个域环境中长时间控制整个域
防御角度来看,需要经常 更新krbtgt的密码 ,才能够使得原有的票据失效。最根本的办法是 不允许域管账户登录其他服务器 

白银票据(Silver Tickets)

如果说黄金票据是伪造的TGT,那么白银票据就是伪造的ST。在Kerberos认证的第三大步,ClientSTAuthenticator3向域上的某个服务进行请求,Server接收到Client的请求之后,通过自己的MasterKey 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用

白银票据特点:

1.黄金票据是伪造TGT并且有效的获得任何Kerberos服务,而白银票据是伪造TGS。这意味着白银票据仅限于特定服务器上的任何服务。
2.大多数服务不验证PAC(通过将PAC校验和发送到域控制器进行PAC验证),因此使用服务帐户密码哈希生成的有效TGS可以完全伪造PAC
3.攻击者需要服务帐户密码哈希值
4.TGS是伪造的,所以没有和TGT通信,意味着DC从验证过
5.任何事件日志都在目标服务器上

白银票据(Silver Tickets)漏洞分析

攻击面来看,伪造白银票据的难度比伪造黄金票据的难度较小,因为一个域中的服务器如果对外的话,非常容易被入侵, 并且容易被转储Server
防御角度来看, 需要开启PAC认证但这会降低认证效率,增加DC的负担,最根本的还是要 加固服务器本身对外的服务
Windows Access Token 
Windows Token其实叫Access Token(访问令牌),它是一个描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, 都会生成一个Access TokenToken里面包含登录进程返回的SID和由本地安全策略分配给用户和用户的安全组的特权列表),这个Token在用户创建进程或者线程 时会被使用,不断的拷贝,这也就解释了A用户创建一个进程而该进程没有B用户的权限。
Access Token种类:
主令牌:是由windows内核创建并分配给进程的默认访问令牌,每一个进程有一个主令牌,它描述了与当前进程相关的用户帐户的安全上下文(交互会话登录)
模拟令牌:线程能够在与拥有它的进程的上下文不同的安全上下文里执行;当在一个客户的安全上下文里运行时,服务在某种程度上客户。服务的一个线程使用代表客户资格的访问令牌来访问该客户有权访问的对象(非交互登录)
Windows Access Token令牌假冒
我们通过提权等方法获得System权限后,如果我们利⽤mimikatz不能获得Administrator⽤户的密码,那么攻击者可以通过令牌窃取进⾏降权,从而获得Administrator⽤户的shell, 以Administrator⽤户的身份启动某些服务 ( 某些服务只能通过administrator⽤户启动 )
Windows Access Token攻击方式:
1.Metaspolittoken 窃取中的应用;拿到了system权限2.Windows平台下incognito的应用3.CobaltStrike中的token窃取4.Invoke-TokenManipulation.ps1用法5.利用token拿下trust installer 权限
Windows Access Token – SID (Security Identifiers)安全标识符
安全标识符是一个唯一的字符串,它可以代表一个账户、一个用户 组、或者是一次登录。通常它还有一个SID固定列表,例如 Everyone这种已经内置的账户,默认拥有固定的SID
参考笔记

附上参考博客地址:

倾旋师傅:https://payloads.online/橘子师傅:https://0range-x.github.io/还有CSDN上其他师傅的文章......本文转自: 格物安全

文章来源: http://mp.weixin.qq.com/s?__biz=MzUyMTA0MjQ4NA==&mid=2247533774&idx=2&sn=2f20deb08e7889d140442e50d2a26ea2&chksm=f9e32b95ce94a283c400553990e3bf30eb5280ef2d1fba9c1346d663492727360aa1fdd11c99#rd
如有侵权请联系:admin#unsafe.sh