2011-06-22 8 views
9

私は管理アクセス(すべてのユーザーに影響を及ぼし、HKLMに格納され、管理アクセスに限定された設定)が必要なプログラムの部分を持っています。私はその標高を示すために、私のソフトウェアを変更したUAC高度でIPCを安全に行うには?

が必要とされています。私は何だった

SHELLEXECUTEINFO shExecInfo; 
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); 
shExecInfo.fMask = NULL; 
shExecInfo.hwnd = NULL; 
shExecInfo.lpVerb = L"runas"; 
shExecInfo.lpFile = L"myapp.exe"; 
shExecInfo.lpParameters = NULL; 
shExecInfo.lpDirectory = NULL; 
shExecInfo.nShow = SW_MAXIMIZE; 
shExecInfo.hInstApp = NULL; 
ShellExecuteEx(&shExecInfo); 

:対応して

enter image description here

iは昇格のプロンプトながら私の実行可能ファイルを起動するつもりですに行くは、コマンドライン上の名前付きパイプの名前を渡して、何をしているのかを指示するためにどこに接続できるかを自分自身に伝えます:

myapp.exe /uac 6C844671-E262-46DD-939E-47517F105FB6 

(はい、GUIDをパイプの名前として使用します)。このパイプを通して

私は何データベース、例えば私の高いクローンを言うだろう:それは

  • にユーザーを接続することになっているもの、サーバーのデータベースには変更
  • にものを作ることを言うべき

    誰もがmyapp.exeを立ち上げて、それにあらゆる種類のリクエストを送ることができたことを心配していました。

    MaliciousProgram.exe:O私は例えば、それを起動しませんでした原因

    ShellExecute("myapp.exe /uac HahaYouDoWhatISayNow") 
    

    私はUACの話、Channel9ビデオ、または記事があったLonghornのベータ中に覚えのとIPC(プロセス間通信)を行うことの間違いの危険性。

    私は車輪を再発明したくないので、すでに解決されているセキュリティ上の間違いをしています。しかし、私は "正しい" "UACの仰角でIPCを行うには、既存のガイダンスを見つけることができません。

    一時的な昇格処理のために生成された昇格プロセスと通信するためのIPCのパターン


    編集:uacipcタグの複合信者:53

  • +0

    質問してから約5年経ちました。あなたは満足のいく解決策に終わったことがありますか? –

    答えて

    2

    私は(以下に示すよう特定の警告で)ここにセキュリティ上の問題があると信じていません。ユーザーが昇格できない場合、このソリューションはとにかく動作しません。ユーザーが昇格でき、悪意のある場合、マシンはすでに侵害されています。たとえば、悪意のあるユーザーがHKLMを変更したい場合、regeditが利用可能なときにmyapp.exeを使用する理由は何ですか?

    しかし、私はあなたのサーバデータベースについて言及しておきます。これは仰角の要件にどのように適合しますか?一般的に言えば、リモートリソースへのアクセスに標高は必要ありません。 (いずれかのmyappの場合。exeまたはHKLMにはサーバーデータベースへのパスワードが含まれていますが、そうではありません)。

    IPCの選択について:私はUACプログラミングの専門家ではありませんが、MSDNを検索すると、数回、例えば:あなたはCOMと満足していない場合(参加、しかし

    http://msdn.microsoft.com/en-us/library/bb756996.aspx

    http://msdn.microsoft.com/en-us/magazine/cc163486.aspx

    も、この記事の第五のリンクでパワーポイントのスライドを参照してくださいクラブ!)あなたが示唆しているように名前付きパイプを使うのと同じように効果があるはずです。ただし、名前付きパイプに必要な通常の予防措置を講ずる必要があります。昇格したプロセスを起動する前に、名前付きパイプのサーバー側を作成し、パイプがすでに存在するかどうか、適切なACLで作成するかどうかを確認します。

    +0

    問題は、私の**上昇した**プロセスがパイプでリスンしている場合、**上昇していない**プロセスが同じパイプ上でコマンドを送信するのを止めることはありません。さらに悪いことに、私のコードでバッファオーバーフローのバグを悪用した非昇格プロセスがあります。非昇格プロセスでは、任意のコードを昇格させることができます。 –

    +0

    パイプ上のACLを正しく設定するだけで済みます。 nMaxInstancesを1に設定することも賢明な予防措置になります。特に編集的な気分になっている場合は、特権プロセスに送信する命令をハッシュし、コマンドラインにハッシュを含めることができます。 –

    +0

    また、同じユーザーアカウントで実行されている昇格されていないプロセスは、昇格したプロセスに悪意のある指示を送信する場合は、昇格していないプロセスを常に迂回できることに注意してください。したがって、他のユーザーアカウントに対してパイプを保護するだけで済みます。同じアカウント内の他のプロセスから保護しようとすると無意味になります。 –

    関連する問題