Office ソリューションに固有のセキュリティに関する考慮事項
Microsoft .NET Framework および Microsoft Office には、Office ソリューションをセキュリティ上の脅威から保護するためのセキュリティ機能が備わっています。 このトピックでは、このような脅威のいくつかについて説明し、その脅威から保護するうえでの推奨事項を示します。 また、Microsoft Office のセキュリティ設定が Office ソリューションに及ぼす影響についても説明します。
対象: このトピックの情報は、Microsoft Office 2010 および 2007 Microsoft Office system のドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトに適用されます。 詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
信頼されたコードが新しい悪意のあるドキュメントで目的を変更して使用される
攻撃者は、ある特定の用途 (雇用アプリケーションの個人情報をダウンロードするなど) に使用する信頼されたコードを取得して、そのコードを別のドキュメント (ワークシートなど) で再利用できます。 コードは元のドキュメントが実行されていないことを認識していないため、別のユーザーが開いたときに、他の脅威 (個人情報の漏洩や拡大された権限によるコードの実行など) を招くことがあります。 あるいは、攻撃者は単にワークシートのデータを変更するだけで、被害者に送信して、予期しない動作を実行させることもできます。 悪意を持つユーザーは、コードにリンクされているワークシートの値、数式、または表示特性を変更することにより、変更したファイルを送りつけて別のユーザーを攻撃できます。 また、ワークシートの値を修正することにより、ユーザーが思いがけない情報にアクセスしてしまう場合もあります。
実行には、アセンブリの位置とドキュメントの位置の両方で十分な証拠が必要となるため、このような攻撃を簡単に実行することはできません。 たとえば、電子メール添付のドキュメントや信頼されていないイントラネット サーバーのドキュメントには、実行に必要なアクセス許可がありません。
この攻撃を可能にするには、潜在的に信頼できないデータをベースに決定を下すよう、コード自体を記述する必要があります。 たとえば、データベース サーバーの名前を含む非表示のセルがあるワークシートを作成します。 ユーザーがワークシートを ASPX ページに送信すると、SQL 認証およびハードコーディングされた SA パスワードを使用してそのサーバーに接続しようとします。 攻撃者は、非表示のセルの内容を別のコンピューター名と置き換え、SA パスワードを取得する場合があります。 この問題を回避するには、パスワードをハードコーディングせずに、サーバーにアクセスする前に、適切であることが判明しているサーバーの内部リストとサーバー ID を必ず照合してください。
推奨
入力内容およびデータのソースが、ユーザー、ドキュメント、データベース、Web サービス、その他のソースのどれであるかを常に確認してください。
特定の種類の機能を公開する場合には、注意が必要です。たとえば、権限の設定されたデータをユーザーに代わって取得し、保護されていないワークシートにこのデータを挿入する場合に注意が必要となります。
アプリケーションの種類に応じて、元のドキュメントが実行されていることを検証してから、コードを実行することは有効な対策です。たとえば、既知の安全な場所に保存されているドキュメントから実行されていることを検証します。
権限の設定されたアクションを実行するアプリケーションの場合は、ドキュメントを開くときに警告メッセージを表示することをお勧めします。 たとえば、アプリケーションが個人情報にアクセスすることを知らせるスプラッシュ画面やスタートアップのダイアログ ボックスを作成して、ユーザーに操作の続行またはキャンセルを選択してもらうことができます。 一見無害なドキュメントからこのような警告が表示された場合は、情報が漏洩する前にアプリケーションを終了できます。
コードが Outlook オブジェクト モデル ガードによってブロックされる
Microsoft Office では、オブジェクト モデルの特定のプロパティ、メソッド、およびオブジェクトをコードで使用できないように制限できます。 こうしたオブジェクトへのアクセスを制限することは、電子メール ワームやウイルスによってオブジェクト モデルが不正な目的で使用されるのを防ぐうえで有効です。 このセキュリティ機能は、Outlook オブジェクト モデル ガードと呼ばれています。 オブジェクト モデル ガードが有効になっているときに、制限されているプロパティまたはメソッドをアドインが使用しようとすると、Outlook はセキュリティ警告を表示します。これを受けてユーザーは、操作を中断したり、一定の時間内だけプロパティまたはメソッドへのアクセス許可を与えたりできます。 ユーザーが操作を中断した場合、Visual Studio Tools for Office を使用して作成された Outlook アドインは COMException をスローします。
オブジェクト モデル ガードをアドインに適用する方法は、Outlook を Microsoft Exchange Server と併用しているかどうかに応じて、次のように異なります。
Outlook を Exchange と併用していない場合、管理者は、コンピューター上のすべてのアドインを対象として、オブジェクト モデル ガードを有効または無効にできます。
Outlook を Exchange と併用している場合、管理者は、コンピューター上のすべてのアドインを対象としてオブジェクト モデル ガードを有効または無効にできるのに加え、オブジェクト モデル ガードの影響を受けずに動作させる特定のアドインを指定できます。 また、管理者は、オブジェクト モデルの特定の領域でのオブジェクト モデル ガードの動作を変更することもできます。 たとえば管理者は、オブジェクト モデル ガードが有効な場合でも、アドインのプログラムによる電子メールの送信を自動的に有効にできます。
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);
}
注意
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 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 Tools for Office を使用して作成されるアプリケーション レベルのアドインおよびドキュメント レベルのカスタマイズは、これらの信頼設定の影響を受けません。
セキュリティ センターを使用してアドインの読み込みを禁止した場合、次のタイプのアドインは読み込まれません。
マネージ COM アドインおよびアンマネージ COM アドイン
マネージ スマート タグおよびアンマネージ スマート タグ
マネージ スマート ドキュメントおよびアンマネージ スマート ドキュメント
マネージ オートメーション アドインおよびアンマネージ オートメーション アドイン
マネージ リアルタイム データ コンポーネントおよびアンマネージ リアルタイム データ コンポーネント
注意
スマート タグは、Excel 2010 および Word 2010 では使用されていません。 詳細については、「スマート タグの概要」を参照してください。
次の手順では、セキュリティ センターを使用して 2007 Microsoft Office System でアドインの読み込みを制限する方法について説明します。 これらの手順は、Visual Studio Tools for Office を使用して作成されるアドインやカスタマイズには影響しません。
Microsoft Office 2010 アプリケーション、Excel 2007、PowerPoint 2007、または Word 2007 でアドインを無効にするには
[ファイル] タブ (Microsoft Office 2010 アプリケーションの場合) または Microsoft Office ボタン (Microsoft Office 2007 アプリケーションの場合) をクリックします。
[ApplicationName のオプション] をクリックします。
カテゴリ ペインで、[セキュリティ センター] をクリックします。
詳細ペインで [セキュリティ センターの設定] をクリックします。
カテゴリ ペインで [アドイン] をクリックします。
詳細ペインで [アプリケーション アドインに対し、信頼できる発行元の署名を必須にする] または [すべてのアプリケーション アドインを無効にする] を選択します。
InfoPath 2007、Outlook 2007、Project 2007、または Visio 2007 でアドインを無効にするには
[ツール] メニューの [セキュリティ センター] をクリックします。
カテゴリ ペインで [マクロのセキュリティ] をクリックします。
詳細ペインで、[警告を表示せず、すべてのマクロを無効にする] または [署名されたマクロに対しては警告を表示し、署名されていないマクロはすべて無効にする] を選択します。
カテゴリ ペインで [アドイン] をクリックします。
詳細ペインで [マクロのセキュリティの設定を、インストールされているアドインに適用する] を選択します。