集权安全 | 域渗透中的 DCSync技术分析

news2024/11/22 15:23:58

DCSync是AD域渗透中常用的凭据窃取手段,默认情况下,域内不同DC每隔15分钟会进行一次数据同步,当一个DC从另外一个DC同步数据时,发起请求的一方会通过目录复制协议(MS- DRSR)来对另外一台域控中的域用户密码进行复制,DCSync就是利用这个原理,“模拟”DC向真实DC发送数据同步请求,获取用户凭据数据,由于这种攻击利用了Windows RPC协议,并不需要登陆域控或者在域控上落地文件,避免触发EDR告警,因此DCSync时一种非常隐蔽的凭据窃取方式。

1.攻击场景

  • DCSync通常是作为其他攻击的先兆性攻击:
    • 例如攻击者可能会使用DCSync窃取krbtgt用户的hash来制作黄金票据;
    • 在hash传递攻击中,攻击者会利用DCSync去获取低权限用户的hash进行登录。
  • DCSync也可能是其他一些漏洞的后置性攻击手段:
    • 例如CVE-2020-1472漏洞,攻击者利⽤Netlogon协议漏洞将域控机器账户密码置空,然后利用空密码对域控进行DCSync攻击获取域内用户凭据。
  • DCSync也可以会作为一种维权手段
    • 攻击者在控制某个域之后可能会对域内某些普通用户或者用户组赋予DCSync权限,以便在下一次进入内网后直接利用该低权限用户凭据来dump域管凭据,实现对AD域的隐蔽控制。

2.利用条件

在默认情况下,只有域控机器用户、域管理员(Domain Admins)、企业管理员(Enterprise Admins)等高权限账户才有DCSync操作的权限,从更细粒度的ACL层面来说,DCSync需要以下两个权限

  • 目录复制同步
    (Replicating Directory Changes)
  • 目录复制同步所有项
    (Replicating Directory Changes All)

3.原理分析

在AD域环境中域控制器(Domain Controller)扮演了最核心的角色,承担了域内用户的管理、认证、票据授权等作用,为了防止一台域控宕机导致整个域环境崩溃,企业内通常会部署多台域控,为了保证这些域控中存储的用户数据一致性,这些域控之间会利用MS-DRSR 协议中的drsuapi RPC 接口来进行数据同步。

DCSync攻击就是“模拟了”域控同步的行为去调用DRSGetNCChanges函数,这个函数返回的数据中就包含了用户的密码。

目前DCSync攻击的常用攻击工具一般为mimikatz或impacket工具包中的Secretsdump.py

从mimikatz代码来分析,整个过程一共调用了以下4个RPC函数

DRSBind;
  • DRSBind

DRSBind函数的作用是初始化drs句柄,与服务端进行消息版本和加密方式的协商,这是调drsuapi中函数之前的必要操作。

在这个函数中有两个参数,一个是puuidClientDsa,指向调用方的GUID的指针,另一个是pextClient,pextClient参数主要包含的是协商信息,它指向的是一个DRS_EXTENSIONS_INT结构体,在这个结构体中的dwFlags字段标识了调用方支持的功能列表。

在mimikatz中dwFlags被设置为

DRS_EXT_GETCHGREPLY_V6 | DRS_EXT_STRONG_ENCRYPTION。

在Secretsdump工具dwFlags设置的是

DRS_EXT_GETCHGREQ_V6 | RS_EXT_GETCHGREPLY_V6 | DRS_EXT_GETCHGREQ_V8 | DRS_EXT_STRONG_ENCRYPTION

puuidClientDsa表示调用方的GUID,在两个工具中都是一样的 “e24d201a-4fd6-11d1-a3da-0000f875ae0d” 。

在[MS-DRSR]文档中这个guid被称作NTSAPI_CLIENT_GUID,微软在文档中表示只有puuidClientDsa是NULL GUID时服务端才会返回错误,我在实际测试中修改成其他的GUID也没有对DCSync造成影响,不知道这两个工具将puuidClientDsa设置为NTSAPI_CLIENT_GUID是出于什么目的。

  • DRSDomainControllerInfo

DRSDomainControllerInfo函数主要是获取域控的一些信息,在这里目的是获取目标服务端域控的GUID,这是调用DRSGetNCChanges函数必须使用的参数。

  • DRSCrackNames

DRSCrackNames作用是查询目录内的对象,并将结果返回给调用方,我们在dump hash是这里的对象就是传入的用户名,DRSCrackNames接受多种形式的用户名,包括UPN、FQDN、SPN等。

在Secretdump中只有以下两种格式被支持。

DS_NT4_ACCOUNT_NAME

mimikatz中支持的格式就比较多了

传入的用户名类型需要在DRS_MSG_CRACKREQ结构体的formatOffered参数中指定,在rpNames传入需要查询的用户名,这里是一个数组,可以一次传入多个用户。这一步最核心的目的是获取用户的GUID,这是调用DRSGetNCChanges函数另一个必要参数。

  • DRSGetNCChanges

这是整个DCSync过程最重要的一个函数

输入的参数是一个DRS_MSG_GETCHGREQ结构体,这里以DRS_MSG_GETCHGREQ_V8为例:

uuidDsaObjDest和uuidInvocIdSrc分别表示客户端DC和服务端DC的GUID,secretsdump中将这两个参数都设置成DRSDomainControllerInfo请求中获取的服务端DC的GUID。

而mimikatz只设置了uuidDsaObjDest,uuidInvocIdSrc默认为NULL

在实际测试中将uuidDsaObjDest设置为NULL或者服务端DC的GUID时,uuidInvocIdSrc设置为任意的GUID时DCSync都可以成功,所以实际上DRSDomainControllerInfo这一步是可以省略的。

pNC表示需要复制的对象,这是一个DSName结构,可以通过GUID、SID、或者是DN来表示域内的一个对象,impacket和mimikatz都是通过GUID来标识用户的。

实际上,在知道用户的SID或者DN的情况下也是可以成功的

所以在知道目标sid或者dn的情况下DRSCrackNames这一步也是可以省略的。

pPartialAttrSet包含了需要复制的对象属性,类型是ATTRTYP,这里的ATTRTYP实际上是压缩形式的oid, 属性名和对应的oid在mimikatz和secretsdump中都有定义。

其中密码字段就保存在unicodePwd属性中,这里只要有这一个属性就能获取到对象的密码。

DRSGetNCChanges返回的是DRS_MSG_GETCHGREPLY结构,两个工具协商的返回类型都是DRS_EXT_GETCHGREQ_V6,所以这里以DRS_MSG_GETCHGREPLY_V6为例分析。

对象的信息包含在pObjects属性中,这是一个链表结构,在mimikatz中对这个链表进行了遍历,并根据不同属性的类型进行解析。

这里我们最关注的属性就是unicodePwd,在复制以下属性时会将这些属性用sessionKey进行加密,加密方式是RC4。

unicodePwd

kull_m_rpc_drsr_ProcessGetNCChangesReply函数是mimikatz中对这些属性进行解密的关键函数,详情如下。

最后使用rid生成的key对unicodePwd进行解密就的到我们想要的ntlm hash。

  • 总结

通过对DCSync原理及利用过程进行分析,发现在以上4个RPC函数中DRSBind不可以省略,DRSDomainControllerInfo目的是获取drsuapi服务端的GUID,这个GUID可以是NULLGUID,可以省略,DRSCrackNames的作用是获取用户的GUID,DRSGetNCChanges可以接受SID或者DN形式的用户名,也可以省略。

因此,可以对现有工具进行代码简化,简化之后可以用直接用DRSBind和DRSGetNCChanges函数来进行DCSync,利用过程如下图所示。

4.防御和检测

由于DCSync攻击需要Replicating Directory Changes和Replicating Directory Changes All这两个权限,可以通过LDAP查询域内对象的ACL,对域内有DCSync权限的用户进行排查。

在网络层面,除了一些特殊情况,从非域控ip发起的IDL_DRSGetNCChanges rpc请求基本上可以判定为攻击行为。

5.参考

  • https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-drsr/f977faaa-673e-4f66-b9bf-48c640241d47
  • https://github.com/gentilkiwi/mimikatz
  • https://github.com/SecureAuthCo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/571135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一分钟图情论文:《面向学科建设的我国文献资源保障评价研究综述》

一分钟图情论文:《面向学科建设的我国文献资源保障评价研究综述》 高质量的文献资源保障工作不仅能够提供完备的环境、满足用户的信息需求,在高校中,还可以发挥促进教学资源优化和科研成果产出、增强科技基础能力等作用。华中师范大学的夏立…

『树莓派云台机器人』01. 使用手机控制树莓派云台机器人

目录 1. 检查是否已经开机,连接机器人wifi2. 安装树莓派控制app应用,直连模式连接机器人3. 机器人功能实现总结 欢迎关注 『树莓派云台机器人』 博客,持续更新中 欢迎关注 『树莓派云台机器人』 博客,持续更新中 动手组装等步骤请…

halcon 安装21.05版本 小坑记录

(注意:都可以设置语言) 1.选择扩展安装 影响安装进度显示 可以后续单独安装 Visual Studio变量检查扩展 2.破解相关 主程序dll路径 路径: C:\Users******\AppData\Local\Programs\MVTec\HALCON-21.05-Progress\bin\x64-win64 Visual St…

chatgpt赋能python:Python修改配置文件

Python 修改配置文件 Python 作为一种优秀的编程语言,在实际使用中起到了很大的作用。对于开发者来说,修改配置文件是一个常见的操作,Python 也支持在代码中修改配置文件。本篇文章将介绍如何使用 Python 修改配置文件,并且分享一…

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)

💭 写在前面:本文将学习《深入理解计算机系统》虚拟内存部分,CSAPP 是计算机科学经典教材《Computer Systems: A Programmers Perspective》的缩写,该教材由Randal E. Bryant和David R. OHallaron 合著。 📜 本章目录…

Bytebase:更好地管理你的 OceanBase 数据库

我们很高兴宣布:OceanBase 用户现在可以使用 Bytebase 进行数据库变更管理啦!🚀 Bytebase 是一款为 DevOps 团队准备的数据库 CI/CD 工具,专为开发者和 DBA 打造,也是唯一被 CNCF Landscape 收录的 Database CI/CD 产…

k8s 弹性伸缩的使用

1.手动扩缩容 编辑一个yaml文件 vi deployment-nginx.yaml apiVersion: apps/v1 kind: Deployment metadata:lables:app: nginxname: nginxnamespace: default spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name:…

C语言交换数组内容

代码&#xff1a; int main() {int arr1[] { 1,2,3,4,5 };int arr2[] { 6,7,8,9,0 };int sz sizeof(arr1) / sizeof(arr1[0]);int i 0;for (i 0;i<sz; i ) {int tmp arr1[i];arr1[i] arr2[i];arr2[i] tmp;}for (i 0; i < sz; i) {printf("%d ", ar…

用Vue简单开发一个学习界面

文章目录 一.首先创建我们的Vue文件夹二.源代码BodyDemoHearderDemoHomeDemoMarkdownDemoFileManager.jsMain.js&#xff08;注意绑定&#xff09;APP源代码 效果图&#xff08;按钮功能&#xff09;新增二级菜单&#xff08;v-for&#xff09;需要的可以私信 一.首先创建我们的…

办公技巧:学会这 7 种 PPT 制作技巧,让 PPT 制作效率飙升

F4 键&#xff1a;重复上一步操作 例如需要你在一分钟内完成 8 个形状的排版&#xff0c;你会怎么做&#xff1f; 如果是最基础的方式&#xff0c;可能得画出一个之后&#xff0c;慢慢的按住 Ctrl 复制新的出来&#xff0c;但这样实在是太慢了&#xff01;&#xff08;你是这样…

游戏安全运营前置化,10项安全测试预见外挂风险

自今年起&#xff0c;游戏版号已恢复常态化发放。据统计&#xff0c;截至目前年内累计发放460款游戏版号&#xff0c;每月的发放数量均超80款。多款热门新游已上线&#xff0c;大量游戏也已进入测试阶段&#xff0c;蓄势待发&#xff0c;游戏行业持续回暖。 在游戏行业动态回暖…

【历史上的今天】5 月 26 日:美国首个计算机软件程序专利;苹果市值首次超越微软;Wiki 的发明者出生

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 5 月 26 日&#xff0c;在 1995 年的今天&#xff0c;微软公司首席执行官比尔盖茨发表了一番讲话&#xff0c;他认为自己的公司在估计互联网的影响和普及方面错…

opencv实践-图像去畸变

目录 1.背景2.镜头成像畸变原因3.去畸变方法4. opencv去畸变函数5.代码实现 1.背景 由于相机的镜头并不完全理想&#xff0c;成像时会产生线条扭曲、失真等。对双目图像、鸟瞰图等进行处理时&#xff0c;首先要矫正去畸变。 2.镜头成像畸变原因 相机的镜头前有一块透镜&…

python+vue垃圾分类论坛的设计与实现85l30

环境保护是一项利国利民的重大民生工程,是造福子孙后代的幸福事,基于全面分析我国大学生环境保护教育现状的基础上提出了高校可通过开设环境类通识任选课、专业课中融入环境保护教育、环境保护实践教学、环境保护第二课堂等有效途径加强对非环境类专业大学生环境保护教育。 本系…

拥挤聚集智能监测算法

拥挤聚集智能监测算法可以通过yolov7网络模型深度学习框架对人员数量、密度等进行实时监测&#xff0c;拥挤聚集智能监算法识别出拥挤聚集的情况&#xff0c;并及时发出预警。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff0c;它能够同时支持移动 GPU 和从边缘到云…

开源日志监控采集平台ELKF

---------------------- FilebeatELK 部署 ---------------------- Node1节点&#xff08;2C/4G&#xff09;&#xff1a;node1/192.168.179.20 Elasticsearch Node2节点&#xff08;2C/4G&#xff09;&#xff1a;node2/192.168.179.23 …

All in ECP,转转一站式ES数据清洗解决方案

1. 业务背景 转转作为国内头部的循环经济产业公司&#xff0c;目前业务架构是中台模式。中台负责提供通用的交易能力&#xff0c;灵活快速响应业务需求&#xff0c;业务方负责前台探索创新&#xff0c;为用户提供有价值的服务。 转转交易中台目前分为基础服务、订单、促销、天路…

《深度思维》跨越式*

参考&#xff1a; https://www.zhihu.com/tardis/zm/art/410244111?source_id1005 从思维的技术到思维的格局&#xff0c;再到专注努力与漫长人生中坚忍的精神图腾&#xff0c;作者通过方法理论与案例相结合&#xff0c;介绍了深度思思维的学习方法。 深度思维简介 拥有较长的…

手机一开,说办就办!指尖上的“数字江西”

数字江西科技有限公司&#xff08;下简称“数字江西”&#xff09;是经省委省政府同意&#xff0c;由江西省信息中心&#xff08;大数据中心&#xff09;管理的国有控股合资公司&#xff0c;于2020年3月2日成立&#xff0c;是江西省人民政府的重要实践&#xff0c;也是江西省委…

opencv_c++学习(二十三)

一、点拟合操作 拟合含义如上图&#xff0c;即为通过已知点去拟合一条直线或者一个多边形。 直线拟合函数&#xff1a; fitLine(lnputArray points, OutputArray line, int distType, double param, double reps, double aeps)points:输入待拟合直线的2D或者3D点集。 line:输…