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

更新 : 2007 年 11 月

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

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

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

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

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

推奨

  • 入力内容およびデータのソースが、ユーザー、ドキュメント、データベース、Web サービス、その他のソースのどれであるかを常に確認してください。

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

  • アプリケーションの種類に応じて、元のドキュメントが実行されていることを検証してから、コードを実行することは有効な対策です。たとえば、既知の安全な場所に保存されているドキュメントから実行されていることを検証します。

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

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

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

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

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

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

Outlook 2003 の Outlook オブジェクト モデル ガードの詳細と、制限されるメソッドおよびプロパティの一覧については、「What's New in Microsoft Office Outlook 2003 for Developers?」を参照してください。Exchange 管理者向けの Outlook セキュリティ設定の詳細については、「Customizing Outlook 2003 to Help Prevent Viruses」を参照してください。

1thd35d7.alert_note(ja-jp,VS.90).gifメモ :

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

オブジェクト モデル ガードの警告を抑制する

アドインで、制限されたプロパティおよびメソッドを使用するときのセキュリティ警告を回避するには、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);
}
1thd35d7.alert_note(ja-jp,VS.90).gifメモ :

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

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

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

Outlook は、アドインのエントリ ポイント DLL のハッシュ コードに基づいてアドインを信頼します。Visual Studio Tools for Office を使用して作成された Outlook アドインは、すべて同じエントリ ポイント DLL (Outlook 2003 アドインの場合は AddinLoader.dll、Outlook 2007 アドインの場合は VSTOLoader.dll) を使用します。つまり、Visual Studio Tools for Office を使用して作成されたアドインがオブジェクト モデル ガードの影響なしで動作するように管理者が信頼する場合、Visual Studio Tools for Office を使用して作成された他のすべてのアドインも併せて信頼されます。特定のアドインがオブジェクト モデル ガードの影響なしで動作するように行う信頼の詳細については、「Customizing Outlook 2003 to Help Prevent Viruses」を参照してください。

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

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

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

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

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

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

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

  • マネージ スマート タグおよびアンマネージ スマート タグ

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

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

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

次の手順では、セキュリティ センターを使用して 2007 Microsoft Office System でアドインの読み込みを制限する方法について説明します。これらの手順は、Visual Studio Tools for Office を使用して作成されるアドインやカスタマイズには影響しません。

Excel 2007、PowerPoint 2007、または Word 2007 でアドインを無効にするには

  1. [Microsoft Office] ボタンをクリックします。

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

  3. カテゴリ ペインで、[セキュリティ センター] をクリックします。

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

  5. カテゴリ ペインで [アドイン] をクリックします。

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

InfoPath 2007、Outlook 2007、または Visio 2007 でアドインを無効にするには

  1. [ツール] メニューの [セキュリティ センター] をクリックします。

  2. カテゴリ ペインで [マクロのセキュリティ] をクリックします。

  3. 詳細ペインで、[警告を表示せず、すべてのマクロを無効にする] または [署名されたマクロに対しては警告を表示し、署名されていないマクロはすべて無効にする] を選択します。

  4. カテゴリ ペインで [アドイン] をクリックします。

  5. 詳細ペインで [マクロのセキュリティの設定を、インストールされているアドインに適用する] を選択します。

参照

概念

Office ソリューションにおけるセキュリティ (2007 システム)

その他の技術情報

Office ソリューションにおけるセキュリティ

Office ソリューションにおけるセキュリティ (2003 システム)