自分のWindowsサービスと安全に通信する方法

私は .NETアプリケーション .NET Windowsサービスを持っています。この2つの間に安全な通信チャネルを確立するにはどうすればよいですか?

インターネット上のほとんどの人々は、名前付きパイプを参照してください。しかし、これはシステムに大きなセキュリティ上の問題を引き起こす可能性があります。私のアプリケーションをリバース・エンジニアリングする人がいる場合、彼はパイプ名とプロトコルを知っているので、彼は私のサービスに接続して、何でもしたいと思う。

Example: My client installs my application and gives it full privileges to install the service. Then he downloads some other software and does not give it full privileges. But that software finds my service and exploits it, using the pipe name and reverse engineered protocol.

どのように安全な通信チャネルを設計するのですか?サービスが何らかの形でそのパイプに接続されたプログラムにアクセスできるようになります(サービスが安全な場所にインストールされていれば、そのハッシュを比較できるようになります)。または、別の IPC を使用することはできますか?マイクロソフトは、このセキュリティホールに対する自分のサービスをどのようにして保護しますか?

4
名前付きパイプはセキュリティをサポートしていますが、私はそれを無効にしなければならないので覚えています:p
追加された 著者 leppie,
@ordag:Windowsが起動するたびに特権が必要なためです。私はアプリケーション全体が高水準で動作することを望んでいません。これは他のセキュリティ上の問題を引き起こす可能性があるからです。
追加された 著者 Paya,
最初にその穴を掘るのはなぜですか?あなたのアプリケーションに特権が必要な場合は、再度それを尋ねてください!彼があなたにそれを与えないなら、後退を考えたり、中止したりしてください。
追加された 著者 ordag,

2 答え

名前付きパイプのセキュリティ記述子を設定するだけで、クライアント側のコードだけがアクセスできるようにするだけです。

詳細はこちら:

http://msdn.microsoft.com/en-us/ us/library/windows/desktop/aa365600%28v = vs.85%29.aspx

7
追加された
現在ではありません。私はこれをコーディングして以来、しばらくしています。 :)
追加された 著者 jeffsix,
+1ありがとう、非常に有望そうです。クライアント側を特定のプロセスに限定した例がありますか(万が一)?
追加された 著者 Paya,
さて、こちらが見つかりました。しかし、それはまだ私が必要とするものから遠いです。
追加された 著者 Paya,

私は暗号化プロトコルを見てみましょう。 RSA暗号化アルゴリズム。使用している転送プロトコル(パイプ、TCP/IP、メッセージなど)は問題ありません。それらのいずれかが何らかの形で「読む」ことができる。 あなたのケースでは、私はいくつかのネットワークプロトコル(TCP/IP、UDP)を将来スケーラビリティ機能を無料で使用することを望みます。クライアント側とサーバー側は、このように異なるPC /プラットフォーム上にある可能性があります。しかし、多くのことが要件に依存しています。なぜあなたは実際にこのデータを保護する必要がありますか、どのデータを保護する必要がありますか?

0
追加された