内网基础——Windows认证

一、本地认证

windows本地认证流程大致可以抽象为以下三个阶段:

  1. winlogon.exe进程接受用户输入的密码;
  2. 调用lsass.exe进程队用户输入的密码进行加密,将其转换为NTLM Hash;
  3. 将有密码转换成的NTLM Hash与SAM文件中存储的NTLM Hash进行比较,如相同,将groupsidusersid发送给winlogon.exe准备登录,如不同则登陆失败。
  • winlogon.exewindows logon process,是windows NT用户登录程序,用于管理用户登录和退出。
  • lsass.exelocal security authority service,是windows系统的安全机制,用于本地安全和登录策略。用到的mimikatz.exe就是劫持该进程,来获取明文密码。
  • SAM,是指securtiy account manager,windows对用户账户的安全管理使用的安全账号管理器,SAM文件即账号密码数据库文件。存储在%SystemRoot%\system32\config\sam

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

NTLM Hash大致运算流程:

用户密码->HEX编码->Unicode编码->MD4

admin -> hex(16进制编码) = 61646d696e
61646d696e -> Unicode = 610064006d0069006e00
610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634

在这里插入图片描述

此外,NTLM hash的前身是LM Hash,但是由于存在安全缺陷已经被淘汰。

二、网络认证

网络认证即远程登陆另一台电脑所采用的认证机制。工作组环境下,一般采用NTLM协议进行网络认证;域环境下,一般采用Kerberos协议进行网络认证。

NTLM Hash与NTLM

在Windows中,密码Hash目前称之为NTLM Hash,其全称为NT LAN Manager。而NTLM则是指NTLM协议,其与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。

2.1 NTLM协议

NTLM是一种网络认证协议,它是基于挑战(Chalenge)/响应(Response)认证机制的一种认证模式。这个协议只支持Windows。

栗子:假设A主机与B主机属于同一个工作组环境,A想访问B主机上的资料,需要将一个存在于B主机上的账户凭证发送至B主机,经过认证才能够访问B主机上的资源。远程桌面RDP就是默认采用NTLM协议进行网络认证。

2.1.1 Chalenge/Response

NTLM协议的认证过程分为三步:

  • 协商:双方确定使用的协议版本,NTLM存在V1和V2两个版本,具体区别就是加密方式不同。
  • 质询:挑战(Chalenge)/响应(Response)认证机制的核心
  • 验证:在质询完成后,验证结果,是认证的最后一步。

1、质询的完整过程

  1. 客户端向服务器端发送用户信息(用户名)请求
  2. 服务器接受到请求,生成一个16位的随机数,被称之为“Challenge”, 使用登录用户名对应的NTLM Hash加密Challenge(16位随机字符), 生成Challenge1。同时,生成Challenge1后,将Challenge(16位随机 字符)发送给客户端。
  3. 客户端接受到Challenge后,使用将要登录到账户对应的NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。

    其中,经过NTLM Hash加密Challenge的结果在网络协议中称之为Net NTLM Hash

2、验证

服务器端收到客户端的Response后,比对Chanllenge1与Response是否相等,若相等,则认证通过。

注意:
1.Chanllenge是Server产生的一个16字节的随机数,每次认证都不同;
2.Response的表现形式是Net-NTLM Hash,它是由客户端提供的密码Hash加密Server返回的Chanllenge产生的结果。

2.1.2 总结

整个NTLM协议的流程图如下(工作组环境):
在这里插入图片描述

域环境下的NTLM认证又有所不同:
在这里插入图片描述

域环境下,使用域用户登录远程主机,因为域用户的用户名密码保存在域控上,所有验证阶段是由域控进行response的对比。

2.1.3 Pass the Hash

哈希传递(PTH)是能够在不需要账户明文密码的情况下完成认证的一个技术。哈希传递解决了我们渗透中获取不到明文密码、破解不了NTLM Hash而又 想扩大战果的问题。以下是哈希传递的必要条件:

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

要完成一个NTLM认证,第一步需要客户端将自己要参与认证的 用户名发送至服务器端,等待服务器端给出的Challenge⋯⋯

哈希传递实质:就是使用用户名对应的NTLM Hash将服务器给出的Chanllenge加密,生成一个Response,来完成认证。

2.2 Kerberos认证

域内认证即采用了Kerberos协议的认证机制,与NTLM认证相比最大的区别是有一个可信的第三方机构KDC的参与。

参与域认证的三个角色(三只狗):

  • Client
  • Server
  • KDC(Key Distribution Center) = DC(Domain Controller) = AD(Account Database)+ AS(Authenication Service)+ TGS(Ticket Granting Service)

2.2.1 Kerberos认证协议的基础概念

  • KDC负责管理票据、认证票据、分发票据,但是KDC不是一个独立的服务,它由以下服务组成:

    • Authentication Service(AS): 身份认证服务,专门用来认证客户端的身份并发放客户用于访问TGS的TGT黄金票据)。
    • Ticket Granting Service(TGS): 票据授予服务,为客户端生成某个服务的ST(白银票据)。
  • AD,全称叫account database,存储域中所有用户的用户名和对应的NTLM Hash,可以理解为域中的SAM数据库。KDC可以从AD中提取域中所有用户的NTLM Hash,这是Kerberos协议能够成功实现的基础

  • TGT:黄金票据,由身份认证服务(AS)授予的票据,用于身份认证,存储在内存,默认有效期为10小时。

  • ST:白银票据,由票据授予服务为client生成的用于某个服务的票据(ticket)。

从物理层面看,AD与AS,TGS,KDC均为域控制器(Domain Controller)。

2.2.2 域认证粗略流程

  1. Client向KDC发起服务请求,希望获取访问Server的权限。KDC得到了这个消息,首先得判断Client是否是可信赖的, 也就是从AD数据库中寻找该用户是否可用来登录。这就是AS服务完成的工作,成功后,AS返回TGT给Client。TGT就是黄金票据。

  2. Client得到了TGT后,继续向KDC请求,希望获取访问Server的权限。KDC通过Client 消息中的TGT,判断出了Client拥有了这个权限,KDC中的TGS给Client访问Server的ST。ST就是白银票据。

  3. Client得到ST后便可以使用这个Ticket成功访问Server。但是这个ST只能用来访问这个Server,如果要访问其他Server需要向KDC重新申请。

在这里插入图片描述

三、Windows Access Token

Access Token(访问令牌),它是一个描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, windows都会通过lsass.exe生成一个Access Token。这个用户开启的所有进程都会从explorer.exe复制一份Access Token给进程自己。这也是为啥有时候 A 用户的进程 B 用户没有权限去使用,因为 A 、B 用户的 access token 不同,而且该进程的代码中写了令牌校验的机制。

Access Token种类:

  • 主令牌:用于交互会话登录(例如本地直接登录、rdp login 、psexec )
  • 模拟令牌:用于非交互登录(利用net use访问共享文件夹,或者wmi、winrm等等)

两种令牌都是在登录时产生创建的,两种token只在系统重启后清除;具有主令牌的用户在注销后,该Token将变成模拟令牌,依旧有效。

关于SID
安全标识符(Security identifiers),简称为SID,分为 OwnerSidGroupSid。所谓SID就是每次当我们创建一个用户或一个组的时候,系统会分配给该用户或组一个唯一SID,当你重新安装系统后,也会得到一个唯一的SID。SID是唯一的,不随用户的删除而分配到另外的用户使用。请记住,SID永远都是唯一的。SID是由计算机名、当前时间、当前用户态线程的CPU耗费时间的总和三个参数决定以保证它的唯一性。

SID的表现形式:

  • 域SID-用户ID
  • 计算机SID-用户ID
  • SID列表都会存储在域控的AD或者计算机本地账户数据库中

主令牌产生细节
用户使用凭据(用户密码)进行认证;登录session创建;windows 返回用户的 sid 和用户所在组的 sid ;LSA 创建一个 Access token; 使用凭据成功认证;登录 session;token ;进程、线程
在这里插入图片描述
关于令牌方面的攻击,后面在叙述。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值