本「
IT談話館」一般公開記事は、10年以上の実務経験を持つ上級Windowsエンジニアを想定しています。
本館は、Windowsカーネル深層を解析し、クラッシュ原因をはじめとするシステム内の「異様な動き」を検出・分析する
超高度な技術と実績を保有しています。
人間関係とプロセス間通信(1/n)
本「IT談話館」の「一般公開記事」は、「Active Memory Dump とカーネルメモリダンプ」の解析結果を基に起草されています。「本館」主筆の「豊田孝」はDKOM(Direct Kernel Object Manipulation)ベースの解析手法の第一人者であり、Windowsカーネル空間の解析分野では世界の先頭を走っています。
現在、セキュリティー問題を無視することはできません。Microsoft社側の負担だけではなく、同社製品の利用者側の負担も増しています。困ったことではありますが、当面避けられません。セキュリティーの視点から「Windows10ソフトウェアセンサー」を見た場合、本「IT談話館」の確認範囲では、「カーネル層保護ロジック」に加え、次のような保護メカニズム階層が考案・実装されています。下記リンクはすべて本館記事を指しています。
- Silo/Server Silo
- Job
- Session
- Protected Process
- Mandatory Integrity Control(MIC)
- Windows API(+CPU)
- CPU
一般市民が政治家に何かを陳情する場合、通常は間を取り持つ仲介者が必要になります。仲介者は私たちからの依頼を受けると、政治家本人かその秘書に依頼内容を伝え、面会日などを設定します。面会日には、同席することもあればしないこともあるでしょう。面会後は陳情結果が気になります。結果は、政治家または秘書から私たちに直接伝えられることもあれば、仲介者を経由することもあるでしょう。知らされた結果に納得できない場合、私たちは政治家あるいは秘書に直接その旨を伝達することも仲介者経由で伝達することもできます。このような一連の流れの中には、あいまいさが残されています。それは、政治家あるいは秘書、そして、仲介者の責任範囲です。政治家などの責任範囲は本稿では取り上げません。
仲介者の責任範囲はどのようなものでしょうか。政治家側に紹介したところまでか。政治家側から陳情結果を受け取り、私たちに伝達するところまでか。結果に納得できない私たちを最後まで支援してくれるのか。仲介者の責任範囲を事前に決めておくのが理想ですが、人によっては、いやそこまでは、と冷たく断られる事態も想定できます。一つ返事で私たちの意向をすべて汲んでくれる人もいることでしょう。私たち陳情者、仲介者、そして、陳情を受ける政治家の間にはあいまいな要素を含む人間関係が構築されます。一方、ALPCはWindows内蔵のデジタル機能ですから、Microsoft社の担当チームは人間関係に見られたようなあいまいさ要素を極力取り除く必要があります。次の情報を見てみましょう。
0028: AlpcPort->0xffff97092cf4f090 SeqNo->00003 Type->1 Owner(ffff97092cf7e180)->winlogon.exe
TargetQueue->0x0000000000000000 TargetSequence->0x0000000000000000
Communication->0xffffb88e3360d530 Connection->0xffff97092cf4f090 Server->0x0000000000000000 Client->0x0000000000000000
0029: AlpcPort->0xffff9709264849f0 SeqNo->00004 Type->2 Owner(ffff97091e4dd040)->System
TargetQueue->0xffff97092cf4f090 TargetSequence->0xffff970923b5fd00
Communication->0xffffb88e33613320 Connection->0xffff97092cf4f090 Server->0xffff970923b5fd00 Client->0xffff9709264849f0
0030: AlpcPort->0xffff970923b5fd00 SeqNo->00003 Type->3 Owner(ffff97092cf7e180)->winlogon.exe
TargetQueue->0xffff9709264849f0 TargetSequence->0xffff9709264849f0
Communication->0xffffb88e33613320 Connection->0xffff97092cf4f090 Server->0xffff970923b5fd00 Client->0xffff9709264849f0
この情報は、政治家に相当する「winlogon.exe」プロセスと陳情者に相当する「System」プロセスが仲介者である「Connection」を経由して通信している様子を示しています。この情報には、Type値が1から3までの値を持つ3個のプロセスが含まれています。まず、Typeについて簡単にみておきます。
Type値の1は、メモリ割り当てが行われた直後であり、ServerやClientなどの必要なデータがメモリに設定されていないことを示しています。人間関係でいえば、政治家「winlogon.exe」と仲介者「Connection->0xffff97092cf4f090」は存在しますが、だれからも陳情依頼を受けていない状態です。陳情依頼を受け付ける準備ができているにすぎません。
Type値の2は、陳情者「System」は仲介者「0xffff97092cf4f090」を介して政治家「Server->0xffff970923b5fd00」と対面しているあるいは対面した状態を示しています。Typeの3は、政治家「Server->0xffff970923b5fd00」が仲介者「Connection->0xffff97092cf4f090」を介して陳情者「Client->0xffff9709264849f0」から依頼を受け付けているあるいは受け付けた状態を示しています。
ALPCはWindows内部機能であり、Type値を使ってClient(陳情者)プロセスととServer(政治家)プロセスを区別・管理しています。これら2つのプロセスは、上の例では、仲介者「Connection->0xffff97092cf4f090」が用意され、プロセス間通信が容易に可能となっています。最後に、仲介者「Connection->0xffff97092cf4f090」の責任範囲を確認しておきます。
上の情報内の「TargetQueue」項目はメッセージ(陳情依頼や結果)の送信先を示しています。Clientの場合には、仲介者「Connection->0xffff97092cf4f090」となりますが、ServerではClientとなっています。つまり、仲介者「Connection->0xffff97092cf4f090」は陳情者から送信されるメッセージを受け取り、それを政治家に中継します。一方、メッセージを受信した政治家は、仲介者を経由することなく、陳情者に依頼結果を直接返信しています。仲介者は通信経路を接続するだけであり、面倒見がよくないとの印象を受けます。Microsoftの担当チームはデジタル仲介者を「接続ポート」と呼び、大げさな仲介機能を実装していないことを示唆しています。ただ、陳情者からのメッセージは政治家に中継していますから、次回はその他の機能を検討します。