昨今,クラウドサービスの増加により,ID管理やセキュアな認証基盤の重要性が増しています.その中で,SAML(Security Assertion Markup Language)認証は,企業や大学などを中心に,安全で効率的な認証を提供するための重要な手段のひとつとして広く利用されています.
この記事では,情報処理安全確保支援士試験 頻出テーマの1つであるSAML認証の仕組みや利点・弱点,セキュリティ対策,シボレスとの関連について詳しく解説します.
SSOとは
SAMLを理解する前に,SSOについて理解しておく必要があります.SSOは,Single Sign On(シングルサインオン)の略であり,一度ログインすれば,複数のサービスやアプリケーションに対して再度認証を行うことなくアクセスできる便利な仕組みです.
厳密言えば,あくまでもユーザが複数回認証を行う必要が無いというだけで,実際はシステムが裏側で認証を代行しています.
SSOのメリット
SSOには,以下のメリットがあります.
・UX(ユーザエクスペリエンス)の向上
・ユーザ,システム管理者の負担軽減
SSO未導入の場合に比べて,各サービス毎に認証の操作と時間を省くことができるため,ユーザエクスペリエンスの向上が期待されます.
また,SSOを導入していない場合,利用サービスの分だけログインIDとパスワードの組み合わせ(サービス数を$n$とすれば,$2n$個の文字列)を覚えておく必要があります.
一方で,SSOを導入すれば,利用するサービスの数がどれだけ増えたとしても,覚えておく必要がある文字列の数は常に$2$のまま増加しません.
従って,ユーザ負担の軽減に繋がります.また,ユーザの負担が減ることで,パスワード紛失などのトラブル減少にも繋がるため,延いてはシステム管理者(部門)の負担軽減にもなります.
SSOのデメリット
このように,非常に便利な仕組みではありますが,以下のようなデメリットも存在します.
・認証基盤の可用性が関連する全システム・サービスに影響を及ぼす.
・導入時のコスト
・SSOの認証を不正に突破されると,関連する全システム・サービスを不正利用される可能性がある.
システムやサービスの認証がSSOのみに依存する場合,何らかの原因によりSSOが使えなくなった際に,これらの全システム・サービスが使えなくなります.
また,SSOの導入にあたっては,認証基盤製品のコストだけでなく,方式によってはSSOに合わせたシステム・サービスの改修が必要になる場合もあります.このように,時間・費用・技術的コストがかかるため,導入によって得られるメリットと天秤にかけて検討する必要があります.
さらに,「一度の認証で全サービス・システムを利用できる」というのは,裏を返せば「SSOの認証を不正に突破されると,関連する全システム・サービスを不正利用される可能性がある」ということにもなります.
SAMLとは
ここまでSSOの概要について説明してきましたが,SAMLはSSOの一種であると言えます.
SSOを実現する具体的な仕組み・規格については,Kerberos(ケルベロス),OpenID Connect(OIDC)など様々な種類がありますが,SAML(サムル)はこのうちの一つと言えます.
LDAP(エルダップ)も同様に,SSOと関連の深い技術の一つではありますが,ユーザID・パスワードを1つのサーバで管理し,複数のサーバに対してこれらの照会に応答するに留まるため,直接的にSSOを実現する技術という枠組みからは外れます.
SAML認証では,XMLベースのデータ形式を使用して認証情報を安全に交換します.
XMLは,HTMLと似たフォーマットでキーと呼ばれる属性値をタグで定義し,実際の値(バリュー)をタグで囲むようにして記述します.
<user>
<id>staff01</id>
<username>教職員 01</username>
</user>
SAML認証の仕組み(図解)
SAML認証では,ユーザ(クライアント|ブラウザ),IdP(アイデンティティ・プロバイダ),SP(サービス・プロバイダ)の3つがそれぞれ役割分担しています.それぞれの役割および認証フローを以下に図解で示します.

なんだか複雑に感じるかもしれませんが,主な要点としては以下の通りです.
・IdPとSPは直接通信せず,クライアントのブラウザを介して情報をやり取りする.
・ブラウザ(ユーザ)は,はじめにSPにアクセスし,IdPでの認証を済ませる.
IdPでの認証が既に済んでいる場合は,これをスキップしてIdPがブラウザ経由でSPに認証アサーションを送信することで,ユーザはサービスを利用できる.
・SPは,認証アサーションに改ざん・偽造が無いか,正当な発行元かどうかを検証する.
不正の防止
SAMLは,認証基盤を構成する重要な機構の一つですから,不正の防止が特に重要です.
SAMLで想定される不正は,前章でも軽く触れた 認証アサーションの改ざんや偽造,偽のIdPやSPの介入などが挙げられます.これらの不正が悪意ある第三者によって行われると,認証情報の漏えいや偽サービス(攻撃者が用意した罠サイト)への誘導に繋がります.
これらの不正を防止するためには,どのような対策を講じたら良いのでしょうか?
この章では,不正を防止する具体的な技術について紹介します.
メタデータの交換
SAMLによる認証基盤を構築する際には,IdPとSPの間でメタデータを交換する必要があります.例えるなら,名刺交換のような作業です.メタデータには,IdP・SPのURLや認証情報の受け渡し方式・フォーマット,X.509公開鍵(後述します)などの情報が含まれます.
メタデータの交換によって,IdPは信頼できるSP一覧,SPは信頼できるIdP一覧を構築します.
こうすることで,見ず知らずのIdPやSPによる不当な介入や誘導を検知し,防ぐことができます.
X.509公開鍵証明書の検証
SAMLメッセージの送信者(正当なIdP)を確認するためには,X.509公開鍵証明書による検証が有効です.SPは,SAMLメッセージを受信すると,証明書を使って送信者の公開鍵を取得し,その公開鍵を用いてデジタル署名を検証します.このプロセスにより,送信者(IdP)が本物であり,その証明書が有効であることを確認します.
デジタル署名の検証
IdPからSPに対し,認証アサーションが送信される過程で何らかの改ざんが行われた場合に,これを検知するのが認証アサーションに含まれるデジタル署名の検証です.デジタル署名の検証に失敗した場合,何らかの改ざんが行われたと判断できます.
以上の仕組みを用いて,偽のIdP・SPによる成りすまし攻撃や認証アサーションの偽造・改ざんへの対策を行うことが重要です.
具体的な製品
シングルサインオン(SSO)やアイデンティティ管理の実装に役立つオープンソースのSAML製品の代表例としては,以下の4つが挙げられます.
- OpenAM
- Keycloak(キークローク)
- Shibboleth(シボレス)
- SimpleSAMLphp
OpenAM
OpenAMは,Java環境で動作するアイデンティティ管理ソリューションで,シングルサインオン(SSO),アクセス管理,アイデンティティ管理を一元的に提供しており,ユーザー認証や認可の管理を簡単に行えます.
堅牢なシステムであることから,とりわけ企業向けの高セキュリティ環境での利用が多く,LDAPやActive Directoryとの統合も簡単に実現できます.また,柔軟なカスタマイズが可能であり,エンタープライズ規模での導入に適しています.
Keycloak
公式サイト:https://www.keycloak.org/
こちらもOpenAM同様にJava環境で動作するアイデンティティ・アクセス管理ソリューションです.SAMLをはじめOAuth 2.0やOpenID Connect 等にも対応しており,モダンなアプリケーションに必要な認証基盤を簡単に構築できる点が特徴です.
Shibboleth
公式サイト:https://www.shibboleth.net/
こちらは,学術機関(大学・研究機関)等を中心に多くの導入実績があるSAML対応のフェデレーションシステムです.フェデレーション認証の分野で強力なツールであり,組織間でユーザー認証の信頼関係を構築する際に役立ちます.複数のIdPとSPの連携が可能で,大規模なユーザー管理に向いています.これまでに紹介したOpenAM,Keycloak同様にJava環境で動作します.
SimpleSAMLphp
公式サイト:https://simplesamlphp.org/
SimpleSAMLphpは,その名の通りPHP(LAMP)環境で動作することから,一般的なレンタルサーバ(WordPressを稼働できるサーバであれば,概ね適合)でも稼働させることが可能な場合が多いです.設定も比較的簡単にでき,軽量で動作することから,中小規模での運用に向いています.
まとめ
SSOは,企業や組織が利用する多くのサービスへのアクセスを一元的に管理できる利便性の高い認証技術です.今回は,SSOのうち,学術機関等で用いられることの多いSAML認証について紹介しました.この他にも,SSOを実現する技術としては,OpenID Connect(OIDC) + OAtuh 2.0(いわゆるソーシャルログイン),Kerberos 等があります.
さらに,SAML認証を取り入れている代表的なOSS製品として,OpenAM,Keycloak,Shibboleth,SimpleSAMLphpの4つをご紹介しました.
各製品毎に得意とする分野があるだけでなく,SSO自体にもメリット・デメリットがあります.導入にあたっては,コストやリスク,利便性などを総合的に判断して適切なソリューションを選択することが重要です.

