管理者特権での実行

アプリケーションを実行する必要があるアカウントの種類を確立する最初の手順は、アプリケーションが使用するリソースと、アプリケーションが呼び出す特権 API を調べることです。 アプリケーションまたはその大部分に管理者特権が必要ない場合があります。 Michael Howard と David LeBlanc によるセキュア コードの記述には、この評価を実行する方法の優れた説明が用意されており、強くお勧めします。 (このリソースは、一部の言語や国では使用できない場合があります)。

次のいずれかの方法を使用して、悪意のある攻撃にさらされる可能性が低いアプリケーションに必要な特権を提供できます。

  • 特権が低いアカウントで実行します。 これを行う 1 つの方法は、 PrivilegeCheck を使用して、トークンで有効になっている特権を決定することです。 現在の操作で使用可能な特権が十分でない場合は、そのコードを無効にして、管理者特権を持つアカウントにログオンするようにユーザーに依頼できます。
  • 管理者のアクセス許可を必要とする別のアプリケーション関数に分割します。 RunAs コマンドを実行するショートカットをユーザーに提供できます。 ショートカットを設定する方法の詳細な手順については、ヘルプで「runas」を検索してください。 プログラムを使用して、アプリケーションの AppId キー レジストリ キーの下で RunAs コマンドを構成できます。
  • ユーザー名とパスワードを取得するには、 CredUIPromptForCredentials (GUI) または CredUICmdLinePromptForCredentials (コマンド ライン) を呼び出してユーザーを認証します。 例については、「 ユーザーに資格情報を要求する」を参照してください。
  • ユーザーを偽装します。 System などの高い特権を持つアカウントで開始されるプロセスでは、 ImpersonateLoggedOnUser または同様の Impersonate 関数を呼び出してユーザー アカウントを偽装できるため、特権レベルが低下します。 ただし、 RevertToSelf の呼び出しがスレッドに挿入されると、プロセスは元のシステム特権に戻ります。

管理者特権を持つアカウントでアプリケーションを実行する必要があり、管理者パスワードをソフトウェア システムに格納する必要があると判断した場合は、「パスワードを安全に実行する 方法」を 参照してください。