Service Principal Name (SPN) について

皆さんこんにちは。国井です。
今日はSPNの話です。
ADFS2.0 をインストールするときに、Service Principal Name (SPN) を登録するステップが登場しますが、そもそもSPNって何よ?って話が私の周りで出てきます。そこで、今日はSPNについて、まとめてみたいと思います。

SPNはサービスを安全に実行するために用意されている ID で、
SPNでは、次の情報がActive Directoryに登録できます。

・ サービスの名前 (ポート番号)
・ サービスを実行するコンピューター
・ サービスを実行するアカウント (サービスアカウント)

SPNとしてサービスを登録することにより、上記の3つの情報がマッピングされた状態で登録され、
Kerberosを使ってサービスの認証ができるようになります。
これにより、サービスを乗っ取って不正にサービスを利用しようとする攻撃を防げるメリットがあります。

例えば、サービスAを実行しているコンピューターBがいるとき、

SPN1

悪意ある人が、コンピューターBをシャットダウンさせ、同じ名前のコンピューターBを起動して、
サービスAを実行したら、悪意あるコンピューターからサービスが実行されているということがわかりません。

SPN2

しかし、SPNでサービスを登録しておけば、サービスアカウントのユーザー名、パスワードによる認証の代わりに
SPNを使って、サービス、コンピューター、サービスアカウントの組み合わせがKerberosで認証されますので、
上記のような乗っ取り行為を防ぐよう、不正なサービス起動を防げるのです。

SPN3

SPNを登録するときは、setspnコマンドを利用します。

setspn –a <サービスタイプ>/<ホスト名>:<ポート番号> <ドメイン名>/<サービスアカウント名>

■参考情報
setspn syntax
http://technet.microsoft.com/ja-jp/library/cc755442(WS.10).aspx
認証のためのサービスIDの指定
http://msdn.microsoft.com/ja-jp/library/ms733130(v=vs.85).aspx
Presentation Serverでのサービスプリンシパル名(SPN)と委任
http://support.citrix.com/article/CTX112972
The .NET Developer’s Guide to Windows Security (書籍)
http://www.amazon.co.jp/Developers-Windows-Security-Microsoft-Development/dp/0321228359