脅威と脆弱性の対策 (Reporting Services)

このトピックでは、Reporting Services の配置に対する脅威を軽減する方法について説明します。

概要

レポート サーバーは、コンテンツやアプリケーション データを外部に格納するステートレス サーバーです。レポート サーバーのインストールに対する最大の脅威の 1 つは、レポート サーバーのデータベースや構成ファイルに対する不正アクセスや改ざんです。また、これらほど明白ではありませんが、レポートの作成方法や、レポート サーバーにコンテンツをパブリッシュする権限の付与に関連する脅威も、同じくらい重要です。レポート定義は、サーバー コンピュータ上で完全信頼モードで実行されるアセンブリであり、同じくサーバー上で実行される他のカスタム アセンブリを含めることができます。レポートやカスタム アセンブリに悪意のあるコードが含まれていた場合、そのコードは、レポートを要求したユーザーの資格情報を使用してレポート サーバー コンピュータ上で実行されます。その他、機密データを知らない間に公開してしまうレポート デザインによって生じる脅威もわかりにくい脅威と言えます。たとえば、従業員 ID をパラメータとして使用するレポートでは、レポート URL にランダムな ID を挿入することによって他の従業員に関する情報を表示されないようにする必要があります。最後に、組織におけるレポートの配信方法について検討する必要もあります。レポート サーバーを構成して、レポートが組織の外部に配信される可能性を最小限に抑えたり、ファイル システムのアクセス許可とレポート サーバーの権限を使用して、権限のあるユーザー以外はレポートを開けないようにしたりすることができます。

以降のセクションでは、その他の脅威と、その脅威を実際に悪用されるリスクを最小限に抑える方法について説明します。

レポート サーバーへの攻撃の対策

次の表は、サーバーのコンポーネントや構成設定に影響する脅威とその対策を示しています。

機能または操作

脅威

対策

構成設定は、レポート サーバー コンピュータ上の Web.config ファイルとアプリケーション構成ファイルに格納されます。

攻撃者にコンピュータにアクセスされると、暗号化されていない (保護されていない) 構成ファイルを見つけられて改ざんされる可能性があります。

ファイルにアクセス許可を設定します。既定では、セットアップ時に作成される Reporting Services セキュリティ グループにアクセス許可が与えられます。

レポート サーバー Web サービスは、TCP/IP 接続経由で送信されるオンデマンドの要求を処理します。

次のような形でサービス拒否攻撃が行われる可能性があります。

複数の認証されていない要求をターゲット サーバーに送信する。

不完全で完了しない要求をターゲット サーバーに送信する。

極端に大きな要求を送信する (要求を開始した後、大きなペイロードをサーバーに送信する)。

レポート サーバーでは、認証されていない要求はすべて 2 分以内にドロップされます。これにより、サービス拒否攻撃の影響の一部を最小限に抑えることができます。この 2 分という間隔は固定されていて、これより短くすることはできません。

レポート サーバーへのアップロード操作に基づく攻撃に対しては、Machine.config ファイルの maxRequestLength 要素の値を小さくすることができます。既定では、ASP.NET により、サーバー アプリケーションにアップロード可能なアイテムが 1 MB に制限されます。maxRequestLength の値を小さくする対策は、一時的な措置と考えてください。大きなファイル (モデルなど) が日常的にアップロードされる場合は、値を元に戻す必要があります。Reporting Services インストールの maxRequestLength の設定の詳細については、「レポートとスナップショットのサイズ制限」を参照してください。

Reporting Services では、データの処理、表示、および配信のサード パーティの拡張機能を配置できる拡張可能なアーキテクチャがサポートされています。カスタム クエリ デザイナを配置することもできます。拡張機能は完全信頼モードで実行する必要があります。

カスタム拡張機能に悪意のあるコードが含まれている可能性があります。

信頼できるユーザーや組織の拡張機能以外は配置しないようにします。

レポート定義やレポート モデルに対する脅威の対策

次の表は、レポート定義やモデル ファイルに影響する脅威とその対策を示しています。

機能または操作

脅威

対策

レポート、モデル、および共有データ ソースをレポート サーバーにパブリッシュします。

レポートやモデルが外部データ ソースに接続してクエリを実行します。

レポート、モデル、および共有データ ソースがパブリッシュ操作中に傍受される可能性があります。

外部コンピュータに転送中の要求が傍受される可能性があります。

セキュリティで保護された、暗号化されたチャネル (SSL/TLS/IPSec など) を使用して接続します。チャネルを保護するには暗号化テクノロジを使用する必要があります。

チャネルがセキュリティで保護されていないことを送信前にユーザーに通知します。

リモートのコンピュータやデータ ソースに接続するために認証トークンや資格情報が使用されます。

要求を処理する際に認証データが傍受される可能性があります。

セキュリティで保護された、暗号化されたチャネルを使用します。

チャネルがセキュリティで保護されていない場合はユーザーに通知します。

最小特権の原則に従います。レポートで使用されるデータを取得するには、データ ソースに対する読み取り専用権限が必要です。

ブラウザ ウィンドウのアドレス バーにレポート URL のパラメータ値が表示されます。

レポートに機密データが含まれる場合は、URL で改ざんできるパラメータ値を追加しないでください。たとえば、パラメータ化されたレポートに従業員 ID が含まれていると、ランダムな従業員 ID を URL に挿入して他のユーザーのデータを表示される可能性があります。

レポートを最終的な配信のためにパブリッシュする前に、URL を調べて、パラメータ値をランダムな値に置き換えることができないかどうかを確認します。

レポートをデザインするときには、パラメータの設定に関連する権限はないということを頭に入れておいてください。次のような対策が考えられます。

  • レポートを再設計して、ユーザー ID を使用してユーザー固有の情報を収集します。

  • リンク レポートを使用し、マスタ レポートをロックします。その後、問題のパラメータをリンク レポートの内部パラメータにします。この方法は、SharePoint 統合モードを使用するように構成されたレポート サーバーでは使用できません。SharePoint 統合モードではリンク レポートはサポートされていないためです。

レポートとモデルにデータ ソースの情報とクエリが含まれています。

データ ソースやその構造に関する情報を公開すると、悪用される可能性がある内部情報を攻撃者に与えることになります。

ユーザーがレポート モデルを変更できるようにする前に、モデル アイテム セキュリティを設定して、モデル デザイナでユーザーに表示しないモデル アイテムへのアクセスを制限します。

ファイルにアクセス許可を設定します。ファイルには、.rdl、.rds、.smdl、.ds、.dsv、および .smgl があります。

オペレーティング システムが Windows XP 以降の場合、ユーザーのフォルダにローカルで格納されているファイルに既定でアクセスできるのは、そのローカル コンピュータで定義されているユーザー グループとユーザー アカウントだけです。

レポート定義および共有データ ソースにデータ ソース接続文字列が含まれています。接続文字列に資格情報を含めることもできます。

レポート ファイルが危害を受けた場合、データベース接続文字列に格納されているデータベース資格情報にアクセスされる可能性があります。

資格情報は接続文字列とは別に格納します。データ ソース プロパティ ページの [保存された資格情報] オプションを使用すると、ユーザー アカウントとパスワードを暗号化して格納することができます。

レポートとモデルが要求時に処理されます。

カスタム アセンブリをレポートで参照したりレポートに含めたりすることができます。

カスタム レポート アイテムやサード パーティ コントロールをレポートに含めることができます。カスタム レポート アイテム コントロールには完全信頼が必要です。

埋め込まれている Visual Basic コードやデータベース クエリを悪用して任意のコードをユーザーの権限で実行するレポートをユーザーが実行するように仕向ける攻撃が行われる可能性があります。

改ざんされたレポートやモデルを実行すると、バッファ オーバーランやサーバー クラッシュが発生したり、さらに悪い事態を引き起こしたりする可能性があります。

レポートやモデルをパブリッシュする権限を持つユーザーの数を制限します。

認証されたユーザー以外にファイルをアップロードする権限を与えないようにします。

レポートを作成するユーザーに、SQL インジェクション、スクリプト インジェクション、HTML インジェクションなどの攻撃に耐えられるスクリプトの作成方法を理解させます。

信頼できる人のレポートやモデル以外はアップロードしたりパブリッシュしたりしないようにします。

信頼できる人のカスタム レポート アイテム コントロール以外はインストールしたり使用したりしないようにします。

ファイルをアップロードする前に見直して、カスタム アセンブリへの参照に問題がないことを確認します。

アセンブリにファイル アクセス許可を設定して、悪意のあるユーザーに上書きされないようにします。

レポート デザイナの [プレビュー] タブでレポートやモデルをプレビューすると、作成者の資格情報を使用して取得されるキャッシュ データが作成されます。

レポート作成者のコンピュータで他のユーザーがレポートをプレビューすると、そのユーザーには表示されないはずのレポート データが表示される可能性があります。

レポートのデザインが完了したら、レポートをテスト サーバーやテスト用の場所に配置します。

脅威と脆弱性の対策の一般的な手順

以下の推奨事項に従って、すべてのレポート サーバーの配置の全体的なセキュリティを強化してください。

  • 未使用の機能を無効にして攻撃の機会をできるだけ減らします。詳細については、「Reporting Services 機能を有効または無効にする方法」を参照してください。

  • レポート サーバー接続に対して SSL を使用します。詳細については、「Secure Socket Layer (SSL) 接続用レポート サーバーの構成」を参照してください。

  • アクセス可能なユーザーが限られた、フォルダ階層で最も遠い分岐にあるフォルダに機密性の高いレポートを配置して、堅牢な権限ポリシーをサポートするフォルダ階層を作成します。レポート サーバーにパブリッシュするレポート、モデル、共有データ ソース、およびリソースのセキュリティは、レポート サーバー サイトのフォルダや特定のアイテムに対して作成するロールの割り当てによって保護されます。フォルダ階層はすべてユーザーによって定義されます。したがって、類似のユーザー アクセス権を持つアイテムがまとめられたフォルダ階層をユーザーが自分で作成する必要があります。詳細については、「フォルダのセキュリティ保護」を参照してください。

  • 要求時レポートは、レポートを開くユーザーの資格情報を使用してレポート サーバー上で完全信頼モードで実行されるコンパイル済みアセンブリであることを理解しておいてください。ローカルまたはドメインの管理者の資格情報を使用してログオンしたレポート ユーザーが、悪意のあるスクリプトを含むレポートを開くと、そのスクリプトが管理者の権限で実行されることになります。レポートを表示するときには最小特権のアカウントを使用するようにユーザーに勧めてください。詳細については、「統合セキュリティと高度な権限」を参照してください。

  • レポートでデータがどのように取得され、使用されるのかを理解しておいてください。レポートに機密データが含まれている場合は、モデルをデータ ソースとして使用することを検討してください。そうすれば、セキュリティ フィルタやモデル アイテム セキュリティを適用できます。詳細については、「チュートリアル : レポート モデル アイテムへのセキュリティ フィルタの適用」を参照してください。

  • レポートがどのように配信されるのかを理解しておいてください。サブスクリプションと配信の機能は、レポート処理を自動化し、生成されたレポートを配信するための強力な手法ですが、不正アクセスを防ぐためには、どのユーザーがネットワーク フォルダの共有権限を持っているのかを監視したり、レポート サーバーの電子メールの構成設定を評価して、電子メールの配信を制限する必要があるかどうかを調べたりする必要があります。詳細については、「レポートの配信の制御」を参照してください。