My Home NW Lab

逸般の誤家庭のネットワーク

BIG-IP Forward Proxy構成でのMicrosoft 365 (MS365)のテナント制限

目次

概要

SSLO (SSL Orchestrator)モジュールの v17.0.0.1-10.1 以前では、BIG-IP Forward Proxy構成でMicrosoft 365 (MS365)のテナント制限は標準機能にはありませんでした。 そのため、iRulesによるコード拡張での実装が必要になります。

SSLOの v17.0.0.1-10.1 からはServiceの一つとして実装されたため、下記の記事を参考にiRulesによる実装と適宜使い分けてください。

myhomenwlab.hatenablog.com

本記事では下記のSSLOモジュールを利用した実装 (SSLO実装)をベースにしております。

myhomenwlab.hatenablog.com

バージョン情報

本記事は下記のバージョンで検証を行っております。

  • F5 BIG-IP Virtual Edition Version 16.1.2
    BIG-IPのモジュールは、LTM, APM, SSLOを有効化しております。

  • SSL Orchestrator Package Version 16.1.0
    SSLOはiApps LXのパッケージとして提供されているため、個別のバージョン情報があります。

Microsoft 365のテナント制限の概要

Microsoft 365は多数のテナントを収容していますが、 Microsoft 365のログイン画面はどのテナントにも共通しています。
そのため、単にForward ProxyでMicrosoft 365サービスを許可対象としてるだけでは、 悪意あるものがシステム管理者が把握していないテナントにログインして、情報の持ち出しを行えてしまう可能性があります。

その対策として、Microsoft 365に接続する際に、接続許可対象のテナントをHTTP Headerに書き加えて、 管理外のテナントへの接続を防ぐのがテナント制限になります。

Microsoft 365のテナント制限

BIG-IPでのテナント制限の要素

  • MS365のドメインSSL復号化の対象にします。 HTTP Headerの情報を書き換えるため、MS365のドメインSSL復号化"除外"にしてしまうと暗号化通信を紐解いて書き換えが行えなくなります。

  • SSL Forward Proxy向けVirtual Serverに、HTTP Headerを書き換えるiRulesを適用します。

  • BIG-IPがSSL通信を紐解く挙動となるため、Client (Web Browser)にはBIG-IPのSSL復号化用の証明書を信頼する設定が必要になります。

BIG-IPでのMicrosoft 365のドメインSSL復号化

SSLOのGuided Configurationで設定をデプロイすると、基本的にはSSL復号化を行う状態となります。 そして、SSL復号化"除外"を行いたい対象を個別に指定するイメージとなります。
そのため、設定を個別に調整していなければ、Microsoft 365関連ドメインSSL復号化の対象になります。

補足情報ですが、デフォルトでSSL復号化"除外"の対象になっているのは URL Categories: Pinners になります。
URL Categories: Pinners の設定は、SSL復号化してしまうと通信影響が出そうなメジャーな通信先がリストされています。


下記はSSLOのGuided ConfigurationのSecurity Policyの設定画面です。 SSL Proxy Actionで Bypass (SSL復号化"除外")として設定されているのが URL Categories: Pinners だと判断できます。
また、URL Categories: Pinners 以外の通信 (All Traffic)は、Intercept (SSL復号化)として設定されています。

SSLO Guided ConfigurationのSecurity Policy

下記は URL Categories: Pinners の設定画面です。デフォルトではMicrosoft 365関連ドメインは含まれてません。

URL Categories: Pinners

テナント情報の確認

Microsoft Azure PortalDashboardで情報を確認できます。

テナント情報の確認

テナント制限を行うiRules

iRulesによるコード拡張を行うと、実装次第でアクセス制御をバイパスされる可能性があるので、本記事のコードはあくまでもサンプルとして扱ってください。

iRulesのサンプル コード

  • iRules名: Rule_MS365_Tenant_Restriction (適宜修正してください。)

    設定箇所 例示用の設定値 備考
    Restrict-Access-To-Tenants samplecorp.test テナントに紐付くドメインを指定します。
    Restrict-Access-Context XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX テナントに紐付く Tenant ID を指定します。
   when HTTP_REQUEST {
       set domain [string tolower [HTTP::host]]

       if { $domain equals "login.microsoftonline.com"
            || $domain equals "login.microsoft.com"
            || $domain equals "login.windows.net" } {

           HTTP::header remove Restrict-Access-To-Tenants
           HTTP::header remove Restrict-Access-Context

           HTTP::header replace Restrict-Access-To-Tenants "samplecorp.test"
           HTTP::header replace Restrict-Access-Context "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
       }
   }

Microsoft 365のテナント制限のサンプル コード

要件によっては、各グループ会社や、本番環境と検証環境で接続先のテナントを分けたい場合が考えられます。 その場合は、接続元の情報をハード コーディングしたり、Data Groupの情報を参照する実装方法が想定されます。

実装時の備忘録

  • HTTP::header コマンドの remove で既にHTTP Headerが付与されている場合は削除しております。 攻撃者が恣意的に許可対象のドメインを付与している場合は、アクセス制御をバイパスされる可能性があるためです。

  • HTTP Headerの書き換え対象の通信を、Micorsoft 365のドメインに限定しております。
    対象を限定しないとHTTP Headerが常に書き換えられてしまうため、最悪の場合は悪意あるWebサイトの運営者に「どの会社からの通信か?」を特定される恐れがあります。
    そうなってしまうと、セキュリティ意識の低い実装をしている会社だと認識されて、攻撃対象に含まれる可能性があるかもしれません。

  • SSL Forward Proxy向けVirtual Serverでドメイン名 (FQDN)の情報を取得するのに HTTP::host コマンドを使用しています。 HTTPS通信で HTTP::uri コマンドを使用するとPath部分のみしか取得できなかったためです。

SSL Forward Proxy向けVirtual ServerへのiRulesの適用

SSL Forward Proxy向けのVirtual Serverに適用します。
筆者の環境の例だと、 sslo_DEMO-in-t-4 (末尾 -in-t-4) のVirtual ServerがSSL Forward Proxy向けになります。

SSL Forward Proxy向けVirtual ServerへのiRulesの適用 (1/2)
SSL Forward Proxy向けVirtual ServerへのiRulesの適用 (2/2)

BIG-IP Forward Proxyの証明書の信頼設定

Forward Proxyは中間者攻撃のようにSSL通信を紐解くため、 Client (Web Browser)には接続先(例: Microsoft 365)ではなく、Forward ProxyのSSL復号化用の証明書が表示されます。

ドメインに画面遷移をする度に証明書の警告が出てしまうため、Forward Proxyの証明書を信頼させます。

筆者の経験談にはなりますが、 証明書の警告が出る度にWeb Browser側で無視しようとした場合は、 別ドメインのコンテンツを大量に読み込むようなWebサイトで、画面上のパーツが表示されないように見受けられるケースがありました。


SSL復号化用の証明書のファイルですが、 SSLOのGuided Configurationを用いてる場合は、SSL Configuration 画面の Client-side SSL 項目の Certificate Key Chain 設定で指定されている証明書が該当します。

SSLO Guided ConfigurationのSSL復号化用の証明書の指定

実際の証明書ファイルは、メニュー: System > Certificate Management > Traffic Certificate Management > SSL Certificate List に存在します。 筆者の環境の場合は default.crt が該当するので Export... ボタンから証明書をダウンロードします。

SSL復号化用の証明書ファイルのダウンロード

SSL復号化用の証明書ファイルをダウンロードしたら、適宜証明書を信頼させます。

証明書の信頼設定

テナント制限の確認

Microsoft 365のログイン画面で、許可されていないテナントのアカウントでログインしようとすると、下記のような画面が表示されてログインできないのが確認できます。

テナント制限の確認

参考情報

コミュニティの下記の情報が参考になります。ICAP連携をしている点が、筆者の記事と大きく異なります。

community.f5.com