
インシデント対応 & デジタルフォレンジックデバッグ拡張機能
===========
SwishDbgExtは、Microsoft WinDbgのデバッグ拡張機能であり、利用可能なコマンドセットを拡張するだけでなく、既存のコマンドの修正と改善も行います。 この拡張機能はMatt Suiche(@msuiche)によって開発されました。サポートについては [email protected] までご連絡いただくか、機能リクエスト、コントリビューションの申し出、バグ報告をお願いします。
SwishDbgExtは、一連のデバッグ、インシデントレスポンス、メモリフォレンジックのコマンドを提供することで、カーネル開発者、トラブルシューター、セキュリティ専門家にとって作業をより容易にすることを目的としています。 SwishDbgExtはWinDbgデバッグ拡張機能であるため、ローカルまたはリモートのカーネルデバッグセッション、Microsoft LiveKdによって生成されたライブセッション、さらにブルースクリーンやComae DumpItのようなハイブリッドユーティリティによって生成されたMicrosoftクラッシュダンプでも使用できます。
詳細については https://blog.comae.io/comae-2016-contest-swishdbgext-features-3c9a63c62209#.tnt1b9usx を参照
WinDbg拡張機能を対応する(x86またはx64)WinDbgフォルダにコピーするか、以下のように !load コマンドを使用して手動でロードできます。ターゲットDLLのフルパスにスペースや引用符を含めることはできません。
!load X:\FullPath\SwishDbgExt.dll
###例:
kd> !load E:\projects\labs\SwishDbgExt\bin\x64\SwishDbgExt.dll;
SwishDbgExt v0.7.0 (Nov 2 2016) - Incident Response & Digital Forensics Debugging Extension
SwishDbgExt Copyright (C) 2016 Comae Technologies FZE - http://www.comae.io
SwishDbgExt Copyright (C) 2014-2016 Matthieu Suiche (@msuiche)
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
よりDMLフレンドリーなテンプレートでWinDbgテンプレートを更新したい場合は、パッケージに同梱されている windbg_template.reg ファイルを直接インポートできます。
利用可能な拡張コマンドに関する情報を表示します。
引数を指定しない場合、すべてのコマンドのリストが表示されます。引数として既存のコマンドを指定すると、そのコマンドのパラメータ一覧が表示されます。
コールバック関数を表示
使用されているコードケイブを検索
コンソールコマンドの履歴を表示
ユーザーの資格情報を表示(gentilwikiのmimikatzに基づく)
ドライバーのリストを表示 !ms_drivers は現在ロードされているドライバーのリストを表示します。 この例では、このカーネルダンプのクラッシュ時にロードされていたいくつかのドライバーを示しています。 このコマンドでは、ドライバーに関する詳細なIRP情報も表示できます。 上の画像では、e1cexpress.sys のIRP内のドライバー固有のI/Oスタック位置が表示されています。ここでは、IRP_MJ_CREATE などのファンクションコードが表示され、対象のデバイスオブジェクトが開かれ、I/O操作が可能であることを示しています。
メモリ空間をディスクにダンプ
Exキュー待機ワーカーを表示
!exqueue はWindows 8では適切に動作しないため、動作するバージョンを実装する必要がありました。元のコマンドと同様に、動作中のワーカースレッドキューを表示します。
WinDbgのセグメンテーションをリセット("16.kd>" を修正)
GDTを表示
!ms_gdt はグローバルディスクリプタテーブルを表示します。x64ではすべてのセレクタがフラット(0x0000000000000000から0xFFFFFFFFFFFFFFFF)であることに注意してください。このコマンドは、GDTへのフッキングが疑われる場合に特に役立ちます。x64でGDTのフッキングを試みると、バグチェックが呼び出されるためです。これはx64がGDTのフッキングを禁止しているためです。
レジストリハイブのリストを表示
ms_hivelist はレジストリハイブのリストを表示します。
ハイブ(例:\Registry\Machine\Software)を直接調べて、そのサブキーや値を表示できます:

IDTを表示
!ms_idt は割り込みディスクリプタテーブルを表示します。GDTと同様に、x64システムでIDTがフックされていると、バグチェックが呼び出されます。これはMicrosoftがプログラム的に、IDTをフックするカーネルモードドライバーに対して防止策を実装したためです(通常はIDTへの呼び出しをインターセプトし、独自の処理を追加するもの)。そのため、上の画像では、見渡す限り「No」と表示されています。
メモリ空間を分析し、マルウェアスコアインデックス(MSI)を返します(Frank Boldewinの研究に基づく)
マスターブートレコード(MBR)をスキャン
ネットワーク情報(ソケット、接続など)を表示
オブジェクトのリストを表示
プロセスのリストを表示
!ms_process は !process と !dml_proc の改良版です。
以下のように、コマンドでDML(デバッガーマークアップ言語)を使用できるのが便利な点の1つです。下線付きのコマンドはすべて、実際にはコマンドへのリンクです。
例えば以下では、/vads /scan を使用してVAD(仮想アドレス記述子)をスキャンした出力を確認できます。「Malware Score Index」という列があり、シェルコードやヒープスプレーの検出に役立ちます。
以下のスクリーンショットでは、複数のVADで異常に高いスコアが見られます(ヒープスプレーの使用による)。スコアをクリックするだけで、スキャンアルゴリズムが実行されます。
スキャンアルゴリズムはFrank BoldewinのOfficeMalScannerユーティリティに基づいています。
そして、シェルコードがどこにあるかに関する情報が返されます。
/scan オプションはエクスポート関数にも使用でき、EAT(Export Address Table)がパッチされているかどうか、または関数のプロローグが変更されているかどうかを確認できます。
同様のテストはSSDT(!ms_ssdt)でも利用可能です。
キーコントロールブロックを読み取り
キーノードを読み取り
!reg WinDbgコマンドは、いくつかのバグのために長い間不満の種でした。そのためSwishDbgExtには、レジストリデータへのアクセスを可能な限りシンプルにするための独自のレジストリエクスプローラ関数があります。
キー値を読み取り
不審なNDISフックをスキャンして表示
サービスのリストを表示
システムサービスのディスパッチテーブル(SDT)関数を表示
!ms_ssdt はシステムサービスのディスパッチテーブルを表示します。このコマンドは、DKOM(ダイレクトカーネルオブジェクト操作)を通じて疑われるルートキットフックの調査に非常に役立ちます。nt!NtEnumerateKey のような低レベルのルーチンがフックされている場合、このコマンドはルートキット感染の可能性を分析するのに役立ちます。
ストアマネージャー(ReadyBoost)に関連する情報を表示
このコマンドでは、現在オペレーティングシステムで使用されているReadyBoost(USB 3.0が必要)キャッシュを一覧表示するだけでなく、ストアマネージャーによって管理されているメモリページのログを表示することもできます。 パラメータ: /cache
KTIMERのリストを表示
!ms_timers はKTIMER構造体を表示します。これは不透明な構造体で、さまざまなタイマーオブジェクトを表し、含んでいます。このコマンドは、どのドライバーがどのタイマーオブジェクトを作成したか、どのドライバーがどのルーチンを呼び出したかなどを把握するのに役立ちます。
キャッシュされたVACBのリストを表示
詳細モードのオン/オフを切り替え
以下はAlex Ionescuによって公開された研究に基づいており、こちらから入手可能です: https://github.com/ionescu007/lxss/
この機能はWindows 10以降のOSで利用可能で、以下のPowerShellコマンドでオプション機能としてインストールできます:
Enable-WindowsFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Linux用Windowsサブシステムの詳細については、以下のリンクを参照してください:
Windows Subsystem for Linux Overview.
Instance 0xFFFFE704EEB8F010
GUID: {E29032FD-35D3-4C53-AB68-6BCEBDA7176F}
State: (1) [STARTED]
Creation Flags: 00000001
GlobalData: 0xFFFFF802ED4138A0
Root Handle: 80000834
Temp Handle: 80000838
Job Handle: 8000083c
Token: 80000818
Event Handle: 800008bc
Map Paths (0): 0xFFFFE704EF437920
VFS Context: 0xFFFFE704EEFC4710
Memory Flags: 0x2
Last PID: 35
Thread Groups: 3
Session 0xFFFFE704EDB79EC0
Instance: 0xFFFFE704EEB8F010
Console inode: 0x0
Foreground PID: -1
Process Group 0xFFFFE704EDB79AE0
Instance: 0xFFFFE704EEB8F010
Session: 0xFFFFE704EDB79EC0
Thread Group 0xFFFFE704EF4F8000
Binary Path: /init
Thread(s): 1
Owner Process Group: 0xFFFFE704EDB79AE0
Flags: 0x00000000
Main Thread: 0xFFFFE704EF5CC010
Arguments (006 bytes): 0x00007FFFC081D6E0
Process 0xFFFFE704EF2F1D70
Instance: 0xFFFFE704EEB8F010
NT Process Object: 0xFFFFAE05E84EF800
NT Process Handle: 0xFFFFFFFF80000F58
VDSO Address: 0x00007FFFC0849000
Stack Address: 0x00007FFFC001E000
Session 0xFFFFE704EF5DB830
Instance: 0xFFFFE704EEB8F010
Console inode: 0xFFFFE704EF32D7A0
Foreground PID: 2
Process Group 0xFFFFE704EF5EF970
Instance: 0xFFFFE704EEB8F010
Session: 0xFFFFE704EF5DB830
Thread Group 0xFFFFE704EF5EE000
Binary Path: /bin/bash
Thread(s): 1
Owner Process Group: 0xFFFFE704EF5EF970
Flags: 0x0000000C
Main Thread: 0xFFFFE704EF5F8010
Arguments (010 bytes): 0x00007FFFDF34E418
Process 0xFFFFE704EDEF6EC0
Instance: 0xFFFFE704EEB8F010
NT Process Object: 0xFFFFAE05E84E6800
NT Process Handle: 0xFFFFFFFF80000D9C
VDSO Address: 0x00007FFFDF883000
Stack Address: 0x00007FFFDEB4F000
Session 0xFFFFE704EF0A8ED0
Instance: 0xFFFFE704EEB8F010
Console inode: 0xFFFFE704EF06B9C0
Foreground PID: 19
Process Group 0xFFFFE704F059CBC0
Instance: 0xFFFFE704EEB8F010
Session: 0xFFFFE704EF0A8ED0
Thread Group 0xFFFFE704EDE51000
Binary Path: /bin/bash
Thread(s): 1
Owner Process Group: 0xFFFFE704F059CBC0
Flags: 0x0000000C
Main Thread: 0xFFFFE704EDC78090
Arguments (010 bytes): 0x00007FFFF78CFB78
Process 0xFFFFE704F06389B0
Instance: 0xFFFFE704EEB8F010
NT Process Object: 0xFFFFAE05E618D800
NT Process Handle: 0xFFFFFFFF80001650
VDSO Address: 0x00007FFFF7C99000
Stack Address: 0x00007FFFF70D0000
yaraルールでプロセスメモリをスキャン
プロセスメモリをスキャンします。
!ms_yarascan /pid 0x228 /yarafile /yarafile C:\Rules.yar
すべてのプロセスメモリをスキャンします。
!for_each_process "r? @$t0 = (nt!_EPROCESS *) @#Process; .process /r /p @$t0; !ms_yarascan /pid @@C++(@$t0->UniqueProcessId) /yarafile C:\\Rules.yar"
MsPEImageFile はWindowsバイナリ(PE)で使用される共通基本情報を含み、以下の3つの異なるクラスに派生しています: