企業向けの Windows 保護印刷モードの基本については、企業向けの Windows 保護印刷モードに関するページを参照してください。
Windows プリント システムは、過去 3 年間に Microsoft Security Response Center (MSRC) に報告されたすべてのケースの 9% を占める攻撃と印刷バグの頻繁なターゲットでした。 プリンター管理、データ変換、その他多くのタスクを処理するスプーラー サービスは、Windows 印刷システムの中核です。 このプロセスは SYSTEM として実行されます。これは Windows で最も高い特権レベルの 1 つであり、これが魅力的なターゲットである理由です。 スプーラーは、標準ユーザーにも広くアクセスでき、必要に応じてサードパーティのコードを読み込みます。 これらのドライバーは、従来、業界がドキュメント処理とプリンター通信の統一された基準を満たしていなかった時代に、幅広いプリンターをサポートする必要がありました。 さまざまな製造元のドライバーのこの広大なエコシステムにより、Windows では、さまざまな古いプリンターとその 40 を超える ページ記述言語 (PDL) をサポートできます。 ただし、その複雑さにより、共通の条件セットを持つことが困難になります。 この複雑さは、ユーザーにより安全なオプションを提供する Microsoft の機能を制限する多くのセキュリティ上の課題を提示します。 この記事では、印刷スタックのセキュリティ保護に関連する課題について説明し、現在のユーザーに役立つ情報をいくつか共有します。 また、 Microsoft Attack Research > Security Engineering (MORSE) チームと Windows Print チームのコラボレーションのプレビューも提供します。これは、サード パーティ製のドライバーを読み込まず、攻撃面を減らして実行する、印刷スタックの IPP ベースのリビジョンである Windows 印刷の未来であると考えるものです。
ドライバーの問題
印刷ドライバーのセキュリティ モデルは、Windows 印刷スタックとサード パーティ製ドライバーがそれぞれ、脆弱性の導入を回避しながら機能を提供し、セキュリティの約束を実施する役割を果たす必要がある、共有責任モデルに依存しています。 これは Windows の他のサブシステムと似ていますが、印刷は、ユーザーがリモートコードを特権の高いシステムプロセスにスムーズに読み込ませたいという理由で、難しいシナリオです。
サード パーティからのコードの読み込みには、セキュリティの観点からいくつかの課題があります。 読み込む目的のコードを読み込む必要があるだけでなく、そのコードによって予期しない方法でアプリケーションの動作が変更される可能性があります。 たとえば、ドライバーは、スプーラーまたは関連する印刷プロセスを完全に制御できるバグにつながる可能性がある複雑な解析ロジックをサポートします。 ドライバーで脆弱性が検出された場合、Microsoft はサード パーティに依存してドライバーを更新します。 発行元が存在しなくなったり、古い製品がサポート対象外と見なされたりした場合、この脆弱性に対処する明確な方法はありません。
サードパーティ製ドライバーに依存する共有責任モデルは、Microsoftの機敏性や選択肢を制限し、顧客を保護する能力を低下させます。 多くの場合、新しいセキュリティ保護の最先端を行っていますが、サードパーティのコードを読み込むときにそれらを一様にデプロイすることはできません。
互換性
印刷ドライバーの課題の 1 つは、年齢です。 多くの印刷ドライバーは数十年前のものであり、制御フロー ガード (CFG)、制御フロー強制テクノロジ (CET)、恣意的コード ガード (ACG)、Microsoft が長年にわたって実装してきた他の多くの保護など、最新のセキュリティ軽減策と互換性がありません。 これらの保護は、多くの場合、"すべてまたは何も" です。つまり、保護を有効にするには、参加しているすべてのバイナリが互換性のある手順を実行する必要があります。 すべての印刷製造元がこれらのドライバーを更新するために必要な手順を実行しているわけではないため、印刷サービスは現在、これらの最新の悪用の軽減策の恩恵を受けているわけではありません。 脆弱性が検出された場合、攻撃者はその脆弱性を悪用して成功する可能性が高くなります。
過剰なアクセス許可
Windows 印刷スタックは、20 年以上前の元のデザインの多くの側面を保持します。 印刷スプーラーは、Windows 上の標準の管理者アカウントよりも強力な特別な特権を持つ SYSTEM として実行されます。 スプーラーに読み込まれたドライバー (サード パーティ製ドライバーを含む) は、基本的なドキュメントの印刷とユーザー要求の処理のために、この特権レベルで実行されます。 スプーラーが受け取るユーザーの要求ごとに、そのタスクに対するアクセスの適切なレベルを決定する必要があります。これは困難である可能性があります。
スプーラーがこれらのアクセス許可を保持する理由の 1 つは、下位互換性の問題によるものです。 30 年間にわたって作成された何千ものドライバーが Windows で使用されており、ユーザーに発生する可能性のあるすべてのリスクを特定することは困難です。
理想的な解決策は、ドライバーを完全に削除し、スプーラーを最小限の特権のセキュリティ モデルに移動することです。 一部の操作では SYSTEM レベルの特権が必要になる場合がありますが、ほとんどの場合は必要ありません。 Microsoft で頻繁に直面する課題は、どのソリューションでも、お客様の互換性要件を考慮する必要があるということです。 このニーズとセキュリティの向上を望むバランスを取るのは難しい作業です。 幸いなことに、解決策があると思います。
IPP の基本
IPP は HTTP ベースのプロトコルであり、HTTP から期待される認証方法の多くをサポートしています。 各 IPP 要求は HTTP POST メッセージであり、プリンターは ipps://printer.example.com/ipp/print などの URI を使用して識別されます。 IPP は、次のようなプリンターで期待されるすべての 一般的な操作 をサポートします。
Create-Job: 新しい印刷ジョブを作成する
ドキュメントの送信: 印刷ジョブにドキュメントを追加する
印刷ジョブ: 1 つのドキュメントで新しい印刷ジョブを作成する
プリンター属性の取得: プリンターの状態と機能を取得する
Get-Jobs: キューに入れられたジョブのリストを取得する
Get-Job-Attributes: ジョブのステータスとオプションを取得する
Cancel-Job: キューに入れられたジョブをキャンセルする
ドライバーレス印刷では、PWG ラスターや PDF などのパブリック標準に基づいて、限られた数の PDL がサポートされます。 これにより、オペレーティング システムが変換のために処理する必要がある一意の形式の数が制限され、コードが大幅に簡略化されます。 クライアント側のレンダリングは、プリンターに送信される最終的なドキュメントを生成するために使用されます。
印刷サポート アプリ (PSA)
PSA を 使用すると、プリンター OEM と IHV は、特定のニーズに合わせて既存の IPP サポートを拡張できます。 すべてのプリンターで同じ機能と構成オプションがサポートされているわけではありません。 PSA を使用すると、ユーザーが期待するエクスペリエンスを損なうことなく、カスタマイズされたユーザー エクスペリエンスを実現できます。
ポイント アンド プリント
ポイントアンドプリント は、ユーザーがドライバーを提供せずにリモート プリンターに接続でき、必要なすべてのドライバーがクライアントにインストールされている機能です。 ポイントと印刷は IPP のままですが、動作は異なります。 ドライバーをインストールする必要はなくなりましたが、プリンターを設定するにはいくつかの基本的な構成が必要です。 このプロセスは、IPP で次のように機能します。
Windows クライアントとサーバーが RPC 経由で接続する
サーバーとクライアントの両方が受信トレイのMicrosoft IPPドライバーを使用します。
サーバーが IPP を使用してプリンターと通信する
PSA がインストールされている (使用可能な場合)
セキュリティ
現在、Windows での IPP ベースの印刷では、サード パーティ製ドライバーの必要がなくなります。 IPP ではトランスポート暗号化がサポートされており、サポートされる PDL の数が限られているので、解析の複雑さが大幅に減少します。 これは、ドライバーの使用を必要とするモデルに対する意味のある改善です。
現在の Windows での IPP 印刷は、セキュリティの観点から既に大きな一歩を踏み出しており、可能な限りユーザーに切り替えをお勧めします。 また、管理者は、フリート全体でこのアクションに優先順位を付けることをお勧めします。
Windows 保護印刷モードでのスプーラーのセキュリティ
Windows 保護印刷モードは、 Mopria 認定プリンター のみがサポートされている既存の IPP 印刷スタック上に構築され、サード パーティ製ドライバーを読み込む機能を無効にします。 これを行うことで、Windows の印刷セキュリティを有意義に向上させることができます。これによって、他の方法では達成できない改善が可能になります。 私たちの目標は、最終的に最も安全な既定の構成を提供し、ユーザーがプリンターに互換性がない場合に、いつでもレガシ (ドライバーベース) 印刷に戻す柔軟性を提供することです。 Windows 保護印刷モードを使用するには、プリンターで IPP が有効になっていることを確認します。
ユーザーが Windows 保護印刷モードを有効にすると、通常のスプーラー操作は、Windows 保護印刷モードの機能強化を実装する新しいスプーラー プロセスに遅延されます。 これらの変更の一部を見てみましょう。
制限付きで安全な印刷構成
Windows 保護印刷モードでは、多くのレガシ構成が無効になっています。 Windows に対する一般的な攻撃は、プリンター ポート モニターがダイナミック リンク ライブラリ (DLL) になる可能性があるという事実を悪用し、攻撃者はこれを悪用して悪意のあるコードを読み込みます。 また、攻撃者はシンボリック リンクを使用してスプーラーを悪用して悪意のあるコードを読み込む可能性がなくなりました。 多くのレガシ API が更新され、IPP を使用する場合にのみ意味のある値に構成が制限されます。 これにより、攻撃者がスプーラーを使用してシステム上のファイルを変更する機会が制限されます。
モジュールのブロック
モジュールの読み込みを許可する API は、新しいモジュールの読み込みを防ぐために変更されます。 たとえば、AddPrintProviderW などの呼び出しにより、悪意のあるモジュールが読み込まれます。 また、IPP に必要な Microsoft 署名済みバイナリのみが読み込まれるように制限を適用します。
ユーザーごとの XPS レンダリング
XPS レンダリングは、Windows で保護された印刷モードで SYSTEM ではなくユーザーとして実行されます。 現在の Windows のほとんどの印刷ジョブには、いくつかの XPS 変換が含まれており、このタスクを処理するプロセス (PrintFilterPipelineSVC) は、多くのメモリ破損の脆弱性の原因です。 他の問題と同様に、このプロセスをユーザーとして実行することで、これらのバグの影響が最小限に抑えられます。
一般的なスプーラー タスクの特権を制限する
ドライバーを削除すると、スプーラー プロセスによって実行される一般的なタスクを実行し、ユーザーとして実行されているプロセスに移動することもできます。 これらのプロセスにメモリ破損の脆弱性がある場合、その影響はユーザーのみが実行できるアクションに限定されます。
新しいスプーラー ワーカー プロセスには、SeTcbPrivilege、SeAssignPrimaryTokenPrivilege などの多くの特権を削除する新しい制限付きトークンがあり、SYSTEM IL では実行されなくなりました。
バイナリ緩和策
サードパーティのバイナリを削除することで、Microsoft が長年にわたって投資してきたバイナリ軽減策の多くを有効にできるようになりました。 Windows 保護印刷モードのプロセスは、多くの新しいバイナリ軽減策で実行されます。 特に重要な機能には次のものがあります。
制御フロー強制テクノロジ (CFG、 CET) – リターン指向プログラミング (ROP) ベースの攻撃を軽減するのに役立つハードウェア ベースの軽減策。
子プロセスの作成が無効 – 子プロセスの作成がブロックされています。 これにより、攻撃者がスプーラーでコードの実行を取得できる場合に、新しいプロセスが生成されるのを防ぐことができます。
リダイレクト ガード – 多くの場合、印刷スプーラーを対象とする多くの一般的なパス リダイレクト攻撃を防ぎます。
任意の Code Guard – プロセス内での動的なコード生成を防止します。
これらの保護により、脆弱性が見つかった場合に悪用が困難になります。
Windows 保護印刷モードによるポイント アンド プリント
前述のように、ポイントとプリントは通常、ドライバーの読み込みと IPP プリンターの構成を許可します。 一部のユーザーには IPP プリンターのみの環境がある場合がありますが、悪意のある攻撃者はプリンターのふりをして、ユーザーをだましてドライバーをインストールする可能性があります。 Windows で保護された印刷モードでは、ポイントアンドプリントがサードパーティ製のドライバーをインストールするのを防ぎ、このリスクを軽減します。
関連資料
| [アーティクル] | 説明 |
|---|---|
| Windows 保護印刷モードの概要 | Windows 保護印刷モードの概要、その利点、および使用方法について説明します。 |
| 企業向けの Windows 保護印刷モード | Windows 保護印刷モードを使用する企業向けのガイダンスを提供します。 |
| モダン印刷プラットフォームを発見する | 最新の印刷プラットフォームの概要と、従来のプリンター ドライバーに比べたセキュリティ、互換性、信頼性の利点について説明します。 |
| Windows 上のサード パーティ製プリンター ドライバーのサービス プランの終了 | レガシ v3 および v4 Windows 印刷ドライバーのサービス終了計画に関する情報を提供します。 |
| 印刷サポート アプリの設計ガイド | デバイスの印刷サポート アプリ (PSA) を実装しているプリンター OEM および IHV のガイダンスと例を示します。 |
| 印刷サポート アプリ v3 API 設計ガイド | デバイスの v3 印刷サポート アプリ (PSA) を実装しているプリンター OEM および IHV のガイダンスと例を示します。 |
| 印刷サポート アプリ v4 API 設計ガイド | デバイスの v4 印刷サポート アプリ (PSA) を実装しているプリンター OEM および IHV のガイダンスと例を示します。 |
| 印刷サポート仮想プリンターのMSIXマニフェスト仕様 | 印刷サポート仮想プリンターを実装しているプリンター OEM および IHV の MSIX マニフェスト ガイダンスと例を提供します。 |
| 印刷サポート アプリの関連付け | 印刷サポート アプリ (PSA) をプリンターに関連付けるガイダンスと例を示します。 |