次の方法で共有


Office ソリューションに固有のセキュリティに関する考慮事項

Microsoft .NET Framework および Microsoft Office には、Office ソリューションをセキュリティ上の脅威から保護するためのセキュリティ機能が備わっています。このトピックでは、このような脅威のいくつかについて説明し、その脅威から保護するうえでの推奨事項を示します。また、Microsoft Office のセキュリティ設定が Office ソリューションに及ぼす影響についても説明します。

対象: このトピックの情報は、Office 2013 および Office 2010 のドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。

信頼されたコードが新しい悪意のあるドキュメントで目的を変更して使用される

攻撃者は雇用アプリケーションの個人情報をダウンロードする1とおりの特定の目的にたとえば、取得したワークシートなどの別のドキュメントで、信頼されたコードを再利用できます。コードが別のuserが開いたときに、元のドキュメントが実行されていないことを認識していないため、個人情報を明らかにするか、特権の拡張コードを実行するなど、他の脅威を開発する場合があります。あるいは、攻撃者は単にワークシートのデータを変更するだけで、被害者に送信して、予期しない動作を実行させることもできます。悪意を持つユーザーは、コードにリンクされているワークシートの値、数式、または表示特性を変更することにより、変更したファイルを送りつけて別のユーザーを攻撃できます。また、ワークシートの値を修正することにより、ユーザーが思いがけない情報にアクセスしてしまう場合もあります。

実行には、アセンブリの位置とドキュメントの位置の両方で十分な証拠が必要となるため、このような攻撃を簡単に実行することはできません。たとえば、電子メール添付のドキュメントや信頼されていないイントラネット サーバーのドキュメントには、実行に必要なアクセス許可がありません。

この攻撃を可能にするには、潜在的に信頼できないデータをベースに決定を下すよう、コード自体を記述する必要があります。たとえば、データベース サーバーの名前を含む非表示のセルがあるワークシートを作成します。ユーザーがワークシートを ASPX ページに送信すると、SQL 認証およびハードコーディングされた SA パスワードを使用してそのサーバーに接続しようとします。攻撃者は、非表示のセルの内容を別のコンピューター名と置き換え、SA パスワードを取得する場合があります。この問題を回避するには、パスワードをハードコーディングせずに、サーバーにアクセスする前に、適切であることが判明しているサーバーの内部リストとサーバー ID を必ず照合してください。

1thd35d7.collapse_all(ja-jp,VS.110).gif推奨

  • user、ドキュメント、データベース、Webサービス、またはそのほかのソースであるか、入力、データを常に確認してください。

  • 特定の種類の機能を公開する場合には、注意が必要です。たとえば、権限の設定されたデータをユーザーに代わって取得し、保護されていないワークシートにこのデータを挿入する場合に注意が必要となります。

  • アプリケーションの種類によって、ドキュメントはコードを実行する前に動作することを検証する意味を理解することがあります。たとえば、既知の実行中、安全な場所に格納されているドキュメントから確認します。

  • 権限の設定されたアクションを実行するアプリケーションの場合は、ドキュメントを開くときに警告メッセージを表示することをお勧めします。たとえば、アプリケーションが個人情報にアクセスすることを知らせるスプラッシュ画面やスタートアップのダイアログ ボックスを作成して、ユーザーに操作の続行またはキャンセルを選択してもらうことができます。一見無害なドキュメントからこのような警告が表示された場合は、情報が漏洩する前にアプリケーションを終了できます。

コードが Outlook オブジェクト モデル ガードによってブロックされる

Microsoft Office では、オブジェクト モデルの特定のプロパティ、メソッド、およびオブジェクトをコードで使用できないように制限できます。こうしたオブジェクトへのアクセスを制限することは、電子メール ワームやウイルスによってオブジェクト モデルが不正な目的で使用されるのを防ぐうえで有効です。このセキュリティ機能は、Outlook オブジェクト モデル ガードと呼ばれています。オブジェクト モデル ガードが有効になっているときに、制限されているプロパティまたはメソッドをアドインが使用しようとすると、Outlook はセキュリティ警告を表示します。これを受けてユーザーは、操作を中断したり、一定の時間内だけプロパティまたはメソッドへのアクセス許可を与えたりできます。userが操作を中断した場合、Visual StudioでOfficeソリューションを使用して作成したOutlookアドインは COMExceptionをスローします。

オブジェクト モデル ガードをアドインに適用する方法は、Outlook を Microsoft Exchange Server と併用しているかどうかに応じて、次のように異なります。

  • Outlook を Exchange と併用していない場合、管理者は、コンピューター上のすべてのアドインを対象として、オブジェクト モデル ガードを有効または無効にできます。

  • Outlook を Exchange と併用している場合、管理者は、コンピューター上のすべてのアドインを対象としてオブジェクト モデル ガードを有効または無効にできるのに加え、オブジェクト モデル ガードの影響を受けずに動作させる特定のアドインを指定できます。また、管理者は、オブジェクト モデルの特定の領域でのオブジェクト モデル ガードの動作を変更することもできます。たとえば管理者は、オブジェクト モデル ガードが有効な場合でも、アドインのプログラムによる電子メールの送信を自動的に有効にできます。

Outlook 2007では、オブジェクト モデル ガードの動作は、Outlookのセキュリティを維持すると、開発者やユーザー エクスペリエンスを向上させるために変更されました。詳細については、「Outlook 2007 でのコード セキュリティの変更点」を参照してください。

1thd35d7.collapse_all(ja-jp,VS.110).gifオブジェクト モデル ガードの警告を抑制する

アドインで、制限されたプロパティおよびメソッドを使用するときのセキュリティ警告を回避するには、Outlook オブジェクトの取得をプロジェクト内の ThisAddIn クラスの Application フィールドから行います。このフィールドの詳細については、「アプリケーション レベルのアドインのプログラミング」を参照してください。

オブジェクト モデル ガードが信頼するのは、このオブジェクトから取得された Outlook オブジェクトのみです。一方、新しい Microsoft.Office.Interop.Outlook.Application オブジェクトから取得したオブジェクトは信頼されないため、オブジェクト モデル ガードが有効になっている場合には、制限されたプロパティおよびメソッドでセキュリティ警告が発生します。

次のコード例は、オブジェクト モデル ガードが有効になっている場合に、セキュリティ警告を表示します。Microsoft.Office.Interop.Outlook.MailItem クラスの To プロパティは、オブジェクト モデル ガードによって制限されています。Microsoft.Office.Interop.Outlook.MailItem オブジェクトは信頼されません。Application フィールドから取得するのではなく、new 演算子を使用して作成した Microsoft.Office.Interop.Outlook.Application から取得しているからです。

Private Sub UntrustedCode()
    Dim application As New Microsoft.Office.Interop.Outlook.Application
    Dim mailItem1 As Microsoft.Office.Interop.Outlook.MailItem = _
        TryCast(application.CreateItem( _
        Microsoft.Office.Interop.Outlook.OlItemType.olMailItem),  _
        Microsoft.Office.Interop.Outlook.MailItem)
    mailItem1.To = "someone@example.com"
    MessageBox.Show(mailItem1.To)
End Sub
private void UntrustedCode()
{
    Microsoft.Office.Interop.Outlook.Application application =
        new Microsoft.Office.Interop.Outlook.Application();
    Microsoft.Office.Interop.Outlook.MailItem mailItem1 =
        application.CreateItem(
        Microsoft.Office.Interop.Outlook.OlItemType.olMailItem) as
        Microsoft.Office.Interop.Outlook.MailItem;
    mailItem1.To = "someone@example.com";
    MessageBox.Show(mailItem1.To);
}

次のコード例は、オブジェクト モデル ガードによって信頼される Microsoft.Office.Interop.Outlook.MailItem オブジェクトの To プロパティ (制限されたプロパティ) を使用する方法を示します。コードは、信頼される Application フィールドを使用して Microsoft.Office.Interop.Outlook.MailItem を取得します。

Private Sub TrustedCode()
    Dim mailItem1 As Microsoft.Office.Interop.Outlook.MailItem = _
        TryCast(Me.Application.CreateItem( _
        Microsoft.Office.Interop.Outlook.OlItemType.olMailItem),  _
        Microsoft.Office.Interop.Outlook.MailItem)
    mailItem1.To = "someone@example.com"
    MessageBox.Show(mailItem1.To)
End Sub
private void TrustedCode()
{
    Microsoft.Office.Interop.Outlook.MailItem mailItem1 =
        this.Application.CreateItem(
        Microsoft.Office.Interop.Outlook.OlItemType.olMailItem) as
        Microsoft.Office.Interop.Outlook.MailItem;
    mailItem1.To = "someone@example.com";
    MessageBox.Show(mailItem1.To);
}

[!メモ]

Outlook を Exchange と併用している場合、すべての Outlook オブジェクトを ThisAddIn.Application から取得しても、アドインが Outlook オブジェクト モデル全体にアクセスできるとは限りません。たとえば、Exchange 管理者が、Outlook オブジェクト モデルを使用したアドレス情報へのアクセスをすべて自動的に拒否するように Outlook を設定している場合、信頼されている ThisAddIn.Application フィールドを使用している前述のコード例でも、To プロパティにはアクセスできません。

1thd35d7.collapse_all(ja-jp,VS.110).gifExchange 使用時に信頼するアドインを指定する

Outlook を Exchange と併用している場合、管理者は、オブジェクト モデル ガードによる影響を受けずに動作させる特定のアドインを指定できます。Visual StudioでOfficeソリューションを使用して作成したOutlookアドインは、信頼できません; これらはグループとしてのみ信頼できません。

Outlook は、アドインのエントリ ポイント DLL のハッシュ コードに基づいてアドインを信頼します。Visual Studio Tools for Office Runtime を対象とする Outlook アドインは、すべて同じエントリ ポイント DLL (VSTOLoader.dll) を使用します。つまり、Visual Studio Tools for Office Runtime を対象とするアドインがオブジェクト モデル ガードの影響なしで動作するように管理者が信頼する場合、Visual Studio Tools for Office Runtime を対象とする他のすべてのアドインも併せて信頼されます。特定のアドインがオブジェクト モデル ガードの影響なしで動作するように信頼する方法の詳細については、「Outlook でウイルス対策機能を管理するために使用する方法を指定する」を参照してください。

アクセス許可の変更がすぐに有効にならない

管理者がドキュメントまたはアセンブリのアクセス許可を調整する場合、このような調整を強制的に実行するには、ユーザーがすべての Office アプリケーションを終了して再起動する必要があります。

Microsoft Office アプリケーションをホストする他のアプリケーションにより、新しいアクセス許可の強制適用が妨げられる場合もあります。セキュリティ ポリシーを変更するときは、Office (ホストされているか、スタンドアロンであるかを問わず) を使用するすべてのアプリケーションを終了してください。

Microsoft Office system のセキュリティ センターの設定がアドインまたはドキュメント レベルのカスタマイズに影響しない

ユーザーは、セキュリティ センターでオプションを設定することにより、アドインが読み込まれないようにすることができます。ただし、Visual StudioでOfficeソリューションを使用して作成されるアプリケーション レベルのアドインとドキュメント レベルのカスタマイズは、これらの信頼設定は影響しません。

セキュリティ センターを使用してアドインの読み込みを禁止した場合、次のタイプのアドインは読み込まれません。

  • マネージ COM アドインおよびアンマネージ COM アドイン

  • マネージ スマート ドキュメントおよびアンマネージ スマート ドキュメント

  • マネージ オートメーション アドインおよびアンマネージ オートメーション アドイン

  • マネージ リアルタイム データ コンポーネントおよびアンマネージ リアルタイム データ コンポーネント

次の手順では、Microsoft Office 2013 およびMicrosoft Office 2010でアドインの読み込みを制限するには、userがどのよう [セキュリティ センタ] の使用方法について説明します。これらの手順は、Visual StudioのOffice開発ツールを使用して作成されるアドインやカスタマイズには影響しません。

Microsoft Office 2010およびMicrosoft Office 2013 アプリケーションのアドインを無効にするには

  1. [ファイル] のタブをクリックします。

  2. [ApplicationName] [オプション] のボタンをクリックします。

  3. カテゴリ ペインで、**[セキュリティ センタ]**を選択します。

  4. 詳細ペインで、**[セキュリティ センターの設定]**を選択します。

  5. カテゴリ ペインで、**[アドイン]**を選択します。

  6. 詳細ペインで [アプリケーション アドインに対し、信頼できる発行元の署名を必須にする] または [すべてのアプリケーション アドインを無効にする] を選択します。

参照

その他の技術情報

Office ソリューションのセキュリティ保護