トップ回答者
プロセス間通信

質問
-
お世話になります。
あるアプリ(EXE)からCOMサーバー(EXE)のメソッドをコールして
値を取得するのですが、パラメータや戻り値のやり取りはシステム的にどのようになっているのでしょうか。勝手なイメージですが、所詮はEXE同志のやり取りなので、共有メモリを使用しておこなってそうなのですが、
なにか参考文献などあれば教えてください。本質的な質問としては、あるアプリ(EXE)からCOMサーバー(EXE)のメソッドをコールしするときの
パラメータの値や戻値を、悪意のあるユーザーがスパイすることが可能なのか、不可能なのか、つまりセキュリティ的にどうなのかを知りたいのです。よろしくお願いします。
p.s.
RPC(LPC)が使用されているのがわかったんですが、その通信のセキュリティってどうなりますか?
RPCの仕組みが理解できていないので、参考文献等あればご教授を。
回答
-
RPCだけでなくCOM自身もSecurityの仕組みを持っているので、まずはCOMから調べて次にRPCを調べるとよいでしょう。
まず初めにMSDNで「COM Security」をKeyword検索して、文献を読んでみてください。>悪意のあるユーザーがスパイすることが可能なのか
Securityに絶対はないですから、不可能と言い切るのは難しいかもしれません。
しかし、簡単なことではないでしょう。[COM/COM+ セキュリティ]
http://msdn.microsoft.com/ja-jp/vstudio/dd463967- 回答としてマーク 山本春海 2011年6月21日 8:59
-
漠然としていますが、どのようなことを気にかけているのでしょうか?
例えばデバッガからは見たい放題ですよね? そしてデバッガは特別な存在ではありません。DebugActiveProcess()を使えば、プロセスにアタッチしてデバッグを開始(したように見せかけてデータを盗み見ることも)できます。
# 例示したAPIは不適切ですが、直観的なのであえてこれを選択。セキュリティを気に掛けることは大事ですが、前提知識が求められます。「誰々が安全と言ったから安全なんだ」では意味がありませんし。
- 回答としてマーク 山本春海 2011年6月21日 8:59
-
>どういう風にしらべてよいのかわからず
Hintになりそうな情報を探してみると、以下が見つかりました。
[How to: Debug COM Clients and Servers Using RPC Debugging]
http://msdn.microsoft.com/en-us/library/kf71skzd(v=VS.71).aspx[COM, RPC and Heap Corruption ?]
http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/0948f785-fe99-4c22-a9d9-250c33a8ee85/[COM, RPC and Heap Corruption - Part 2]
http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/52acd858-3dfa-473c-b49f-b3b7b6e09451概念的な情報は、MSDNですぐ見つかりますので省略します。
- 回答としてマーク 山本春海 2011年6月21日 8:59
すべての返信
-
RPCだけでなくCOM自身もSecurityの仕組みを持っているので、まずはCOMから調べて次にRPCを調べるとよいでしょう。
まず初めにMSDNで「COM Security」をKeyword検索して、文献を読んでみてください。>悪意のあるユーザーがスパイすることが可能なのか
Securityに絶対はないですから、不可能と言い切るのは難しいかもしれません。
しかし、簡単なことではないでしょう。[COM/COM+ セキュリティ]
http://msdn.microsoft.com/ja-jp/vstudio/dd463967- 回答としてマーク 山本春海 2011年6月21日 8:59
-
漠然としていますが、どのようなことを気にかけているのでしょうか?
例えばデバッガからは見たい放題ですよね? そしてデバッガは特別な存在ではありません。DebugActiveProcess()を使えば、プロセスにアタッチしてデバッグを開始(したように見せかけてデータを盗み見ることも)できます。
# 例示したAPIは不適切ですが、直観的なのであえてこれを選択。セキュリティを気に掛けることは大事ですが、前提知識が求められます。「誰々が安全と言ったから安全なんだ」では意味がありませんし。
- 回答としてマーク 山本春海 2011年6月21日 8:59
-
ご返事ありがとうございます。
>漠然としていますが、どのようなことを気にかけているのでしょうか?
具体的にもうしますと、スタンドアロン環境で、APP.EXE→COMサーバ(EXE)で値のやり取りを行うのですが、
APP.EXEから渡されたパラメータ値をもとに、COMサーバー(EXE)は何等か処理して値を返し、
APP.EXEがその値の整合性をチェックして問題なければ、App.EXEのある機能が起動できるというプロテクトの役割もおこなっています。
この戻り値がわかれば、自作したCOMサーバーに置き換えられてプロテクトを解除されてしまうことを懸念しています。もちろん、パラメータの暗号化やCOMサーバーのモジュールからハッシュ値をもとめておいて、改ざんがないのかをチェックすることも感がておるのですが、
そもそも、COMサーバでとのパラメータや戻り値はどのようになって通信されているかが疑問にもち、質問させていただきました。これまで、COMクライアントからするとCreateObjectしてインタフェイスを介してメソッドをコールして、あたかもインプロセス内の関数をコールしているようにあつかっていましたが、
パラメータの値や戻り値が第3者に知られたくないと思った時、きになりはじめ調べていたのですが、どういう風にしらべてよいのかわからず、
質問させていただいた次第です。 -
>どういう風にしらべてよいのかわからず
Hintになりそうな情報を探してみると、以下が見つかりました。
[How to: Debug COM Clients and Servers Using RPC Debugging]
http://msdn.microsoft.com/en-us/library/kf71skzd(v=VS.71).aspx[COM, RPC and Heap Corruption ?]
http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/0948f785-fe99-4c22-a9d9-250c33a8ee85/[COM, RPC and Heap Corruption - Part 2]
http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/52acd858-3dfa-473c-b49f-b3b7b6e09451概念的な情報は、MSDNですぐ見つかりますので省略します。
- 回答としてマーク 山本春海 2011年6月21日 8:59