仮想化ベースのセキュリティ
ハードウェア仮想化とWindowsハイパーバイザーで隔離環境を作り、カーネルが侵害され得る前提でセキュリティ機能を収容する仕組み。
仮想信頼レベル
仮想セキュアモードが提供する階層的な特権レベル。番号が大きいほど特権が高く、現在はVTL0とVTL1の2レベルが実装されている。
メモリ整合性
カーネルモードのコード整合性検証をVBSの隔離環境で実行するVBSの機能。カーネルページは検証合格後にのみ実行可能となり、実行可能ページは書き込み可能にならない。
ハイパーバイザーで保護されたコード整合性
Credential Guard
資格情報のハッシュ処理をカーネルからアクセスできない分離メモリ領域で行う機能。TPMを使ってその領域の鍵を測定値で保護する。
Windowsハイパーバイザー
ハードウェアの直上で動き、パーティションと呼ばれる隔離実行環境を作って物理CPUとメモリへのアクセスを調停するType 1のハイパーバイザー。Hyper-Vを有効にすると、ホストのWindows自身もその上のルートパーティションで動く。
Hyper-Vハイパーバイザー
Microsoftハイパーバイザー
仮想セキュアモード
OSソフトウェアの内側に新しいセキュリティ境界を作るためのハイパーバイザーの機能群。Device Guard・Credential Guard・仮想TPMなどの土台。
SLAT
ゲスト物理アドレスからシステム物理アドレスへの二段目のアドレス変換をCPUのハードウェアで行う仕組み。Intel EPTやAMD RVIが該当し、現行のHyper-VとVBSの必須要件。
二段階アドレス変換
カーネルへのコード注入
脆弱性を悪用してカーネルモードで不正なコードを実行させる攻撃手法。
HVCIによるドライバー読み込みブロック
メモリ整合性の要件に適合しないドライバーの読み込みがブロックされる事象。
CodeIntegrity - Operationalログ
コード整合性のイベントが記録される、イベントビューアーのApplications and Services Logs配下の運用ログ。App Controlによるexe・DLL・ドライバーのブロック(イベント3077・3076・3089が中心)に加え、メモリ整合性(HVCI)によるドライバーの読み込みブロック(イベントID 3087が代表)もここに記録される。
分離LSAプロセス
VTL1で動く分離LSAプロセス(LSAIso.exe)。Credential Guard有効時に資格情報の秘密を保管し、lsassとはRPCで通信する。デバイスドライバーをホストしない。
Pass-the-Hash
盗んだパスワードのハッシュ(NTハッシュ)を使って、平文パスワードを知らないままNTLM認証を通過する攻撃。
Pass-the-Hash攻撃
Win32_DeviceGuardクラス
root/Microsoft/Windows/DeviceGuard名前空間のWMIクラス。VBSの状態と、Credential Guardやメモリ整合性など各サービスの構成・動作状態を返す。
セキュアカーネル
VTL1で動く小さなカーネル。通常のNTカーネルから隔離された実行環境を提供する。
分離ユーザーモード
VTL1のユーザーモード。トラストレットと呼ばれる信頼されたプロセスが動く。
トラストレット
分離ユーザーモードで動く信頼されたプロセス。システムコールの多くをVTL0のNTカーネルへマーシャリングして処理を依頼する。
信頼されたプロセス
NTカーネル
Windowsの通常のカーネル。VTL0のリング0で動き、ドライバーを収容する。仮想化ベースのセキュリティの文脈ではセキュアカーネルと対比される。
TGT(チケット許可チケット)
AS交換でKDCが発行する、krbtgtアカウントの長期鍵で暗号化されたチケット。クライアントは中身を読めず、TGS交換でサービスチケットを要求する際に提示する。
NTハッシュ
MD4(UNICODE(パスワード))として計算される、パスワードの一方向ハッシュ。NTLM認証の資格情報の出発点で、NTLMv2の応答鍵もここから導出される。
MD4ハッシュ
msinfo32(システム情報)
デバイスの暗号化の前提条件を満たしているかを「デバイスの暗号化のサポート」行で確認できるツール。
システム情報
HVCI対応ドライバー
メモリ整合性の実行可能ページ規則に適合し、コード整合性検証に合格するドライバー。
横展開(ラテラルムーブメント)
侵害した1台を足がかりに、同じネットワーク内の他の端末やサーバーへ侵害を広げる攻撃の段階。
ラテラルムーブメント
VBSはWindowsハイパーバイザーで隔離環境を作り、カーネルが侵害され得る前提でセキュリティ機能を収容する。
仮想セキュアモードは、階層的な特権レベルである仮想信頼レベルによって隔離を実現・維持する。
仮想信頼レベルの隔離はハイパーバイザーとSLATを利用して作られ、VTLごとのメモリアクセス保護はパーティション内のシステムソフトウェアから変更できない。
メモリ整合性はカーネルモードのコード整合性検証をVBSの隔離環境の中で実行する。
メモリ整合性の下では、カーネルページは検証合格後にのみ実行可能となり実行可能ページは書き込み不可のため、書き換えたメモリを実行に移すコード注入が成立しない。
未署名のドライバーや実行可能メモリの書き換えを前提とする古い設計のドライバーは、メモリ整合性の環境で読み込みがブロックされることがある。
ブロックされたドライバーはCodeIntegrity運用ログ(イベントID 3087が代表)で特定できる。
Credential GuardはVBSを使って秘密を隔離し、特権を持つシステムソフトウェアだけがアクセスできるようにする。
Credential Guard有効時、NTLMハッシュやチケット供与チケットなど保護対象の秘密は分離LSAプロセスが保管し、lsassとはRPCで通信する。
保護対象のドメイン資格情報については、VBSでの隔離により管理者権限のマルウェアでも秘密を抽出できず、Pass-the-Hashなどの資格情報窃取攻撃が阻まれる。ローカルアカウントなど保護対象外の資格情報には保護が及ばない。
VBSの動作状態はWin32_DeviceGuardクラスで確認でき、SecurityServicesRunningに1が含まれればCredential Guard、2が含まれればメモリ整合性が動作中である。
VBSの隔離環境は、ハイパーバイザーの機能群である仮想セキュアモードの上に成り立つ。
セキュアカーネルはVTL1で動き、通常のNTカーネルから隔離された実行環境を提供する。
VTL1ではセキュアカーネルの上に分離ユーザーモードがあり、そこでトラストレットが動く。
分離LSAプロセスは、VTL1の分離ユーザーモードで動くトラストレットである。
トラストレットはシステムコールの多くを自前で処理せず、VTL0のNTカーネルへマーシャリングして処理を依頼する。
Credential Guard有効時、Kerberosのチケット供与チケットは分離LSAプロセスに保管され、VTL0からはアクセスできない。
Credential Guard有効時、ドメイン資格情報のNTLMパスワードハッシュは分離LSAプロセスに保管され、VTL0からはアクセスできない。ローカルアカウントのハッシュは対象外。
VBSの状態は、msinfo32のシステムの要約にある「仮想化ベースのセキュリティ」欄で確認できる。
仮想セキュアモードはハイパーバイザーが提供する機能群であり、その実装はWindowsハイパーバイザーが担う。
ドライバーの読み込みブロックへの本筋の対処はHVCI対応版ドライバーへの更新であり、メモリ整合性の無効化は保護を手放す最終手段に位置づける。
窃取したハッシュによる認証が通ると、別のマシンへの横展開に悪用される。