すべてのバージョンのWindowsに影響、「プリントナイトメアをホワイトハッカーが解説
~イエラエセキュリティ 脅威動向レポート 第1回 PrintNightmare(プリントナイトメア)~
Windowsの印刷スプーラーに存在する脆弱性「PRINTNIGHTMARE(プリントナイトメア)」。この脆弱性を利用すると、管理者権限が取得できてしまうことに加え、当初、まだパッチがない状況でエクスプロイトコードのみが公開されてしまい、混乱を呼びました。 ホワイトハッカーで構成されたセキュリティ脆弱性診断企業、株式会社イエラエセキュリティによる「イエラエセキュリティ 脅威動向レポート」の第1回目は、プリントナイトメアの問題点や影響範囲、監視方法や対策手段について解説します。 お話いただくのは、イエラエセキュリティ 代表取締役 牧田誠氏と、イエラエセキュリティ 高度解析課 三村聡志氏です。
※この記事は、2021年7月27日に公開されたYouTube動画を元に記事化しています。
20年間眠っていた? 影響範囲が大きい「PrintNightmare」
三村聡志(以下、三村):今回は第1回目として、Windowsの印刷スプーラーに見つかった脆弱性(CVE-2021-34527)を取り上げます。これは「PrintNightmare(プリントナイトメア)」と呼ばれ、Microsoftはリモートでコードが実行される脆弱性があると警告しました。
牧田誠(以下、牧田):この脆弱性はこれまでのものと比べて、影響範囲が相当大きいと感じています。かなり「ヤバい」状況です。Windowsがほぼすべて対象になると考えていいのですよね?
Windows 8以上だけではなく、Windows 7、XPやVistaへも影響が?
三村:MicrosoftのWebサイトを見ると、基本的にはWindows 8以上が対象になっています。セキュリティ関係者の間では「Windows 7も影響を受けるのではないか」と言われていますが、基本的には8以上。そもそも、Windows 7はMicrosoftのサポートがもう終了していますので。
牧田:確かにサポートの観点から考えると、8以上となるのでしょうけど、7以前のWindows XPやVistaもプリントスプーラーを使っています。そのあたりまで影響が及ぶのではないかとも感じています。
プリントナイトメアは、20年くらい存在していた脆弱性
牧田:プリントスプーラーの脆弱性で、しかもWindows XPまで影響を受けると考えると、もう20年くらい存在していた脆弱性だったことになります。それを急に「ゼロデイ脆弱性(パッチなどの脆弱性を解消する手段がない状態の脆弱性)です」と言われても……。脆弱性が20年間、印刷スプーラーに眠っていたわけですからね。
三村:脆弱性を公表した研究者は、本来であればセキュリティ関連のイベントである「ブラックハット」などで発表しようと考えていたと言われています。その時点では当然、対策は完了していて、言ってみればいつもどおり問題は解決するはずでした。
パッチが存在しない状況でもいきなり公開
三村:しかし、研究者の手違いとされていますが、今回はまだパッチも存在しない状況で、脆弱性だけがいきなり公開されてしまいました。プリントスプーラー自体は古いバージョンのWindowsから使われているコンポーネントなので、影響はいま確認できている範囲以上に広がっているだろうと考えられます。
今回と似たような脆弱性にMS16-087という脆弱性があって、パッチはVista以降から出ています。PrintNightmareはほぼ同じようなコンポーネントを攻撃してくる脆弱性なので、Vistaも影響を受ける可能性があり、さらにVista以前のWindowsも影響を受ける可能性は十分に考えられます。
多くの研究チームがプリントナイトメアに気づいていた…?
牧田:パッチが完成した状態で発表するつもりだったのに、別の研究チームが脆弱性を見つけて公表してしまい、「本当は以前から把握していました」というような状況になっています。今回は公表の手順にも不手際があったようですが、実は多くの研究チームがこの脆弱性に以前から気づいていた可能性があります。個人的には、そのことに非常に危機感を感じています。
20年間ずっとハッキングし放題、やりたい放題だった可能性も
牧田:つまり、プリントスプーラーを使っているWindowsすべてに影響範囲が及ぶとなれば、重要インフラや製造業で使われている産業用制御システム(ICS)のPLC(Programmable Logic Controllers)やHMI(Human Machine Interface)など、Windowsを使っているものすべてに影響範囲は広がっています。
そしてPrintNightmareが存在していた20年間のうちに、もしも誰か気づいた人間がいたとすれば、ずっとやりたい放題だったことになります。しかも重要インフラは大規模なシステムですから、今週パッチが出たからといって、来週にはパッチが適用されているとは考えられません。PrintNightmareは、はかり知れない影響を及ぼすと感じています。
セキュリティを考える人はリスクを正しく判断して、適切な対応を
三村:まさにその通りですね。重要インフラは停止しないことを重要視していますので、パッチが出たとしても、パッチを当てるために稼働を止めてしまうことや、パッチを適用したことによる可用性への影響を慎重に検討しなければなりません。だからこそ、セキュリティを考える人はリスクを正しく判断して、適切な対応を取ることが大切になってきます。
例えば、PrintNightmareであれば、ワークアラウンドスタックとして別の対策を取ることもできます。セキュリティ担当者の皆さんには、そうしたことを総合的に検討・判断できるだけの知識を身につけていただきたいと思います。そして、それでも不安がある場合は、我々のようなところをうまく活用してほしいですね。
プリントナイトメアの対策法
牧田:PrintNightmareの対策には、具体的にどのようなものが考えられるのですか?
対策①プリントスプーラーを止める
三村:まず1番目の対策としては、Active Directory(アクティブディレクトリ)のDomain Controller(ドメインコントローラ)を止めてしまい、プリントスプーラーのサービス自体を止めてしまうことが考えられます。ただしこの場合は、印刷ができなくなってしまいます。
対策②緊急パッチを適用する
三村:そのほかには、米Microsoftが2021年7月6日(現地時間)に公開した緊急パッチを適用すると、レジストリキーが1つ追加されますので、その「RestrictDriverInstallationToAdministrators」というキーを「1」に設定します。
ただしこの場合も、ドライバの更新が止まってしまい、印刷がうまくできなくなってしまう可能性があります。中小企業では印刷に家庭用プリンターを使っているケースもあり、攻撃を防ぐことはできるのですが、業務に支障がでることにもなり、なかなか悩ましいところです。
牧田:脆弱性が見つかった場合、ほとんどの場合はパッチを適用すれば対策は完了しますが、印刷ができなくなってしまうとなると、今回はいつもよりも、もう少し気を使わなければなりませんね。
パッチ適用後は、署名なしのドライバーはインストールできない
牧田:先程のレジストリキー「RestrictDriverInstallationToAdministrators」はパッチを適用した後の、デフォルトではどうなっているのですか?
三村:デフォルトでは「0」になっています。
牧田:なるほど、デフォルトでは互換性や使い勝手が優先されているわけですね。パッチを適用して、レジストリキーを「1」にするということは、署名のないドライバーはインストールさせないようにするということですね。
これまでは、署名付きと署名なし、どちらのプリンタードライバーもサーバにインストールできました。しかし、パッチ適用後は署名付きドライバーのみインストール可能、また、署名のないドライバーをインストールする場合は、管理者情報が必要になります。
プリントナイトメアの対策状況の確認方法
牧田:パッチが適用されているかどうかなど、社内の管理者がPrintnightmareの対策状況を確認するためにはどのような手段がありますか?
確認方法①緊急パッチが適用されているか
三村:社内のPCなどが正しく管理されている環境、つまりEDR(Endpoint Detection and Response)製品などが導入済みで、Windowsアップデートの適用状況が管理されている環境であれば、まずは緊急パッチ「KB5005010」が適用されているかどうかを確認します。
確認方法②「ポイントアンドプリント」の設定をチェック
三村:もうひとつは「ポイントアンドプリント」という設定がグループポリシーで設定可能になっていて、ここに「新しい接続用にドライバーをインストールした場合」という項目があります。その項目が「警告または昇格時のプロンプトを表示しない」という設定に切り替わっていないかどうかを確認してください。デフォルトは「表示する」なので、「表示しない」になっている場合は、パッチを適用しても攻撃を受けてしまうことがあります。この2点が基本的なチェック項目になります。
エクスプロイトコードの検証
牧田:Printnightmareの影響範囲が大きいと考える理由は、PoC(Proof of Concept:概念実証)、つまり、Windowsの脆弱性を攻撃するために作られたエクスプロイトコードが先に公開されてしまったことです。
おそらく最初に公表した研究チームは、すでにパッチが出ているものと考えてPoCを出してしまった。そして、その後で「パッチがない」という話になって、慌ててPoCを削除したようです。しかし一度公開されてしまったので、PoCは拡散して、他の研究チームからもPoCが出てしまう状況になってしまいました。
ローカルエクスプロイトとリモートエクスプロイトの両方が可能に
先程、実際にエクスプロイトコードを検証してみましたので、それをご紹介します。Printnightmareの問題は、LPE(Local Privilege Escalation)、つまりローカルエクスプロイトが可能になってしまうこと、さらにリモートエクスプロイトも可能になってしまうことです。
10.11.1.21というIPアドレスに対して、192.168.119.148から攻撃を行います。アドミン権限を持つユーザーを勝手に追加するというエクスプロイトを試してみました。
下図の選択部分がPoCです。攻撃対象となる一般ユーザーアカウントが1つ必要にはなりますが、10.11.1.21のサーバーに対して、test1というユーザーを作るエクスプロイトコード(DLL)を流し込みます。このDLLの作成も簡単です。
エクスプロイトの完了後、改めてサーバー側にどんなユーザーが存在するかを確認すると、test1が増えていて、アドミン権限を持っていることがわかります。
コマンド1行だけでアドミン権限が取れるプリントナイトメア
Printnightmareを利用すると、コマンド1行だけでDomain Controllerのアドミン権限が取れてしまう。エクスプロイトコードはすでに公表されてしまっているので、影響は今も存在していますし、今後もますます広がっていくのではないかと考えています。
攻撃されたことに気付かない可能性も
三村:デモでおわかりいただけたかと思いますが、攻撃されたPCの画面に何か出てくるわけではありません。深いところを監視しないと、検知することはできません。表面的には何もわからないうちに、エクスプロイトの横展開、ラテラルムーブメントができてしまいます。
プリントナイトメアの監視方法
監視方法①パケットキャプチャ
牧田:エクスプロイトは、DLLをsambaで持ってくるだけです。一見すると「新しいドライバをインストールします。ファイルはsambaから持ってきます。入れました」というDLLが管理者権限で走るだけです。通信だけを見ると、sambaを使ってファイルサーバと通信しているくらいにしか見えません。
Printnightmareを使ったエクスプロイトは、パケットキャプチャで監視できるのですか?
三村:実際に画面を見てみましょう。これが正常系の通信、つまり普通にプリンタを印刷した場合の通信です。SMBのファイルが走り、Create Responsとか、OpenPrinter、ClosePrinterなど、よくある項目が並んでいます。
一方、エクスプロイトが走るとどうなるかをお見せすると、明らかに違う項目が並びます。
パケットキャプチャの画面では色の違いもありますが、エクスプロイトが実行された場合には「AsyncAddzPrinterDriver」という命令が数多く走ります。ようするに、プリンタ追加の命令等が走っている場合は、いつもとは違うことが起きているのではないかと疑った方がいいと思います。
牧田:このあたりのWindowsスプーラーの関数を見ていれば、怪しいかどうかは判断できるということですね。
三村:監視できる環境が構築されていれば社内で監視することができます。プリンタドライバのインストール自体はそれほど頻繁には発生しないものですから、そもそも、そうした命令が走り始めた場合は、通信を止めてもいいと思います。
牧田:すでに過去に攻撃を受けてしまっていたかどうかの判断は難しいと思いますが、ひとつの手がかりとして、こうしたパケットを見ていくことは有効手段と言えますね。
監視方法②DLLファイル
三村:すでに攻撃を受けてしまっているかどうかの確認は、PCの場合は、System32のspoolの下にエクスプロイトで入れられたDLLファイルが残っています。そこを見れば、異常を疑うことはできます。
先ほどの検証で確認してみると、Cドライブ>Windows>System32>spool>drivers>x64>3 に、検証で入れたドライバー「test_x64.dill」が置かれています。また同じディレクトリーに「Old」というフォルダがありますが、今回のエクスプロイトは何度もDLLを送り込むという仕組みなので、Oldフォルダに最低1つはファイルが残ります。ただし、エクスプロイトが改善されて、変わる可能性はあります。
牧田:例えば会社にある何百台、何千台のPCの状況を確認する場合は、パッチの適用状況を確認するとともに、こうしたDLLファイルの確認スクリプトを走らせることも効果がありそうですね。
三村:EBRでSystem32>spool以下のファイルのアクセス状況を確認することもできます。
プリントナイトメアの対策はイエラエへ
牧田:Printnightmareで攻撃されたのではないか、あるいは攻撃された兆候はあるけれど、影響がどこまで広がっているのかわからない。具体的にどういう対策を取ればいいのかなどについて不安がある場合は、イエラエではデジタルフォレンジックを含めてインシデントレスポンスを行っています。ぜひご相談ください。