SPN 泄露 | 扫描 | 维护

SPN 泄露

当Service Principal Names(SPNs)泄露时,可能会引发严重的安全风险,特别是在使用Kerberos身份验证的环境中。
image.png

  1. 身份欺骗(Identity Spoofing): 攻击者可以用泄露的SPN来伪装成合法的服务。
  2. 中间人攻击(Man-in-the-Middle Attacks): 攻击者可以用泄露的SPN作为中间人,截取和篡改通过Kerberos身份验证的通信。
  3. 凭据盗窃(Credential Theft): 如果泄露的SPN包含身份验证的凭据,攻击者可以用这些凭据进行凭据盗窃攻击。
  4. 服务拒绝攻击(Service Denial Attacks): 攻击者会用泄露的SPN对服务进行拒绝服务攻击。
  5. 认证绕过(Authentication Bypass): 攻击者可以绕过认证控制,直接访问受保护的资源。
    image.png
    维护措施:
  • 定期审查SPN配置: 确保仅配置必要的SPN,定期审查以检测潜在的泄露。
  • 敏感信息掩盖: 在SPN中避免包含敏感信息,减轻泄露的潜在风险。
  • 加强凭据安全性: 使用服务帐户的凭据是强密码,并定期更改。
  • 监控和审计: 实施监控和审计机制,及时检测并处理SPN泄露。

SPN 格式

服务主体名称(SPN)在利用Kerberos身份验证的服务发现中是必需的。

Microsoft Kerberos规范:

SPN格式介绍

SPN = serviceclass “/” hostname [“:”port] [“/” servicename]
serviceclass 是标识服务类别的字符串,例如Web服务的“www”或目录服务的“ldap”。
hostname 是系统名称的字符串,完全限定的域名(FQDN)。
port 是服务的端口号的数字。
servicename 段是服务的区别名称(DN)、objectGuid、Internet主机名或完全限定域名(FQDN)的字符串。

SPN 示例
SQL 服务器、实例、端口:
MSSQLSvc/host01.example.com:1433
Exchange:
exchangeMDB/EXCAS01.example.com
RDP:
TERMSERV/EXCAS01.example.com
WSMan / WinRM / PS Remoting:
WSMAN/EXCAS01.example.com
Hyper-V主机:
Microsoft Virtual Console Service/HV01.example.com
VMWare VCenter:
STS/VC01.example.com

SPN 扫描

相对于网络端口扫描,SPN扫描对攻击者的主要优势在于不需要连接到网络上的每个IP来检查服务端口。SPN扫描通过LDAP查询到域控制器对服务扫描。由于SPN查询是正常Kerberos票证行为的一部分,很难发现。而网络端口扫描就很容易发现了。
image.png

# 服务器和域接口
$search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
 
$search.filter = "(servicePrincipalName=*)"
 
$results = $search.Findall()

# 遍历SPN
foreach($result in $results)
 
{
 
       $userEntry = $result.GetDirectoryEntry()
 
       Write-host "Object Name = " $userEntry.name -backgroundcolor "yellow" -foregroundcolor "black"
 
       Write-host "DN = "  $userEntry.distinguishedName
 
       Write-host "Object Catch = "  $userEntry.objectCategory
 
       Write-host "servicePrincipalNames:"
 
       $i=1
 
       foreach($SPN in $userEntry.servicePrincipalName)
       {
           Write-host "SPN(" $i ")   =      " $SPN       $i+=1
       }
 
       Write-host ""
 
}

用户账户控制发现服务账户
在搜索Active Directory中寻找服务账户的另一种隐秘方法是账户控制设置,因为服务账户一般与常规用户账户设置不同。
一个不错的案例: “密码永不过期”设置
— 服务账户的密码被设置为永不过期,因为重置很麻烦,而且会导致应用程序或服务中断。

$ldapFilter = "(&(servicePrincipalName=*)(useraccountcontrol:1.2.840.113556.1.4.803:=65536))"

$search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
$search.Filter = $ldapFilter
$results = $search.Findall()

~喜欢的话,请收藏 | 关注(✪ω✪)~
~万一有趣的事还在后头呢,Fight!!(o^-^)~''☆ミ☆ミ~……

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

芯驰E3340软件编译以及更新步骤

打开已有工程File->Open Solution: 东南项目:e3340\boards\e3_324_ref_display\proj\jetour-t1n-fl3\sf\SES 编译:build->build sf 增加头文件和宏定义: 编译完成sf后,进行编译bootloader 东南项目:e3340\boa…

Java Server-Sent Events通信

Server-Sent Events特点与优势 后端可以向前端发送信息,类似于websocket,但是websocket是双向通信,但是sse为单向通信,服务器只能向客户端发送文本信息,效率比websocket高。 单向通信:SSE只支持服务器到客…

go语言(十四)----反射

变量的结构 2 举个例子 package mainimport "fmt"type Reader interface {ReadBook() }type Writer interface {WriteBook() }//具体类型 type Book struct {}func (this *Book) ReadBook() {fmt.Println("Read a Book")}func (this *Book) WriteBook() {…

​《WebKit 技术内幕》学习之九(3): JavaScript引擎

3 JavaScriptCore引擎 3.1 原理 JavaScriptCore引擎是WebKit中的默认JavaScript引擎,也是苹果在开源WebKit项目之后,开源的另外一个重要的项目。同其他很多引擎一样,在刚开始的时候它的主要部分是一个基于抽象语法树的解释器,这…

天软特色因子看板 (2024.1 第8期)

该因子看板跟踪天软特色因子A04001(当日趋势强度,该因子为反映股价走势趋势强弱,用以刻画股价走势趋势强弱,abs(值)越接近1,趋势 性越强,符号代表涨跌方向。 今日为该因子跟踪第8期,跟踪其在SW801080 (申万…

什么是WAF

WAF是Web应用防火墙(Web Application Firewall)的简称,是一款通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的产品。 WAF主要用于防御Web应用攻击,例如SQL注入、跨站脚本攻击(XSS)、网页…

Java--接口

文章目录 主要内容一.teacher&student1.源代码代码如下(示例): 2.结果 二.shape1.源代码代码如下(示例): 2.结果 三.生物、动物、人1.源代码代码如下(示例): 2.结果 总结 主要内容 一.teacher&stu…

开源项目CuteSqlite开发笔记(八):Windows 64位/32位使用GetWindowLongPtr钩子函数

需求描述 在开发CuteSqlite的时候, 有一个功能需要实现,鼠标移到WTL::CStatic上后,发送消息通知CToolTipCtrl弹出。 遇到问题 WTL::CStatic控件没有相应 WM_MOUSEMOVE 消息,需要返回一个HTCLIENT消息来让窗口处理函数执行 WM_MO…

web3:B站chainlink课程第五课Wsl安装ubuntu虚拟机

坑了我好久。 https://learn.microsoft.com/zh-cn/windows/wsl/install-manual 按照微软给的这个手动安装的方式来,别想在线了,反正来看这个的肯定是直接 wsl --install成功不了的选手。 注意! 步骤6别从Microsoft Store 下载,…

C#winform上位机开发学习笔记9-串口助手的多窗体功能添加

1.功能描述 涉及子窗体的创建过程,子窗体的调用操作,子窗体与主窗体的显示位置设置,子窗体随主窗体移动 2.代码部分 步骤1:新建button并修改Text 步骤2:在现工程中新建项目 步骤3:选择窗体修改窗体名称 …

SCCB接口

文章目录 概述引脚传输时序起始/结束信号三线模式两线模式 传输周期3阶段写传输周期2阶段写传输周期2阶段读传输周期阶段一 ID Address阶段二 子地址/读数据阶段三 写数据 SCCB与IIC区别未完待续(还有代码)... 概述 SCCB(Serial Camera Control Bus&…

【极数系列】Flink 初相识(01)

# 【极数系列】Flink 初相识(01) 引言 Flink官网:https://flink.apache.org/ Flink版本:https://flink.apache.org/blog/ Flink文档:https://ci.apache.org/projects/flink/flink-docs-release-1.12/ Flink代码库…

Redis(五)管道

文章目录 官网总结Pipeline与原生批量命令对比Pipeline与事务对比使用Pipeline注意事项 官网 https://redis.io/docs/manual/pipelining/ Pipeline是为了解决RTT往返回时,仅仅是将命令打包一次性发送对整个Redis的执行不造成其它任何影响 总结 Pipeline与原生批量…

Med-YOLO:3D + 医学影像 + 检测框架

Med-YOLO:3D 医学影像 检测框架 提出背景设计思路网络设计训练设计讨论分析 魔改代码:加强小目标检测总结 提出背景 论文链接:https://arxiv.org/abs/2312.07729 代码链接:https://github.com/JDSobek/MedYOLO 提出背景&…

flutter设置windows是否显示标题栏和状态栏和全屏显示

想要让桌面软件实现全屏和不显示状态栏或者自定义状态栏,就可以使用window_manager这个依赖库,使用起来还是非常方便的,可以自定义显示窗口大小和位置,还有设置标题栏是否展示等内容,也可以设置可拖动区域。官方仓库地…

<C++>STL->list

list的介绍 list list是一个类模板,第一个模板参数为存储数据类型;第二个模板参数为空间适配器list是一个可以在常数时间内完成任意位置的插入和删除的顺序容器。list容器是以双链表的形式实现的;双链表可以将其包含的每个元素存储在不同且…

Java开发工具:IntelliJ IDEA 2023 for Mac中文激活

IntelliJ IDEA 2023是一款由JetBrains开发的强大的集成开发环境(IDE)软件,适用于多个编程语言。它旨在提高开发人员的生产力和代码质量。 软件下载:Java开发工具:IntelliJ IDEA 2023 for Mac中文激活 IntelliJ IDEA 20…

Docker入门学习

1、docker简介 1.1什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitH…

Maven工程继承和聚合关系

1. Maven工程继承关系 1.1 继承概念 Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。 1.2 继承作用 在父工程中统一管理项目中的依赖信息。 …

Kafka(三)【Broker 存储】

目录 前言 Kafka Broker 1、工作流程 1.1、Zookeeper 存储的 Kafka 信息 1.2、Kafka Broker 的总体工作流程 1.3、Broke 重要参数 2、Kafka 副本 2.1、副本基本信息 2.2、Keader 选举流程 2.3、Leader 和 Follower 的故障处理细节 Follower 故障 Leader 故障&#x…