スクリプトのセキュリティ

 

適用先: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

トピックの最終更新日: 2007-02-12

ここでは、Exchange 管理シェルのスクリプトのセキュリティによって有害または不要なスクリプトが組織で実行されないようにする方法と、組織の要件を満たすようにスクリプトのセキュリティを変更するオプションについて説明します。

通常目にするスクリプトは、3 種類あります。つまり、ユーザー自身が作成したスクリプト、組織内の他の人が作成したスクリプト、およびインターネットに由来するなど組織外のスクリプト作成者が作成したスクリプトです。ユーザー自身がスクリプトを作成した場合、スクリプトが何を目的として作成されたものか確信が持てます。組織内の他の管理者とスクリプトを共有する場合、他の管理者もスクリプトを信用しますが、これはユーザーを信用しているからです。

スクリプトがインターネットに由来するなど、その他の人が作成したものの場合、スクリプトのセキュリティは懸念事項です。組織にとって未知の人物が作成したスクリプトを信用できる唯一の方法は、スクリプト コードを直接調べ、独立したテスト環境でスクリプトをテストすることです。これは時間がかかり、面倒な作業になる場合があります。しかし、悪意のあるコードや破壊的なコードを意図せずに実行してしまわないように、この作業をお勧めします。

Exchange 管理シェルは、スクリプトが作成後に変更されていないことを確認するために、デジタル署名の使用をサポートしています。デジタル署名の詳細については、このトピックの後の方で説明する「コード署名の基本」を参照してください。

スクリプト実行モード

スクリプト署名の状態および由来が既知か未知かに応じて、スクリプトの使用方法を制御するために、Exchange 管理シェルには 4 つのスクリプト実行モードがあります。各スクリプト実行モードを次の表に示します。

スクリプト実行モード

モード 説明

Restricted モード

信頼のおける発行元の署名がある場合にも、スクリプトは一切実行されません。

AllSigned モード

信頼のおける発行元のデジタル署名がある、すべてのスクリプトが実行されます。

RemoteSigned モード

ローカルで作成されたすべてのスクリプトが実行されます。インターネットのようなリモート環境からダウンロードされたスクリプトは信頼できないため、実行されません。これは、既定のスクリプト実行モードです。

Unrestricted モード

デジタル署名があるかないか、信頼のおける発行元かどうかに関係なく、すべてのスクリプトが実行されます。管理されているテスト環境でスクリプトを実行する場合を除き、Unrestricted モードを使用しないことをお勧めします。

スクリプト実行モードを既定の RemoteSigned モードから変更するには、Exchange 管理シェルで Set-ExecutionPolicy コマンドレットを使用します。たとえば、実行ポリシーを AllSigned モードに変更するには、次のコマンドを実行します。

Set-ExecutionPolicy AllSigned

Exchange 管理シェルでは、ポリシーに対する変更がすぐに認識されます。

大規模な組織において、Exchange 管理シェルを実行しているすべてのコンピュータに対して一貫したスクリプト実行モードを設定したい場合は、Active Directory グループ ポリシーを使用してスクリプト実行モード設定を適用します。Active Directory グループ ポリシーを構成して、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell レジストリ キーの下にある ExecutionPolicy 値を目的のスクリプト実行モードに設定します。

Caution注意 :
レジストリに対して誤った編集を行うと、重大な問題が発生する可能性があり、オペレーティング システムの再インストールが必要になる場合があります。 誤ったレジストリ編集に起因する問題は、解決できない場合もあります。 レジストリを編集する前に、重要なデータをバックアップしてください。

コード署名の基本

デジタル署名は、2 種類の暗号化キーを使用する公開キー署名アルゴリズムを使用して作成されます。これらの暗号化キーは、公開キーおよび秘密キーと呼ばれます。秘密キーは所有者のみが知っています。一方、公開キーはだれでも使用できます。デジタル署名では、秘密キーを使用して署名が生成され、対応する公開キーを使用して署名を検証します。

証明書は、認証のために一般的に使用されるデジタル文書で、オープン ネットワーク上の情報のセキュリティ保護に役立ちます。証明書は、対応する秘密キーを保持するエンティティに対して、安全に公開キーをバインドします。証明書は、発行者の証明機関 (CA) によってデジタル署名されています。コード署名証明書を使用して、スクリプトの作成者はスクリプト ファイルにデジタル署名を追加します。この作業では、秘密キーを使用して、スクリプトの一方向ハッシュが作成され、暗号化されます。暗号化されたハッシュは、スクリプト ファイルに追加されるデジタル署名文字列です。このデジタル署名文字列は、スクリプトの機能に影響を及ぼさないように、コメントとして追加されます。

このスクリプトが、コード署名を要求する Exchange 管理シェル環境で実行されると、スクリプト ファイルの一方向ハッシュが新たに作成されます。作成された一方向ハッシュは、公開キーを使用して暗号化されてから、スクリプト ファイルに格納されている暗号化されたハッシュと比較されます。スクリプトが、署名後に何らかの方法で変更されていなければ、ハッシュが一致します。次に、コンピュータは、信頼のおける証明機関までの証明書チェーンを構築して、署名が信頼のおける発行元のものであることを確認します。信頼のおける発行元のものであることが確認できると、スクリプトが実行されます。

スクリプトが信頼のおける作成者によるものかどうかは、スクリプトのデジタル署名に使用されたコード署名証明書によって決まります。一般的に、証明書には次の 2 種類があります。

  • 信頼のおける発行元によって発行された証明書   証明機関が、コード署名証明書を発行する前に、要求者の身元確認を行います。発行元となる機関は、証明書を販売する外部の公的な第三者または組織が管理する内部の証明機関になります。この種類の証明書を使用してスクリプトに署名する場合、証明書を発行した証明機関を認識して信頼する他のコンピュータのユーザーとスクリプトを共有できます。
  • 自己署名証明書   この種類の証明書の場合、ユーザーのコンピュータが証明書を作成する機関です。自己署名証明書の利点は、ユーザーが自分のコンピュータでスクリプトを作成、署名、および実行できる点です。ただし、他のコンピュータではユーザーのコンピュータが信頼のおける証明機関と認識されないため、他のコンピュータとスクリプトを共有することはできません。他のコンピュータがユーザーのコンピュータを信頼しない場合、自己署名された署名を検証できず、スクリプトが実行されません。

コード署名を管理するためのコマンドレット

Exchange 管理シェルには、コード署名を管理するための 2 つのコマンドレットが用意されています。Set-AuthenticodeSignature コマンドレットは、スクリプト ファイルにデジタル署名を追加するために使用します。Set-AuthenticodeSignature コマンドレットは、最初の位置のパラメータとして、署名するファイルの名前を取ります。ファイルが現在の作業ディレクトリにない場合、ファイルのパスを指定する必要があります。このコマンドレットの 2 番目の入力パラメータは、署名のために使用する証明書です。この証明書は、ローカル証明書ストアに格納されているものです。このパラメータは、証明書を参照する文字列の形式で指定する必要があります。証明書は、Cert ドライブを通じてアクセスできます。

コード署名管理のための 2 番目のコマンドレットは、Get-AuthenticodeSignature コマンドレットです。ファイルの現在のコード署名の状態をチェックして確認するには、ファイルをパラメータとして入力して Get-AuthenticodeSignature コマンドレットを使用します。コード署名されたスクリプトを使用して問題が発生したときに、Get-AuthenticodeSignature コマンドレットの出力を見ることで、トラブルシューティングに役立つ情報が得られる場合があります。

Microsoft のように、社外で作成されたスクリプトを実行する場合、自社環境のスクリプト実行モードに従ってスクリプトを修正する必要があります。スクリプトを基本的な .txt ファイルとして受け取り、.ps1 スクリプト ファイルに名前を変更して、必要な署名を適用してから、あたかもユーザー自身がスクリプトを作成したかのように、これらのスクリプトを実行できます。

デジタル署名およびスクリプト実行ポリシーの詳細については、Exchange 管理シェルで Get-Help About_Signing コマンドを実行して参照してください。このコマンドは、スクリプトにデジタル署名をするための詳細な手順を含む、ヘルプ情報を返します。

参照している情報が最新であることを確認したり、他の Exchange Server 2007 ドキュメントを見つけたりするには、Exchange Server TechCenter を参照してください。