初具规模的办公网络通常以Windows域的形式进行管理,域在内网渗透中的地位举足轻重,本文主要介绍域的基础概念,为后续域渗透的介绍做铺垫
部分内容参考文章:https://blog.csdn.net/wulantian/article/details/42418231
图1 域的结构关系
从类型区分域组:
从作用范围区分域组:
AGDLP(A:User Account ,G:Global Group,DL:Domain Local Group,P: Permission)是在多域森林中使用的高效的安全组管理方法,用于授权资源访问权限,具体为:在用户域(有访问需求的用户所在的域)中,将本域里有相同访问需求的用户加入到同一个全局组,在资源域(需要被访问的资源所在的域)中,为不同的访问需求类型创建相应的域本地组,然后将之前的全局组加入到相应的域本地组,最后对域本地组赋予相应的权限,实现资源的授权访问。
注意:计算机加入域后,本地组即变为域本地组,系统会默认将全局组Domain Admins
加入(域)本地组Administrators
,但是以本机登录的管理员可以将Domain Admins
从(域)本地组Administrators
中删除,这样域管理员就会失去对该计算机的管理权限。
OU(Organization Unit)是AD的容器,可在其中存放用户、用户组、计算机和其他OU等对象,针对其配置组策略,注意同一个对象只能存在于一个OU中,但可以存在于多个组中;
GPO(Group Policy Object)是存储组策略配置的对象,配置组策略时,将GPO对象链接到相应的站点、域和OU,其中OU是GPO链接的基本单元。
组策略的应用规则:
Authenticated Users
(除Guest组外所有成功登录的用户)都可以应用该GPO,若要限定具体的用户或组,则先要将Authenticated Users
删除,如下图所示:图2 GPO策略筛选配置
图3 GPO权限委派配置
信任关系有方向区分,A信任B,则B可以访问A的资源和服务,只有当A和B之间双向信任时,两者之间才能相互访问;信任关系具有可传递性,A信任B,B信任C,则A信任C。
从作用范围区分信任关系:
林中信任:林中信任关系分为父子信任和树根信任。父子信任指同一个树域中父域和子域之间建立的可传递的信任关系;树根信任指同一个林域中树根域之间的可传递的信任关系。林中信任是无条件双向信任,在域建立时即存在,且不可删除
林间信任:林间信任关系分为外部信任和林信任。外部信任指不同林的域之间建立的不可传递的信任关系;林信任指多个林的林根域之间建立的可传递的信任关系,因为域林中林根域和林中其他域之间无条件双向信任,所以林间信任建立后相应的信任关系也会传递到林中的域之间。林间信任需要自己创建
注意:
① 信任关系在域之间建立了一种资源访问的可能性,而非必然性,访问资源的前提是对方已经分配了可供访问的资源;
② 建立林间信任关系首先需要创建DNS正向解析,使得受信域的FQDN能够被信任域解析。
首先区分单主机复制和多主机复制:
NT5.0 AD服务的域森林中共有5种FSMO角色:
(1)森林级别(一个域林只有一台DC有这个角色)
(2)域级别(一个域只有一台DC有这个角色)
工作组中安全认证采用NTLM协议,域环境中安全认证采用Kerberos协议,Kerberos认证过程中主要有三个角色:KDC、Server、Client,如下图所示:
图4 Kerberos认证基本过程
首先明确几个概念:
Long-term Key/Master Key:长期不变的Key或由此派生的Key被称为Long-term Key,为保证安全性,Long-term Key加密的数据不应该在网络上传输。我们将账号密码的Hash值称为Master Key,Master Key即是一种Long-term Key
Short-term Key/Session Key:由于被Long-term Key加密的数据包不能用于网络传送,所以我们使用另一种Short-term Key来加密需要进行网络传输的数据,这种Key一般由系统随机生成,只在一段时间内有效,从而避免Key被暴力破解。KDC、Server、Client三者之间通信采用Session Key,该Key即是一种Short-term Key
Authenticator:用于Client证明自身身份,由Client的一些信息和当前系统的时间戳构成,用Session Key将其加密并发送给Server,Server收到后用Session Key将其解密,首先验证时间戳的有效性,然后对比Client信息的真实性,这里要保证Session Key只有通信双方知道
krbtgt账户:创建域时在KDC服务框架中系统自动创建的一个账号,无法登陆,在Kerberos认证过程中主要用于使用其NTLM HASH值加密TGT
Kerberos认证过程包括3个Sub Protocol:
① Client向KDC的身份认证服务AS发送认证服务请求(KRB_AS_REQ),内容包括用Client的Master Key加密的时间戳以及域名\用户名、服务名等信息;
② AS根据KRB_AS_REQ提供的域名\用户名在AD中找到对应的Master Key,对加密的时间戳信息进行解密,并与当前系统时间进行比较验证其有效性(默认误差5min以内有效),验证有效后AS将一份认证服务应答(KRB_AS_REP)发送给Client,内容主要包括两个部分:用Client的Master Key加密的Session Key(SKDC-Client)和用自己(KDC中krbtgt的Master Key)加密的TGT(Ticket Granting Ticket),其中TGT包含SKDC-Client、域名\用户名、TGT到期时间等信息;
③ Client通过自己的Master Key对KRB_AS_REP的第一部分解密获得SKDC-Client,之后向KDC的票据授权服务TGS发送票据授权服务请求(KRB_TGS_REQ),内容包括TGT、用SKDC-Client加密的Authenticator、域名\用户名、服务名等信息;
④ TGS收到KRB_TGS_REQ后,先用krbtgt的Master Key解密TGT,得到SKDC-Client,再用SKDC-Client解密Authenticator,时间戳验证通过后向Client发送票据认证服务应答(KRB_TGS_REP),包括使用SKDC-Client加密过的用于Client和Server的Session Key(SServer-Client)和使用Server的Master Key进行加密的Ticket(ST),其中Ticket包括SServer-Client、域名\用户名、Ticket到期时间等信息;
⑤ Client收到KRB_TGS_REP后使用SKDC-Client解密第一部分获得SServer-Client,有了SServer-Client和Ticket,Client就可以之间和Server进行交互,无须再通过KDC作中间人。随后Client创建Authenticator,用于证明自己就是Ticket的真正所有者,并使用SServer-Client进行加密,然后将加密过的Authenticator和Ticket作为应用服务请求(KRB_AP_REQ)发送给Server;
⑥ Server接收到KRB_AP_REQ之后,通过自己的Master Key解密Ticket,从而获得SServer-Client,通过SServer-Client解密Authenticator,进而验证对方的身份。验证成功,则让Client访问需要访问的资源,否则拒绝对方的请求。
注意:
① Ticket基于某个具体的Server,而TGT和具体的Server无关,Client可以使用一个TGT从KDC获得基于不同Server的Ticket,这也是黄金票据利用的基础;
② 域环境中时间同步问题直接影响Kerberos协议的运行,因为基于时间戳的认证机制只有在Client和Server端的时间保持同步的情况下才有意义,一般通过访问时间同步服务器的方式以获得时间的同步。