Windows 11 で独自のパスワードフィルター DLL(syngoPwdFilter.dll など)を使っていると、突然 CodeIntegrity のイベント ID 3033 が出て LSASS への読み込みがブロックされることがあります。本記事では、この現象の正体と「なぜ Microsoft 署名が必要なのか」、そして Partner Center を使って DLL を Microsoft 署名にする具体的な手順、さらに一時的な回避策や運用上の注意点までを、管理者目線で詳しく解説します。
Windows 11 で発生する「syngoPwdFilter.dll が LSASS に読み込まれない」問題とは
典型的な症状:CodeIntegrity イベント ID 3033
問題のパターンは、多くの場合以下のようになります。
- パスワードフィルター DLL(例:
syngoPwdFilter.dll)をC:\Windows\System32に配置 HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Notification Packagesに DLL 名を登録- Windows 11(特に 22H2 以降)の端末で再起動すると、アプリ側は「DLL をロードできない」状態になる
- イベントビューアの
Microsoft-Windows-CodeIntegrity/Operationalに、イベント ID 3033 が大量に記録される
3033 イベントのメッセージ例(日本語訳)は、概ね次のような内容です。
Code Integrity により、プロセス
\Device\HarddiskVolumeX\Windows\System32\lsass.exe が
\Device\HarddiskVolumeX\Windows\System32\syngoPwdFilter.dll
を読み込もうとしましたが、このファイルは Microsoft の署名レベル要件を満たしていないと判断されました。
Microsoft Q&A でも、まさに syngoPwdFilter.dll が Windows 11 でブロックされるという相談が投稿されており、同様の 3033 イベントが報告されています。
原因のキーワードは「LSA 保護(RunAsPPL)」
Windows 11 では、資格情報の窃取対策として LSA 保護(RunAsPPL:Local Security Authority Protection) が強化されています。LSASS(Local Security Authority Subsystem Service)プロセスを Protected Process Light(PPL) として起動し、一定レベル以上の信頼がないコードは読み込ませない仕組みです。
このとき、LSASS に読み込まれる以下のようなモジュールは、「Microsoft 署名」が必須 だと明言されています。
- スマートカードドライバー
- 暗号化プラグイン
- パスワードフィルター DLL(
Notification Packagesに登録される DLL)
そのため、GlobalSign や DigiCert などの「商用 CA によるコード署名」だけでは要件を満たせず、3033 でブロックされてしまいます。
なぜ Windows 11 で急に表面化したのか
Windows 11 22H2 以降では、新規セットアップや特定条件を満たす端末で LSA 保護が既定で有効化される 挙動が導入されています。
その結果、従来の Windows 10/Windows Server では普通に動作していたサードパーティ製のパスワードフィルター DLL が、「OS を入れ替えただけで突然ブロックされる」、という状況が起きます。DLL 側の不具合というよりは、OS 側のセキュリティ要件が変わったことが本質的な原因です。
LSA 保護と署名要件を整理する
イベント ID 3033 / 3065 / 3066 の意味
LSA 保護に関連する CodeIntegrity のイベントの意味は、Microsoft のドキュメントで次のように整理されています。
| イベント ID | 意味 | 挙動 |
|---|---|---|
| 3033 | プロセス(多くは lsass.exe)が読み込もうとしたモジュールが、Microsoft 署名レベル要件を満たしていない | ブロック(読み込み失敗) |
| 3063 | 共有セクション(Shared Sections)のセキュリティ要件を満たしていない | ポリシーによってはブロック |
| 3065 | 共有セクションの要件を満たしていないが、ポリシーにより読み込みが許可された | 許可(ログのみ) |
| 3066 | Microsoft 署名レベル要件を満たしていないが、ポリシーにより読み込みが許可された | 許可(ログのみ) |
3033 が LSASS + syngoPwdFilter.dll に対して出ている場合は、「LSASS へのロードが失敗した」=パスワードフィルターが機能していないと見なすべきです。
LSA プラグイン(パスワードフィルター)と署名レベルの関係
LSASS に読み込まれる LSA プラグイン(LsaLogonUser の拡張、パスワードフィルター DLL など)は、以下のように整理できます。
| 項目 | LSA 保護 無効 | LSA 保護 有効(RunAsPPL) |
|---|---|---|
| 必要な署名 | 商用 CA のコード署名(EV/OV など)でロード可能なケースが多い | Microsoft 署名レベルが必須 |
| CodeIntegrity 3033 | 状況によってはログのみで動作に影響がない場合もある | LSASS による読み込みが失敗し、プラグインが無効化 |
| 代表例 | 古いアンチウイルスや VPN クライアントの DLL などが 3033 を出すが、実動作に影響しないケースも報告あり | パスワードフィルター DLL、スマートカードドライバーなど、LSASS 直下で動くセキュリティコンポーネント |
Microsoft の公式説明にも、「Protected mode requires any plug-in that’s loaded into the LSA to be digitally signed with a Microsoft signature」 とあり、LSA プラグインに対して Microsoft 署名が必須であることが明記されています。
結論:GlobalSign(EV)署名だけでは不十分
よくある誤解
質問として多いのが、次のようなものです。
- 「DLL に GlobalSign の EV 署名を付けている。これで十分では?」
- 「Microsoft が発行した EV 証明書にすれば解決するのか?」
ここで重要なのは、次の2点です。
- 「EV コード署名証明書」と「Microsoft 署名」は別物
- LSA プラグイン用の Microsoft 署名は、Partner Center のファイル署名サービス経由で付与される
つまり、GlobalSign の EV 証明書で DLL を直接署名しても、それだけでは LSASS の Microsoft 署名レベルを満たしません。EV 証明書はあくまで、
- Partner Center に登録する開発組織の本人性確認
- Microsoft に提出する CAB ファイルを署名するための前提
として使われ、その後に Microsoft が DLL に追加署名(共署名)し、最終的な配布物として利用します。
正攻法:DLL を Microsoft 署名にする具体的な手順
ここからは、LSA プラグイン(パスワードフィルター DLL)を Microsoft 署名にする、実務的なフローをまとめます。
全体フローの概要
| ステップ | 概要 |
|---|---|
| 1 | Windows ハードウェア開発者プログラムに登録 |
| 2 | EV コード署名証明書を準備 |
| 3 | 対象 DLL(例:syngoPwdFilter.dll)をビルド |
| 4 | DLL だけを含む単一の CAB ファイルを作成 |
| 5 | その CAB を EV 証明書で Authenticode 署名 |
| 6 | Partner Center の File Signing Services から「Submit New LSA」で提出 |
| 7 | 返却された Microsoft 署名付き DLL を配布・導入 |
1. Windows ハードウェア開発者プログラムに登録
まず、組織として Windows ハードウェア開発者プログラムに登録し、Partner Center ハードウェア ダッシュボードにアクセスできる状態にします。
- 組織アカウント(Entra ID)の用意
- Microsoft の審査・承認
- 利用約款(LSA/UEFI 署名用)の同意
これらをすべて完了して初めて、File Signing Services(ファイル署名サービス)から LSA 提出が行えます。
2. EV コード署名証明書の準備
LSA プラグイン/UEFI 用のファイル署名サービスでは、EV コード署名証明書が必須です。
- 発行元の例:GlobalSign, DigiCert, Sectigo など
- 証明書の形態:HSM/USB トークン/クラウド署名サービス など
- 共通要件:CA/B フォーラムの EV コード署名ガイドラインに準拠
syngoPwdFilter.dll のように、すでに GlobalSign のコード署名証明書をお持ちの場合でも、それが EV 証明書かどうかを必ず確認しておきましょう。
3. DLL をビルドする際のポイント
DLL 自体は、通常のパスワードフィルター DLL として実装します。
- 対象 OS に合わせた 64bit DLL(x64)をビルド
- ビルド構成は Release、デバッグ用シンボルやログを極力削減
- 不要な共有セクション(
#pragma data_segなど)は作らない(3033/3065 の原因を減らすため) - CRT のリンク方法(/MD vs /MT)や依存 DLL を整理し、System32 に配置する DLL 単体で完結させる
ビルド完了後、まずは通常のコード署名(EV 証明書でも可)で DLL 自体に署名しておくと、内部的な改ざん検出や検査にも役立ちます(必須ではありません)。
4. DLL だけを含む単一の CAB ファイルを作る
LSA/UEFI 用のファイル提出には厳格なルールがあります。
- すべての LSA/UEFI 提出は「単一の CAB ファイル」であること
- その CAB には フォルダを含めず、署名対象となるバイナリ(DLL や .efi)のみを入れる
- 複数ファイルを入れる場合も、すべて同じ CAB にまとめる(LSA プラグインであれば、通常 1 ファイル)
例として、Windows 標準の makecab.exe を使って CAB を作るコマンドは次のようになります。
REM syngoPwdFilter.dll から syngoPwdFilter.cab を作成
makecab.exe syngoPwdFilter.dll syngoPwdFilter.cab
ここで作成された syngoPwdFilter.cab が、後続の EV 署名・Partner Center への提出対象になります。
5. CAB ファイルに EV 証明書で Authenticode 署名
次に、作成した CAB ファイルを EV コード署名証明書で署名します。
典型的な signtool.exe の使用例は次の通りです。
signtool sign ^
/fd SHA256 ^
/tr http://timestamp.sectigo.com ^
/td SHA256 ^
/f "YourEVCert.pfx" ^
/p YourPassword ^
"syngoPwdFilter.cab"
/f:EV 証明書(pfx)のパス/p:証明書のパスワード(HSM やトークンの場合は不要なこともあります)/tr:タイムスタンプサーバー
署名が完了したら、signtool verify /pa syngoPwdFilter.cab で署名検証しておくと安心です。
6. Partner Center の File Signing Services から「Submit New LSA」
準備が整ったら、いよいよ Microsoft への提出です。
- Partner Center ハードウェア ダッシュボードにサインイン
- 左側メニューから File Signing Services を選択
- 画面上部の Submit New LSA をクリック
- プロダクト名、連絡先など必要情報を入力
- 先ほど EV 署名した
syngoPwdFilter.cabをアップロード - 規約への同意が求められた場合は確認・承諾
送信後、しばらくすると(通常は数時間〜数日)Microsoft 署名付きの CAB/DLL がダッシュボードからダウンロードできるようになります。
7. Microsoft 署名付き DLL の配置と登録
ダウンロードした CAB を展開すると、Microsoft のデジタル署名が付与された DLL が含まれています。この DLL が、LSA 保護下でもロード可能な「正規の成果物」です。
- 対象端末(ドメインコントローラーなど)で CAB を展開
syngoPwdFilter.dllをC:\Windows\System32に配置- まだの場合は、レジストリでパスワードフィルターを登録
レジストリキー:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
値:
Notification Packages (REG_MULTI_SZ)
既存値: scecli
追記 : syngoPwdFilter ← 拡張子「.dll」は付けない
この登録方法は、Microsoft のパスワードフィルター DLL のインストール手順として公式に案内されているものと同じです。
再起動後、イベントビューアの System ログで Wininit(イベント ID 12)に「LSASS.exe が保護プロセスとして起動した」ログが出ていること、そして CodeIntegrity ログから 3033 が消えていることを確認してください。
一時的・代替的な対応策(自己責任で)
正攻法は「Microsoft 署名付き DLL を作る」ですが、開発リソースや社内プロセスの事情で、すぐには Partner Center 提出ができないケースもあります。その場合に検討されることが多い回避策を整理します。
1. パスワードフィルター DLL 自体を読み込まない(安全側)
最も安全な選択肢は、問題の DLL を LSASS から切り離すことです。
Notification PackagesからsyngoPwdFilterの項目を削除- 製品アンインストールやカスタムスクリプトで DLL を無効化
これは、Microsoft が「有効なパスワードフィルターのみを登録する」ことを推奨している流れとも一致します。
当然ながら、その DLL が提供する機能(パスワード同期、ポリシー強化など)は失われるので、業務要件とのトレードオフになります。
2. LSA 保護を監査モード(Audit)にする
Windows には LSA 保護を 「ブロック」ではなく「監査(イベントだけ記録して読み込みは許可)」するモードがあります。
- 監査モードでは 3065 / 3066 が出力されます
- DLL はロードされるため、機能検証や影響範囲の調査に使えます
- 本番環境の恒久運用には推奨されません(「要件を満たさないコードが保護プロセスに常駐」する状態になるため)
グループポリシーやレジストリで RunAsPPL を「Audit」に設定することで切り替え可能ですが、セキュリティレベルを意図的に落とす行為であることを理解した上で実施すべきです。
3. LSA 保護を無効化する(強く非推奨)
どうしても Microsoft 署名付き DLL を用意できない場合、LSA 保護そのものを無効化するという選択も技術的には存在します。
レジストリ例:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
RunAsPPL (DWORD) = 0
RunAsPPLBoot (DWORD) = 0
ただし、これは以下のような重大なデメリットがあります。
- 資格情報保護(Credential Guard 等)の効果が下がる
- マルウェアが LSASS にコードインジェクションしやすくなる
- セキュリティ監査やコンプライアンス上の指摘を受ける可能性
Microsoft 自身も、LSA 保護の無効化は基本的に推奨しておらず、やむを得ない検証用途などにとどめるべきとしています。
実務で使えるチェックリスト
Microsoft 署名 DLL 導入チェックリスト
- [ ] x64 版 DLL を Release ビルドした
- [ ] 不要な共有セクションを排除し、依存 DLL を整理した
- [ ] DLL 単体のみを含む 単一の CAB ファイル を作成した(フォルダを含めない)
- [ ] CAB に EV コード署名証明書で Authenticode 署名した
- [ ] Partner Center の File Signing Services → Submit New LSA から提出した
- [ ] 返却された DLL に Microsoft のデジタル署名が付いていることをプロパティで確認した
- [ ] DLL を
C:\Windows\System32に配置した - [ ]
Notification Packagesに DLL 名(拡張子なし)を追加した - [ ] 再起動後、CodeIntegrity ログから 3033 が消えたことを確認した
- [ ] パスワード変更シナリオで、フィルターが期待通り動作することを検証した
syngoPwdFilter.dll に関する Q&A まとめ
Q. syngoPwdFilter.dll を GlobalSign のコード署名証明書(例:GlobalSign GCC R45 CodeSigning CA 2020)で署名している。なぜブロックされるのか?
A. LSA 保護が有効な LSASS に読み込まれる DLL には「Microsoft 署名」が要求されるため、商用 CA の署名だけでは要件を満たせないからです。 Microsoft Q&A でも syngoPwdFilter.dll の事例に対して、LSA プラグインには Microsoft 署名が必要である旨が回答されています。
Q. Microsoft に DLL を署名してもらうには、どこから申請する? メールで依頼できる?
A. メールやサポート窓口に直接送る形ではなく、Partner Center ハードウェア ダッシュボードの File Signing Services から提出します。
- Partner Center → File Signing Services → Submit New LSA から CAB をアップロード
- 事前に Windows ハードウェア開発者プログラムへの登録と EV 証明書の準備が必要
Q. syngoPwdFilter.dll はドライバーではなく DLL だが、それでもこの手順が必要?
A. はい。LSASS に読み込まれる LSA プラグイン(パスワードフィルター DLL)は、種類に関係なく「Microsoft 署名が必要」という扱いです。 ドライバーのような WHQL 署名ではなく、LSA プラグイン/UEFI 用のファイル署名サービスの対象と考えるのが自然です。
Q. 3033 が出ていても、アプリが動いているように見える場合は無視してよい?
CodeIntegrity の 3033 は、「署名要件を満たさないモジュールがブロックされた」ことを意味しますが、それが必ずしも致命的な機能障害につながるとは限りません。例えばアンチウイルスの一部 DLL で 3033 が記録されても、ベンダー側が「影響なし」と回答しているケースもあります。
しかし、LSASS + パスワードフィルター DLL(syngoPwdFilter.dll など)の組み合わせでは、フィルター処理が丸ごと行われなくなるため、無視すべきではありません。
- パスワードポリシー強化が効かない
- パスワード同期や監査機能が停止する
- にもかかわらず、表面的にはログオンできてしまうため気付きにくい
このため、LSASS に関する 3033 は基本的に「要対応」と考える方が安全です。
まとめ:恒久策は「Microsoft 署名 DLL」一択
Windows 11 の LSA 保護強化により、syngoPwdFilter.dll のようなパスワードフィルター DLL は、単なる商用 CA のコード署名だけでは LSASS に読み込まれなくなりました。CodeIntegrity イベント ID 3033 は、そのことを示す代表的なサインです。
本記事で確認した通り、
- LSA 保護が有効な環境では、LSASS に読み込まれる LSA プラグインは Microsoft 署名必須
- GlobalSign などの EV 署名は 「提出用 CAB に署名するための前提条件」 に過ぎない
- 最終的に Partner Center の File Signing Services で Microsoft に署名してもらった DLL を配布する必要がある
一時的には LSA 保護の監査モードや無効化といった回避策も存在しますが、いずれもセキュリティレベルを下げる対処であり、恒久運用には適しません。特に、医療系システムや基幹システムのようにパスワードフィルターを使っている環境では、早期に Microsoft 署名 DLL を用意し、LSA 保護を有効にした状態でも安定稼働する構成へ移行することが、長期的な安全性とコンプライアンスの両面から強く推奨されます。
もしこれから新たにパスワードフィルター DLL を開発・導入する場合は、設計段階から「LSA 保護下での Microsoft 署名取得」を前提にし、Partner Center の利用や EV 証明書の調達をプロジェクト計画に組み込んでおくと、Windows 11 以降の環境でもトラブルを最小限に抑えることができるでしょう。

コメント