RPC ランタイム、再び:新しい脆弱性を発見
エグゼクティブサマリー
Akamai 研究者の Ben Barnea が、Remote Procedure Call(リモート・プロシージャ・コール、RPC)ランタイムライブラリに重要な脆弱性( CVE-2022-22019)を発見しました。 この脆弱性のベーススコアは 8.8 です。
この新しい脆弱性は、以前 Microsoft に報告され、2022 年 4 月にパッチが適用された整数オーバーフローを悪用したものです。
この新しい脆弱性の修正パッチが、Microsoft の 5 月の月例パッチ「Patch Tuesday」でリリースされました。
Microsoft がこれまでに発表してきた緩和策に加えて、この修正パッチを速やかに適用し、ネットワークセグメンテーションを活用することで、これらの脆弱性を悪用したラテラルムーブメントを抑制することをお勧めします。
はじめに
2022 年 4 月 12 日、Microsoft は、Remote Procedure Call(リモート・プロシージャ・コール、RPC)ランタイムライブラリ(rpcrt4.dll)の 3 つの脆弱性に対するパッチをリリースしました。3 つの脆弱性の CVE は次のとおりです。 CVE-2022-26809、 CVE-2022-24492 と CVE-2022-24528。この脆弱性の影響を受けるオペレーティングシステムは、Windows 7、8、10、11、および Windows Server 2008、2012、2019、2022 です。
これらの脆弱性を悪用すると、不正ユーザーが RPC サービスの権限を持った状態で脆弱なマシン上でコードをリモート実行できます。ネットワークに侵入して、ラテラルムーブメントを行えるため、攻撃者やランサムウェアグループが好んで悪用する脆弱性となっています。Microsoft はこれらの脆弱性を、悪用される可能性の高い脆弱性として分類しています。その深刻度の高さ(CVSS 9.8)ゆえに、Akamai では、パッチ適用済みのライブラリを詳細に調べ、その調査結果を 以前のブログ記事に公開しました。
3 つの脆弱性はいずれも整数オーバーフローでした。パッチは、整数オーバーフローの発生をチェックするものでした。この修正パッチにより、Microsoft はこれらの脆弱性の悪用を防止できました。しかし、Akamai が調査を進めるなか、以前に発見されたものと同じ変数の整数オーバーフローを悪用する、別の脆弱性を発見しました。この脆弱性は、整数オーバーフローをチェックするパッチでは緩和できないものでした。
「責任ある公開」プロセスに従って Microsoft への報告を完了した上で、ここで RPC の新しい脆弱性について概説します。この脆弱性は、4 月の月例パッチ「Patch Tuesday」がリリースされた日に発見され、5 月のパッチで修正されました。この脆弱性は、サーバーコードとクライアントコードの両方に存在しますが、どちらも同じ CVE が割り当てられています:
見つかった脆弱性を理解する
新たに発見された RPC の脆弱性を理解するために、まずは 4 月にパッチが適用された脆弱性について、もう一度振り返ってみましょう。 以前のブログ記事でも説明したとおり、RPC ランタイム・ライブラリ・コードには整数オーバーフローのバグがありました。このバグを悪用すると、ヒープ・バッファ・オーバーフロー(バッファに許容量以上のデータを送り込むこと)が発生する可能性があります。ヒープ・バッファ・オーバーフローが発生すると、バッファの領域外(ヒープ)にデータを書き込むことが可能になります。これを巧妙に悪用すると、リモートでコードを実行できるようになります。
この脆弱性を修正するために、ProcessReceivedPdu に新しい呼び出しが追加されました:
この呼び出しは、整数パラメーターのオーバーフローを正確にチェックする関数をトリガーします。
OSF_SCALL::GetCoalescedBuffer(ヒープオーバーフローが発生する関数)を調べると、次のチェックが追加されていることがわかります:
GetCoalescedBuffer は、ProcessReceivedPdu にキューイングされているバッファのフラグメントを結合する役割を果たします。元の整数オーバーフローは、キューイングされたフラグメントの合計長が、現在の受信バッファ長に追加されると発生します。この追加がオーバーフローを引き起こすのです。Microsoft は、オーバーフローをチェックする関数を呼び出すことで、元の脆弱性を修正しました。
しかし、このパッチは、この脆弱性を部分的にしか解決していませんでした。Akamai の調査により、結合後のバッファにメモリを割り当てる直前に、コードによって割り当てサイズにさらに 24 バイトが追加されていることがわかりました(上記の OSF_SCALL::TransGetBuffer の呼び出しを参照)。この 24 バイトは、rpcconn_request_hdr_t という名前の構造体のサイズで、バッファのヘッダーとして機能します。Microsoft がリリースしたパッチは、ヘッダーサイズを追加する前の整数オーバーフローをチェックするものでした。したがって、このヘッダーは考慮されません。そのため、整数オーバーフローを緩和するためのパッチを適用したにもかかわらず、整数オーバーフローが発生する可能性があったのです。
この新しい脆弱性(クライアント側の脆弱性とサーバー側の脆弱性)も現在は緩和されています。新しいパッチには、24 バイトの追加によってオーバーフローが発生しないことを確認するための呼び出しが追加されています。
緩和
5 月のセキュリティアップデートを適用して、この脆弱性を緩和します。
エンタープライズ境界の外にあるデバイスから TCP ポート 445 へのトラフィックをブロックします。
必要なマシン(ドメインコントローラー、プリントサーバー、ファイルサーバーなど)でのみ着信 TCP ポート 445 を許可することで、ラテラルムーブメントを制限します。
開示スケジュール
2022 年 4 月 13 日:レポートを Microsoft に送信
2022 年 4 月 13 日:ステータスが「New」から「Review / Repro」に変更
2022 年 4 月 22 日:ステータスが「Review / Repro」から「Develop」に変更
2022 年 5 月 10 日:パッチがリリース
結論
パッチ適用は最も基本的なセキュリティ対策の 1 つと考えられています。脆弱性が見つかると、パッチがリリースされ、脆弱性が緩和されます。メディアやコミュニティーではゼロデイに大きな注目が集まりますが、セキュリティの専門家である Akamai は、最大の脆弱性は本記事で紹介したような状況から発生することを理解しています。これは、脆弱性の発見には継続的かつ反復的なプロセスが必要であることを示す好例でもあります。
私たちのコミュニティーでは、往々にして、バグを発見する際に元のコードに注目します。しかし、アップデートやパッチに目を向けることでバグを発見できることもあるのです。これは、各社のコラボレーションを促して、協力して解決策を見つけ出し、コミュニティー全体でセキュリティを強化することにもつながります。
また、今回の事象により、独立したセキュリティ研究者の重要性も改めて浮き彫りになりました。Akamai では、これからも引き続き多くのセキュリティ研究者が、さまざまなパッチを分析して脆弱性を発見することで、修正につながることを願っています。
ご質問やご相談がございましたら、Twitter でお問い合わせください @Akamai_Research 皆様のご意見・ご感想をお待ちしております。