Windows XP/7/8/10内部解析技術
WindowsカーネルアーキテクチャーとIoT
Windowsシステムは、ユーザー空間内で動作を開始するアプリケーションをプロセスオブジェクトに翻訳し、その翻訳結果をカーネル空間内部で管理しています。翻訳結果の中には、アプリケーションの設計仕様とユーザー要求(さらには、悪意)も当然含まれています。本「IT談話館」は、「メモリダンプ解析ビジネス」を展開しておりますが、その作業の核心はオブジェクトからオブジェクトへ伝播する翻訳結果の総合的な内部解析、と申し上げても過言ではございません。Windows Vista以降のWindowsシステムは、セキュリティーの強化をはじめとする多くの最新機能をカーネル空間に実装し、ユーザー空間から容易に把握できにくい傾向を強めています(参照)。また、信頼できるカーネルアーキテクチャー内部情報は、いろいろな事情から、公開されなくなっています。公開されている内部情報の多くの賞味期限はすでに切れているのが実情です。
本「IT談話館」は、カーネルメモリダンプやActive Memory Dumpの解析作業では、次のようなDKOM(Direct Kernel Object Manipulation)ベースの解析工程を採用しております。
- 「Windowsカーネルアーキテクチャー」知識を基に問題仮説を設定いたします。
- 上記問題仮説をC/C++とMASMの仕様を継承する「WinDbg内部解析専用言語」で独自解析コードとして実装いたします。
- 上記解析コードを実行し、設定した問題仮説の真偽を実証いたします。
- (必要に応じて)上記の工程を繰り返し、直面する問題を解決いたします。
次の情報をご覧ください。
kd> vertarget
Windows XP Kernel Version 2600 (Service Pack 2) UP Free x86 compatible
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 2600.xpsp_sp2_gdr.070227-2254
Machine Name:
Kernel base = 0x804d9000 PsLoadedModuleList = 0x8055c620
Debug session time: Wed Jun 4 19:50:12.855 2008 (UTC + 9:00)
System Uptime: 0 days 0:09:06.425
explorer.exe(0xfdbb88a8)
++Thread(0xff2cc030)->File(0xfe9fbf90)->Irp(0x8169ce48)->Driver(0x812f7858)->Device(0x81347040)
++Thread(0xff2cc030)->File(0xfea65168)->Irp(0x824c2e48)->Driver(0x812f7858)->Device(0x81347040)
++Thread(0xff2cc030)->File(0x811d2130)->Irp(0x825d6e48)->Driver(0x812f7858)->Device(0x81347040)
++Thread(0xff2cc030)->File(0x811daf28)->Irp(0x824cce48)->Driver(0x812f7858)->Device(0x81347040)
++Thread(0xff2cc030)->File(0xfd804998)->Irp(0x82744e48)->Driver(0x812f7858)->Device(0x81347040)
++Thread(0xff2cc030)->File(0xfd815b28)->Irp(0x8176ae48)->Driver(0x812f7858)->Device(0x81347040)
++Thread(0xff2cc030)->File(0x812badd0)->Irp(0x8202ee48)->Driver(0x812f7858)->Device(0x81347040)
++Thread(0xff2cc030)->File(0xfd8114c8)->Irp(0x81c76e48)->Driver(0x812f7858)->Device(0x81347040)
++Thread(0xfd890498)->File(0x811fc038)->Irp(0x81d5ee48)->Driver(0x813264d0)->Device(0x813261d8)
この情報は、先頭の「vertarget」コマンドの実行結果からお分かりのように、32ビットWindows XP SP2環境で採取されたカーネルメモリダンプの解析結果のほんの一部です。「explorer.exe」プロセス(アプリケーション)は、スレッドをはじめとする各種オブジェクトを経由して、デバイスオブジェクト(ハードウェア)へ間接的にアクセスしています。このアプリケーションからデバイスまでの制御の流れは、Windows XPからWindows 10までのすべてのWindowsバージョンとエディションで共通しています。
現在、ビッグデータやIoTという用語が毎日のようにインターネット空間内を飛び回っています。これらの用語は、データを発生させる多種多様なDeviceに関係しています。DKOM(Direct Kernel Object Manipulation)ベースの解析工程をカーネルメモリダンプやActive Memory Dumpに適応いたしますと、ダンプ採取時点でのDeviceとプロセス/スレッドの関係リストを簡単に収集することができます。
0: kd> vertarget
Windows 8.1 Kernel Version 9600 MP (4 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 9600.17328.amd64fre.winblue_r3.140827-1500
Machine Name:
Kernel base = 0xfffff802`50871000 PsLoadedModuleList = 0xfffff802`50b47370
Debug session time: Fri Nov 7 14:50:46.222 2014 (UTC + 9:00)
System Uptime: 0 days 21:21:18.953
0xFFFFE0019161F040->System
0xFFFFE00193887900->smss.exe
0xFFFFE00194537240->csrss.exe
0xFFFFE001947A1900->wininit.exe
0xFFFFE0019553D900->services.exe
0xFFFFE00194887200->lsass.exe
0xFFFFE00195593900->svchost.exe
0xFFFFE001955A5900->svchost.exe
0xFFFFE00194963100->nvvsvc.exe
0xFFFFE00195601900->svchost.exe
0xFFFFE00195619900->svchost.exe
0xFFFFE00194BB7440->svchost.exe
0xFFFFE00195621900->svchost.exe
0xFFFFE0019579B900->svchost.exe
0xFFFFE00195A59900->spoolsv.exe
0xFFFFE00195A70080->svchost.exe
0xFFFFE00195AFF900->btwdins.exe
0xFFFFE00195B8A900->officeclicktor
0xFFFFE00195BCC900->DTSU2PAuSrv64.
0xFFFFE00195BDD900->GfExperienceSe
0xFFFFE00195BF8740->HeciServer.exe
0xFFFFE00195C5E580->IPROSetMonitor
0xFFFFE00195C8C900->NvNetworkServi
0xFFFFE00195D0A900->nvstreamsvc.ex
0xFFFFE00195D61400->RaRegistry.exe
0xFFFFE00195C512C0->RaRegistry64.e
0xFFFFE00195DAE900->nvstreamsvc.ex
0xFFFFE00195DB0900->conhost.exe
0xFFFFE00195DE1900->RzKLService.ex
0xFFFFE00195E01900->MsMpEng.exe
0xFFFFE00195FDC900->NisSrv.exe
0xFFFFE00195C41380->svchost.exe
0xFFFFE00192F64900->jhi_service.ex
0xFFFFE00192F85900->LMS.exe
0xFFFFE00192FCE080->SearchIndexer.
0xFFFFE00191DF2900->audiodg.exe
0xFFFFE00191D44900->csrss.exe
0xFFFFE001977F5640->winlogon.exe
0xFFFFE00197A1D140->dwm.exe
0xFFFFE00196FB34C0->nvxdsync.exe
0xFFFFE00192730340->nvvsvc.exe
0xFFFFE00192888900->GameScannerSer
0xFFFFE00193081080->taskhostex.exe
0xFFFFE00197725900->explorer.exe
0xFFFFE001928EB200->taskeng.exe
0xFFFFE001974D5900->SlimDrivers.ex
0xFFFFE00196D79080->nvstreamsvc.ex
0xFFFFE001977A0900->conhost.exe
0xFFFFE00195AE9700->NvBackend.exe
0xFFFFE001920496C0->nvtray.exe
0xFFFFE00192858240->SettingSyncHos
0xFFFFE00196C0C540->RtkNGUI64.exe
0xFFFFE00197A89900->MSOSYNC.EXE
Thread->0xFFFFE001921223C0 DevObj->0xFFFFE00192FEB660 Type->0x07 Busy->1
0xFFFFE00197A83900->RAVBg64.exe
0xFFFFE00191FC6900->spotify.exe
0xFFFFE00197063200->SpotifyWebHelp
0xFFFFE001923AA900->BTTray.exe
0xFFFFE001961B8900->RzSynapse.exe
0xFFFFE001970200C0->jusched.exe
0xFFFFE001921C7900->BTStackServer.
0xFFFFE00195C53380->main.exe
0xFFFFE00196B41180->SpotifyHelper.
0xFFFFE00193012900->SpotifyHelper.
0xFFFFE0019290E900->SpotifyHelper.
0xFFFFE00196E0C080->WlanMgr.exe
Thread->0xFFFFE00192DF1580 DevObj->0xFFFFE00193BA1050 Type->0x17 Busy->1
0xFFFFE00197A70900->SpotifyHelper.
0xFFFFE001970D62C0->SpotifyHelper.
0xFFFFE00197981900->Steam.exe
0xFFFFE00196F9D580->steamwebhelper
0xFFFFE00196D67640->rads_user_kern
0xFFFFE00191EA9900->SteamService.e
0xFFFFE00193AD93C0->LoLLauncher.ex
0xFFFFE0019200F900->steamwebhelper
0xFFFFE00191F30080->LoLPatcher.exe
Thread->0xFFFFE0019274B880 DevObj->0xFFFFE00192FEB660 Type->0x07 Busy->1
Thread->0xFFFFE0019274B880 DevObj->0xFFFFE00192FEB660 Type->0x07 Busy->1
0xFFFFE001956C64C0->LoLPatcher.exe
0xFFFFE00196014080->LoLPatcher.exe
0xFFFFE001958C4080->rundll32.exe
0xFFFFE00196FE8900->steamwebhelper
0xFFFFE001976CC900->EasyAntiCheat.
0xFFFFE00191EA1080->RustClient.exe
0xFFFFE00192AD9900->GameOverlayUI.
0xFFFFE001923C3080->CoherentUI_Hos
0xFFFFE00192C327C0->ProcessCapture
0xFFFFE001921C4080->conhost.exe
0xFFFFE00192CBE900->CoherentUI_Hos
0xFFFFE00197957900->WmiPrvSE.exe
0xFFFFE001982B5200->MpCmdRun.exe
この出力結果は、ダンプ採取時、次のように定義されているDeviceがそれぞれのプロセス/スレッドからアクセスされていたことを示しています。
#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
#define FILE_DEVICE_DISK 0x00000007
赤色で強調されているデータは、物理Deviceの一つであるネットワークカードに何らかの問題が発生していることを示唆していますから、その線に沿って、関連するプロセス/スレッド、デバイスオブジェクト、IRP、ファイルオブジェクト、デバイスドライバオブジェクトをはじめとする本格的な解析作業を行うことになります。専門的な解析工程の紹介は本稿では割愛させていただきますが、アプリケーション、マルウェア、ハードウェア(デバイスドライバ/デバイスオブジェクト)などに起因する何らかのシステム異常が発生している場合、関連する複数のオブジェクトの間に成立している関係性の変容として現われます。本「IT談話館」はこの変容(システムの不健康度)をカーネルレベルで検出・解析する高度な技術を保有しております。解析作業は、いろいろな視点から行われますが、現在では、次のような視点の優先度が高いようです。
- システムクラッシュ原因の解析
- パフォーマンス低下因子の特定
- アプリケーションの性能分析と評価
- マルウェア感染の診断
- メモリフォレンジック