概要
- SAML は学術界と企業ITで普及した認証プロトコル
- 複雑性とXML依存 が最大の欠点
- セキュリティ脆弱性 が解消されず、時代遅れに
- SSO業界の発展 を支えたが、現代の要件に合わない
- OpenID Connect (OIDC) など新世代プロトコルへの移行が推奨される
SAMLの誕生と普及
- SAML(Security Assertion Markup Language) は2002年、OASISの技術委員会で策定
- XMLベースの認証プロトコル として、学術界・企業IT部門で広く利用
- Webサービスの普及 とともに、SSO(シングルサインオン)業界の基盤となった
- 主要な認証プロバイダー (Ping Identity, OneLogin, Okta, Duo Securityなど)はSAMLを採用
- 学術界発のプロジェクト (CAS, Shibboleth, ADFS, simpleSAMLphpなど)もSAMLをサポート
SAMLの致命的な欠陥
- XML署名検証の複雑さ が最大の弱点
- XML Signature Wrapping(XSW)攻撃など、脆弱性が多数報告
- XML自体のセキュリティ問題(XXE, エンティティ拡張, DTD, XPath/XQueryインジェクション等)
- カノニカライゼーション(C14N) の難しさ
- XMLの表現が一致しないと署名検証が失敗
- パーサ差異やラウンドトリップバグにより攻撃が可能
- エンベロープ署名 の設計ミス
- 署名要素がデータ内部に埋め込まれることで、改ざんやバイパスが容易
- 「キッチンシンク」設計
- 仕様が肥大化し、現場で使われるのはごく一部
- ほとんどの実装が仕様の90%以上を無視
- オシフィケーション(硬直化)
- 時代遅れの設計思想
- HTTP/TLSや現代的なWeb通信への適応が不十分
- 柔軟性がバグの温床となり、保守性が低下
SAMLと現代プロトコルの比較
- SAMLはXML依存、OIDCはJSON/JWTを活用
- XMLはタグ・属性・名前空間など複雑で、実装・解析が難解
- JSONはシンプルでセキュリティリスクが低い
- OIDCはHTTP前提、SAMLはトランスポート非依存
- OIDCはHTTPSにより暗号化・信頼性を担保
- SAMLは柔軟性の裏返しで実装の標準化が難しい
- OIDCはアジャイル的進化、SAMLはウォーターフォール的設計
- OIDCは実用ニーズに応じて仕様が追加され拡張性が高い
- SAMLは設計時点で全てを盛り込み、時代の変化に追従しづらい
SAMLの今後と推奨アクション
- SAMLはもはや時代遅れ、新規導入は推奨されない
- OpenID Connect (OIDC) や OAuth 2.0 など、現代の要件に合ったプロトコルへの移行が望ましい
- 既存SAMLシステムの運用 は最小限にとどめ、セキュリティパッチの適用・監査を徹底
- 新規開発・導入時はOIDC/JWTベース を標準とすることが推奨
まとめ
- SAMLはSSO業界の発展に貢献 したが、 複雑性 と セキュリティ課題 により限界
- OpenID Connectなど現代的なプロトコル への移行が、セキュリティ・運用性の両面から最適解
SAMLは、記事が言ってるよりもひどいよ。署名が実際に何をサインしてるのかを確認しなきゃいけない問題とかね。でも未来には期待してるよ。一般的なXMLパースみたいな多機能ライブラリに頼るんじゃなくて、SAMLのサブセットと上位約10社のダイアレクトだけをサポートすればいいと思う。極端なニッチプロバイダーは、その都度必要に応じて追加すればいいし、取引規模が大きければやる価値があるよね。