前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SPN服务主体名称详解

SPN服务主体名称详解

原创
作者头像
一只特立独行的兔先生
发布2024-02-09 16:34:09
4440
发布2024-02-09 16:34:09
举报

1.SPN简介

SPN(ServicePrincipal Names,服务主体名称)是服务实例的唯一标识符,当域内存在大量的服务器,管理员为了方便管理会对服务器进行标识,那么管理员标识所使用的方法就是SPN。

2.SPN类型分类

SPN分为以下两种类型,如图1-1所示,一种为注册在活动目录的“机器账户computer”下,另一种为注册在活动目录的“域账号Users”下。

图1-1 SPN类型
图1-1 SPN类型

1)注册在活动目录的机器账户(CN=Computer)下。当某一个服务的权限为Local System或者Network service时,SPN会注册在机器账户下,同时所加入域的每台机器都会自动注册两个SPN:“Host/主机名”和“Host/主机名.DC名”,如图1-2所示。

图1-2 注册在活动目录的机器账户
图1-2 注册在活动目录的机器账户

2)注册在活动目录的域账号(CN=Users)下。当某一个服务的权限为一个域用户时,SPN会注册在活动目录的域账号下,如图1-3所示。

图1-3 注册活动目录的域账号
图1-3 注册活动目录的域账号

3.SPN格式定义

如下为SPN格式定义,其中<serviceclass> 服务类和<host>主机名为必要参数,<port>、<servername>、<Domain user>为可选参数。

serviceclass/host:port/servername/Domain user

1)<service class> :服务的名称,例如:LDAP、MSsql等。

2)<host>:系统的名称,可以是FQDNNetBIOS名这两种形式任意一种。

3)<port>:服务的端口号,如果使用的是默认端口可以省略。

4)<servername>:服务的专有名称、主机名、FQDN。

5)<Domain user>:域中的用户。

4.SPN实例名称

如表1-1所示,例举出一些常见的SPN实例名称。

表 1-1 SPN实例名称

常见服务

SPN服务实例名称

SQL Server

MSSQLSvc/adsmsSQLAP01.adsecurity.org:1433

Hyper-V Host

Microsoft Virtual Console Service/adsmsHV01.adsecurity.org

Exchange

ExchangeMDB/adsmsEXCAS01.adsecurity.org

VMWareVCenter

STS/adsmsVC01.adsecurity.org

RDP

TERMSERV/adsmsEXCAS01.adsecurity.org

WSMan

WSMAN/adsmsEXCAS01.adsecurity.org

5.SPN服务注册

前面讲过关于Kerberos协议关于PC1请求server1的某种服务,假设我们需要请求server1的http服务并且我们还想经过Kerberos协议的认证,那么就需要给server1注册一个SPN,给server1注册SPN之后Kerberos就会将服务器实例和服务登录账号关联,在SPN服务注册方面我们使用本地Windows自带的一个二进制的文件—Set SPN进行注册。操作流程如下。

1)以域管理员的身份登录到域控制器,如图1-4所示。

图1-4 以域管理员的身份登录到域控制器
图1-4 以域管理员的身份登录到域控制器

2)打开Powershell管理命令行,如图1-5所示。

图1-5 运行打开Powershell管理命令行
图1-5 运行打开Powershell管理命令行

3)以z3用户的身份进行SPN服务的注册(假设z3是一个HTTP服务的登录账号)如图1-6所示。

setspn -A http/httptest.testfirest.com:80 z3

图1-6 以z3用户的身份进行SPN服务注册
图1-6 以z3用户的身份进行SPN服务注册

4)通过Setspn - T命令进行查看验证注册状态

代码语言:bash
复制
setspn -T testfirest.com -q */*  //查看当前域内所有的SPN,如果指定域不存在,默认切换查找本域的SPN或本域重复的SPN

5)注意:以普通域用户注册SPN服务主体时,需要域管理员的权限,以普通的域账户进行SPN注册会提示权限不够,如图1-7所示。

图1-7 普通域账号SPN注册
图1-7 普通域账号SPN注册

6.SPN 服务主体配置

一般情况下,我们都是通过Set SPN的方式对SPN进行手动注册,但手动注册的SPN存在一定的丢失问题,解决SPN丢失最好的办法是让一些“服务”的启动域账号拥有自动注册SPN的权限,那么我们就需要在域控制器上对其开放读写“ServicePrincipalName”的权限。操作流程如下。

1)在域控制器上打开“Active Directory 用户和计算机”,通过“开始—所有程序—管理工具—Active Directory用户和计算机”,如图1-8所示。

图1-8 打开Active Directory 用户和计算机
图1-8 打开Active Directory 用户和计算机

2)在Computers中找到一个计算机账户,右击并选择“属性”。如图1-9所示。

图1-9 选择计算机属性
图1-9 选择计算机属性

3)在属性中选择“安全”这一个选项卡,并点击“高级”按钮,如图1-10所示。

图1-10 配置属性安全选项卡
图1-10 配置属性安全选项卡

4)选择要添加的网络控制器计算账户或组,单击“编辑”,在“属性”中选择如下两项,如图1-11所示。

读取 servicePrincipalName 写入 servicePrincipalName

图1-11 设置读取和写入 servicePrincipalName权限
图1-11 设置读取和写入 servicePrincipalName权限

5)点击确认即可确定权限,如图1-12所示。

图1-12 确认当前权限
图1-12 确认当前权限

7.SPN服务查询

我们在内网域环境中进行信息收集的最好方式就行通过“SPN扫描”,对于红队来讲,通过“SPN扫描”进行信息收集的方式比通过“端口扫描”的方式更加隐蔽,因为SPN扫描查询实际上就是对LDAP中存储的内容进行查询,并不会对网络上的每个IP进行服务进行端口扫描,而对域控制器发起的LDAP查询也是正常Kerberos票据行为中的一部分,其查询操作很难被检测出来,由此以来可以规避因端口扫描而带来的“风险”,提高红队自身的隐蔽性,如下列举了通过Setspn进行信息收集的常见用法。操作流程如下。

1)查看当前域内的所有SPN。

代码语言:bash
复制
setspn.exe -q */*  //查询当前域内所有的SPN

2)查看指定用户或者主机名注册的SPN。

代码语言:bash
复制
setspn -L <username>/<hostname>  

3)查找本域内重复的SPN。

代码语言:bash
复制
setspn -X  

4)删除指定用户或者主机名。

代码语言:bash
复制
setspn -L username/hostname


我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.SPN简介
  • 2.SPN类型分类
  • 3.SPN格式定义
  • 4.SPN实例名称
  • 5.SPN服务注册
  • 6.SPN 服务主体配置
  • 7.SPN服务查询
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档