web-dev-qa-db-ja.com

Windows cmd.exeが昇格された特権で実行されている場合、プロンプトから実行するものは昇格された特権でも実行されますか?

Cmd.exeウィンドウのタイトルバーに「管理者」と表示され、昇格された特権で開始されたことを示している場合、このコマンドウィンドウから実行するものはすべて、昇格された特権で実行されることを意味しますか?

具体的には、次のようなものを実行した場合:

msiexec SomeProgram.msi

インストーラーは、昇格された特権で実行されていたcmd.exeから実行されたため、昇格された特権で実行されていますか?

具体的には、上記のmsiexec呼び出しのように、UIを表示し、cmd.exeウィンドウでプロンプトをすぐに返すアプリケーションが昇格された特権で実行されているのではないかと思います。

11
Ian C.

はい、昇格された特権で実行されます。

簡単なテスト:

1つの昇格コマンドと1つの非昇格コマンドプロンプトを開くことで、これを非常に簡単にテストできます。両方でコマンドnotepad.exeを実行し、空白のテキストファイルをC:\Windowsに保存してみてください。 1つは保存し、もう1つはアクセス許可エラーをスローします。

徹底的なテスト:

それがあなたのためにそれを確認するのに十分でない場合(それは本当に私を満足させませんでした)、あなたはSysInternalsから AccessChk を使うことができます。これは、管理者特権のコマンドプロンプトから実行する必要があります。

実行中の2つのメモ帳プロセスを確認することから始めましょう。

メモ帳:(accesschk.exe -v -p notepad

[11140] notepad.exe
  Medium Mandatory Level [No-Write-Up, No-Read-Up]
  RW DOMAIN\Tannerf
        PROCESS_ALL_ACCESS
  RW NT AUTHORITY\SYSTEM
        PROCESS_ALL_ACCESS
[11004] notepad.exe
  High Mandatory Level [No-Write-Up, No-Read-Up]
  RW BUILTIN\Administrators
        PROCESS_ALL_ACCESS
  RW NT AUTHORITY\SYSTEM
        PROCESS_ALL_ACCESS

1つは私のドメインユーザー名で実行されており、もう1つはAdministrators組み込みグループで実行されています。 必須レベルが高い もあります。特権とトークンの内訳については、-fフラグを使用して実行することもできます。

MSIExecおよびMSIファイル

msiexecを実行すると、状況が少し複雑になる可能性があると思いました。テストに便利なGoogle Chromeスタンドアロンインストーラーがあります。

msiexec.exe起動Chrome高架プロンプトからのインストーラー:

D:\Users\tannerf>accesschk.exe -p msiexec.exe

[10540] msiexec.exe
  RW BUILTIN\Administrators
  RW NT AUTHORITY\SYSTEM

mSIによって生成されたchrome_installer.exe:

D:\Users\tannerf>accesschk.exe -p chrome_installer.exe

[5552] chrome_installer.exe
     NT AUTHORITY\SYSTEM
     OWNER RIGHTS
  RW NT SERVICE\msiserver

もうそんなに切って乾かさないでください! chrome_installer.exeプロセスがMSIServerサービスを介して実行されたようです。


これにより、他のインストーラーがどのような動作をするのか不思議に思うので、便利なEvernote.msiを実行しました。

Evernoteインストーラーを起動する高架のmsiexec.exe:

[6916] msiexec.exe
  High Mandatory Level [No-Write-Up, No-Read-Up]
  RW BUILTIN\Administrators
        PROCESS_ALL_ACCESS
  RW NT AUTHORITY\SYSTEM
        PROCESS_ALL_ACCESS
[4652] msiexec.exe
  System Mandatory Level [No-Write-Up, No-Read-Up]
  R  BUILTIN\Administrators
        PROCESS_QUERY_INFORMATION
        PROCESS_QUERY_LIMITED_INFORMATION

面白い;今回はシステムレベルで実行されるmsiexec.exeがあります。プロセスモニターを使用して、ポップアップする実際のインストールウィンドウがシステムレベルのmsiexecプロセスからのものであることを確認しました。高い必須レベルを強制終了すると、システムレベルのプロセスも強制終了されます。

Evernoteインストーラーを起動する昇格されていないmsiexec.exe:

[7472] msiexec.exe
  Medium Mandatory Level [No-Write-Up, No-Read-Up]
  RW DOMAIN\Tannerf
        PROCESS_ALL_ACCESS
  RW NT AUTHORITY\SYSTEM
        PROCESS_ALL_ACCESS
[4404] msiexec.exe
  System Mandatory Level [No-Write-Up, No-Read-Up]
  R  BUILTIN\Administrators
        PROCESS_QUERY_INFORMATION
        PROCESS_QUERY_LIMITED_INFORMATION

Evernoteはどちらの方法でもシステムレベルのアクセスを取得するようです。インストーラーをダブルクリックしても同じ結果になります。


結論:

特に指定がない限り、プロセスがパーミッションを継承することはかなりよく示されていると思います。これは、msiexec SomeProgram.msiがすべてのプロセスプロセスにわたって高い必須レベルで実行されることを保証するものではありません。システムレベルまたはMSIServerで実行できます。あなたのマイレージは変わるかもしれません、そしてこれらの規則が「破られている」ように見える多くの例を見ても私は驚かないでしょう。

16
Tanner Faulkner

デフォルトでは、Windowsプロセスは親からセキュリティコンテキストを継承します。

プロセスのデフォルトのセキュリティ記述子のACLは、作成者のプライマリトークンまたは偽装トークンから取得されます。

プロセスのセキュリティとアクセス権に関するMSDN

ただし、より少ない権限でプロセスを生成することは可能です。

プロセスは、それを生成したプロセスの整合性レベルを継承しますが、整合性レベルは、プロセスの作成時にカスタマイズできます。ユーザーインターフェイス特権分離テクノロジでウィンドウメッセージの境界を定義するだけでなく、必須整合性制御は、Windowsエクスプローラー、Internet Explorer、Google Chrome、Adobe Reader)などのアプリケーションでドキュメントを分離するために使用されます。システム内の脆弱なオブジェクト。

必須整合性制御に関するウィキペディア 関連 この他のMSDNページ 、また言及 ここ別のプレゼンテーション プロセスの継承についても言及しています。

ただし、@ Tannerのテストと回答が示すように、cmd.exeは可能な限り最高レベルの特権継承で子プロセスを起動すると思います。

11
Bob

実行されたコマンドの特権を解除するには、次の2つの方法があります。

  • runas /trustlevel:0x20000 "msiexec SomeProgram.msi"(実行runas /showtrustlevelsそれを学ぶために0x20000は、デフォルトのユーザー信頼レベルです。これは、管理者として実行するときに実際に付与することなく、昇格された特権を「必要とする」プログラムをインストール/実行する場合にも機能します。これは タナーのメモ帳テスト )に合格します このSUの回答
  • psexec -l -d msiexec SomeProgram.msi per このSUの回答 (おそらくいくつかの ""も必要ですが、runasは十分に機能するため、これをテストしませんでした)
2
Tobias Kienzler