域控安全-EventID 4662&Powershell将Schema下Objects的schemaIDGUID属性离线保存
首先看一下EventID 4662的样子

0x01 什么情况下会产生该日志呢?
该日志出现在对Active Directory Object设置SACL时会出现
0x02 为什么要监控该日志呢?
1、非法人员入侵后的异常提权(更多安全审核监控建议详见https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/appendix-a-security-monitoring-recommendations-for-many-audit-events)
2、运维过程中的错误操作溯源
0x03 该日志中每一项的含义是什么?
详细的日志含义请参考微软官网(https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4662)
0x04 需要重点关注哪些字段?
Account Name:具体操作对象是谁? 个人认为高低权限帐号均应被监控,万一是低权限帐号被提权呢?
Access Mask:具体的操作类型是什么?
Note GUID:具体操作的对象是什么?这里我们打算展开说一下
0x05 GUID
UUID的二进制编码因系统而异。许多系统完全以大端序(big-endian)编码UUID。Microsoft在其COM/OLE库中对UUID进行编组,使用混合端格式,其中UUID的前三组是小端序/小尾序(little-endian),后两组是大端序/大尾许(big-enaian),这也是为什么日志中显示出来的GUID要通过ldap filter是需要进行转换(前三组每个部分都需要更改(反转)字节顺序,而后两组不需要),例如日志中的“bf967a86-0de6-11d0-a285-00aa003049e2”放到ldap 搜索里要转换成“\ 86 \ 7a \ 96 \ bf \ e6 \ 0d \ d0 \ 11 \ a2 \ 85 \ 00 \ aa \ 00 \ 30 \ 49 \ e2”。
但是这里存在一个问题,我们一般会将日志集中(具体工具看个人习惯),然后通过例如storm此类工具进行日志分析,分析的过程中我们肯定不能一边分析一边去转换日志中的guid,然后再去查询每个guid的含义,这样会大大降低日志检索的时效性,于是我们想到了去离线这些GUID的含义,于是翻遍微软所有文档,没有一个地方有统一的汇总,看来只能自己搞了。
0x06 如何离线存储所有GUID以及对应的Object
首先,该GUID对应AD中的属性名称是schemaIDGUID,我们从AD的图形界面看到的也是八进制的格式。

我们尝试通过Powershell去检索该属性对应的值,发现出来的结果也是10进制的

这里我们需要的GUID相差甚远,所以我们需要想办法转译他们,进行人工翻译:
#将架构信息全部保存
$Schema = [ADSI]("LDAP://CN=Schema,CN=Configuration,DC=xxx,DC=xxx")
$CNs = $Schema.Children
#循环遍历所有对象的schemaIDGUID
foreach($CN in $CNs){
$name = $CN.adminDisplayName
$guidstring = $null
$a = $CN.schemaIDGUID -split " "
$b = $a.Length
for ($i = 0; $i -lt $b; $i++) {
$c = $a[$i]
#转成十进制
$number = [Convert]::ToInt32("$c", 10)
#转成十六进制
$number = $number.ToString('X')
#这块有个比较恶心的地方,Powershell输出的十六进制如果开头是0,则会去掉该0,直接显示下一个数字,下面的判断其实可以优化,可以去掉第一个if,只要不足2位直接添加0即可
if ($number -eq "") {
$number = ""
}
if ($number.Length -lt "") {
$number = "" + $number
}
#将每组10进制转换16进制后的字符进行拼接
$guidstring += $number
}
#将拼接的字符转为16进制,然后再转成guid的形式
[System.Byte[]]$byte = ($guidstring -split '(..)' | ? {$_} | % { [System.Convert]::ToInt64($_, 16)})
[System.Guid]$guid = new-object System.Guid(, $byte)
#在屏幕中输出guid以及该object对应的名称,当然也可以直接输入到文本中进行保存
Write-Host $guid,$name
通过以上方式,我们就可以得到全部架构对象的schemaIDGUID属性了,我们可以将其组成一个List,方便我们写日志监控时对日志中的guid进行快速匹配,从而清楚的了解“到底修改了什么?”
域控安全-EventID 4662&Powershell将Schema下Objects的schemaIDGUID属性离线保存的更多相关文章
- DW(四):Azure域控服务器配置
polybase集群要求使用相同的域账号,本节介绍选择用Azure虚拟机搭建自己的内网DNS服务器和域控 创建虚拟网络polybase,创建名为DNS的子网,如下图: 创建虚拟机,选择polybase ...
- 一次完整的从webshell到域控的探索之路
前言 内网渗透测试资料基本上都是很多大牛的文章告诉我们思路如何,但是对于我等小菜一直是云里雾里. 于是使用什么样的工具才内网才能畅通无阻,成了大家一直以来的渴求. 今天小菜我本着所有师傅们无私分享的精 ...
- windows server 2008额外域控提升为主域控
windows server 2008额外域控提升为主域控 ---图形界面操作方法 https://blog.csdn.net/tladagio/article/details/79618338 wi ...
- 域控场景下windows安全日志的分析--审计认证行为和命令的历史记录
https://www.cnblogs.com/KevinGeorge/p/8563458.html 一.域控windows安全日志基本操作 1.打开powershell或者cmd 1 #gpedit ...
- Windows Server 2012部署第一台域控
windows server 2012在部署DC方面有了一些改变,不但在操作上有一些改变,而且有了新的DC克隆的功能.本文就先来体验一下如何将一台windows server 2012 RTM服务器提 ...
- 服务器搭建域控与SQL Server的AlwaysOn环境过程(四)配置AlwaysOn
0 引言 这一篇才真正开始搭建AlwaysOn,前三篇是为搭建AlwaysOn 做准备的. 步骤 1.3 配置AlwaysOn 请先使用本地用户Administrator登录这两个集群节点并执行下面的 ...
- Windows server 2012 利用ntdsutil工具实现AD角色转移及删除域控方法
场景1:主域控制器与辅助域控制器运行正常,相互间可以实现AD复制功能.需要把辅助域控制器提升为主域控制器 ,把主域控制器降级为普通成员服务器:这种场景一般应用到原主域控制器进行系统升级(先转移域角色, ...
- 域渗透——获得域控服务器的NTDS.dit文件
0x00 前言 在之前的文章<导出当前域内所有用户hash的技术整理>曾介绍过通过Volume Shadow Copy实现对ntds.dit文件的复制, 可用来导出域内所有用户hash.本 ...
- 001.AD域控简介及使用
一 AD概述 1.1 AD简介 域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系. 当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理,还可 ...
随机推荐
- 我用STM32MP1做了个疫情监控平台4—功能完善界面重新设计
目录 前言 界面展示 新增功能 API 接口说明 多个接口数据的获取和解析 FontAwesome字体图标库的使用 代码下载 系列教程 @ 前言 之前我用STM32MP1和Qt实现了疫情监控平台,系列 ...
- mac开发错误:errSecInternalComponent
errSecInternalComponent Command CodeSign failed with a nonzero exit code 修改方法: Build Settings -> ...
- List集合概述和特点
List集合概述 有序集合(也称序列)用户可以精确控制列表的每一个元素的位置插入,用户可以通过整数索引访问元素,并搜索列表中的元素 与set集合不同,列表通常允许重复的元素 List集合的特点 有序: ...
- Java基础语法(1)-关键字与保留字
title: Java基础语法(1)-关键字与保留字 blog: CSDN data: Java学习路线及视频 1.关键字 关键字(keyword)的定义和特点 定义:被Java语言赋予了特殊含义,用 ...
- 3D画廊
3D画廊 之前我都是写的学习的内容,我在写这些教程时遇到有趣的炫酷的小例子也会专门拿出来写一篇文章,今天就写一个酷炫的小例子,叫3D画廊,它是属于ViewPage的进阶版. 此项目下载地点:https ...
- logstash用jdbc插件将数据库内容导入elasticsearch时间字段相差5小时
logstash将mysql的数据导入elasticsearch之后发现时间字段的相差5个小时 解决办法: 在数据库连接配置后面加上?serverTimezone=UCT这个就OK了 logstash ...
- vue+express+mongodb 实现 增删改查
一.创建一个vue项目 用脚手架vue-cli搭建一个项目,数据请求用axios方式,写几个按钮用来调接口(vue这块不做多解释,不懂的可以先去官网学习vue-cli:https://cli.vuej ...
- [hdu1269]城堡迷宫<tarjan强连通分量>
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269 tarjan算法是oi里很常用的一个算法,在理解方面需要多下一些功夫,如果不行直接记模板也行,因 ...
- [vijos1234]口袋的天空<最小生成树>
题目链接:https://vijos.org/p/1234 白天刚刚写完prim的算法,晚上就心血来潮的打了一道最小生成树的题 虽然有题解说可以用prim做,但是这道题明显是加最小的边,感觉krusk ...
- JS函数详解
什么是函数呢? 对于JS来说,我们可以把函数理解为任意一段代码放在一个盒子里,在我们想要让这段代码执行的时候,直接执行这个盒子里的代码就行.专业一点来讲:js函数就是由事件驱动的可执行课重复只用的代码 ...