オンサイトセミナー
豊田孝の「IT談話館」 Windowsメモリダンプ解析を依頼する WinDbgとシステム分析




 本「IT談話館」一般公開記事は、10年以上の実務経験を持つ上級Windowsエンジニアを想定しています。
 本館は、Windowsカーネル深層を解析し、クラッシュ原因をはじめとするシステム内の「異様な動き」を検出・分析する
超高度な技術と実績を保有しています。



Windows ALPCメカニズムの考察


 本「IT談話館」の「一般公開記事」は、「Active Memory Dump とカーネルメモリダンプ」の解析結果を基に起草されています。「本館」主筆の「豊田孝」はDKOM(Direct Kernel Object Manipulation)ベースの解析手法の第一人者であり、Windowsカーネル空間の解析分野では世界の先頭を走っています。

 現在、セキュリティー問題を無視することはできません。Microsoft社側の負担だけではなく、同社製品の利用者側の負担も増しています。困ったことではありますが、当面避けられません。セキュリティーの視点から「Windows10ソフトウェアセンサー」を見た場合、本「IT談話館」の確認範囲では、「カーネル層保護ロジック」に加え、次のような保護メカニズム階層が考案・実装されています。下記リンクはすべて本館記事を指しています。
  1. Silo/Server Silo
  2. Job
  3. Session
  4. Protected Process
  5. Mandatory Integrity Control(MIC)
  6. Windows API(+CPU)
  7. CPU
 本稿では、WindowsのALPCメカニズムを取り上げています。解析ツールとしてはWinDbgを使用していますが、技術的に攻めるのではなく、どちらかといえば、人間とALPCの関係を考察する作業という性格を持ちます。

 この作業で使用するメモリダンプは次のようなものです。
2: kd> vertarget
Windows 10 Kernel Version 26100 MP (12 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Edition build lab: 26100.1.amd64fre.ge_release.240331-1435
Machine Name:
Kernel base = 0xfffff800`b7600000 PsLoadedModuleList = 0xfffff800`b84f4850
Debug session time: Sat Dec 14 16:03:38.576 2024 (UTC + 9:00)
System Uptime: 0 days 6:42:13.899
 このメモリダンプは2024年12月14日に採取されています。オープンされているALPCポート数は次のようになっています。
Processed 256 entries ffffd6074829a300 ffffd6074829a560
Processed 512 entries ffffd6074870dd00 ffffd607485d2d00
Processed 768 entries ffffd60749189530 ffffd60749189790
Processed 1024 entries ffffd60749b56c50 ffffd60749a80df0
Processed 1280 entries ffffd6074a6f3070 ffffd6074a6f32d0
Processed 1536 entries ffffd6073f3047e0 ffffd6073cd410b0
Processed 1792 entries ffffd6074937e070 ffffd6074937e2d0
Processed 2048 entries ffffd6074b371c60 ffffd6074b372a00
Processed 2304 entries ffffd6074cb1ba40 ffffd6074cb1bca0
Processed 2560 entries ffffd6074cd0bde0 ffffd6074a8eedf0
Processed 2816 entries ffffd6074c6fa070 ffffd6074b2f7070
Processed 3072 entries ffffd6074c721070 ffffd6074c7212d0
Processed 3328 entries ffffd607493eb5c0 ffffd6074900aca0
Processed 3584 entries ffffd6074c591300 ffffd6074559c820
Found list end after 3808 entries
 この結果は、4000に迫る数のALPCポートがオープンされていることを示しています。より正確には、メモリダンプの採取時点でメモリ内に残っているポート数と考えてよいでしょう。各ポートにはその作成者がいるはずですから、まずはその名前を確認してみます。
0001: AlpcPort->0xffffd607377ddb80	SeqNo->0001		Owner(ffffd607374d5040)->System
0002: AlpcPort->0xffffd607377ddde0	SeqNo->0001		Owner(ffffd607374d5040)->System
0003: AlpcPort->0xffffd607377deb80	SeqNo->0001		Owner(ffffd607374d5040)->System
0004: AlpcPort->0xffffd6073a5e6db0	SeqNo->0181		Owner(ffffd607374d5040)->System
0005: AlpcPort->0xffffd6073f222b90	SeqNo->0001		Owner(ffffd607374d5040)->System
0006: AlpcPort->0xffffd6073f02a090	SeqNo->0005		Owner(ffffd6073f228040)->smss.exe
0007: AlpcPort->0xffffd6073cef6db0	SeqNo->33207		Owner(ffffd60746e4f080)->csrss.exe
0008: AlpcPort->0xffffd60745c55d50	SeqNo->0001		Owner(ffffd607374d5040)->System
0009: AlpcPort->0xffffd60745b0ece0	SeqNo->0005		Owner(ffffd607374d5040)->System
0010: AlpcPort->0xffffd60745b19cb0	SeqNo->0001		Owner(ffffd60746e4f080)->csrss.exe

       ---

3799: AlpcPort->0xffffd6074914a590	SeqNo->0005		Owner(ffffd60745e40080)->lsass.exe
3800: AlpcPort->0xffffd60749b57580	SeqNo->0002		Owner(ffffd6073f5e3080)->notmyfault64.e
3801: AlpcPort->0xffffd607456e9ab0	SeqNo->0004		Owner(ffffd6074b7cf080)->ctfmon.exe
3802: AlpcPort->0xffffd6074f24e820	SeqNo->0015		Owner(ffffd6073f5e3080)->notmyfault64.e
3803: AlpcPort->0xffffd6074e97a590	SeqNo->0014		Owner(ffffd607483fa080)->svchost.exe
3804: AlpcPort->0xffffd60739fc4320	SeqNo->0002		Owner(ffffd6073f5e3080)->notmyfault64.e
3805: AlpcPort->0xffffd6073f721300	SeqNo->0003		Owner(ffffd6073f5e3080)->notmyfault64.e
3806: AlpcPort->0xffffd6074e877ab0	SeqNo->0006		Owner(ffffd6074b7cf080)->ctfmon.exe
3807: AlpcPort->0xffffd6074e89f590	SeqNo->0002		Owner(ffffd6074b7cf080)->ctfmon.exe
3808: AlpcPort->0xffffd6074ea4f820	SeqNo->0004		Owner(ffffd6073f5e3080)->notmyfault64.e
 この結果は、次のようなことを述べています。
  1. ポート数は3808であり、冒頭の数と一致している
  2. SeqNo数値は小さいものと大きいものが混在し、突っ込みどころがある
  3. 解析中のメモリダンプ採取にはMicrosoft社のMarkさんが作成した「notmyfault」外使用されている
 ALPCはプロセスとプロセスの間の通信を可能とするメカニズムです。Windowsプロセスを人に例えれば、人間社会における人間関係の構築と同じです。4000に迫る人間関係を打ち立てる人はあまり存在しないと思いますが、いずれにしても、人間関係の管理には多大なコストと神経を使うのが私たち人間の特徴です。時には、人間関係の構築と維持に疲れ果て、問題を抱え込んでしまうようなこともあります。Windows OSのALPCメカニズムにはそのような限界はないのでしょうか?

SeqNo値はWindows OSが付与される値ですが、SeqNo->0001などの一桁の値とSeqNo->33207といった5桁の値の間にはどのような事情、あるいは、問題が潜んでいるのでしょうか?次回から、このSeqNoの値の不思議さを起点とするALPC世界の考察旅を始めることにします。




ビジネスメニュー




「Windowsメモリダンプ解析サービス」のご案内
Windowsメモリダンプ解析技術

Copyright©豊田孝 2004- 2025
本日は2025-01-03です。