Windows 上の LSAISO プロセスでの CPU 使用率が高い

この記事では、WINDOWS を実行しているコンピューターで LSAISO プロセスで CPU 使用率が高くなる問題の解決策について説明します。

適用対象: Windows 10 - すべてのエディション、Windows Server 2016、Windows Server 2019
元の KB 番号: 4032786

現象

LSAISO (LSA 分離) プロセスでは、Windows 10、Windows Server 2016、またはそれ以降のバージョンを実行しているコンピューターで CPU 使用率が高くなります。

原因

Windows では、LSAISO プロセスは、仮想セキュリティ モード (VSM) と呼ばれる新しいセキュリティ環境で分離ユーザー モード (IUM) プロセスとして実行されます。

IUM プロセスへの DLL の読み込み、スレッドの挿入、またはユーザー モード APC の配信を試みるアプリケーションとドライバーは、システム全体を不安定化させる可能性があります。 この不安定化には、「現象」セクションで説明されている LSAISO CPU の高いシナリオが含まれる場合があります。

解決策 1: 消去のプロセスを使用する

一部のアプリケーション (ウイルス対策プログラムなど) では、DLL またはキュー APC が LSAISO プロセスに挿入されるのが一般的です。 これにより、LSAISO プロセスで CPU 使用率が高くなります。

トラブルシューティングのために、ツールを IUM プロセスにアタッチすることはできません。 これにより、WINDOWS デバッグ ツールまたは WPA\XPERF を使用して、LSAISO CPU スパイク中にスタック トレースをキャプチャできなくなります。 そのため、このシナリオで最適なトラブルシューティング方法は、"消去のプロセス" 手法を使用することです。 これを行うには、CPU スパイクが軽減されるまでアプリケーションとドライバーを無効にします。 問題の原因となっているソフトウェアを特定したら、ソフトウェア更新プログラムをベンダーに問い合わせてください。 次の MSDN トピックに記載されている ISV の推奨事項を参照できます。

分離ユーザー モード (IUM) プロセス

注:

CPU スパイクをテストするときに、疑わしいソフトウェアとドライバーを無効にした後、この方法で再起動が必要になる場合があります。

解決策 2: キューに入った APC を確認する

Windows 用の無料のデバッグ ツール (WinDbg、KD、CDB、NTSD) をダウンロードします。 これらのツールは、Windows ドライバー キット (WDK) と Windows ドライバー キット (WDK) の両方に含まれています。 次に、次の手順に従って、どのドライバーが APC を LSAISO にキューイングするかを判断します。

  1. CPU スパイクを再現しながら、次の Sysinternals Web サイトの NotMyFault.exe などのツールを使用してカーネル メモリ ダンプを生成します。

    Sysinternals Suite

    注:

    システムで VSM が有効になっている場合、暗号化解除が必要になるため、完全なメモリ ダンプは推奨されません。 カーネル ダンプを有効にするには、次の手順に従います。

    1. コントロール パネルで [システム] 項目を開き、[システム設定の詳細設定] を選択します。
    2. [システムのプロパティ] ダイアログ ボックスの [詳細設定] タブで、[スタートアップと回復] 領域の [設定] を選択します。
    3. [スタートアップと回復] ダイアログ ボックスの [デバッグ情報の書き込み] ボックスの一覧で [カーネル メモリ ダンプ] を選択します。
    4. 手順 5 で使用する ダンプ ファイル の場所をメモし、[OK] を選択します
  2. Windows 用デバッグ ツールから WinDbg.exe ツールを開きます。

  3. [ ファイル ] メニューの [ シンボル ファイル パス] をクリックし、Microsoft シンボル サーバーの次のパスを [ シンボル パス ] ボックスに追加し、[OK] を選択 します
    https://msdl.microsoft.com/download/symbols

  4. [ ファイル ] メニューの [ クラッシュ ダンプを開く] をクリックします。

  5. 手順 1d で説明したカーネル ダンプ ファイルの場所を参照し、[ 開く] を選択します。 .dmp ファイルの日付を確認して、このトラブルシューティング セッション中に新しく作成されたことを確認します。

  6. [コマンド] ウィンドウで、「!apc」と入力し、Enter キーを押します。

    !apc を示すカーネル ダンプ ファイルのコマンド ボックスのスクリーンショット。

    出力は次のスクリーンショットのようになります。

    !apc コマンドの出力のスクリーンショット。この例では、ProblemDriver.sys という名前のドライバーが LsaIso.exe の下に一覧表示されます。

  7. LsaIso.exeの結果を検索します。 ProblemDriver>.sys という名前<のドライバーが LsaIso.exe の下に表示されている場合 (手順 6 の出力例に示すように)、ベンダーに問い合わせて、「分離ユーザー モード (IUM) プロセス」トピックに記載されている推奨される軽減策を参照してください。

    注:

    Lsaiso.exeの下にドライバーが一覧表示されていない場合は、LSAISO プロセスにキューに登録された APC がないことを意味します。

詳細

VSM は、IUM プロセス (トラストレットとも呼ばれます) を保護するために、仮想信頼レベル (VTL) と呼ばれる分離モードを使用します。 LSAISO などの IUM プロセスは VTL1 で実行され、他のプロセスは VTL0 で実行されます。 VTL1 で実行されるプロセスのメモリ ページは、VTL0 で実行されている悪意のあるコードから保護されます。

Windows 10とWindows Server 2016以前は、ローカル セキュリティ機関サブシステム サービス (LSASS) プロセスは、ローカル システム ポリシー、ユーザー認証、監査の管理のみを担当していましたが、パスワード ハッシュや Kerberos キーなどの機密セキュリティ データも処理していました。

VSM のセキュリティ上の利点を使用するために、VTL1 で実行される LSAISO トラストレットは、VTL0 で実行されている LSAISO プロセスと RPC チャネルを介して通信します。 LSAISO シークレットは LSASS に送信される前に暗号化され、LSAISO のページは VTL0 で実行されている悪意のあるコードから保護されます。