Appidcertstorecheck.exe が大量に起動する問題について

こんにちは。Windows サポート チームの依田です。

今回は、ある特定の条件下で、Appidcertstorecheck.exe というプロセスが大量に起動してしまう問題についての原因と対処策についてご案内します。

 

 

==============================
■ 事象概要と事象が発生した時の影響
==============================

Windows 10 / Windows Server 2016 端末にて、ある特定の条件下で、上の図の様に Appidcertstorecheck.exe というプロセスが大量に起動してしまう事象が発生することがあります。

このプロセスが大量に起動することで、対象端末のメモリが逼迫し、システムに影響を及ぼす可能性があります。

 

==============================
■ 事象発生原因と対処策の概要
==============================

Appidcertstorecheck.exe は、Applocker と呼ばれるアプリケーションの実行を制御する為の OS の機能が、証明書のチェックを行う際に呼び出される実行ファイルです。

今回の Appidcertstorecheck.exe が大量に起動してしまう事象は、後述の “事象の発生条件” に合致している環境下で、証明書の検証時にクライアントからインターネット上のサイト “https://ctldl.windowsupdate.com” に公開されている ”Pinrulesstl.cab” という名前のファイルにアクセスが出来ないことが原因で発生します。

その為、結論としては、”Pinrulesstl.cab” をクライアントが参照できるようにすることで事象は解消されます。

 

==============================
■ 事象の発生条件
==============================

・ OS バージョンが Windows 10 / Windows Server 2016 以上
・ インターネット上のサイト “https://ctldl.windowsupdate.com” に直接アクセスが出来ない
・ AppLocker の機能が有効
・ ルート証明書更新プログラムが有効

※ ルート証明書更新プログラムの詳細につきましては、記事の末尾の “参考サイト” をご参照ください。

 

- 補足情報
クライアントが直接インターネット上のサイト “https://ctldl.windowsupdate.com” にアクセスできなかったとしても、社内のファイル サーバーに、本来 “https://ctldl.windowsupdate.com” から取得する情報を予めダウロードしておき、信頼されているルート証明書のリスト、および信頼されていない証明書のリストをクライアントに確認させる運用をされているお客様もいらっしゃるかと思います。その様な状況においても、ファイル サーバー上に ”Pinrulesstl.cab” が存在しない場合、Windows 10 / Windows Server 2016 以上の OS では、今回の問題が発生します。

 

==============================
■ 事象の発生経緯
==============================

Windows 10 / Windows Server 2016 からは、セキュリティ強化を目的として、ルート証明書更新プログラム実行時、証明書の検証を行う際に ”Pinrulesstl.cab” ファイルをチェックする要件が加わりました。

”Pinrulesstl.cab” ファイルには証明書のチェーン情報が格納されており、こちらのファイルを確認することで、内部のドメイン名が意図しない証明書や不正に発行された証明書にチェーンするのを防ぐことができ、man-in-the-middle 攻撃を減らすことが可能となっております。

そして、Windows 10 / Windows Server 2016 以上の OS が、この ”Pinrulesstl.cab” ファイルにアクセス出来ない場合の具体的な動作は以下の通りです。

 

  1.  ”Pinrulesstl.cab” にアクセスが出来ないと、アクセスに失敗したタイミングでレジストリ "PinRulesLastError" の値が更新されます。
  2. レジストリ "PinRulesLastError" の値が書き換わると、CryptSvc サービスが、appidsvc (Application Identity Service) サービスを呼び出します。
  3.  呼び出された appidsvc サービスが、appidcertstorecheck.exe を起動させるタスクを実行します。
  4.  appidcertstorecheck.exe が起動します。

 

上記の動作は、”事象の発生条件” に合致した端末上で、ルート証明書更新プログラムが実行される度に発生します。
また、呼び出された appidcertstorecheck.exe が自動的に終了することはなく、OS が起動している間はタスク リストに溜まり続けることとなります。
その結果、appidcertstorecheck.exe が大量に滞留し、結果としてタスク マネージャ―上に appidcertstorecheck.exe が大量に表示される状況となります。

 

==============================
■ 事象の対処策
==============================

本事象を解消させる方法は、大きく分けて以下 3 点の内 “いずれか” となります。

 

[A] ルート証明書更新プログラムを無効化する

[B] “pinrulesstl.cab” ファイルを、社内の共有フォルダに配置する

[C] クライアントから直接インターネット上の “https://ctldl.windowsupdate.com” にアクセス出来るようにする

 

上記 3 点の、具体的な対処手順は以下の通りです。

 

-----------------------------------------------------------------------------------------------------------------------
[A] ルート証明書更新プログラムを無効化する
-----------------------------------------------------------------------------------------------------------------------

こちらは、インターネットに接続できないクローズドの環境、且つ信頼されているルート証明書のリスト、信頼されていない証明書のリストを社内のファイル サーバーにダウンロードして、各クライアントに参照させる運用をされていない環境において有効な対処策です。

上述の通り、"ctldl.windowsupdate.com" への通信や、”Pinrulesstl.cab” ファイルのチェックは、各端末の “ルート証明書更新プログラム” と呼ばれる機能が有効である場合に自動で行われます。

※ ルート証明書の自動更新プログラムは、Windows Update とは異なる機能ですが、アクセスする URL は上記の通り "https://ctldl.windowsupdate.com" であり、WindowsUpdate のサイトになります。

その為、“ルート証明書更新プログラム” 自体を無効化することで、”Pinrulesstl.cab” のチェックは行わなくなりますので、今回の事象を回避することが可能です。

 

// ルート証明書更新プログラムの無効化手順
---------------------------------------------------------------------------

ルート証明書更新プログラムは、以下のグループ ポリシー、もしくは後述のレジストリを直接編集することで無効化することが可能です。

 

<グループ ポリシー>
[コンピュータの構成]
- [ポリシー]
- [Windowsの設定]
- [セキュリティの設定]
- [公開キーのポリシー]
- [証明書パス検証の設定]
- [ネットワークの取得] タブで [これらのポリシーの設定を定義する] にチェックを入れた上で、[Microsoft ルート証明書プログラムで証明書を自動更新する] のチェックを外します。

 

<レジストリ>
キー: HKEY_LOCAL_MACHINE\Software\policies\Microsoft\SystemCertificates\AuthRoot
REG_DWORD: DisableRootAutoUpdate
値: 1

 

// ルート証明書更新プログラム を無効化することによる影響
---------------------------------------------------------------------------

ルート証明書更新プログラムを無効化することによる影響としては、ルート証明書更新動作が行われず、必要に応じてルート証明書を取得する動作が発生しなくなります。

ルート証明書更新プログラムを無効化が許容される環境としましては、明示的に必要なルート証明書が既に端末にインポートされている環境や、アプリケーション側で証明書エラーとなった際もそれを無視するような例外設定を行っている環境等です。

もしルート証明書更新プログラムが無効で、且つ端末の証明書ストアにも必要なルート証明書がインポートされていない場合は、証明書エラーとなり必要な通信が行えない状況となる可能性がございます。
(証明書エラーとなった際の処理はアプリケーションに依存いたします。)

なお、インターネットに接続できないクローズドの環境、且つ信頼されているルート証明書のリスト、信頼されていない証明書のリストを社内のファイル サーバーにダウンロードして、各クライアントに参照させる運用をされていない環境においては、(元々 "ctldl.windowsupdate.com" 内のコンテンツは参照されませんので) 無効化いただくことによる影響はございません。

 

-----------------------------------------------------------------------------------------------------------------------
[B] “pinrulesstl.cab” ファイルを、社内の共有フォルダに配置する
-----------------------------------------------------------------------------------------------------------------------

こちらは、信頼されているルート証明書のリスト、および信頼されていない証明書のリストを社内のファイル サーバーにダウンロードし、各クライアントに参照させている場合に有効な対処策です。

Windows Vista SP2 / Windows Server 2008 SP2 以降、インターネットに接続されている端末にて「certutil -syncwithwu」コマンドを実行することで、インターネット上のサイト “https://ctldl.windowsupdate.com” に公開されている情報を、任意のローカル フォルダーにダウンロードすることが可能となりました。
※ Windows 8 / Windows Server 2012 までの OS でこの機能を有効化する為には、セキュリティ アドバイザリ2854544 (KB2813430) の適用が必要。
※ こちらの動作の詳細につきましては、記事の末尾の “参考サイト” をご参照ください。

ただし、Windows 10 / Windows Server 2016 未満の OS 上で「certutil -syncwithwu」コマンドを実行しても、”Pinrulesstl.cab” ファイルはダウンロードされません。
その為、Windows 10 / Windows Server 2016 以上の端末から「certutil -syncwithwu」コマンドを実行して、”Pinrulesstl.cab” ファイルを社内の共有フォルダーに配置していただけます様お願いいたします。

手順は以下の通りです。

 

// ”Pinrulesstl.cab” ファイルを社内の共有フォルダーに配置する手順
------------------------------------------------------------------------------------

1. インターネットに接続可能な Windows 10 / Windows Server 2016 以上の端末を用意します。

2. 上記端末に、管理者権限を保持するアカウントでログオンします。

3. コマンド プロンプトを開き、以下のコマンドを実行します。

certutil -syncwithwu

4. にダウンロードされた ”Pinrulesstl.cab” ファイルを、社内の共有フォルダにコピーします。

 

なお、既存の自動更新端末を Windows 10 / Windows Server 2016 以上の端末に変更して、 を社内の共有フォルダに直接指定していただくことで、”Pinrulesstl.cab” ファイルをコピーする工数がなくなります。
将来的な運用工数削減の為に、こちらも併せてご検討ください。

 

-----------------------------------------------------------------------------------------------------------------------
[C] クライアントから直接インターネット上の “https://ctldl.windowsupdate.com” にアクセス出来るようにする
-----------------------------------------------------------------------------------------------------------------------

こちらは、クライアントから直接インターネット上の “https://ctldl.windowsupdate.com” にアクセスできるように、構成を変更することが可能な場合に有効な対処策です。

OS バージョンが Windows 10 / Windows Server 2016 以上の端末が、直接インターネット サイトにアクセス出来るようにすることで、“https://ctldl.windowsupdate.com” から、必要に応じて ”Pinrulesstl.cab” ファイルのチェックを行うことが可能となります。

ただし、クライアントが直接インターネットにアクセスできる環境である場合でも、プロキシ サーバーを中継している場合は注意が必要です。
ルート証明書更新プログラムにおける “https://ctldl.windowsupdate.com” へのアクセスは WinHTTP が利用されます。

WinHTTP では、ブラウザのプロキシ設定は利用されず、別途 WinHTTP の為のプロキシ設定が必要です。
こちらの、WinHTTP のプロキシ設定がされていない為に、”https://ctldl.windowsupdate.com” へのアクセスが拒否され、”Pinrulesstl.cab” にアクセスが出来ない為に、結果的に今回の事象に発展します。

こちらが原因で事象が発生している場合は、以下の手順で WinHTTP のプロキシ設定を行うことで、事象が改善される可能性がございます。

 

-----------------------------------------
WinHTTP プロキシの設定手順
-----------------------------------------

// Internet Explorer のプロキシ設定を、そのまま WinHTTP プロキシ設定に取り込む場合
-------------------------------------------------------------------------------------------------------------

1. 対象の全社端末にログオンの上、コマンド プロンプトを起動します。

2. 以下のコマンドを実行します。

netsh winhttp import proxy source=ie

3. 以下のコマンドで現在の WinHTTP プロキシ設定を確認し、意図したサーバーの IP アドレス (もしくは FQDN) が設定されているか確認します。

netsh winhttp show proxy

 

// Internet Explorer とは別のプロキシを設定する場合
-------------------------------------------------------------------------------------------------------------

1. 対象の全社端末にログオンの上、コマンド プロンプトを起動します。

2. 以下のコマンドを実行します。
※ ここでは、例として "testproxy.example.com" というプロキシ サーバーを 8080 番ポートで設定しています。

netsh winhttp set proxy proxy-server="testproxy.example.com:8080"

3. 以下のコマンドで現在の WinHTTP プロキシ設定を確認し、意図したサーバーの IP アドレス (もしくは FQDN) が設定されているか確認します。

netsh winhttp show proxy

 

// WinHTTP のプロキシ設定のリセット手順
-------------------------------------------------------------------------------------------------------------

WinHTTP のプロキシ設定をリセット (空の状態に) したい場合は、以下のコマンドを実行します。

netsh winhttp reset proxy

 

 

以上です。

 

<参考情報>

- ルート証明書プログラム
URL:https://docs.microsoft.com/ja-jp/security-updates/planningandimplementationguide/28561627

- Windows PKI – その2 – ルート証明書更新プログラムとは?
URL:https://blogs.technet.microsoft.com/jpntsblog/2009/12/24/windows-pki-2/

- セキュリティ アドバイザリ2854544 (KB2813430) ~ ルート証明書更新プログラムの管理強化
URL:https://blogs.technet.microsoft.com/jpsecurity/2013/06/11/2854544-kb2813430/

 

特記事項
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。