今日やること
取り留めのない情報を発信しているAdvent Calendarとなりつつありますが、今日はOpenAMをマジで使う前にやっといたほうがいいことをまとめていきたいと思います。
ソース
主にForgerock社が公開しているガイドからの引用となります。
変更しとくべきデフォルトの設定9連発
OpenAMは比較的簡単に(?)試してもらえるようにと、デフォルトである程度の設定が入った状態でデプロイされます。ただ、このデフォルトの設定の一部を残したまま、本番運用すると酷い目にあいますよ~という内容です。
全部で9つあります。
その1:LDAPに接続するときは専用のユーザーを作成し、ACLをちゃんと設定して、バインドするべし
内蔵のLDAPを使うなんて、言語道断。ちゃんと専用のIDストアを用意して、バインドユーザーを作成する。
その2:Cookieの名前をiPlanetDirectoryProから変更するべし
認証後、こんな名前のCookieが配布されてたら「あ~OpenAMなんだ~~~(脆弱性調べよう~)~~」ってなります。
その3:デプロイメントするURLをopenam
を使うべからず
これも、その2と同じ。
その4:最上位のレルムの管理者をamadmin
とすべからず
管理者のアカウント名が決まっているっていうのはかなりまずいですね。
その5:管理者アカウントを作成し、トレースできるようにしておくようにするべし
監査の観点からすべきでしょうね。
その6:認証失敗時のエラーメッセージを統一すべし
openam.auth.soap.rest.generic.authentication.exception
をtrue
に設定したらよいとのこと。
その7:デモユーザーは消すべき
デフォルトでdemo
というIDのユーザーが作成されています。消しましょう。
その8:gotoパラメータに制限をかけるべし
Open Redirectorを防ごうねっという意味でしょう。Validation Serviceという、有効なgotoパラメータをリスト化して、評価する仕組みがOpenAMにはありますので、設定しましょう。Top Level Realms -> Services からValidation Serviceを追加できます。
その9:モジュールベースの認証はOFFにすべし
サインイン画面にmodule=DataStore
みたいなQuery Parameterをリクエストすると、認証のチェーン設定を無視して、IDとパスワードだけで認証出来ちゃいます(⋈◍>◡<◍)。✧♡
結構危ない設定がありますね。(;´Д`A
特にインターネットに公開しているサイトでOpenAMを使っている場合、どれか1つでもやってないことがあったら、設定を変更した方がいいレベルですね。先ほども書きましたが、OpenAMを使っているってことが判明するだけでも攻撃の対象になりうるかと思います。
ネットワークのデザイン
わたしのとこみたいに従業員向けのIAMということであれば、最初からはあまり複雑に考えなくてもいいのかなぁ~?と思ってはいます。しかし、IAMをインターネットに公開する場合は、ここに書いてあることについて、考える必要があるかと思います。
1枚の画像をForgerockのAdministration Guideから参照します。
IAMはその特性上、インターネットに公開された場合、ありとあらゆる攻撃にさらされると思います。なので、本当に外部のユーザーやデバイス、サービスが利用するエンドポイントだけをホワイトリスト形式で公開するのが良いデザインであるというお話です。解決方法として挙げられているのが、上述のとおり、DMZにリバースプロキシーを配置して、エンドポイントの公開を行うという方式です。
確かに、外部のエンティティからすれば、OpenAMの管理画面にアクセスするエンドポイントは不要ですし、ドメイン内のID連携をおこなうPolicy Agent系のエンドポイントも不要ですね。せいぜい、Federation用のエンドポイントと認証系のエンドポイントぐらいあれば十分でしょう。
セキュアコミュニケーション
他にも通信の保護という観点から以下のことを設定するべきと言われています。
1. HTTPS、LDAPSをつかうべし
「常時暗号化通信」って時代ですからね~。あたりまえでしょう。
2. 発行するCookieはSecure Cookieにすべし
** Configure -> Server Defaults -> Security -> Cookie**から設定できます。
3. 発行するDomain Cookieはサブドメインとすべし
ん~?ドメイン内に悪人が居るっていうことを懸念しての注意書きかな?Policy Agentを使わなくて、全部SAMLとかOpenID Connectでやる場合は無視してもいいかと思っていますが...。
4. デフォルトのカギはゴミ箱に捨てるべし
署名や暗号に使っているキーストアに入っているデフォルトのカギは捨てて、ちゃんと作りましょう。keytool
の出番ですね。
5. SAMLのメッセージは暗号化すべし
SAMLは詳しくないのですが、署名だけでは足りないってことを言ってますね。理由がよくわからないですねぇ。
〆
今日は調べもの中心でした。
わたしの会社のIAMもOpenAMで作るときはこれらの設定をやってからリリースしたいと思いました(小並感
明日はなにしよう~?
ばい!