次の方法で共有


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

Microsoft .NET Framework と Microsoft Office によって提供されるセキュリティ機能は、Office ソリューションをセキュリティ上の脅威から保護するのに役立ちます。 このトピックでは、これらの脅威の一部について説明し、それらに対する保護に役立つ推奨事項を示します。 また、Microsoft Office のセキュリティ設定が Office ソリューションに与える影響に関する情報も含まれています。

適用対象: このトピックの情報は、ドキュメント レベルのプロジェクトと VSTO アドイン プロジェクトに適用されます。 「Office アプリケーションとプロジェクトの種類で使用できる機能」を参照してください。

信頼されたコードは、新しい悪意のあるドキュメントで再利用されます

攻撃者は、雇用アプリケーションの個人情報のダウンロードなど、特定の目的を目的とした信頼できるコードを取得し、ワークシートなどの別のドキュメントで再利用する可能性があります。 このコードは、元のドキュメントが実行されていないことを認識せず、別のユーザーが開いた場合に、個人情報を明らかにしたり、特権を増やしてコードを実行したりするなど、他の脅威を開く可能性があります。 または、攻撃者はワークシート内のデータを変更して、被害者に送信されたときに予期しない動作をするようにすることもできます。 コードにリンクされているワークシートの値、数式、またはプレゼンテーションの特性を変更することで、悪意のあるユーザーが変更されたファイルを送信して別のユーザーを攻撃する可能性があります。 また、ユーザーが本来見てはならない情報にアクセスできる可能性が、ワークシート内の値を変更することで生じる場合もあります。

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

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

推奨事項

  • 入力とデータは、ユーザー、ドキュメント、データベース、Web サービス、またはその他のソースから取得したかどうかに関係なく、常に検証します。

  • ユーザーに代わって特権データを取得し、保護されていないワークシートに配置するなど、特定の種類の機能を公開することに注意してください。

  • アプリケーションの種類によっては、コードを実行する前に元のドキュメントが実行されていることを確認することをお勧めします。 たとえば、既知の安全な場所に保存されているドキュメントから実行されていることを確認します。

  • アプリケーションが特権アクションを実行する場合は、ドキュメントが開いたときに警告を表示することをお勧めします。 たとえば、アプリケーションが個人情報にアクセスすることを示すスプラッシュ画面またはスタートアップ ダイアログ ボックスを作成し、ユーザーに続行またはキャンセルを選択させる場合があります。 エンド ユーザーが一見無実のドキュメントからこのような警告を受け取った場合、何も侵害される前にアプリケーションを終了できます。

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

Microsoft Office では、オブジェクト モデル内の特定のプロパティ、メソッド、およびオブジェクトをコードで使用できないように制限できます。 Outlook は、これらのオブジェクトへのアクセスを制限することで、メールのワームやウイルスが悪意のある目的でオブジェクト モデルを使用するのを防ぐのに役立ちます。 このセキュリティ機能は、Outlook オブジェクト モデル ガードと呼ばれます。 オブジェクト モデル ガードが有効な状態で VSTO アドインが制限付きプロパティまたはメソッドを使用しようとすると、Outlook にセキュリティ警告が表示され、ユーザーが操作を停止したり、ユーザーがプロパティまたはメソッドへのアクセスを一定の期間許可したりできます。 ユーザーが操作を停止した場合、Visual Studio で Office ソリューションを使用して作成された Outlook VSTO アドインは COMExceptionをスローします。

オブジェクト モデル ガードは、Outlook が Microsoft Exchange Server で使用されているかどうかに応じて、さまざまな方法で VSTO アドインに影響を与える可能性があります。

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

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

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

オブジェクト モデル ガードの警告を最小化する

制限付きプロパティとメソッドを使用する場合のセキュリティ警告を回避するには、VSTO アドインがプロジェクトの Application クラスのThisAddIn フィールドから Outlook オブジェクトを取得していることを確認します。 このフィールドの詳細については、「 プログラム VSTO アドイン」を参照してください。

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

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

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 オブジェクトの restricted To プロパティを使用する方法を示します。 このコードでは、信頼された Application フィールドを使用して Microsoft.Office.Interop.Outlook.MailItemを取得します。

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

Exchange を使用するときに信頼するアドインを指定する

Outlook を Exchange と共に使用する場合、管理者は、特定の VSTO アドインをオブジェクト モデルガードに遭遇することなく実行できるように指定できます。 Visual Studio で Office ソリューションを使用して作成された Outlook VSTO アドインを個別に信頼することはできません。グループとしてのみ信頼できます。

Outlook は、VSTO アドインのエントリ ポイント DLL のハッシュ コードに基づいて VSTO アドインを信頼します。 Visual Studio Tools for Office ランタイムを対象とするすべての Outlook VSTO アドインは、同じエントリ ポイント DLL (VSTOLoader.dll) を使用します。 つまり、Visual Studio Tools for Office ランタイムを対象とする VSTO アドインがオブジェクト モデル ガードを検出せずに実行されることを管理者が信頼している場合、Visual Studio Tools for Office ランタイムを対象とする他のすべての VSTO アドインも信頼されます。 オブジェクト モデル ガードを検出せずに実行する特定の VSTO アドインを信頼する方法の詳細については、「 Outlook がウイルス防止機能を管理するために使用する方法を指定する」を参照してください。

アクセス許可の変更は直ちに有効になりません

管理者がドキュメントまたはアセンブリのアクセス許可を調整する場合、ユーザーはそれらの変更を適用するために、すべての Office アプリケーションを終了してから再起動する必要があります。

Microsoft Office アプリケーションをホストする他のアプリケーションでも、新しいアクセス許可が適用されるのを防ぐことができます。 ユーザーは、セキュリティ ポリシーが変更されたときに、Office を使用するすべてのアプリケーション (ホストまたはスタンドアロン) を終了する必要があります。

Microsoft Office システムのセキュリティ センターの設定は、アドインやドキュメント レベルのカスタマイズには影響しません

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

ユーザーが セキュリティ センターを使用して VSTO アドインの読み込みを妨げる場合、次の種類の VSTO アドインは読み込まれません。

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

  • マネージド スマート ドキュメントとアンマネージド スマート ドキュメント。

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

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

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

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

  1. [ ファイル ] タブを選択します。

  2. [ ApplicationNameオプション] ボタンを選択します。

  3. [カテゴリ] ウィンドウで、[ セキュリティ センター] を選択します。

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

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

  6. 詳細ウィンドウで、[ 信頼できる発行元によってアプリケーション アドインに署名する必要がある ] または [すべてのアプリケーション アドインを無効にする] を選択します