[ホーム] - [Windows Server 2019 FAQ 一覧] - [spnまとめ]



作成日:2023/12/22
更新日:2023/12/22
対象:Windows Server 2019

spnまとめ




【目次】


SPNとは


SPN(サービスプリンシパル名,Service Principal Name) は、サービスを一意に識別するための名前です。Windows AD 環境の Kerberos 認証サービスでは、サービスはSPN を使用してサービスを認証します。

例えば MSSQLの場合、以下の書式が指定されます。


MSSQLSvc/<FQDN>:[<port> | <instancename>]

MSSQLSvc :SQLサービス名
<FQDN> :サーバーのFQDN
<port> :TCP ポート番号
<instancename> :インスタンスの名




SPN確認コマンド


Windows 環境において、setspnコマンドで spn をセットしたり確認することが可能です。

よく利用するには関連付けされたアカウント名で検索する方法とサーバ名で検索する方法です。
(1)アカウント名


C:\>setspn -l administrator
次の項目に登録されている CN=Administrator,CN=Users,DC=testdomain,DC=local:




(2)サーバ名

C:\>setspn -l WIN-SERVER
次の項目に登録されている CN=WIN-SERVER,OU=Domain Controllers,DC=testdomain,DC=local:



Windows Server 2016(Windows AD環境) 環境でデフォルトでは以下のSPNが確認できました。


setspn -l servername
次の項目に登録されている CN=SERVERNAME,OU=Domain Controllers,DC=testdomain,DC=local:
Dfsr-(省略)/servername.testdomain.local
ldap/servername.testdomain.local/ForestDnsZones.testdomain.local
ldap/servername.testdomain.local/DomainDnsZones.testdomain.local
TERMSRV/SERVERNAME
TERMSRV/servername.testdomain.local
DNS/servername.testdomain.local
GC/servername.testdomain.local/testdomain.local
RestrictedKrbHost/servername.testdomain.local
RestrictedKrbHost/SERVERNAME
RPC/(省略)._msdcs.testdomain.local
HOST/SERVERNAME/TESTDOMAIN
HOST/servername.testdomain.local/TESTDOMAIN
HOST/SERVERNAME
HOST/servername.testdomain.local
HOST/servername.testdomain.local/testdomain.local
(省略)/(省略)/testdomain.local
ldap/SERVERNAME/TESTDOMAIN
ldap/(省略)._msdcs.testdomain.local
ldap/servername.testdomain.local/TESTDOMAIN
ldap/SERVERNAME
ldap/servername.testdomain.local
ldap/servername.testdomain.local/testdomain.local




setspnの書式は次の通りです。

setspn -?
使用法: setspn [修飾子スイッチ] [アカウント名]
"アカウント名" には、ターゲット コンピューターまたは
ユーザー アカウントの名前またはドメイン\名前を指定できます。

編集モード スイッチ:
-R = HOST ServicePrincipalName をリセットします
使用法: setspn -R アカウント名
-S = 重複がないことを確認した後で任意の SPN を追加します
使用法: setspn -S SPN アカウント名
-D = 任意の SPN を削除します
使用法: setspn -D SPN アカウント名
-L = ターゲット アカウントに登録された SPN を一覧表示します
使用法: setspn [-L] アカウント名

編集モード修飾子:
-C = アカウント名がコンピューター アカウントであることを指定します
-U = アカウント名がユーザー アカウントであることを指定します

注意: -C と -U は排他的です。どちらも指定しない場合、
コンピューターがある場合はアカウント名がコンピューター名と認識され、
ない場合はユーザー名と認識されます。

クエリ モード スイッチ:
-Q = SPN の有無を照会します
使用法: setspn -Q SPN
-X = 重複する SPN を検索します
使用法: setspn -X

注意: 重複を特にフォレスト全体で検索すると、長い時間がかかり、
大量のメモリを消費する場合があります。-Q は各ターゲット
ドメイン/フォレストに対して実行します。-X はターゲット全体の重複を
返します。SPN はフォレスト内で一意である必要はありませんが、
重複は、フォレスト間認証のときに認証の問題につながる可能性があります。

クエリ モード修飾子:
-P = コンソールに進行状況を表示しません。出力をファイルに転送する場合
または、無人スクリプトで実行する場合に使用します。コマンドの
実行か完了するまで、出力は表示されません。
-F = ドメイン レベルではなくフォレスト レベルでクエリを実行します
-T = 指定されたドメインまたはフォレストでクエリを実行します
(-F も使用されている場合)
使用法: setspn -T domain (スイッチおよび他のパラメーター)
"" または * を使用して現在のドメインまたはフォレストを示すことが
できます。

注意: これらの修飾子は、SPN を追加する前に重複の確認をどこで
実行するかを指定するために、-S スイッチと共に使用できます。
注意: -T は、何回でも指定できます。

例:
setspn -R daserver1
SPN "HOST/daserver1" および "HOST/{daserver1 の DNS}" を登録します
setspn -S http/daserver daserver1
コンピューター "daserver1" の SPN "http/daserver" を登録します
ただし、ドメインにこの SPN が存在しないことが前提です
setspn -D http/daserver daserver1
コンピューター "daserver1" の SPN "http/daserver" を削除します
setspn -F -S http/daserver daserver1
コンピューター "daserver1" の SPN "http/daserver" を登録します
ただし、フォレストにこの SPN が存在しないことが前提です
setspn -U -S http/daserver dauser
ユーザー アカウント "dauser" の SPN "http/daserver" を登録します
ただし、ドメインにこの SPN が存在しないことが前提です
setspn -T * -T bar -X
このドメインおよび bar にある SPN のすべての重複登録を報告します
setspn -T bar -F -Q */daserver
bar が属するフォレストに登録された、*/daserver という形式のすべての
SPN を検索します



脆弱性


SPNが関連付けられているサービスアカウント用のパスワードを狙う攻撃手法があります。以下記事がとても参考になります。

Kerberoasting攻撃とは
https://www.crowdstrike.jp/cybersecurity-101/kerberoasting/






(ご注意) 本サイト内の内容を使用して発生したいかなる時間的損害、金銭的損害あるいはいかなる損害に対して、いかなる人物も一切の責任を負いません。あくまでも個人の判断で使用してください。 本ページは独自に調査をしたアンオフィシャル(非公式)な内容です。内容に誤りがある可能性や仕様変更により内容が不正確になる可能性があります。 本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。)


Copyright(c) TOOLJP.COM 1999-2024

[Windows Server 2019 FAQ 一覧に戻る]