【网络安全】掌握 Active Directory 攻防审计实操知识点
掌握 Active Directory 攻防审计实操知识点
在深入了解 Active Directory 之前,我们需要先掌握网络基础设施的映射和资源访问管理方式。这一切通常通过目录服务 (Directory Services) 实现,目录服务在组织内提供网络资源的映射和访问。轻量目录访问协议 (Lightweight Directory Access Protocol, LDAP) 是目录服务的核心,提供一种高效管理和查询目录数据的机制,用于快速检索用户、计算机、组等对象的信息。
1. 什么是 Active Directory (AD)?
Active Directory (AD) 是一种目录服务,作为大多数企业网络的核心,用于存储网络中对象的信息。这些对象包括:
- 用户:代表个人或服务的账户。
- 组:用户或其他对象的集合,通常附带特定权限。
- 计算机:属于 AD 域的机器,受 AD 策略管控。
- 打印机及其他资源:网络中可访问的设备或服务。
1.1 AD 的核心架构
AD 的核心架构由以下几个关键组成部分构成:
- 域 (Domains)
域是网络资源(如用户、计算机和服务)的逻辑分组,是 AD 管理的主要边界。域内的所有资源均受统一的安全策略和权限约束,通过域组件 (Domain Component, DC) 和域控制器 (Domain Controller) 标识。
- 组织单位 (Organizational Units, OUs)
组织单位是域内的容器,用于根据部门、位置或功能对对象进行分组,便于管理。管理员可以对特定 OU 应用组策略 (Group Policy) 设置,实现更加精细的权限控制。
- 森林 (Forest)
森林是一个或多个域的集合,具有统一的架构、配置和全局目录,是 AD 的顶级容器。
- 信任关系 (Trust Relationships)
域之间(甚至跨森林)可以建立信任关系,允许一个域中的用户访问另一个域的资源,前提是有相应权限。
通过上述结构,我们可以确定某个对象在 AD 中的专属名称 (Distinguished Name, DN)。例如:
DN=CN=Mayor Malware, OU=Management, DC=wareville, DC=thm
1.2 AD 的核心组件
-
域控制器 (Domain Controllers, DCs)
域控制器是托管 Active Directory 服务的服务器,存储 AD 数据库,并处理身份验证和授权请求。为了保障高可用性,一个域中可以存在多个 DC,所有 DC 之间通过复制保持数据一致。 -
全局目录 (Global Catalog, GC)
全局目录是 AD 中的可搜索数据库,包含目录中所有对象的部分信息,使用户和服务能够快速定位林中任何域内的对象。 -
LDAP
Active Directory 使用轻量目录访问协议 (LDAP) 查询和修改目录,提供高效的信息检索服务。 -
Kerberos 认证
AD 默认采用 Kerberos 认证协议,通过票据 (Tickets) 代替密码实现安全认证。
1.3 组策略 (Group Policy)
组策略是 Active Directory 的重要功能之一,允许管理员在整个域内强制执行策略。例如,可以对密码策略、软件部署、防火墙设置等进行统一管理。
配置密码策略示例:
假设我们需要在 Wareville 的安全运营中心 (SOC) 确保所有用户遵守严格的密码规则,强制执行最小密码长度和复杂性规则。:
- 打开组策略管理工具 (gpmc.msc)。
- 右键点击域,选择“Create a GPO in this domain, and Link it here”,并命名为“Password Policy”。
- 编辑策略,路径为:
Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Account Policies -> Password Policy
。 - 设置以下规则:
- 最小密码长度:12 个字符。
- 强制记住历史密码:10 个。
- 密码最大有效期:90 天。
- 启用密码复杂性要求。
- 点击“OK”,将此策略链接到目标域或 OU。
这样,域内的所有用户都会遵守新的密码要求。
2. 常见 Active Directory 攻击及其防护措施
攻击者常试图利用 AD 漏洞攻击企业网络。以下是一些常见攻击类型及其应对措施:
2.1 Golden Ticket 攻击
攻击者伪造 Kerberos 协议的票据 (TGT),冒充任意账户访问 AD。此攻击需要以下信息:
- 域的完全限定域名 (FQDN)。
- 域的安全标识符 (SID)。
- 目标账户用户名。
- KRBTGT 账户的密码哈希。
检测方式:
- 监控与 KRBTGT 相关的异常活动。
- 关注以下事件 ID:
- 4768:高权限账户的 TGT 请求。
- 4672:用户被分配特殊权限。
2.2 Pass-the-Hash 攻击
此攻击窃取密码哈希,用于身份验证而无需实际密码。因为NTLM协议允许基于密码哈希值的身份验证。
防护措施:
- 实施强密码策略。
- 定期审计账户权限。
- 部署多因素认证。
2.3 Kerberoasting
Kerberoasting是一种针对Kerberos 的攻击,攻击者请求具有服务主体名称 (SPN) 的帐户的服务票证,提取票证和密码哈希,然后尝试离线破解它们以检索纯文本密码。
防护措施:
- 为服务账户设置强密码。
- 定期检查服务账户的安全配置。
2.4 Pass-the-Ticket 攻击
在传递票证攻击中,攻击者从受感染的机器窃取Kerberos票证,并使用它们以被盗票证的用户或服务的身份进行身份验证。
检测方式:
- 可以通过使用事件 ID 4768(TGT请求)监控可疑登录来检测此攻击,尤其是当用户从不寻常的位置或设备登录时。此外,事件 ID 4624(成功登录)将显示用于身份验证的票证。
2.5 恶意 GPO 攻击
众所周知,攻击者会滥用组策略来创建持久的特权访问帐户,并通过设置模仿整个域中软件部署的策略来分发和执行恶意软件。借助整个域中的升级权限,攻击者可以创建 GPO 来实现大规模目标,包括禁用核心安全软件和防火墙、防病毒软件、安全更新和日志记录等功能。此外,还可以创建计划任务来执行恶意脚本或从整个域中受影响的设备中窃取数据。
防护措施:
- 定期审计 GPO 修改。
- 限制 GPO 修改权限。
2.6 Skeleton Key 攻击
在万能钥匙攻击中,攻击者安装恶意软件后门,使用主密码登录任何帐户。每个帐户的合法密码将保持不变,但攻击者可以使用万能钥匙密码绕过它。
防护措施:
- 监控 AD 服务器的行为。
- 实施基于行为的检测工具。
3. 调查 Active Directory 入侵
3.1 审核 GPO
组策略
如本任务中前面所讨论的,组策略是一种将配置和策略分发给域中已注册设备的方法。对于攻击者来说,组策略是一种将恶意脚本传播到多台设备的有利可图的手段。
审查组策略对象 (GPO) 是一项很好的调查步骤。在本节中,我们将使用PowerShell来审核我们的 GPO。首先,我们可以使用Get-GPOcmdlet Get-GPO -All
列出域控制器上安装的所有 GPO。
PS C:\Users\Administrator> Get-GPO -AllDisplayName : Default Domain Policy
DomainName : wareville.thm
Owner : WAREVILLE\Domain Admins
Id : 31b2f340-016d-11d2-945f-00c04fb984f9
GpoStatus : AllSettingsEnabled
Description :
CreationTime : 10/14/2024 12:17:31 PM
ModificationTime : 10/14/2024 12:19:28 PM
UserVersion : AD Version: 0, SysVol Version: 0
ComputerVersion : AD Version: 3, SysVol Version: 3
WmiFilter :DisplayName : Default Domain Controllers Policy
DomainName : wareville.thm
Owner : WAREVILLE\Domain Admins
Id : 6ac1786c-016f-11d2-945f-00c04fb984f9
GpoStatus : AllSettingsEnabled
Description :
CreationTime : 10/14/2024 12:17:31 PM
ModificationTime : 10/14/2024 12:17:30 PM
UserVersion : AD Version: 0, SysVol Version: 0
ComputerVersion : AD Version: 1, SysVol Version: 1
WmiFilter :DisplayName : SetWallpaper GPO
DomainName : wareville.thm
Owner : WAREVILLE\Domain Admins
Id : d634d7c1-db7a-4c7a-bf32-efca23d93a56
GpoStatus : AllSettingsEnabled
Description : Set the wallpaper of every domain joined machine
CreationTime : 10/30/2024 9:01:36 AM
ModificationTime : 10/30/2024 9:01:36 AM
UserVersion : AD Version: 0, SysVol Version: 0
ComputerVersion : AD Version: 0, SysVol Version: 0
WmiFilter :
使用 PowerShell 命令 Get-GPO -All
列出所有 GPO 并检查可疑更改。可导出 GPO 报告以便分析,这样我们就可以查找不合适的 GPO。我们可以将 GPO 导出到 HTML 文件以进行进一步调查,从而更轻松地查看策略强制执行的配置。在本示例中,我们将导出“SetWallpaper” GPO。
Get-GPOReport -Name "SetWallpaper" -ReportType HTML -Path ".\SetWallpaper.html"
然后,当在浏览器中打开 HTML 文件时,我们会看到以下内容的概述:
- 策略的创建和修改时间。
- GPO适用于哪些设备或用户。
- GPO的权限。
- 它强制执行的用户或计算机配置。
从上面的截图中,我们可以看到该策略使用位于域控制器上的 C:\THM.jpg中的图像设置设备的桌面壁纸。
域可能有许多 GPO。我们可以使用相同的 Get- GPO cmdlet,加上 PowerShell -fu来仅列出最近修改的 GPO。这是一个方便的代码片段,因为它突出显示了最近修改的策略 - 可能是由攻击者修改的。
PS C:\Users\Administrator\Desktop> Get-GPO -All | Where-Object { $_.ModificationTime } | Select-Object DisplayName, ModificationTimeDisplayName ModificationTime
----------- ----------------
Default Domain Policy 10/14/2024 12:19:28 PM
Default Domain Controllers Policy 10/14/2024 12:17:30 PM
SetWallpaper 10/31/2024 1:01:04 PM
3.2 查看事件日志
Windows 自带事件查看器。这个宝贵的存储库存储了系统活动的记录,包括安全事件、服务行为等。
例如,在事件查看器的“安全”选项卡中,我们可以看到用户登录、尝试和注销的历史记录。下面的屏幕截图显示了用户“cmnatic”尝试登录设备的记录。
在事件查看器 (Event Viewer) 的“安全”标签中,可以检查用户登录历史。关键事件 ID 包括:
- 4624:用户成功登录。
- 4625:用户登录失败。
- 4672:用户被分配特殊权限。
- 4768:高权限账户的 TGT 请求。
3.3 审核用户账户
用户帐户是一种有价值的攻击方法,而且通常很成功。您可以使用事件查看器 ID 查看用户事件,并使用 PowerShell 审核其状态。密码喷洒等攻击方法最终会导致用户帐户被锁定,具体取决于域控制器的锁定策略。
要查看所有锁定的帐户,您可以使用 Search-ADAccount cmdlet,应用一些过滤器来显示信息,例如用户上次成功登录的时间。
Search-ADAccount -LockedOut | Select-Object Name, SamAccountName, LockedOut, LastLogonDate, DistinguishedName
此外,快速查看域中现有的用户帐户及其组成员身份的一种好方法是使用Get-ADUser下面演示的 cmdlet:
PS C:\Users\Administrator\Desktop> Get-ADUser -Filter * -Properties MemberOf | Select-Object Name, SamAccountName, @{Name="Groups";Expression={$_.MemberOf}}Name SamAccountName Groups
---- -------------- ------
Administrator Administrator {CN=Group Policy Creator Owners,CN=Users,DC=wareville,DC=thm, CN=Domain Admins,CN=Users,DC=wareville,DC=thm, CN=Enterprise Admins,CN=Users,DC=wareville,DC=thm, CN=Schema ...
Guest Guest CN=Guests,CN=Builtin,DC=wareville,DC=thm
krbtgt krbtgt CN=Denied RODC Password Replication Group,CN=Users,DC=wareville,DC=thm
tryhackme tryhackme CN=Domain Admins,CN=Users,DC=wareville,DC=thm
DAVID DAVID
James James
NewAccount NewAccount
cmnatic cmnatic {CN=Domain Admins,CN=Users,DC=wareville,DC=thm, CN=Remote Desktop Users,CN=Builtin,DC=wareville,DC=thm}
3.4 检查 PowerShell 历史记录
PowerShell 与Linux上的 Bash 类似,会保留会话中输入的命令的历史记录。查看这些历史记录是查看用户帐户在计算机上最近执行的操作的绝佳方式。
在 Windows Server 上,此历史文件位于: %APPDATA%\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
图片为Administrator的历史记录,所以是在Users/Administrator文件夹下
您可以使用 Windows 内置的记事本或您最喜欢的文本编辑器来查看PowerShell命令历史记录。
此外,系统还会记录每个在系统上执行的PowerShell进程的日志。这些日志位于 下的事件查看器中,也可以位于 下。日志中包含大量可用于事件响应的信息。Application and Services Logs -> Microsoft -> Windows -> PowerShell -> OperationalApplication and Service Logs -> Windows PowerShell
4. 总结
Active Directory 是企业网络管理的基石,其复杂性为攻击者和防守者提供了广泛的切入点。通过理解其架构、功能及常见攻击手段,管理员可以更有效地保护企业网络安全。
相关文章:

【网络安全】掌握 Active Directory 攻防审计实操知识点
掌握 Active Directory 攻防审计实操知识点 在深入了解 Active Directory 之前,我们需要先掌握网络基础设施的映射和资源访问管理方式。这一切通常通过目录服务 (Directory Services) 实现,目录服务在组织内提供网络资源的映射和访问。轻量目录访问协议…...

vscode不同项目使用不同插件
转载请注明出处:小帆的帆的博客 在使用vscode开发不同项目时可能会用到不同的插件。手动管理不够优雅,本文介绍使用Profiles的方式的来管理不同项目的插件。 手动管理不同项目的插件 本来vscode安装了有三个插件 这时需要新建一个项目,新…...

oracle存储过程中遇到的各种问题及解决方案集锦
oracle存储过程中遇到的各种问题及解决方案集锦 1、在oracle数据库中,为了存储过程和数据表的关键字不冲突,数据表的别名不能加AS: select a.appname from appinfo a; --正确 select a.appname from appinfo as a; --错误2、在存储过程中&am…...

PHP+MySQL 学生信息管理系统
目录 MySQL建表指令 主页面展示 主页面源代码如下 增:添加学生信息 添加html如下 html:主要用于显示网页内容 成功添加后回显 编辑 增加php如下 删:删除学生信息 删除html如下 成功删除后回显 删除php如下 改:修改学生信息 修改html如下 修改php如下 查:查…...

数据结构-栈与队列
栈:一对一的线性储存结构,先进后出,只允许从一端进行数据的插入与删除的线性数据结构。用于,判断成对出现的东西,如判断回文字符串或者回文数,四则混合运算求值等。 顺序栈(数组)&a…...

c#上班,上学,交通方式接口
using System;namespace INTERFACE {abstract class Person{public string Name { get; set; }public int Age { get; set; }public virtual void ShowInfo(){Console.WriteLine($"Name: {Name}, Age: {Age}");}}// 接口 IWorkinterface IWork{void GotoCompany();}/…...

吴恩达官宣开源,yyds!
最近,GitHub 上又一个开源项目火成了一匹黑马。 开源才短短十几天,star 标星就从 0 飙升到了 8000,可以说是最近看到的涨 star 极其生猛的开源项目之一了。 出于好奇,我也点进去看了看。 好家伙,一看这昵称和头像&am…...

从0到1实现vue3+vite++elementuiPlus+ts的后台管理系统(一)
前言:从这篇文章开始实现vue3vite的后台管理系统,记录下自己搭建后台系统图的过程。 这篇文章完成项目的初始化和基本配置,这一步可以直接跟着vue3官网进行。整个系列只有前端部分,不涉及后端。 vue3官网:https://cn.…...

SpringBoot+Vue3实现阿里云视频点播 实现教育网站 在上面上传对应的视频,用户开会员以后才能查看视频
要使用阿里云视频点播(VOD)实现一个教育网站,其中用户需要成为会员后才能查看视频,你可以按照以下步骤进行开发和配置。这个过程包括上传视频、设置权限控制、构建前端播放页面以及确保只有付费会员可以访问视频内容。 1. 视频上…...

wireshark捕获过滤和操作方式详解
大家觉得有用记得关注和点赞,谢谢。 一、Wireshark介绍 Wireshark(前身是Ethereal)是一个网络封包分析软件,目前是全球使用最广泛的开源抓包软件,别名小鲨鱼或者鲨鱼鳍。 网络封包分析软件的功能是截取网卡进出的网络…...

预处理器Stylus的介绍及使用,并同Less、Sass进行对比(简单介绍)
目录 一、安装与配置 安装Node.js: 安装Stylus: 配置Webpack: 二、编写Stylus代码 定义变量: 使用变量: 嵌套语法: 混合(Mixins): 函数: 6.关键字参…...

MySql-9.1.0安装详细教程(保姆级)
目录 MySQL介绍: 一、下载 Mysql 安装文件 二、Mysql 安装教程 1.下载完成后进入解压,注意不要放在一个非中文路径下的文件夹下面否则后面会报错。我在此处解压放在了D盘MySQL目录下。 2.解压后的文件应该没有.ini文件。因此,需要创建in…...

【练习Day17】寻找第 K 大
链接:寻找第K大_牛客题霸_牛客网 方法:快排二分查找(推荐使用) 知识点:分治 分治即“分而治之”,“分”指的是将一个大而复杂的问题划分成多个性质相同但是规模更小的子问题,子问题继续按照这…...

【文档搜索引擎】在内存中构造出索引结构(下)
文章目录 4.保存到磁盘中为什么要保存在磁盘中怎么保存操作步骤1. 前期准备2. 主要操作 5. 将磁盘中的数据加载到内存中Parser 类完整源码Index 类完整源码 4.保存到磁盘中 为什么要保存在磁盘中 索引本来是存储在内存中的,为什么要将其保存在硬盘中? …...

2024年《网络安全事件应急指南》
在这个信息技术日新月异的时代,网络攻击手段的复杂性与日俱增,安全威胁层出不穷,给企事业单位的安全防护能力带 来了前所未有的挑战。深信服安全应急响应中心(以下简称“应急响应中心”)编写了《网络安全事件应急指南》…...

前端的知识(部分)
11 前端的编写步骤 第一步:在HTML的页面中声明方法 第二步:在<script>中定义一个函数,其中声明一个data来为需要的数据 赋值一个初始值 第三步:编写这个方法实现对应的功能...

OPC UA、MQTT 和 HTTP性能分析及使用场景推荐
在选择适合的服务性能协议时,OPC UA、MQTT 和 HTTP 每种都有其独特的优势和适用场景,因此最佳选择取决于具体的应用需求和技术环境。以下是基于不同维度对比这三种协议的分析: 通信效率 OPC UA:通常用于车间环境,提供…...

并发修改导致MVCC脏写问题
并发修改导致MVCC脏写问题 一、概要 1.1 业务场景 数据库表结构设计: 一个主档数据,通过一个字段,逗号分隔的方式去关联其他明细信息的id。 如主档数据A,有3条明细数据与A关联,其id分别是1,2,3,那么其存…...

跌倒数据集,5345张图片, 使用yolo,coco json,voc xml格式进行标注,平均识别率99.5%以上
跌倒数据集,5345张图片, 使用yolo,coco json,voc xml格式进行标注,平均识别率99.5%以上 ,可用于某些场景下识别人是否跌倒或摔倒并进行告警。 数据集分割 训练组99% 5313图片 有效集0&am…...

Java转C之CMake
对于一位从 Java 转到 C 或 C 的工程师,理解 CMake 和其指令非常重要,因为 CMake 是目前 C/C 项目中最常用的构建工具。CMake 本质上是一个跨平台的自动化构建系统,它通过 CMakeLists.txt 文件来管理和配置项目的构建过程。在学习 CMake 的过…...

如何自己创建database.js文件来初始化本地sqlite数据库
如何自己创建database.js文件来初始化本地sqlite数据库!下面是一个案例展示,帮助大家,快速的视线,本地sqlite数据库信息初始化。 为了使用 database.js 文件初始化 SQLite 数据库并存储解签内容,你需要按以下步骤操作。…...

【汇编语言】内中断(三) —— 中断探险:从do0到特殊响应的奇妙旅程
文章目录 前言1. do01.1 do0程序1.2 存放字符串,得到完整的程序1.3 分析初步完成的程序1.4 正确的完整程序1.5 分析正确的完整程序 2. 设置中断向量3. 单步中断3.1 什么是单步中断?3.2 CPU为什么要提供单步中断3.2.1 思考一下Debug功能3.2.2 Debug是如何…...

0006.基于SpringBoot+element付费问答系统
适合初学同学练手项目,部署简单,代码简洁清晰; 愿世界和平再无bug 一、系统架构 前端:vue| elementui 后端:springboot | mybatis-plus 环境:jdk1.8 | mysql | maven 二、登录角色 1.管理员 2.用户 …...

SpringBoot feign基于HttpStatus重试
场景 基于springboot开发的项目,对接第三方,第三方的接口有限流策略,某个时间段内有调用频率限制,返回的状态码HttpStatus不是200,而HttpStatus是429。现基于HttpStatus我们发起的重试。 技术点 springbootfeign fe…...

【记录49】vue2 vue-office在线预览 docx、pdf、excel文档
vue2 在线预览 docx、pdf、excel文档 docx npm install vue-office/docx vue-demi0.14.6 指定版本 npm install vue-office/docx vue-demi <template><VueOfficeDocx :src"pdf" style"height: 100vh;" rendere"rendereHandler" error&…...

正则表达式中^的用法
正则表达式中^的用法 1.用法一: 限定开头 文档上给出了解释是匹配输入的开始,如果多行标示被设置成了true,同时会匹配后面紧跟的字符 比如 /^A/会匹配"An e"中的A,但是不会匹配"ab A"中的A 比如(\s|^)表示空字符串或字…...

WPF 关于界面UI菜单权限(或者任意控件的显示权限)的简单管理--只是简单简单简单简单
1.定义你的User类 public class User{public User(){ID ObjectId.NewObjectId().ToString();}public string? ID { get; set; }public string? Account { get; set; }public string? Password { get; set; }public string? PasswordMD5 { get; set; }public AccountType?…...

Https身份鉴权(小迪网络安全笔记~
附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 5.2 Https&身份鉴权 引子:上一篇主要对Http数据包结构、内容做了介绍,本篇则聊聊Https、身份鉴权等技术。 …...

AngularJS 输入验证
AngularJS 输入验证 AngularJS 是一个强大的 JavaScript 框架,它允许开发者构建动态的、高性能的 Web 应用程序。在处理用户输入时,确保数据的准确性和完整性至关重要。AngularJS 提供了一套内置的输入验证机制,可以帮助开发者轻松地实现这一目标。 为什么需要输入验证? …...

【网络安全】WIFI WPA/WPA2协议:深入解析与实践
WIFI WPA/WPA2协议:深入解析与实践 1. WPA/WPA2 协议 1.1 监听 Wi-Fi 流量 解析 WPA/WPA2 的第一步是监听 Wi-Fi 流量,捕获设备与接入点之间的 4 次握手数据。然而,设备通常不会频繁连接或重新连接,为了加速过程,攻…...