インターネット接続ならIP制限というルール
「インターネットからアクセス可能なアプリはアプリが接続元IPを制限すること。制限できないなら閉域網接続」というルール。
社内向け業務アプリの構築でありがちです。IP制限が絶対でなくてリモートワークができる企業でも、アプリへのアクセスはこのルールになっていることがあります。
アプリケーション開発の立場で、IP制限は何を防いでいるか、本当に防ぎたいものは何か考えてみます。
IP制限が防いでいるもの
IdPで認証するアプリケーションについて考えます。アプリケーションは認証リバプロの後ろにいて認証された通信だけが届きます。
IP制限は何を防いでいるでしょうか。
よくあるのは、このIPは社内ネットワークではないのでアクセス拒否というチェックです。この場合、社内ネットワークに接続できるデバイス以外からの接続を防いでいることになります。
本当に防ぎたいもの
アプリケーションの立場では何を防ぎたいでしょうか
認証はIdPが担当します。認証が済むとアプリケーションはセッションを作成します。
となると、アプリが本当に防ぎたいのは認証したのと別のデバイスからのセッション利用です。例えばセッションcookieが窃取されて攻撃者のデバイスから利用されるケースです。
この場合、IP制限は、別デバイスからのセッション利用を防ぐために、デバイスそのものでなく IPアドレスで代用してチェックしていることになります。
セッションとデバイスを紐づけるDBSC
それならセッションをデバイスが安全に保持する秘密鍵に紐づければよいですね。
アプリは、セッション確立時のセッションとデバイスの紐づけを覚えて、別デバイスからのアクセスをブロックすればよいです。
このための Web API仕様とプロトコル DBSC(Device Bound Session Credentials)が W3Cで策定されています。
DBSCは、cookie窃取によるセッションハイジャックを防ぐために、アプリ側ではセッションとデバイスを紐づけて、デバイス側ではブラウザなどが秘密鍵の保持をアプリに証明する仕組みです。
処理の例です。プロトコルではなくて概念の説明です。
- セッション確立時に、デバイスのブラウザが秘密鍵と公開鍵のペアを作成して公開鍵をアプリに渡します
- アプリは公開鍵をセッションに紐づけます
- 定期的にアプリがランダムなチャレンジ値を送ります
- ブラウザは秘密鍵でチャレンジに署名します
- アプリは公開鍵で署名を検証します
これでデバイスがセッションに紐づく秘密鍵を持っていることが確認できます。
デバイスの秘密鍵は安全に保持されている必要があります。
例えば TPM(Trusted Platform Module)はマザーボード上のセキュリティチップで、秘密鍵の取り出しが極めて困難なので漏洩を抑止できます。そして署名はできるので秘密鍵の所持を証明できます。最近のパソコンでは装備が一般的です。
DBSCは2025年に public working draftが公開された段階ですが Windows版のChrome146で実装されました。今DBSCを実装するなら Chromeの実装に合わせることになるでしょう。アプリ側は DBSC対応ロジックを自作するか、アプリの手前に DBSC処理をターミネートするDBSCリバプロを自作する構成が考えられます。
でも認証のためにIP制限が必要?
今後、DBSCは正式版のW3C勧告となって IP制限に頼らないセッション窃取対策が普及するでしょう。
でも認証に必要だったら結局IP制限は残ります。この点はどうでしょうか。
デバイスが保持する秘密鍵の利用は、認証の方が DBSCより標準化が進んでいます。
W3C勧告となっているWebAuthnにはデバイス固有の device-bound passkeyを認証チェックに利用する構成もあります。実装もリリースされています。例えば WebAuthnと device-bound passkey の組み合わせに、EntraID認証や Cognito認証が対応しています。
認証も必ずしもIP制限に頼らなくてよいと言えます。
まとめ
社内向け業務アプリで、インターネット接続ならIP制限のルールのため構築や運用に手間をかけているアプリ開発者は少なくないと思われます。
このルールが何を防ぎたいかを考えてみましょう。
防ぎたいのが許可していないデバイスからの接続なら IP制限は代用手段にすぎません。IP制限が絶対条件ではない企業、例えばリモートワークができる企業の多くがこれに該当するでしょう。
この場合、WebAuthnによるデバイスを利用した認証や DBSCによるセッションとデバイスの紐づけによって IP制限に頼らず目的が果たせるようになります。
今後、このような実装が普及してゆくと予想します。
関連情報
セッションとデバイスの紐づけを採り上げましたが、トークンについてもデバイスと紐づける提案がされています