PrintNightmare:あなたのシステムがまだ脆弱かどうかを確認する方法

PrintNightmare:あなたのシステムがまだ脆弱かどうかを確認する方法

WindowsのPrint Spoolerサービスに影響を与える脆弱性グループに付けられた名前であるPrintNightmareは、引き続きホットなトピックである。このテーマに関する私たちの以前のブログでは、最初に報告された2つの脆弱性、CVE-2021-1675と CVE-2021-34527に対して取るべき緊急の緩和策について説明しています。しかし、サイバーセキュリティの研究者は、悪用可能な新しい関連する脆弱性をまだ発見しています。

Windows Print Spoolerサービスが注目されている理由は以下の通りである:

  • 脆弱性の影響が大きいことと、影響を受けるサービスが企業環境で広く使用されていること。
  • エクスプロイトの一般公開の可能性の高さ
  • マイクロソフトがリリースしたパッチは、脅威を完全に修復するには明らかに不十分であった。

このブログでは、セキュリティエンジニアが、関心のあるシステムが既知の一般的なエクスプロイトの PoC(概念実証)に対して脆弱性のままであるかどうかをチェックするための手順を示します。このブログでは、LPE(ローカル特権の昇格)に関連するエクスプロイトではなく、RCE(リモートコード実行)脆弱性に関連する最も影響力の大きいケースに焦点を当てます。

成功した攻撃がファイルシステム上やネットワークレベルでどのように見えるかを示すことで、このブログはあなたのシステムに脆弱性が残っているかどうかを判断するのに役立つ。

プリントナイトメア RCE PoC

PrintNightmareのニュースがすべての主要なサイバーセキュリティ・チャンネルに流れた頃には、サイバー犯罪者を含む誰もが利用できるRCEエクスプロイトがすでにいくつか存在していた。それらはそれぞれ異なるプログラミング言語で書かれており、ネットワークトラフィックの見た目も若干異なっていた。しかし、すべてのRCEエクスプロイトは、実際の実行可能ペイロードと同様に、脆弱なシステムからの有効な認証情報を必要とします。実行可能ファイルはDLLの形式でなければならず、ターゲット・ホストからアクセス可能なSMB共有で利用可能でなければならない。

ここでは、PrintNightmare RCEの上位人気PoCと、それらに関連する技術的な特殊性を紹介する。

注意:エクスプロイトPoCツールをコンパイルし実行する際には、常に細心の注意を払ってください。より安全性を高めるために、コード・レビューの実施を検討してください。以下の手順で何も明らかにならなかったとしても、テストしたシステムがこの脅威に対して完全に安全であることを保証するものではないことに注意してください。

PrintNightmare Exploit PoC 1

[アクセスできません。]

プログラミング言語C++
影響:RCE
外部依存:なし

ブログが公開された時点で、最初のエクスプロイトの作者はすでにリポジトリにアクセスできないようにしていた。しかし、セキュリティの専門家たちは、まだWebArchiveのソースコードにアクセスすることができる。https://web.archive.org/web/*/https://github.com/afwu/PrintNightmare。

エクスプロイトコードは、自己完結型のVisual Studioソリューションとして配布され、数秒でビルドして使用を開始することができます。出来上がったファイルは、デフォルトでPOC.exeという 名前になっています。 コマンドライン引数として、標的となるシステムの詳細(IPアドレスと有効な認証情報)、およびペイロードDLLへのパスを受け取ります。

重要な注意、ソースコードに埋め込まれたDriverStoreのパス:C:㊟WindowsSystem32㊟DriverStore㊟FileRepository㊟ntprint.inf_amd64_19a3fe50fa9a21b6㊟Amd64㊟UNIDRV.DLL はユニバーサルではなく、すべての64ビットシステムで動作しません:

DriverStoreパス

他のPoCの作者は、動的にパスを解決するか、攻撃者にコマンドライン引数としてパスを指定させることで、この問題に対処した。

ホスト・マシン

172.16.7.50はホスト・マシン、172.16.7.52は被害者マシン、test.dllはクリーン・ファイルである:

コスト・マシン・コマンド・ライン

以下は、すべてが期待通りに進んだ場合のツール出力である:

ツール出力

ターゲット・マシン

ターゲットマシンがまだ脆弱である場合、ファイルモニター(この場合、Sysinternalsによるプロセスモニターの一部)で次のような活動を見ることができる:

CTターゲットマシン

ここに見られるように、影響を受けたシステムは、ペイロードDLLをロードする前にSMB共有から正常に読み込んでいる。結果を素早くナビゲートするために、spoolsv.exeプロセス名によるフィルタを使用することをお勧めします。

記録されたネットワークトラフィックは次のようになる(IPアドレスでフィルタリング):

CNネットワークトラフィック

PrintNightmareエクスプロイトPoC 2

https://github.com/cube0x0/CVE-2021-1675

プログラミング言語Python
影響:RCE
外部依存:カスタムImpacketツールセット

ここでは、PoCがターゲットマシンの上記のDriverStoreパスを動的に解決するため、このエクスプロイトはより汎用的である。実際のエクスプロイトスクリプトとは別に、これを動作させるにはimpacketパッケージが必要であり、これは同じ作者の別のリポジトリで見つけることができる。

ホスト・マシン

以下はそれを実行するためのコマンドラインである:

Pythonコマンドライン

実行後は通常のツール出力:

通常の工具出力

ターゲット・マシン

ターゲットマシンが脆弱なままであれば、そこで実行されているプロセスモニターに以下のようなアクティビティが表示される:

対象マシン

前回のPoCと同様に、脆弱なシステムはペイロードDLLをロードする前に、SMB共有からペイロードDLLを取得するよう強制された。

以下は、対応するネットワークトラフィックの断片である:

対応するネットワークトラフィック

PrintNightmareエクスプロイトPoC 3

https://github.com/cube0x0/CVE-2021-1675/tree/main/SharpPrintNightmare

プログラミング言語C#
影響:RCE
外部依存:なし

作者は前回のエクスプロイトと同じだが、今回の結果PoCはC#で書かれたスタンドアロン実行ファイルであり、配布や使用が容易になっている。

ホスト・マシン

対応するコマンドラインを以下に示す。見ての通り、DriverStoreの値が引数として提供されることが期待されている:

ホストのコマンドライン

すべてが正しければ、出力は次のようになる:

ツール出力

ターゲット・マシン

ターゲット・マシンに脆弱性がある場合、プロセス・モニターは、前の2つのケースとほぼ同じファイル・システムの活動を明らかにする:

タグレット・マシン

以下は、この悪用の試みに関連するネットワークトラフィックの例である:

脆弱性は不断の警戒と迅速な緩和を要する

最新のシステムは複雑であるため、今後も包括的なパッチが適用されていない脆弱性の悪用が野放しになっていることは避けられない。セキュリティ・チームには、ニュース・サイクル、ベンダーからの通知、政府からの勧告などに常に注意を払い、脆弱性に関する最新情報を入手することをお勧めする。そして、そのようなリスクを軽減するために迅速に行動できる人材、プロセス、テクノロジーを準備しておくことだ。