Japan
サイト内の現在位置
Active DirectoryにおけるAttack Path(攻撃パス)SPN編
NECセキュリティブログ2025年3月28日
NECサイバーセキュリティ戦略統括部セキュリティ技術センターの松井です。
今回の記事は、過去にAttack Pathについて記載したブログ[1][2]の続編となります。
Attack Pathとはアイデンティティベースの攻撃の連鎖のことであり、内部侵害において攻撃者が好んで利用する攻撃手法です。企業ネットワークでよく利用されるActive DirectoryやEntra IDが攻撃の標的となる場合、アイデンティティベースの攻撃の連鎖を行うことで横展開や権限昇格を進めていく事例が多く見られます。
今回は、Attack Pathにおいて着目されることが多いService Principal Name(以降、SPNと記載します)について考察していきたいと思います。
目次
SPNとは
SPNとはドメイン環境においてサービスを一意に識別する仕組みです。SPNは、サービスの一般的な名称であるサービスクラス、サービスが実行されるホスト名、ポート番号(オプション)、サービス名(オプション)を用いて以下の構文で表現されます。[3]
<service class>/<host>
<service class>/<host>:<port>
<service class>/<host>:<port>/<service name>
ビルトインのサービスクラスについてはMicrosoftのドキュメント[4]で一覧化されています。なお、SPNのサービスクラスでよくみられるHOSTやLDAP、MSSQLSvcがリストされておらずこのリストは網羅的でないと考えています。

SPNの設定方法
SPNを設定する際は、サービスの一般的な名称であるサービスクラスと、サービスが実行されるホスト名に加えて、当該サービスを実行するサービスアカウントを指定して設定します。サービスとしてSPNを設定するメリットについては、国井氏のブログ[5]で分かりやすく説明されています。
SPNを設定する際に必要な要素
- サービスクラス
- サービスが実行されるホスト名
- サービスを実行するサービスアカウント
SPNの設定には、setspn.exeがよく用いられます。Domain Admins権限を持つユーザで以下の情報がマッピングされたSPNを構成してみます。
- サービスクラス:MSSQLSvc
- サービスが実行されるホスト名:sql01.contoso.local:1433
- サービスを実行するサービスアカウント:ServiceAccount01
setspn.exeによる設定コマンドは次のようになります。
setspn.exe -S MSSQLSvc/sql01.contoso.local:1433 ServiceAccount01
もしくは、Set-ADUserコマンドレットを用いた方法も可能です。
Set-ADUser -Identity "ServiceAccount01" -ServicePrincipalNames @{Add="MSSQLSvc/sql01.contoso.local:1433"}
設定済みの全てのSPNは、setspn.exeを-Qオプションで*/*を指定して実行することで確認することができます。

または、Active Directoryモジュール[6]とLDAPクエリを利用して確認することもできます。ここではLDAPクエリの詳細については説明を割愛します。


今回設定したSPNとサービスアカウントの関係性イメージは以下の通りです。

SPNの攻撃手法(Kerberoasting攻撃)
SPNは攻撃者にとって興味深い攻撃面になることがあります。ケルベロス認証において、ユーザはサービスにアクセスする際にドメインコントローラから受け取ったサービスチケット(ST)を利用します。このサービスチケットはサービスに紐づくサービスアカウントのパスワードから生成されたNTLMハッシュによって暗号化されています。そのため、仮にサービスアカウントのパスワードの強度が低い場合、攻撃者は取得したサービスチケットをローカルでクラックし、平文のパスワードを得る可能性があります。以下は、ケルベロス認証によるサービスへのアクセスの様子を簡単に表現したもので

ユーザにキャッシュされたサービスチケットはklistコマンドで確認することができます。以下の実行結果では、MSSQLSvcのサービスチケットがキャッシュされていることが分かります。

サービスアカウントであるServiceAccount01のパスワードの強度を意図的に低く設定したうえで、ドメインコントローラのTGTサーバから受け取ったサービスチケットをクラックし、平文パスワードを解析してみます。


クラックツールと辞書ファイルを用いて簡単にパスワードを取得することができました。この攻撃はKerberoasting攻撃と呼ばれるよく知られた攻撃手法です。Kerberoasting攻撃は、Red Siege社の創業者でSANS講師でもあるTim Medin氏[7]によって開発されました。
仮に、ServiceAccount01がDomain Adminsグループに所属している場合、攻撃者はほんの数ステップからなるAttack Pathで特権に権限昇格ができてしまう可能性があります。

Targeted Kerberoasting攻撃
次に、Kerberoasting攻撃の応用として、興味深い攻撃手法について紹介します。Kerberoasting攻撃では、SPNによって紐づいたサービスアカウントのパスワードを解析しましたが、Domain Usersのユーザであっても他のユーザアカウントに対してGenericALLもしくはGenericWriteの権限が付与されている場合、既存のユーザアカウントに対して任意のSPNの設定が可能となります。そのため、本来SPNが設定されていないユーザアカウントに対して強制的にKerberoasting攻撃を行うことが可能です。

user01がuser02に対してGenericWrite権限を持つ場合、user02に対してSPNの設定が可能となります。指定するサービスクラスとホスト名は環境に存在しない任意の文字列でも機能します。ここでは分かりやすくサービスクラスにHack、ホスト名にHackとデタラメなSPNを設定しています。

このようなデタラメなSPNであっても、user02のパスワードから生成したNTLMハッシュで暗号化したサービスチケットを発行させることで、ローカルクラックを試行することが可能になります。

緩和策
Kerberoasting攻撃の緩和策には次の対策が考えられます。
- SPNの棚卸を行い設定の必要性を確認する
- SPNにマッピングされているサービスアカウントの権限、パスワードを確認する
- グループ管理サービスアカウント(gMSA)を使用する
- 強度の弱いチケットの暗号化方式(RC4-HMAC)を規制する
- RC4-HMACでのチケットリクエストの監視や脅威ハンティングを行う
まとめ
今回は、Attack Pathでの攻撃面として興味深いSPNについてご紹介しました。アイデンティティベースの攻撃は正規の機能を悪用するためステルス性が高く検知が難しくなります。Attach Pathに特徴的な攻撃手法を知り、緩和策に取り組むことが重要と考えます。最後まで読んでいただきありがとうございました。
参考文献
- [1]Active DirectoryにおけるAttack Path(攻撃パス)| NECブログ
https://jpn.nec.com/cybersecurity/blog/231117/index.html - [2]Active Directory Certificate Services (ADCS) におけるAttack Path | NECブログ
https://jpn.nec.com/cybersecurity/blog/240719/index.html - [3]一意の SPN の名前形式 | Microsoft
https://learn.microsoft.com/ja-jp/windows/win32/ad/name-formats-for-unique-spns
- [4]How the Kerberos Version 5 Authentication Protocol Works | Microsoft
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc772815(v=ws.10)#service-principal-names
- [5]Service Principal Name (SPN) について
https://azuread.net/archives/1070
- [6]Using ActiveDirectory module for Domain Enumeration from PowerShell Constrained Language Mode
https://www.labofapenetrationtester.com/2018/10/domain-enumeration-from-PowerShell-CLM.html
- [7]Tim Medin | SANS
https://www.sans-japan.jp/sans_instructor_tim_medin
執筆者プロフィール
松井 祐輔(まつい ゆうすけ)
セキュリティ技術センター
脅威インテリジェンス、内部侵入攻撃対策を専門とする。
大規模国際イベントや官民向けのサイバーセキュリティ対応業務を経て、現在はNEC CSIRT Cyber Threat Intelligenceなどの業務に従事。
CISSP、CISA、2×SANSメダル、5×Splunk Botsトロフィー、Offensive Securityメダル、3×Taniumメダルを保持。
YamatoSEC上忍、AD Hack WGリード、Hardening Project Kuromame6 メンバー、Offensive Security Lab Japan実行委員

執筆者の他の記事を読む
アクセスランキング
2025年3月16日~3月22日に読まれた記事のランキング