AppLocker・App Control for Business・Smart App Controlの知識マップ(知識グラフ)
Windowsの実行制御は、警告するだけのSmartScreen、ユーザー・グループ単位で制御できるAppLocker、マシン全体に効くApp Control for Business、個人PCに自動で効くSmart App Controlの4つに分かれます。AppLockerとApp Controlは発行者・パス・ハッシュのルールで許可/拒否を判定し、マイクロソフトはセキュリティ機能として設計されたApp Controlの利用を推奨しています。配布側の対策の中心はコード署名で、DLLを含む全バイナリへの一貫した署名がなければ、更新のたびに発行者ルールが壊れたりハッシュルールが機能しなくなったりします。ブロックの有無はAppLockerイベントログとCodeIntegrity - Operationalログで確定でき、導入側はまず監査モードで一巡分のイベントを集めてから強制に切り替えるのが定石です。
AppLocker
Windows 7で導入された実行制御機能。署名証明書の属性・ファイル属性・ハッシュ・パスに基づくルールを、コンピューター全体または特定のユーザー・グループに適用できる。セキュリティ機能としてのMSRCサービス基準は満たさない。
App Control for Business(旧WDAC)
Windows 10で「Device Guard」として登場した実行制御機能の現在の名称。ポリシーはマシン全体・全ユーザーに適用され、MSRCのサービス基準を満たすセキュリティ機能として設計されている。
構成可能なコード整合性
発行者ルール
コード署名証明書の発行者情報(サブジェクト・証明書チェーン)を根拠にするAppLocker/App Controlのルール。署名されていればバージョンを問わず許可でき、更新に耐える。
署名者ルール
Publisherルール
パスルール
ファイルのインストール先パスを根拠にするAppLocker/App Controlのルール。通常、ユーザーが書き込めるパスは許可しない前提で設計される。
ハッシュルール
ファイルのハッシュ値を根拠にするAppLocker/App Controlのルール。更新のたびにハッシュが変わるため、自動更新のある配布物では壊れやすい。
マネージドインストーラー
App Controlのルールの根拠の1つ。IntuneやConfiguration Managerなどの配布エージェントを管理者が明示的に構成すると、そのインストーラー経由で入ったバイナリを許可できる。
Intelligent Security Graph(ISG)
マイクロソフトのクラウド評価情報。App Controlのルールの根拠の1つとして利用できる。
Application Identityサービス(AppIDSvc)
AppLockerのルール評価を担うWindowsサービス。これが動いていないとAppLockerのポリシーは評価されず、監査モードでもイベントが出ない。
Windows Update
Microsoftが更新プログラムを配信するオンラインサービス。
Microsoft Intune
クラウドからPC・モバイルデバイスを管理するMicrosoftのMDMサービス。
グループポリシー
Active Directoryドメイン環境でWindowsの設定を集中構成する仕組み。
Smart App Control
Windows 11の個人利用者向け保護機能。クラウドの評価とアプリの署名の有無を確認し、悪意があると判定されたアプリや信頼を確認できない未署名アプリをブロックする。
コード署名証明書
ソフトウェアの発行元を証明し、改ざんを検出するための証明書。
Authenticode証明書
ECC(楕円曲線)署名
楕円曲線暗号アルゴリズムによるコード署名。Smart App Controlの署名チェックおよびApp Controlの署名者ベースのルール(RSA最大4096ビットのみ対応)はいずれも非対応。
ECDSA署名
HSM/トークンでの秘密鍵保管
2023年6月1日以降のCA/Browser Forum基準により、コード署名証明書の秘密鍵をFIPS 140-2レベル2相当以上のハードウェア(HSMやUSBトークン)で生成・保管することを義務付けたもの。
FIPS 140-2レベル2
コード署名のタイムスタンプ
署名時刻をRFC 3161タイムスタンプサーバーで証明する付与情報。証明書の期限が切れても署名の有効性を保つ。
RFC 3161タイムスタンプ
証明書の期限切れ
証明書の有効期間(NotAfter)を過ぎて検証に失敗する状態。
有効期限切れ
未署名バイナリ
コード署名が付いていない実行ファイル・DLL・インストーラー。Smart App Controlや発行者ルール運用下ではそれだけでブロック対象になり得る。
未署名の実行ファイル
実行制御によるアプリ起動失敗
AppLocker・App Control・Smart App Control・SmartScreenのいずれかによって、業務アプリがエラーダイアログなしに起動を止められる事象。
Windows SmartScreen
評判の悪いファイルを警告する仕組み。既定ではユーザーが突破できるが、管理ポリシーで突破自体を禁止すると実質的にブロックとして働く。
AppLockerイベントログ
AppLockerによるexe/DLL/スクリプト/MSI/パッケージアプリの許可・監査・ブロックが記録されるイベントログ群。イベント8004(exe/DLLブロック)・8007(スクリプト/MSIブロック)が中心。
EXE and DLLログ
MSI and Scriptログ
CodeIntegrity - Operationalログ
App Controlによるexe・DLL・ドライバーのブロックが記録されるイベントログ。イベント3077(強制時ブロック)・3076(監査時ブロック)・3089(署名情報)が中心。
制約付き言語モード(Constrained Language Mode)
WDAC(App Control for Business)やAppLockerなど、許可リスト方式のアプリケーション制御ポリシーに合わないPowerShellスクリプトが、完全停止ではなく制限された状態で実行されるモード。.NETオブジェクトの生成が広く制限される。
監査モード
ブロックせずに「強制していたらブロックされていたもの」だけを記録するAppLocker/App Controlの運用モード。強制切り替え前に一巡分のイベントを集めるために使う。
監査のみ
書き込み可能フォルダでの実行
自己解凍アーカイブや一時フォルダへの展開など、ユーザーが書き込めるパスで実行ファイルを動かす設計。パスルール型の実行制御と根本的に相性が悪い。
%TEMP%展開実行
AppLockerは署名証明書の属性(発行者)に基づく発行者ルールでルールを定義できる
AppLockerはファイルのパスに基づくパスルールでルールを定義できる
AppLockerはファイルのハッシュに基づくハッシュルールでルールを定義できる
App Controlのルールの根拠には署名証明書の属性が含まれる
App ControlはWindows 10 1903以降、ファイルのパスをルールの根拠にできる
App Controlはインストールを開始したプロセス(マネージドインストーラー)をルールの根拠にできる。managed installerポリシーを構成した場合に限る
App ControlはマイクロソフトのIntelligent Security Graph(ISG)による評価をルールの根拠にできる
AppLockerのポリシーはApplication Identityサービス(AppIDSvc)が動いていないと評価されず、監査モードでもイベントが出ない
KB 5024351の適用により、Windows 10 バージョン2004以降とすべてのWindows 11でAppLockerポリシーの強制に特定のエディションが不要になった
マイクロソフトはApp Controlで実装できるならAppLockerではなくApp Controlを使うべきとしており、App Controlは改善が続く一方AppLockerは新機能を追加されていない
App ControlポリシーはIntuneなどのMDMで配布・適用できる
App Controlはグループポリシーでも配布できるが、Windows Server 2016/2019で動くシングルポリシー形式に限られる
AppLockerポリシーはグループポリシー管理エディターで構成・配布できる
AppLockerポリシーはMDM(Intune等)配布でも構成でき、古いバージョンのWindowsでも全エディションで強制がサポートされる
Smart App Controlのブロックを避けるために、マイクロソフトは有効な証明書でアプリに署名することを開発者向けの案内として挙げている
Smart App Controlが署名を根拠にアプリの可否を判定する場合、楕円曲線暗号(ECC)の署名には対応しておらず、RSAベースの証明書で署名されたアプリだけが許可の対象になる。クラウドの評判評価など署名以外を根拠にした判定はこの制限を受けない
署名者ベースのルール(発行者ルール)はRSA(最大4096ビット)のみ対応で、ECDSA署名のファイルは発行者ルールで許可できない(署名情報イベントにVerificationError=23が出る)
発行者ルールは署名メタデータ(発行者・製品名・ファイル名・バージョン)を根拠にするため、対象バイナリへのコード署名が前提になる
公的に信頼されるCAが発行するコード署名証明書(OV・EV)については、2023年6月1日以降、CA/Browser Forumの基準により秘密鍵をFIPS 140-2レベル2相当以上のハードウェアで生成・保管することが必須になった。自己署名証明書や社内プライベートCAが発行する証明書はこの基準の対象外で、秘密鍵をソフトウェアで保管することもできる
証明書の有効期限が切れても署名の有効性を保ちたい場合、signtoolでの署名時にRFC 3161タイムスタンプサーバーを指定し、署名にタイムスタンプを付ける
タイムスタンプは証明書の期限切れそのものを止めるわけではないが、署名時点で証明書が有効だったことを証明するため、期限切れ後も署名の有効性が保たれる。期限切れが署名に及ぼす影響を打ち消す
未署名のバイナリは、発行者ルール運用の環境やSmart App Controlの評価でブロック対象になり得る
有効な署名がなく信頼を確認できないアプリは、Smart App Controlの既定の動作でブロックされ得る
許可リスト型の運用では、どの許可ルールにも一致しないアプリは暗黙にブロックされる
ポリシーの許可ルールに一致しないexe・DLL・ドライバーは強制モードでブロックされる
クラウド評価で悪意があると判定されたアプリや、信頼を確認できない未署名のアプリは自動でブロックされる
警告の突破自体を禁止する管理ポリシーが有効な環境では、SmartScreenも実質的にブロックとして働く
AppLockerによるブロックは「AppLocker - EXE and DLL」ログのイベント8004、スクリプト・MSIは「AppLocker - MSI and Script」ログの8007で確認できる
App Controlによるブロックは「CodeIntegrity - Operational」ログのイベント3077と、対応する署名情報の3089で確認できる
ポリシーに合わないPowerShellスクリプトは完全に止まるのではなく、制約付き言語モードで実行される
AppLockerの強制切り替え前に、監査モード(イベント8003・8006)で業務が一巡するまでブロック相当の記録を集めるべき
マイクロソフトは新しいApp Controlポリシーをまず監査モード(ルールオプション3)で検証することを推奨している
顧客側がIntune等の配布エージェントをマネージドインストーラーとして明示的に構成していれば、そのインストーラー経由のバイナリを許可できる
%TEMP%や%APPDATA%へ展開して実行する設計は、パスルール型の許可範囲(Program Files等)の外で実行するためブロックされやすい
パスルールは通常、ユーザーが書き込めるパスを許可しない前提で設計されるため、書き込み可能フォルダでの実行はパスルール運用と根本的に相性が悪い
ハッシュルール運用の環境では、自動更新で新バージョンに差し替わるたびにハッシュが変わり、更新後から起動しなくなる