Windows のゼロデイ脆弱性「PrintNightmare」の概要と対策

** 本記事は、PrintNightmare, the zero-day hole in Windows – here’s what to do の翻訳です。最新の情報は英語記事をご覧ください。**

現在、Windows のある 「重大 (Critical)」な脆弱性には、3 つの異なる名前が付けられています。また、それぞれが異なる深刻度に分類されています。

1 つ目の名前は、MITRE の識別子である CVE-2021-1675 で、2021 年 6 月 8 日に公開された、Microsoft の月例セキュリティ更新プログラムで修正されています。

また、この脆弱性は、Microsoft のセキュリティ更新プログラムガイドの見出しに「Windows Print Spooler Vulnerability (Windows 印刷スプーラーの脆弱性)」と記載されていることから、印刷スプーラーのバグとも呼ばれます。

Microsoft は当初このバグについて、Windows 7 SP1 から Server 2019 までのサポートされているほぼすべての Windowsバージョン に存在する「権限昇格 (EoP)」の脆弱性であると記載していました。

Windows の ARM64バージョン、Server Core ビルド (Windows Server 製品の最小限モジュールしかインストールされない)、さらには Windows RT 8.1 も影響を受けるプラットフォームのリストに入っていました。

しかし、2021 年 6 月 21 日、Microsoft は CVE-2021-1675 のセキュリティ更新プログラムのページを更新し、このバグがリモートコード実行 (RCE) にも利用可能であることを認め、EoP 限定のバグよりも深刻な脆弱性としました。

侵入と乗っ取り

ご存知のように、EoP とは、コンピュータへの侵入に成功はしたものの、通常のユーザーと同じアクセス権しか持っていない攻撃者が、そのアカウントのパスワードを知らなくても、より高い権限を持つアカウントに昇格できることを意味します。

これだけでも問題ですが、RCE のバグでは、サイバー犯罪者はコンピュータ上のどのアカウントのパスワードも必要とせずに、コンピュータに侵入できてしまいます。

RCE のバグによって EoP も可能になってしまう場合は、さらに深刻です。なぜなら、侵入と乗っ取りが一体化したセキュリティホールになってしまうからです。

当然ですが、月例パッチをすでに適用済みであれば、CVE-2021-1675 の深刻度が EoP から RCE にアップグレードされても問題はない、と誰もが思っていました。

結局のところ、そのセキュリティホールが EoP であろうと RCE であろうと、修正することによってユーザーは保護されるからです。

すべてのバグは同じではない

どうやら、その後に起こったことは、情報公開のミスだったようです。

2021 年 8 月に開催される Black Hat カンファレンスで印刷スプーラーのバグに関する論文を発表する準備をしていたサイバーセキュリティ企業「Sangfor」の研究チームは、自分たちが作った PoC (概念実証) の成果を当初予定していたよりも早く公開しても問題ないと判断したようです。

印刷スプーラーの RCE と EoP のバグが公に文書化され、2 週間前にパッチが公開されたのであれば、オープンに議論したりデモしたりしても何の問題もない、と考えたのだと思われます。

この後の展開はもうお分かりでしょう。

Sangfor の研究チームが発見して新たに公開した印刷スプーラーのバグは、実は月例パッチで修正されたセキュリティホールと同じものではなかったようです。

つまり、Sangfor の研究チームは、まだ公開されていない RCE バグに関する文書を誤って公開してしまい、ゼロデイエクスプロイトを意図せず解き放ってしまったのでした。

ミスが判明した時点で、彼らは問題の情報を削除しましたが、時すでに遅し、でした。

パンドラの箱はすでに開かれてしまっていました。

パッチが公開されていないこの新しいバグは現在、「PrintNightmare」という名前で呼ばれています。

これは、CVE-2021-1675 と同じく、「Windows 印刷スプーラーのリモートでコードが実行される脆弱性」ですが、最新の月例セキュリティ更新プログラムでは防止できません。

実際、複数の独立系研究者が、2021 年 6 月のパッチがすでにインストールされている Windows Server 上で、この新しいエクスプロイトが成功した様子を示すスクリーンショットを Twitter で公開しています。

対策

公式のパッチはまだ公開されていません [2021-06-30T21:00Z]。

Microsoft 社はできるだけ早く修正プログラムをリリースするだろうと予想されています。信頼性の高いパッチの作成が間に合えば、次の月例セキュリティ更新プログラムの公開予定日 (2021 年 7 月 12 日) の前に修正プログラムがリリースされるでしょう。

注意をしてパッチの公開を待ち、公開され次第できるだけ早く適用 してください。

それまでは、脆弱性のあるコンピュータでは印刷スプーラーを無効にすることが、効果的な回避策になりそうです。

どうしても印刷スプーラーを起動しておかなければならないサーバーがある場合は、一部のユーザーにとって一時的に不便になったとしても、当該サーバーへのネットワークアクセスをできる限り制限することをお勧めします。

印刷スプーラーが動作しているが実際には必要ではないサーバーがある場合は、必要以上に攻撃対象領域を広げないという原則に基づいて、直ちに印刷スプーラーをオフにし、このバグの修正プログラムが公開された後もオフのままにしておくことをお勧めします。

また、続報がありましたら、この記事内でお知らせします。

追伸: この機会に、月例セキュリティ更新で公開された CVE-2021-1675 のパッチが正しくインストールされているかどうか確認してください。すでにパッチが存在する古い RCE バグにさらされたままの状態で、まだパッチが存在しない新しい RCE バグを追いかけてもあまり意味がありません。


使用しているコンピュータの印刷スプーラーをチェックする

ご自分のコンピュータでスプーラーサービスが実行されているかどうかを確認するには、次のようにコマンドプロンプトウィンドウから Windows SC (サービスコントロール) コマンドを使用します。

C:\Users\duck>sc query Spooler

SERVICE_NAME: Spooler
        TYPE               : 110  WIN32_OWN_PROCESS  (interactive)
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

再起動してもスプーラーが自動的に起動しないようにするには、次のようにします。

C:\Users\duck>sc config Spooler start= disabled

なお、start= の間にはスペースを入れてはいけませんが、=disabled の間にはスペースを入れる必要があります。サービスを再構成するには、コマンドプロンプトウィンドウ (CMD.EXE) を管理者権限で起動する必要があります。

再起動すると、次のように表示されます。

C:\Users\duck>>sc query Spooler

SERVICE_NAME: Spooler
        TYPE               : 110  WIN32_OWN_PROCESS  (interactive)
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 1077  (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

サービスコントロールマネージャーが Windows サービスの構成データを保存している場所を知りたい場合は、REGEDIT プログラムを使用することができます (確信が持てない場合は、変更を加えないでください)。

スプーラーサービスのデータは、レジストリキー HKEY_LOCAL_MACHINE\SYSTEM\​CurrentControlSet\​Services\Spooler に保存されています。スプーラーサービスがいつ、どのように起動するかは、レジストリ値 Start によって決まります 。

0 = ブート時に起動 (ディスクドライバーなど、これがないとシステムが起動しないドライバーに使用)、1 = Windows のロード中に起動 (Windows の初期化時に準備完了している必要のあるドライバーに使用)、2 = Windows システムコントロールマネージャーソフトウェアが実行されると自動的に起動、3 = 明示的に要求された場合にのみ起動 (sc start コマンドの使用など)、4 = 無効 (要求されても起動しない)。