3 WebLogicドメインのセキュリティの構成

Oracle WebLogic Server環境用のセキュリティの構成は、WebLogic Serverのセキュア・インストールの作成から始めます。これには、証明書の取得および格納、ユーザー・アカウントの保護、ドメインが実行されるネットワークの保護など、ドメインが実行される環境に適したセキュリティ構成オプションの選択も含まれます。

この章の内容は次のとおりです。

本番環境で保護する必要があるWebLogic Serverのすべてのコンポーネントと、セキュアなドメインの構成やWebLogic Serverで使用されるネットワーク、ファイルおよびデータベースの保護のために推奨される特定のタスクを含む完全なチェックリストは、『Oracle WebLogic Server本番環境の保護』WebLogic Serverのロック・ダウンを参照してください。

WebLogic Serverのセキュア・インストールの実行

セキュア・インストールの実行のステップでは、WebLogic Serverがインストールされているホスト・マシンの保護、そのホストへのアクセスを認可されたユーザーのみに制限すること、インストールの完了直後のクリティカル・パッチ・アップデートのインストールを行います。

WebLogic Serverを本番環境にインストールする場合、次の項で説明するガイドラインを強くお薦めします。

WebLogic Serverのインストール前

WebLogic Serverのインストール・プログラムを開始する前に、次のタスクを実行します。

  • My Oracle Supportアカウントを作成し、WebLogic Serverインストールをオラクル社に登録して、セキュリティの更新を自動的に受け取れるようにします。http://www.oracle.com/support/index.htmlにアクセスしてください。

  • 認可されたユーザーのみにアクセス権を制限して、ホスト・マシン、オペレーティング・システムおよびファイル・システムを保護します。たとえば:

    • 認可されていないオペレーティング・システム・ユーザーが、マシンおよびネットワーク接続を使用できないように、ハードウェアを安全な場所に設置します。

    • 最新のオペレーティング・システム・パッチとセキュリティ更新をホスト・マシンに必ず適用します。

      ノート:

      新しいパッチが入手できるようになったら、すぐにダウンロードしてインストールする必要があります。

  • オペレーティング・システムで提供されるネットワーク・サービスとファイル・システムを保護して、認可されないアクセスを防ぎます。たとえば、すべてのファイル・システム共有を保護するようにします。

  • オペレーティング・システムのファイル・アクセス権限を設定して、WebLogic Serverによって使用または管理されるディスクに格納されているデータ(セキュリティLDAPデータベースや、キーストアが作成されて管理されるディレクトリなど)へのアクセスを制限します。

  • ホスト・マシンのユーザー・アカウント数を制限します。グループを作成しして、次のユーザー・アカウントのみを含めます。

    1. WebLogic Serverをインストールするユーザーのみ

    2. WebLogicドメインを作成し、ノード・マネージャを使用して、管理サーバーと各管理対象サーバー・インスタンスをドメインで起動するユーザー

    これらのユーザー・アカウントの権限を次のディレクトリのみに制限します。

    • Oracleホーム — ホスト・コンピュータ上のすべてのOracle Fusion Middleware製品に対して作成されるルート・ディレクトリ

    • WebLogicホーム — WebLogic Serverインストールのルート・ディレクトリ

    • ドメイン・ホーム — WebLogicドメインのルート・ディレクトリ

    ノート:

    一部のプロセスは、デフォルトではUnixプラットフォームの/tmpのような一時ディレクトリへのアクセス権が必要です。ユーザー・アカウントの権限がOracleホーム、WebLogicホームおよびWebLogicドメイン・ディレクトリのみに制限される場合、ユーザーは自らがアクセス権を持つディレクトリを指すように環境変数(TEMPまたはTMPなど)を変更する必要があります。

  • ホスト・マシンのすべてのWebサーバーが、権限のないユーザーとしてのみ実行するようにします。決してrootとして実行してはなりません。

  • ソフトウェア開発ツールまたはサンプル・ソフトウェアがインストールされていないことを確認します。

  • 評価の高い侵入検知システム(IDS)など、オペレーティング・システムを保護する追加ソフトウェアの使用を検討します。

『Oracle WebLogic Server本番環境の保護』ホスト環境の保護を参照してください。

インストール・プログラムの実行中

インストール中に、サンプル・アプリケーション・コンポーネントをインストールしないようにしてください。

インストールの完了直後

  • Derby DBMSデータベースを削除します。WebLogic Serverにバンドルされているこのデータベースは、サンプル・アプリケーションやサンプル・コードでデモンストレーション・データベースとして使用されます。Derby DBMSはWL_HOME/common/derbyディレクトリにあります。

  • 次のサイトのクリティカル・パッチ・アップデート、セキュリティ・アラートおよび掲示板のページにアクセスして、WebLogic Serverのセキュリティの注意事項を確認してください:

    https://www.oracle.com/security-alerts/

『Oracle WebLogic Server本番環境の保護』の次のトピックを参照してください:

本番用のWebLogicドメインの作成

本番で使用するWebLogicドメインを作成するには、他のWebLogicドメインと相互運用するかどうかや、ドメインへのアクセス権を持つユーザーのアカウントを保護するのに最適かどうかなど、ドメインが実行される環境を検討します。

本番環境で使用するためにWebLogicドメインを構成する際に、構成ウィザードなどのツール、pack/unpackコマンド、WLSTまたはWebLogic Server管理コンソールを使用するときには、次のことを考慮します。

  • ドメインが本番モードまたは保護された本番モードのいずれかで実行されるように構成します。セキュリティおよびロギングに関するデフォルトの設定は、ドメイン・モードにより決定されます。

    本番モードでは、アプリケーションのデプロイおよび管理サーバーの起動にはユーザー名とパスワードが必要になるなど、セキュリティ構成が比較的厳しくなっています。完全なWebLogicドメインまたはリモート・マシン上の管理対象サーバー・ドメイン・ディレクトリで使用されるドメインのサブセットを、unpackコマンドを使用して作成している場合は、-server_start_mode=prodパラメータを使用して本番モードを構成します。

    保護された本番モードでは、認可とロールのマッピング・ポリシーが制限的であるほど本番環境がセキュアであり、ドメインのセキュアでない構成設定に関する警告がログに記録されます。保護された本番モードを有効にするには、ドメインが本番モードである必要があります。WebLogic Server管理コンソール、Fusion Middleware ControlまたはWLST (オフラインおよびオンライン)を使用して、保護された本番モードを有効にできます。これらのツールを使用して保護された本番モードを有効にする方法の詳細は、次の各トピックを参照してください。
    • 管理コンソールを使用した保護された本番モードおよび関連のセキュリティ設定の有効化の詳細は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプ本番ドメインの保護に関する項を参照してください。

    • ドメインの作成時にsetOption WLSTオフライン・コマンドを使用し、ServerStartMode引数をsecure設定して保護された本番モードでドメインを作成します。『WebLogic Server WLSTコマンド・リファレンス』setOptionに関する項を参照してください。

    • ドメイン環境を本番モードから保護された本番モードに変更する方法を学ぶには、『WebLogic Scripting Toolの理解』WLSTオンラインを使用した既存のWebLogicドメインの更新に関する項を参照してください。

    ノート:

    ドメインのモードは、開発から本番、本番から開発、本番から保護された本番モードに変更できます。しかし、保護された本番モードを有効にするには、ドメインが本番モードである必要があることに留意してください。

    セキュリティ要件が厳しい本番環境では、(開発モードのドメインを本番モードに変更するのではなく)ドメインの作成時に本番ドメイン・モードを設定することをお薦めします。ドメイン・モードの変更方法の詳細は、『Oracle WebLogic Serverドメイン構成の理解』開発モードと本番モードに関する項を参照してください。
  • ドメインが他のWebLogicドメインと相互運用する場合、または将来にその予定がある場合は、注意してリソース名を選択します。多くのリソース名はドメインの作成時に確定されます。クロス・ドメイン・セキュリティ、トランザクションおよびメッセージングを使用するときは、リソース名に厳しい要件を適用する必要があります。

    『Oracle WebLogic Server JTAアプリケーションの開発』トランザクション通信の要件に関する項を参照してください。

  • WLSTを使用してドメインを作成するとき、次のようなパスワードが必要なエンティティを構成するために、暗号化されていないパスワードをコマンドに入力しないでください。

    • ドメイン管理者

    • ノード・マネージャ・ユーザー

    • データベース・ユーザー

    • JKSおよびPKCS12キーストア(キーストアの作成時とWebLogic Serverでのキーストアの構成時)

    • ウォレット

    WLSTコマンドで暗号化されていないパスワードを指定するのはセキュリティ・リスクです。その他のユーザーがモニター画面から簡単に見ることができます。また、それらのコマンドの実行をログするプロセスのリストにそのパスワードが表示されます。したがって、コマンドにはパスワードを指定しないでください。コマンドが実行されるとき、ドメインの構成を完了するために必要なパスワードがあれば、WLSTによって自動的にプロンプトが表示されます。

ドメイン作成後の保護

WebLogicドメインの作成後には、適切なドメイン・モードの選択、内部アプリケーションへのアクセスの制限、パスワード検証プロバイダの構成など、整合性を確保するための主要なステップがいくつか残っています。作成後にドメインを保護する場合は、次のステップをお薦めします。
  1. ドメインに対して保護された本番モードを有効にして、本番環境を保護します。セキュア本番モードを有効にするには、ドメインは本番モードである必要があります。このモードでは、セキュアな値が本番モードのデフォルト値に優先し、デフォルトの認可ポリシーおよびセキュリティ・ポリシーがより限定的になります。WebLogic Serverではすべてのセキュリティ設定が検証され、セキュアでない設定の場合は警告がログに記録されるため、非常にセキュアな本番環境となります。ドメインのモードを保護された本番モードに変更する方法を学ぶには、Oracle WebLogic Server管理コンソール・オンライン・ヘルプ本番ドメインの保護に関する項を参照してください。
  2. 構成設定またはシステム・プロパティのいずれかを使用して未使用の内部アプリケーションを無効にすることで、内部アプリケーションへのアクセスを制限します。ドメインに対して管理ポートを有効にし、管理ポートでの内部アプリケーションへの外部アクセスを防止するようファイアウォールを構成します。保護された本番モードでは、デフォルトで管理ポートが有効になっています。内部アプリケーションを無効にし、内部アプリケーションへのアクセスをブロックする方法の詳細は、『Oracle WebLogic Server本番環境の保護』未使用の内部アプリケーションの無効化および内部アプリケーションへのアクセスを防ぐためのファイアウォールの構成を参照してください。
  3. パスワード検証プロバイダを構成して、パスワード作成ルールを管理および適用します。パスワード検証プロバイダは、いくつかのWebLogic認証プロバイダで作動するように構成されています。
  4. セキュリティ・レルムにユーザーを作成または追加するときに、ユーザー・アカウントで「ユーザーのロックアウト」オプションの保護が最大に設定されていることを確認します。「ユーザーのロックアウト」の構成はレルム単位で定義されることに注意してください。したがって、デフォルトの「ユーザーのロックアウト」設定がニーズに合わない場合、新しいセキュリティ・レルムを作成するたびに設定のカスタマイズが必要になることがあります。「ユーザー・アカウントの保護」および「WebLogic Serverでのパスワードの保護の仕組み」を参照してください。

    ドメインが保護された本番モードで実行されている場合、WebLogic Serverでは、ユーザー・ロックアウトがデフォルト値より小さい値に構成されていると、警告がログに記録されます。

  5. 管理サーバーと、複数のマシンに分散する管理対象サーバー・インスタンスの開始、停止および再起動を行うようにノード・マネージャを構成した場合、ノード・マネージャのセキュリティを適切に構成してください。

    Javaノード・マネージャ(本番環境で推奨)を使用している場合は、『Oracle WebLogic Serverノード・マネージャの管理』Javaベースのノード・マネージャ・セキュリティの構成に関する項を参照してください。

    セキュリティ要件がそれほど厳しくない環境に適した、スクリプト・ノード・マネージャを使用している場合は、『Oracle WebLogic Serverノード・マネージャの管理』ステップ2のノード・マネージャ・セキュリティの構成に関する項を参照してください。

  6. 監査を有効にします。こうすると、システムで発生するイベントやその他のアクティビティに関する情報を自動的に収集して格納できます。監査には次のいずれかの方法があります。
    • 構成監査 — 有効になっている場合、構成管理サーバーが、ユーザーがドメイン内のリソースの構成を変更したときやドメイン内のリソースの管理操作を呼び出したときに、ログ・メッセージの送信と監査イベントの生成を行います。

    • WebLogic監査プロバイダ — リクエストの操作とそれらのリクエストの結果に関する情報を、否認防止を目的として収集、格納、および配布するオプションのセキュリティ・プロバイダ。構成監査が有効になっているとき、WebLogic監査プロバイダも構成監査イベントをロギングします。

    監査によってパフォーマンス・オーバーヘッドが発生する可能性があるため、その考慮も必要です。ただし、監査の構成を調整すると、このようなオーバーヘッドを最小限に抑えることができます。監査を有効にするときは、監査ログに使用できる十分なディスク領域があることを確認します。「WebLogic監査プロバイダの構成」を参照してください。

    ノート:

    保護された本番モードがドメインに対して有効になっている場合、WebLogic Serverでは、監査プロバイダが構成されていないと、警告がログに記録されます。SecureModeMBeanのWarnOnAuditing属性を使用して、監査が有効になっていな場合に警告をログに記録するかどうかを指定できます。
  7. JVMプラットフォームMBeanサーバーにリモートからアクセスできないようにしてください。「JMXテクノロジを使用するモニタリングと管理」(http://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html)を参照してください。
  8. Federal Information Processing Standards (FIPS) 140-2に準拠する要件がある場合は、FIPSモードの有効化に説明されている該当の手順を実行します。
  9. 完了メッセージ・タイムアウトの構成設定がシステムに適していることを確認します。『Oracle WebLogic Serverサーバー環境の管理』「ネットワーク・リソースの構成」を参照してください。
  10. IDと信頼を保持するために使用されるキーストアを作成して構成します。つまり、ID証明書を含むキーストアと信頼性のある認証局(CA)証明書を含むキーストアです。「キーストアの構成」を参照してください。

    次の項目を確認するように、証明書の検証と失効チェックを構成します。

    • 証明書チェーンの各証明書が認証局によって発行されていること。SSL証明書の検証を参照してください。

    • WebLogic Serverが検証する各証明書の失効ステータスが最新であること。X.509証明書失効チェックを参照してください。

  11. ホスト名検証を構成します。SSL接続を行うとき、ホスト名検証が、クライアントの接続先URLのホスト名と、サーバーが返送するデジタル証明書のホスト名が一致していることを確認します。ホスト名検証の使用方法を参照してください。
    ドメインが保護された本番モードで実行されている場合、WebLogic Serverでは、ホスト名検証が無効になっていると、警告がログに記録されます。ホスト名検証を有効にするには、Oracle WebLogic Server管理コンソール・オンライン・ヘルプカスタム・ホスト名検証の構成に関する項を参照してください。
  12. 管理ポート、ネットワーク・チャネル、データベース接続、LDAPサーバー接続、保護する必要がある通信を処理するその他のリソースについて、SSLを構成します。特に、ドメインのリモート・サーバー・インスタンスへの接続は必ずSSLで保護してください。どのコンポーネントで一方向または双方向SSLを構成する必要があるかは、本番環境の全体的なトポロジーによって異なります。次の項を参照してください。

    表3-1 SSL構成に関するトピック

    項目 次のトピックを参照してください

    基本のWebLogicドメインで通信を保護するためのSSL使用方法の概要

    『Oracle WebLogic Serverセキュリティの理解』Secure Sockets Layer (SSL)に関する項

    基本のWebLogicドメインで一方向SSLを使用する状況と双方向SSLを使用する状況

    『Oracle WebLogic Serverセキュリティの理解』一方向/双方向SSL認証に関する項

    基本のWebLogicドメインでSSLを構成するステップ

    SSLの設定: 主なステップ

    ドメイン管理サーバーとのセキュアな通信のための管理ポートの構成

    『Oracle WebLogic Serverサーバー環境の管理』管理ポートと管理チャネルに関する項

    データベース通信の保護

    『Oracle WebLogic Server JDBCデータ・ソースの管理』データ・ソース・セキュリティの理解に関する項

    WebLogic ServerでのSSL構成のベスト・プラクティス

    「セクション2. セキュリティのベスト・プラクティス」、ドキュメントID 1074055.1、My Oracle Support (https://support.oracle.com/)

    ノート:

    次の点に注意してください。

    • デフォルトでは、WebLogic Serverは一方向のSSL認証用に構成されますが、SSLポートは無効化されています。本番ドメインのすべてのサーバー・インスタンスでSSLポートを有効にするように強くお薦めします。

    • WebLogic Serverで提供される、デモ用のデジタル証明書、秘密キーおよび信頼性のあるCA証明書は、決して本番環境では使用しないでください。

    • 保護された本番モードでは、SSL構成がセキュアでないと、WebLogic Serverで警告がログに記録されます。SecureModeMBeanに含まれるWarnOnInsecureSSL属性を使用して、SSL構成がセキュアでない場合に警告をログに記録するかどうかを指定できます。

  13. サービス拒否攻撃を防ぐために、外部チャネルに対してリクエストのサイズおよび時間を制限します。『Oracle WebLogic Serverのパフォーマンスのチューニング』サービス妨害攻撃の可能性の低減に関する項を参照してください。
  14. 複数の認証プロバイダを使用する場合は、JAAS制御フラグを適切に設定します。「複数の認証プロバイダの使用」を参照してください。
  15. デフォルトのWebLogic Serverセキュリティ・ロールにユーザーおよびグループを正しく割り当てたことを確認します。『Oracle WebLogic Serverロールおよびポリシーによるリソースの保護』「ユーザー、グループ、セキュリティ・ロール」を参照してください。
  16. ドメイン内の未処理のセキュリティ検証の問題については、セキュリティ警告レポートを確認します。『Oracle WebLogic Server本番環境の保護』潜在的なセキュリティの問題の確認に関する項を参照してください。

秘密キー、デジタル証明書、信頼性のある認証局からの証明書の取得

WebLogic Server環境用の秘密キー、デジタル証明書、信頼性のあるCA証明書を取得するための選択肢は複数あります。秘密キーおよびデジタル証明書を信頼できる認証局から取得することをお薦めします。これらの項目を選択する際には、次の考慮事項に注意してください。
  • 本番環境の場合、EntrustやSymantec Corporationなどの信頼できる認証局からのみ秘密キーやデジタル証明書を取得することを強くお薦めします。「本番環境のための証明書の取得と格納」を参照してください。

  • WebLogic Serverで提供されるデジタル証明書、秘密キー、信頼性のあるCA証明書を使用できるのは開発環境のみです。keytoolまたはCertGenユーティリティを使用して、自己署名証明書を生成することもできます。「開発環境でのキーストアと証明書の使用」を参照してください。

秘密キー、デジタル証明書、信頼性のある認証局からの証明書の格納

秘密キー、デジタル証明書、および信頼できるCA証明書を取得した後は、それらを格納し、WebLogic Serverでそれらを使用してIDを検索および確認できるようにする必要があります。秘密キー、秘密キーに関連付けられたデジタル証明書、および信頼できるCA証明書は、キーストアに格納されます。 続いて、WebLogic Serverで当該キーストアを構成する必要があります。

項目 次のトピックを参照してください

キーストアの作成

キーストアの作成

WebLogic Serverで使用されるキーストアの構成

「WebLogic Serverでのキーストアの構成」

キーストアを作成してキーと証明書をその中に保存するためのkeytoolユーティリティの使用ステップの例

キーストアの作成: サンプル

キーストアに含まれる証明書の表示

キーストアの内容の表示

まもなく期限切れになる証明書の更新

期限切れになる証明書の置換

証明書の有効期限に関するリマインダの設定

証明書期限切れ通知の設定

ユーザー・アカウントの保護

WebLogic Serverには、ユーザー・アカウントを侵入者から保護するための一連の構成オプションが用意されています。デフォルト・セキュリティ構成では、これらのオプションは最高の保護レベルに設定されています。 WebLogic Server管理コンソールで、「構成」「ユーザーのロックアウト」ページ(セキュリティ・レルムごとにある)を使用してこれらのオプションを変更できます。

システム管理者は、すべての構成オプションを無効にしたり、ユーザー・アカウントがロックされるまでのログイン試行回数を増やしたり、ユーザー・アカウントがロックされるまでの無効なログイン試行期間を延ばしたり、ユーザー・アカウントのロック時間を変更したりできます。これらの構成オプションを変更すると、セキュリティ・レベルが低下して攻撃を受けやすくなることに注意してください。Oracle WebLogic Server管理コンソール・オンライン・ヘルプユーザー・ロックアウト属性の設定に関する項を参照してください。

ノート:

「ユーザーのロックアウト」オプションは、デフォルト・セキュリティ・レルムとそのすべてのセキュリティ・プロバイダに適用されます。「ユーザーのロックアウト」は、すべてのセキュリティ・レルムで作動します。構成されているすべてのプロバイダ(カスタム・プロバイダも含む)に対応し、デフォルトで有効になっています。

独自のメカニズムでユーザー・アカウントを保護する認証プロバイダを使用する場合、セキュリティ・レルムでの「ユーザーのロックアウト」を無効にしても問題ないかどうかを検討してください。他の認証プロバイダがセキュリティ・レルムで構成される可能性があるためです。

ユーザー・アカウントがロックされたためそのユーザー・アカウントを削除して、同じ名前とパスワードを持つ別のユーザー・アカウントを追加しても、「ユーザーのロック・アウト」構成オプションはリセットされません。

ロックされたユーザー・アカウントの解除については、Oracle WebLogic Server管理コンソール・オンライン・ヘルプユーザー・アカウントのロック解除に関する項を参照してください。ロックされたユーザー・アカウントに対するロックの解除は、WebLogic Server管理コンソールや、UserLockoutManagerRuntimeMBeanclearLockout属性を介して行うことができます。

接続フィルタの使用

接続フィルタを使用すると、ネットワーク・レベルでアクセスを拒否できます。接続フィルタは、個々のサーバー、サーバー・クラスタ、または内部ネットワーク(イントラネット)にあるサーバー・リソースの保護に使用できます。 たとえば、ユーザーの企業のネットワーク外部からの非SSL接続を拒否できます。ネットワーク接続フィルタは、プロトコル、IPアドレス、およびDNSノード名に基づいてフィルタ処理するよう構成できる点において一種のファイアウォールです。

接続フィルタは、管理ポートを使用する場合に特に便利です。ネットワーク・ファイアウォール構成によっては、接続フィルタを使用して管理アクセスをさらに制限できる場合もあります。一般的には、管理ポートへのアクセスをWebLogicドメイン内のサーバーやマシンのみに制限するために使用されることが考えられます。攻撃者がファイアウォールの内側にあるマシンにアクセスできても、それが許可されたマシンでない限り、管理操作を実行することはできません。

WebLogic Serverでは、weblogic.security.net.ConnectionFilterImplというデフォルトの接続フィルタが用意されています。この接続フィルタは、すべての着信接続を受け入れます。また、サーバーは、このクラスが提供する静的ファクトリ・メソッドを使うことで、現在の接続フィルタを取得できます。アクセスを拒否するようにこの接続フィルタを構成するには、WebLogic Server管理コンソールで接続フィルタ・ルールを入力してください。

また、weblogic.security.netパッケージのクラスを実装することで、カスタム接続フィルタを使用することもできます。接続フィルタの作成の詳細は、『WebLogicセキュリティ・サービスによるアプリケーションの開発』ネットワーク接続フィルタの使用に関する項を参照してください。デフォルト接続フィルタと同じように、カスタム接続フィルタもWebLogic Server管理コンソールで構成できます。

接続フィルタを構成するには:

  1. 受信メッセージのロギングを有効にします。「接続ログを有効化」オプションを使用すると、成功した接続と接続データがサーバーの接続ログに記録されます。この情報は、サーバーの接続に関連する問題をデバッグするために使用できます。
  2. ドメインで使用する接続フィルタを選択します。
    • デフォルト接続フィルタを構成するには、「接続フィルタ」にweblogic.security.net.ConnectionFilterImplを指定します。

    • カスタム接続フィルタを構成するには、ネットワーク接続フィルタを実装するクラスを「接続フィルタ」フィールドで指定します。このクラス名は、WebLogic ServerのCLASSPATHにも指定する必要があります。

  3. 接続フィルタのルールの構文を入力します。

次のトピックを参照してください。

Oracle WebLogic ServerでのJEP 290の使用

セキュリティを高めるために、WebLogic Serverは、JDK JEP 290メカニズムを使用して受信したシリアライズJavaオブジェクトをフィルタして、デシリアライズできるクラスを制限します。フィルタにより、サービス拒否(DOS)攻撃やリモート・コード実行(RCE)攻撃を引き起こす可能性のある、特別に作成された悪意のあるシリアライズ・オブジェクトによる攻撃から保護できます。

デシリアライズ攻撃を防ぐには、ブロックリストと許可リストという2つのモデルがあります。ブロックリスト・モデルでは、WebLogic Serverは、脆弱な既知のクラスおよびパッケージのセットを定義し、それらをデシリアライズからブロックし、他のすべてのクラスはデシリアライズできるようにします。許可リスト・モデルでは、WebLogic Serverおよび顧客は、デシリアライズを許可されている受入れ可能なクラスおよびパッケージのリストを定義し、他のすべてのクラスをブロックします。どちらのアプローチも利点がありますが、許可リスト・モデルは、WebLogic Serverおよび顧客アプリケーションで必要とされることがわかっているクラスおよびパッケージのデシリアライズのみを許可するため、よりセキュアです。

ノート:

2021年7月のパッチ・セット更新(PSU)では、WebLogic Serverの許可リストのサポートが追加されます。

ブロックリストと許可リストのどちらを使用するかを選択できます。

  • WebLogic Serverではデフォルトでブロックリストが使用されます。起動時にWebLogic Serverにより、グラフの最大深度と、デシリアライズできない禁止されたクラスおよびパッケージのセットを指定する、デフォルトのJEP 290ブロックリスト・フィルタが構成されます。その後、WebLogic Server JEP 290のプロパティを使用してブロックリストをカスタマイズし、クラスまたはパッケージをさらに追加できます。また、動的ブロックリストを使用すると、サーバーの実行中に更新または置換できる構成ファイルを作成することで、ブロックリスト・フィルタを更新できます。「動的ブロックリスト構成ファイルの使用」を参照してください。

    ノート:

    これらのデフォルトのブロックリスト設定(デフォルト・フィルタで指定されている禁止クラスのセットを含む)は今後変わる可能性があります。WebLogicサーバーのパッチ・セット更新(PSU)には、デフォルト・フィルタで使用される一連の禁止されたクラスおよびパッケージの更新が含まれる場合があります。システムが最新のデフォルト・フィルタで保護されるようにするには、最新のWebLogic Server PSUおよびJavaクリティカル・パッチ・アップデート(CPU)をリリース後すぐに適用してください。クリティカル・パッチ・アップデート、セキュリティ・アラートおよび掲示板のページには、My Oracle Supportで入手可能な最新のJavaおよびWebLogic Serverのアップデートが一覧表示されています。

  • または、許可リストを使用することもできます。最初に、ドメイン内のアプリケーションでデシリアライズされるクラスおよびパッケージを含む許可リストを作成する必要があります。これを行うには、記録を有効にして、WebLogic Serverと顧客アプリケーションの両方のデシリアライズで使用されるクラスおよびパッケージをすべて記録します。デシリアライズが発生すると、各クラスが許可リスト構成ファイル内に記録されます。許可リストに問題がなければ、JEP 290フィルタリングに許可リスト構成ファイルを使用するようにWebLogic Serverを構成します。「JEP 290フィルタリング用の許可リストの使用」を参照してください。

JEP 290のフィルタ構文は、ブロックリスト・モデルと許可リスト・モデルの両方をサポートします。JEP 290のフィルタ構文については、http://openjdk.java.net/jeps/290のプロセス全体のフィルタに関する項を参照してください。WebLogic Serverがクラスをブロックまたは許可するために使用する構成ファイルは、JEP 290の構文に準拠しています。たとえば、パターン!foo.bar.Mumbleはクラスfoo.bar.Mumbleをブロックします。!が前に付いていないクラスおよびパッケージは許可されます。

WebLogic ServerがJEP 290のブロックリストおよび許可リストを使用する方法

WebLogic Serverは、JEP 290ブロックリスト・モデルと許可リスト・モデルの両方を使用して、デシリアライズ攻撃を防ぎます。

ブロックリスト・モデルを使用している場合、WebLogic ServerではJEP 290を次のように使用します:

  • WebLogic Server固有のJEP 290フィルタを実装して、WebLogic Serverによって使用されるデシリアライズに対して禁止されたクラスおよびパッケージのブロックリストを適用し、他のすべてのクラスおよびパッケージを許可します。フィルタでは、デシリアライズ・オブジェクト・ツリーの最大の深さのデフォルト値も適用されます。

  • グローバルJEP 290フィルタを実装して、アプリケーションまたはサード・パーティ・ライブラリで使用されるデシリアライズに対して禁止されているクラスおよびパッケージのブロックリストを適用します。

  • クラスおよびパッケージをデフォルト・フィルタに追加または削除して特定のクラスをブロックするなど、デフォルト・フィルタをカスタマイズするために使用できるWebLogic Server JEP 290プロパティを提供します。

許可リスト・モデルを使用している場合、WebLogic ServerではJEP 290を次のように使用します:

  • WebLogic Server固有のJEP 290フィルタを実装して、WebLogic Serverによって使用されるデシリアライズに対して許可されたクラスおよびパッケージの許可リストを適用し、他のすべてのクラスおよびパッケージをブロックします。

  • グローバルJEP 290フィルタを実装して、アプリケーションまたはサード・パーティ・ライブラリによって使用されるデシリアライズに対して許可されたクラスおよびパッケージの許可リストを適用し、他のすべてのクラスおよびパッケージをブロックします。

  • クラスおよびパッケージを記録されたフィルタに追加または削除して特定のクラスを許可またはブロックするなど、許可リストをカスタマイズするために使用できるWebLogic Server JEP 290プロパティを提供します。

JEP 290プロパティを使用して、デシリアライズ・オブジェクトのネストの深さ、デシリアライズ・オブジェクト内の内部参照の数、配列のサイズ、デシリアライズ・オブジェクトの最大サイズ(バイト単位)に基づいてデシリアライズ・クラスをフィルタすることもできます。

プロパティを使用したJEP 290フィルタのカスタマイズ

WebLogic Serverには、必要に応じてJEP 290フィルタをカスタマイズ、置換または無効にするために使用できるプロパティが含まれます。これらのプロパティは、システム・プロパティとしてコマンドラインで指定することも、JEP 290動的構成ファイルおよび許可リスト構成ファイルにプロパティとして含めることもできます。

次の表は、プロパティについて説明しており、使用例が含まれています。

表3-2 WebLogic Server JEP 290のプロパティ

プロパティ 説明

weblogic.oif.serialFilter

このプロパティは、JEP 290の標準フィルタ構文を使用してWebLogic ServerのカスタムJEP 290フィルタを設定する場合に使用します。JEP 290のフィルタ構文については、http://openjdk.java.net/jeps/290のプロセス全体のフィルタに関する項を参照してください。

デフォルトでは、このカスタム・フィルタはデフォルトのWebLogic Serverフィルタと結合され、いずれかのフィルタ要素が競合した場合にはカスタム・フィルタがデフォルト・フィルタより優先されます。許可リスト・モデルを使用している場合、ブロックされたすべてのクラスおよびパッケージは、許可リスト・フィルタで最も優先度が高くなります。

たとえば、foo.bar.Mumbleという名前のクラスをデフォルトのブロックリストに追加することでカスタム・フィルタを設定するには、次の設定を使用します:

-Dweblogic.oif.serialFilter=”!foo.bar.Mumble”

この設定により、デフォルト・フィルタで許可されている場合でもクラスfoo.bar.Mumbleイベントがブロックされます。

weblogic.oif.serialFilterMode

このプロパティは、デフォルトのWebLogic Serverフィルタを結合、置換または無効化する機能を提供する、カスタム・フィルタのフィルタ・モードを指定する場合に使用します。有効な値は次のとおりです。

  • combine — カスタム・フィルタをデフォルトのWebLogic Serverフィルタと結合します。カスタム・フィルタ設定は、競合するフィルタ要素のデフォルト・フィルタ設定より優先されます。これがデフォルトです。許可リスト・モデルを使用している場合、ブロックされたすべてのクラスおよびパッケージは、許可リスト・フィルタで最も優先度が高くなります。

  • replace — デフォルトのWebLogic Serverフィルタをカスタム・フィルタに置き換えます。デフォルトのWebLogic Serverフィルタのブロックリストと許可リストのすべてのクラスおよびパッケージを置換フィルタに含めることをお薦めします。含めないと、システムは悪意のあるデシリアライゼーション攻撃から保護されません。

  • disable — デフォルトのWebLogic Serverフィルタを無効化します。フィルタを無効にしないことを強くお薦めします。無効にすると、システムは悪意のあるデシリアライゼーション攻撃から保護されません。

たとえば、デフォルトのWebLogic Serverフィルタをカスタム・フィルタに置き換えるには、次の設定を使用します。

-Dweblogic.oif.serialFilterMode=replace

weblogic.oif.serialFilterScope

このプロパティは、フィルタをJVM全体(顧客アプリケーションおよびサード・パーティ・ライブラリのデシリアライズ)にグローバルに適用するか、内部WebLogic Serverのデシリアライズにのみ適用するかを指定する場合に使用します。有効値はglobalおよびweblogicです。デフォルトはglobalです。

ノート:

JDK 7 Update 191 (JDK 7u191)以上およびJDK 8 Update 181 (JDK 8u181)以上の場合、デフォルトはglobalです。それより前のサポートされているJDKのバージョンの場合、デフォルトはweblogicです。

たとえば、JVM全体ではなく、内部WebLogic ServerのデシリアライゼーションにのみWebLogic Serverのデフォルトまたはカスタム・フィルタを適用するには、次の設定を使用します。

-Dweblogic.oif.serialFilterScope=weblogic

weblogic.oif.serialGlobalFilter

このプロパティは、JEP 290の標準フィルタ構文を使用してWebLogic ServerのカスタムJEP 290グローバル・フィルタを設定する場合に使用します。JEP 290のフィルタ構文については、http://openjdk.java.net/jeps/290のプロセス全体のフィルタに関する項を参照してください。

デフォルトでは、このカスタム・グローバル・フィルタはデフォルトのWebLogic Serverフィルタと結合され、いずれかのフィルタ要素が競合した場合にはカスタム・グローバル・フィルタがデフォルト・フィルタより優先されます。このグローバル・フィルタは、アプリケーションおよびサード・パーティ・ライブラリのデシリアライズに使用されるオブジェクト入力ストリームに適用され、WebLogic Serverのデシリアライズには適用されません

たとえば、foo.bar.Mumbleという名前のクラスをデフォルトのブロックリストに追加することでカスタム・グローバル・フィルタを設定するには、次の設定を使用します:

-Dweblogic.oif.serialGlobalFilter=”!foo.bar.Mumble”

この設定により、デフォルト・フィルタで許可されている場合でも、顧客アプリケーションおよびサード・パーティ・ライブラリのデシリアライズからクラスfoo.bar.Mumbleがブロックされます。

weblogic.oif.head.serialFilter

このプロパティは、JEP 290の標準フィルタ構文を使用してWebLogic ServerのカスタムJEP 290フィルタをオーバーライドする場合に使用します。JEP 290のフィルタ構文については、http://openjdk.java.net/jeps/290のプロセス全体のフィルタに関する項を参照してください。

デフォルトでは、このヘッド・フィルタはカスタムおよびデフォルトのWebLogic Serverフィルタと結合され、いずれかのフィルタ要素が競合した場合にはヘッド・フィルタがカスタム・フィルタとデフォルト・フィルタの両方より優先されます。

たとえば、foo.bar.Mumbleという名前のクラスを許可リストに追加することでヘッド・フィルタを設定するには、次の設定を使用します:

-Dweblogic.oif.head.serialFilter=”!foo.bar.Mumble”

この設定により、カスタム・フィルタおよびデフォルト・フィルタで許可されている場合でも、クラスfoo.bar.MumbleはWebLogic Serverのデシリアライズからブロックされます。

weblogic.oif.head.serialGlobalFilter

このプロパティは、JEP 290の標準フィルタ構文を使用してWebLogic ServerのカスタムJEP 290グローバル・フィルタをオーバーライドする場合に使用します。JEP 290のフィルタ構文については、http://openjdk.java.net/jeps/290のプロセス全体のフィルタに関する項を参照してください。

デフォルトでは、このカスタム・グローバル・フィルタはカスタムおよびデフォルトのWebLogic Serverフィルタと結合され、いずれかのフィルタ要素が競合した場合にはヘッド・グローバル・フィルタがカスタム・フィルタとデフォルト・フィルタの両方より優先されます。このグローバル・フィルタは、アプリケーションおよびサード・パーティ・ライブラリのデシリアライズに使用されるオブジェクト入力ストリームに適用され、WebLogic Serverのデシリアライズには適用されません

たとえば、foo.bar.Mumbleという名前のクラスを許可リストに追加することでヘッド・グローバル・フィルタを設定するには、次の設定を使用します:

-Dweblogic.oif.head.serialGlobalFilter=”!foo.bar.Mumble”

この設定により、カスタム・フィルタおよびデフォルト・フィルタで許可されている場合でも、顧客アプリケーションおよびサード・パーティ・ライブラリのデシリアライズからクラスfoo.bar.Mumbleがブロックされます。

weblogic.oif.serialUnauthenticatedFilter

このプロパティは、JEP 290の標準フィルタ構文を使用してWebLogic Serverの未認証コード・パスのカスタムJEP 290フィルタを設定する場合に使用します。JEP 290のフィルタ構文については、http://openjdk.java.net/jeps/290のプロセス全体のフィルタに関する項を参照してください。

ノート:

このフィルタは、リモート匿名RMI T3およびIIOPリクエストを無効にした場合に使用されます。ユーザーは未認証コード・パス・フィルタをカスタマイズする必要はありません。未認証コード・パスで許可されているクラスの現在のセットで十分です。

デフォルトでは、このカスタム・フィルタはデフォルトのWebLogic Server未認証フィルタと結合され、いずれかのフィルタ要素が競合した場合にはカスタム・フィルタがデフォルト・フィルタより優先されます。

たとえば、foo.bar.Mumbleという名前のクラスをデフォルトの未認証許可リストに追加することでカスタム・フィルタを設定するには、次の設定を使用します:

-Dweblogic.oif.serialUnauthenticatedFilter="foo.bar.Mumble"

この設定により、未認証コード・パスでクラスfoo.bar.Mumbleを使用できます。

動的ブロックリスト構成ファイルの使用

動的ブロックリストでは、サーバーの実行中に更新または置換できる構成ファイルを作成することで、ブロックリスト・フィルタを更新できます。

2021年4月のパッチ・セット更新(PSU)は、動的ブロックリストに次の機能を提供します:
  • デフォルトでは、WebLogic Serverは、DOMAIN_HOME/config/securityディレクトリにある動的ブロックリスト構成ファイルの存在を検出し、構成ファイルで指定されたクラスのデシリアライズをブロックします。

  • WebLogic Serverでは、他のディレクトリ(Oracleホーム・ディレクトリなど)に配置した動的ブロックリスト構成ファイルを検索し、必要に応じてそれらのファイルを使用してデシリアライズをブロックできます。WebLogic Serverでこれらのファイルの存在を検出するには、新しいシステム・プロパティweblogic.oif.serialPropDirectoriesを使用してファイルの場所を指定し、そのプロパティをWebLogic Serverの起動スクリプトに含める必要があります。

2021年7月のPSUでは、WebLogic Serverは、ORACLE_HOME/oracle_common/common/jep290ディレクトリにある動的ブロックリスト構成ファイルの存在を検出し、ファイルで指定されたクラスおよびパッケージのデシリアライズをブロックすることもできます。

ブロックリスト・ファイルがこれらの場所に保存されると、WebLogic Serverは指定された時間間隔でブロックリスト・ファイルを読み取り、指定されたブロックの強制をすぐに開始します。サーバーを停止せずにファイルを更新または置換できます。

動的ブロックリストを使用するには:

  1. 目的のWebLogic、グローバルおよび未認証フィルタを含む構成ファイルを作成し、接尾辞serial.propertiesを使用して保存します。フィルタ文字列に空白が含まれていないことを確認します。また、WebLogic Serverに構成ファイルに対する読取り権限があることを確認してください。そうしないと、サーバーの起動に失敗します。serial.propertiesファイルのサンプルを次に示します:

    weblogic.oif.serialFilter=\
    !MyCustomer1.Employee;\
    !MyCustomer2.Employee2;\
    !MyCustomer3.*;\
    !MyCustomer4.**;\
    !MyCustomer5.Employee5
    
    weblogic.oif.serialGlobalFilter=\
    !MyCustomer1.Employee;\
    !MyCustomer2.Employee2;\
    !MyCustomer3.**;\
    !MyCustomer4.**;\
    !MyCustomer5.Employee5
    

    この例では:

    • weblogic.oif.serialFilterは、WebLogic Serverのデシリアライズに適用されます。

    • weblogic.oif.serialGlobalFilterは、顧客アプリケーションおよびサード・パーティ・ライブラリのデシリアライズに適用されます。

    どちらのフィルタでも、最初に一致したものがフィルタ内の他のものより優先されます。これらのフィルタの詳細は、表3-2を参照してください。

  2. デフォルトの場所を使用するには、ファイルをDOMAIN_HOME/config/securityディレクトリに保存します。このパス名では、DOMAIN_HOMEはWebLogicドメイン・ルート・ディレクトリを表します。WebLogic Serverは、デフォルトでこのディレクトリのファイルを検出します。

    デフォルトの場所を使用していない場合は、接尾辞serial.propertiesが付いたファイルを目的のディレクトリに保存し、起動スクリプトのweblogic.oif.serialPropDirectoriesシステム・プロパティを使用してディレクトリの場所を指定します。複数のファイルと場所を指定できます。たとえば:

    -Dweblogic.oif.serialPropDirectories=/u01/oracle/fmw/app1:/u01/oracle/fmw/app2

  3. デフォルトでは、これらのディレクトリは60秒ごとにポーリングされます。デフォルトのポーリング間隔を変更するには、起動スクリプトでweblogic.oif.serialPropPollingFileIntervalシステム・プロパティを設定します。たとえば、ポーリング間隔を10秒に設定するには、次を使用します:

    -Dweblogic.oif.serialPropPollingFileInterval=10000

JEP 290フィルタリング用の許可リストの使用

許可リストは、デシリアライズを許可するWebLogic Serverと顧客アプリケーションのクラスおよびパッケージのリストを定義する構成ファイルです。許可リストを作成および構成して、実行中のシステムでデシリアライズ(またはブロック)されるパッケージおよびクラスを制御できます。

顧客の許可リストを作成および構成するには:

  1. ステージング環境またはテスト環境で、次のいずれかの方法を使用して記録を有効にします:

    • WebLogic Server管理コンソールを使用します:

      ノート:

      許可リスト・モデルのコンソール・サポートが2021年10月のPSUに追加されました。
      1. 管理コンソールの「チェンジ・センター」で、「ロックして編集」をクリックします。
      2. 管理コンソールの左ペインの「ドメイン構造」の下で、ドメイン名を選択します。
      3. 「構成」→「許可リスト」を選択し、記録有効チェック・ボックスを選択します。
      4. 「保存」をクリックして、「チェンジ・センター」で「変更のアクティブ化」をクリックします。
    • WLSTオンラインを使用して、AllowListMBeanAllowListRecordingEnabled属性を設定します:

      edit()
      startEdit()
      cd("AllowList/mydomain")
      cmo.setAllowListRecordingEnabled(true)
      save()
      activate()
      disconnect()
      

    記録が有効になっている場合、ブロックリストで指定されているクラスを除き、デシリアライズ時にすべてのクラスが許可されます。

  2. 記録された許可リスト構成ファイルによって、アプリケーションが正常に実行されるために許可する必要があるすべてのパッケージおよびクラスを適切にカバーしていることを確認するために、テストの完全なセットを実行します。デシリアライズが発生すると、各クラスが次の構成ファイル内に記録されます:

    DOMAIN_HOME/config/security/jep290-recorded.serial.properties

    このパス名では、DOMAIN_HOMEはWebLogicドメイン・ルート・ディレクトリを表します。

    jep290-recorded.serial.propertiesのサンプルを次に示します:

    Wed May 19 23:55:13 UTC 2021
    weblogic.oif.serialFilter=\
        com.company1.common.collections.objs.*;\
        com.company1.common.tools.Calculator;\
        com.company2.shared.tools.Converter
    weblogic.oif.serialGlobalFilter=\
        com.company1.common.lists.AList;\
        com.company1.common.tools.Calculator;\
        com.company2.shared.tools.*
  3. WebLogic Server管理コンソールまたはWLSTオンラインを使用して記録を無効にします:

    • WebLogic Server管理コンソールで、「許可リスト」ページの記録有効チェック・ボックスをクリアし、「保存」「変更のアクティブ化」の順にクリックします。

    • WLSTオンラインを使用して、AllowListRecordingEnabled属性をfalseに設定します。

  4. 次のいずれかの方法で許可リストまたはブロックリストを使用するようにWebLogic Serverドメインを構成します:

    • WebLogic Server管理コンソールで、「許可リスト」ページの「違反アクション」コントロールから目的の設定を選択し、「保存」をクリックして、「変更のアクティブ化」をクリックします。

    • WLSTオンラインを使用して、AllowListMBeanAllowListViolationAction属性を設定します。

    次の設定が可能です:

    • IGNORE - 許可リストを無視し、ブロックリストを使用します。デシリアライズ中に見つかったクラスがブロックリストに存在する場合、そのクラスのデシリアライズはブロックされます。

    • DENY - 許可リストで指定されているクラスを除くすべてをブロックし、クラスがブロックされたときにメッセージをログに記録します。

    • LOG - 違反が発生した場合はメッセージをログに記録しますが、ブロックリストに記載されていないかぎり、クラスを許可します。

    ノート:

    ネットワーク・アクセス・ポイントを使用して、チャネルにAllowListViolationActionを設定することもできます。これにより、信頼性のない外部チャネルでは許可リストを、内部の信頼性のあるチャネルではブロックリストを使用できます。
  5. デフォルトでは、許可リスト構成ファイルを含むディレクトリは60秒ごとにポーリングされます。デフォルトのポーリング間隔を変更するには、次のいずれかを行います:

    • WebLogic Server管理コンソールで、「許可リスト」ページのシリアル・プロファイル・ポーリング間隔コントロールから目的の間隔を入力し、「保存」をクリックして、「変更のアクティブ化」をクリックします。

    • AllowListMBeanserialPropPollingFileInterval属性を目的の間隔に設定します。

    • 起動スクリプトでweblogic.oif.serialPropPollingFileIntervalシステム・プロパティを設定します。たとえば、ポーリング間隔を10秒に設定するには、次を使用します:

      -Dweblogic.oif.serialPropPollingFileInterval=10000

  6. ステップ2で作成した記録された許可リスト構成ファイルを本番ドメインのDOMAIN_HOME/config/securityディレクトリにコピーして、許可リストを使用するように本番ドメインを構成します。

    ノート:

    すべてのクラスおよびパッケージが確実に記録されるように、AllowListViolationActionLogに設定して本番ドメインを一定期間実行することをお薦めします。
  7. 許可リスト構成ファイルの精度を維持します。新規アプリケーションがドメインにデプロイされるか、またはアプリケーションの新しいバージョンがデプロイされるたびに、ステップ1から開始してこのプロセスを繰り返して、許可リストを再作成するか、新しいアプリケーションで許可リストを検証し、新規または更新されたアプリケーションに必要なすべてのパッケージおよびクラスが許可リストに含まれていることを確認する必要があります。

記録後の許可リストのカスタマイズ

許可リストを作成する際には、可能なかぎり記録する方法を使用することをお薦めします。許可リスト構成ファイルの作成後にカスタマイズが必要な場合は、次のようにします:

  1. 記録をオフにします。

  2. jep290-recorded.serial.propertiesファイルのバックアップ・コピーを作成します。

  3. DOMAIN_HOME/config/security/ディレクトリのjep290-recorded.serial.propertiesを編集して、必要に応じてクラスを追加または削除します。「プロパティを使用したJEP 290フィルタのカスタマイズ」を参照してください。

このリストは、次のサンプルのjep290-recorded.serial.propertiesファイルの編集例を示しています:

Wed May 19 23:55:13 UTC 2021
weblogic.oif.serialFilter=\
    com.company1.common.collections.objs.*;\
    com.company1.common.tools.Calculator;\
    com.company2.shared.tools.Converter
weblogic.oif.serialGlobalFilter=\
    com.company1.common.lists.AList;\
    com.company1.common.tools.Calculator;\
    com.company2.shared.tools.*   
  • 記録されたファイルからのクラスの削除

    記録された許可リスト・ファイルが、ブロックするクラスを許可している場合は、記録されたjep290-recorded.serial.propertiesファイルを編集して、そのクラスを削除します。たとえば、サンプルの記録された許可リスト・ファイルのWebLogicフィルタとグローバル・フィルタの両方からクラスcom.company1.common.tools.Calculator;を削除するには、weblogic.oif.serialFilter=\weblogic.oif.serialGlobalFilter=\の両方のスタンザから行を削除します。

    結果のサンプル・ファイルは次のようになります:

    Wed May 19 23:55:13 UTC 2021
    weblogic.oif.serialFilter=\
        com.company1.common.collections.objs.*;\
        com.company2.shared.tools.Converter
    weblogic.oif.serialGlobalFilter=\
        com.company1.common.lists.AList;\
        com.company2.shared.tools.* 
    
  • 記録された許可リスト・ファイルへのクラスの追加

    ブロックされている記録された許可リスト・ファイルにクラスを追加する場合は、記録されたjep290-recorded.serial.propertiesファイルを編集して、目的のフィルタにクラスを追加します。たとえば、サンプルの記録されたファイルのWebLogicフィルタとグローバル・フィルタの両方にクラスcom.company1.MyApplication1を追加するには、weblogic.oif.serialFilter=\weblogic.oif.serialGlobalFilter=\の両方のスタンザに行を追加します。

    結果のサンプル・ファイルは次のようになります(太字のテキストは、追加されたコンテンツを示します):

    Wed May 19 23:55:13 UTC 2021
    weblogic.oif.serialFilter=\
        com.company1.common.collections.objs.*;\
        com.company1.common.tools.Calculator;\
        com.company2.shared.tools.Converter;\
        com.company1.MyApplication1
    weblogic.oif.serialGlobalFilter=\
        com.company1.common.lists.AList;\
        com.company1.common.tools.Calculator;\
        com.company2.shared.tools.*;\
        com.company1.MyApplication1   
    
  • WebLogic Serverがブロックしているクラスの許可

    「フィルタ順序プリファレンスの理解」で説明しているように、ブロックされたすべてのクラスおよびパッケージは、weblogic.oif.head.serialGlobalFilterまたはweblogic.oif.head.serialFilterプロパティで特に許可されていないかぎり、許可リスト・フィルタで最も優先度が高くなります。

    したがって、クラスorg.codehaus.groovy.runtime.ConvertedClosureがWebLogic Serverのカスタム・フィルタまたはデフォルト・フィルタによってブロックされており、このクラスをグローバル・オブジェクト入力ストリーム(アプリケーションおよびサード・パーティ・ライブラリのデシリアライズに使用)に対して許可する場合は、weblogic.oif.head.serialGlobalFilter JEP 290プロパティを使用してフィルタの設定をオーバーライドできます。次のいずれかの方法を実行します。

    • コマンドラインでシステム・プロパティとして次のプロパティを指定します:

      -Dweblogic.oif.head.serialGlobalFilter=org.codehaus.groovy.runtime.ConvertedClosure
    • サンプルの記録されたDOMAIN_HOME/config/security/jep290-recorded.serial.propertiesファイルに次の行を追加します:

      weblogic.oif.head.serialGlobalFilter=\
          org.codehaus.groovy.runtime.ConvertedClosure

      結果のサンプル許可リスト・ファイルは次のようになります(太字のテキストは、追加されたコンテンツを示します):

      Wed May 19 23:55:13 UTC 2021
      weblogic.oif.serialFilter=\
          com.company1.common.collections.objs.*;\
          com.company1.common.tools.Calculator;\
          com.company2.shared.tools.Converter
      weblogic.oif.serialGlobalFilter=\
          com.company1.common.lists.AList;\
          com.company1.common.tools.Calculator;\
          com.company2.shared.tools.*
      weblogic.oif.head.serialGlobalFilter=\
          org.codehaus.groovy.runtime.ConvertedClosure 
      weblogic.oif.serialUnauthenticatedFilter=\

    クラスorg.codehaus.groovy.runtime.ConvertedClosureがWebLogic Serverのカスタム・フィルタまたはデフォルト・フィルタによってブロックされており、このクラスをWebLogic Serverのデシリアライズに対して許可する場合は、次のいずれかを実行します:

    • コマンドラインでシステム・プロパティとして次のプロパティを指定します:

      -Dweblogic.oif.head.serialFilter=org.codehaus.groovy.runtime.ConvertedClosure 
    • サンプルの記録されたDOMAIN_HOME/config/security/jep290-recorded.serial.propertiesファイルに次の行を追加します:

      weblogic.oif.head.serialFilter=\
          org.codehaus.groovy.runtime.ConvertedClosure

      結果のサンプル・ファイルは次のようになります(太字のテキストは、追加されたコンテンツを示します):

      Wed May 19 23:55:13 UTC 2021
      weblogic.oif.serialFilter=\
          com.company1.common.collections.objs.*;\
          com.company1.common.tools.Calculator;\
          com.company2.shared.tools.Converter
      weblogic.oif.serialGlobalFilter=\
          com.company1.common.lists.AList;\
          com.company1.common.tools.Calculator;\
          com.company2.shared.tools.*
      weblogic.oif.head.serialFilter=\
          org.codehaus.groovy.runtime.ConvertedClosure 
      weblogic.oif.serialUnauthenticatedFilter=\

必要に応じてファイルを編集して保存すると、サーバーは指定されたポーリング間隔後に編集されたファイルを取得します。

フィルタ・ロギングの有効化

WebLogic Serverでは、システム・プロパティweblogic.oif.serialFilterLoggingおよびデバッグ・フラグDebugAllowListServerDebugMBeanに用意されており、これを使用して、現在のブロックリストと許可リストのクラスおよびパッケージをログに記録できます。

ログを有効にするには、weblogic.oif.serialFilterLoggingシステム・プロパティをtrueに設定してWebLogic Serverを起動します。たとえば:

./startWebLogic.sh -Dweblogic.oif.serialFilterLogging=true

ノート:

2021年7月のPSUで、新しいプロパティDebugAllowListServerDebugMBeanに追加されました。実装固有のロギングの詳細を取得するには、WebLogic Server管理コンソール、WLSTまたはコマンドラインを使用して、このプロパティをtrueに設定します(たとえば-Dweblogic.debug.DebugAllowList=true)。

次のログは、システム・プロパティを使用したサンプル出力を示しています。フィルタ設定、およびブロックリストと許可リストのクラスとパッケージが、サーバー・ログに表示されます。


<Jul 1, 2021 9:07:33,787 PM UTC> <Info> <WebLogicServer> <BEA-003807> <The WebLogic Server JEP 290 filter mode is COMBINE> 
<Jul 1, 2021 9:07:33,787 PM UTC> <Info> <WebLogicServer> <BEA-003808> <The WebLogic Server JEP 290 filter scope is GLOBAL> 
<Jul 1, 2021 9:07:33,788 PM UTC> <Info> <WebLogicServer> <BEA-003810> <WebLogic Server JEP 290 filter limit element for scope WEBLOGIC is: maxdepth=250>
...
<Jul 1, 2021 9:07:33,790 PM UTC> <Info> <WebLogicServer> <BEA-003811> <WebLogic Server JEP 290 filter blocklist package for scope WEBLOGIC is: org.apache.commons.collections.functors> 
...
<Jul 1, 2021 9:07:33,802 PM UTC> <Info> <WebLogicServer> <BEA-003812> <WebLogic Server JEP 290 filter blocklist class for scope WEBLOGIC is: java.rmi.server.RemoteObject>
...
<Jul 1, 2021 9:07:33,806 PM UTC> <Info> <WebLogicServer> <BEA-003813> <WebLogic Server JEP 290 filter allowlist for scope WEBLOGIC is: weblogic.**> 
<Jul 1, 2021 9:07:33,806 PM UTC> <Info> <WebLogicServer> <BEA-003813> <WebLogic Server JEP 290 filter allowlist for scope WEBLOGIC is: oracle.**>
...
<Jul 1, 2021 9:07:33,827 PM UTC> <Info> <WebLogicServer> <BEA-003813> <WebLogic Server JEP 290 filter allowlist for scope GLOBAL is: java.**> 
...

ノート:

フィルタ・ログには、使用されているフィルタと、追加または削除も表示されます。使用される各フィルタ・タイプ(weblogic.oif.serialFilterweblogic.oif.serialGlobalFilterweblogic.oif.serialUnauthenticatedFilterなど)のフィルタ文字列には、フィルタ内のブロックリスト・エントリと許可リスト・エントリの順序が示されます。

フィルタ順序プリファレンスの理解

WebLogic Serverは、プロパティおよび構成ファイルを使用して指定された、ブロックおよび許可されたクラスおよびパッケージを組み合せて、ブロックリストおよび許可リストの順序プリファレンスを決定するために使用されるフィルタを作成します。

作成されたフィルタの優先順位は、優先順位の高いものから低いものの順に、次のように決定されます:

  • weblogic.oif.head.serialFilterおよびweblogic.oif.head.serialGlobalFilterプロパティを使用して、サーバー起動時に指定されたカスタム・フィルタ(最高)。

  • weblogic.oif.serialFilterおよびweblogic.oif.serialGlobalFilterプロパティを使用して、サーバー起動時に指定されたカスタム・フィルタ。

  • weblogic.oif.serialPropDirectoriesプロパティを使用して、構成ファイルで指定されたカスタム・フィルタ。

  • デフォルト・ディレクトリDOMAIN_HOME/config/securityにある構成ファイルで指定されたカスタム・フィルタ。

  • Oracleホーム・ディレクトリORACLE_HOME/oracle_common/common/jep290にある構成ファイルで指定されたカスタム・フィルタ。

  • WebLogic Serverのデフォルト・フィルタ(最低)。

ノート:

許可リストを使用している場合、ブロックされたすべてのクラスおよびパッケージは、weblogic.oif.head.serialFilterまたはweblogic.oif.head.serialGlobalFilterプロパティで特に許可されていないかぎり、許可リスト・フィルタで最も優先度が高くなります。

デシリアライズ・タイムアウト間隔の設定

デシリアライズに時間制限を設定することで、潜在的なサービス拒否攻撃に対する保護を強化できます。時間制限が経過すると、デシリアライズ・プロセスは自動的に終了します。

2022年4月のパッチ・セット更新(PSU)では、RMIプロトコルによって使用される場合のKernelMBean属性RMIDeserializationMaxTimeLimitおよびweblogic.rmi.stream.deserialization.timelimitmillisシステム・プロパティのサポートが追加されています。2023年1月のPSUでは、この機能をIIOPに拡張しています。

デフォルトでは、Javaオブジェクトのデシリアライズ時に時間制限が無効になり、強制されません。制限を追加するには、KernelMBeanのRMIDeserializationMaxTimeLimit属性またはweblogic.rmi.stream.deserialization.timelimitmillisシステム・プロパティを使用して、必要な時間間隔をミリ秒単位で設定します。WebLogic Serverでは、複数のJavaオブジェクト対して1つの間隔が適用されません。かわりに、トップレベル・オブジェクトそれぞれが、独自の時間制限をトリガーします。

たとえば、時間制限を10秒に設定するには、-Dweblogic.rmi.stream.deserialization.timelimitseconds=10000を使用します。

100ミリ秒以上の間隔を入力します。非常に短い間隔では、デシリアライズがスムーズに動作しない可能性があります。

時間制限を無効にするには、0を入力します。

ノート:

JEP 290システム・プロパティweblogic.oif.serialFilterModedisableに設定されている場合、デシリアライズ時間制限は有効になりません。

JTA TransactionLoggable許可リスト

JTAトランザクション・ログ・ストアの実装の脆弱性に対処するため、JTA TransactionLoggable許可リストが追加されました。

TransactionLoggableオブジェクトが永続ストアに書き込まれると、クラス名が保持され、TransactionLoggableクラスの新しいインスタンスをインスタンス化するためにリカバリ中に使用されます。TransactionLoggable許可リストは、永続ストアとの間のTransactionLoggableクラスの書込みと読取りを制限します。

許可リストは、デフォルトでは無効です。有効にすると、許可リストにWLS内部のTransactionLoggableクラスのセットが移入されます。

  • デフォルトの許可リストを有効にするには、システム・プロパティをweblogic.transaction.loggable.allowListに設定します。
  • クラスを有効にしてデフォルトの許可リストに追加するには、完全修飾クラス名をカンマで区切ってリストにし、システム・プロパティを設定します。たとえば、weblogic.transaction.loggable.allowList=p1.ClassA,p2.ClassBです。