脆弱性

脅威に関する情報: OpenSSL X.509のバッファオーバーフロー脆弱性 (CVE-2022-3786、CVE-2022-3602)

Clock Icon 2 min read

This post is also available in: English (英語)

概要

2022年11月1日にOpenSSLがセキュリティアドバイザリを公開しました。このアドバイザリは、OpenSSLライブラリ内の2つの深刻度の高い脆弱性、CVE-2022-3786CVE-2022-3602について説明しています。OpenSSLのバージョン3.0.0から3.0.6までに脆弱性があります。3.0.7には両脆弱性に対するパッチが含まれています。OpenSSL 1.1.1および1.0.2はこの脆弱性による影響を受けません。

セキュリティアドバイザリが出るまでの間、これらの脆弱性はHeartbleed脆弱性と同じくらい深刻なものになりうるという意見が多く、OpenSSLも当初はCVE-2022-3602をCritical(緊急)と評価される見込みと述べていました。いくつかの要因から、これらの脆弱性の悪用は容易ではなく、当初考えられていたよりもかなりリスクが低いことが示されたようです。

  • いずれの脆弱性も、有効な認証局(CA)が署名した悪意のあるX.509証明書が必要です。
  • いずれかのCVEによる影響を受けるのは、脆弱なサーバーないし脆弱なクライアントが、クライアントサイドないしサーバーサイドのX.509証明書をパースした場合のみです。
  • OpenSSL 3.0.0は2021年9月にリリースされたものなのでOpenSSL 1.x.xに比べると利用者が少なく、Heartbleedとちがい攻撃対象が大きく限定されます。攻撃対象領域管理ツールCortex Xpanseのデータによれば、インターネット接続されたOpenSSL 3.xのインストール数はOpenSSL全体のインストール数の1%未満と推定されます。
  • CVE-2022-3786の場合、「.」(10進数で46)という文字を含むバイトしかスタックに入力できません。そのため、攻撃者が任意の長さのオーバーフローを得られても、ペイロードの制御ができません。この結果、サービス拒否(DoS)は発生しますが、リモートコード実行にはいたりません。
  • CVE-2022-3602の場合、攻撃者は4バイトのオーバーフローを得られます。ただし、OpenSSLプロジェクトのデフォルトコンパイラ設定はスタッククッキー(カナリアとほぼ同じ用途で使われる。スタックの値が書き換わっていないかをチェックするために挿入される)を有効にしています。このため、一部のエッジケースを除いては、4バイトのオーバーフローがスタッククッキーを上書きしてしまい、Windows上のプログラムをクラッシュさせることになります。
    • たとえスタッククッキーが無効でもエクスプロイトの成否はスタックレイアウトに大きく依存します。またこのスタックレイアウトもコンパイラの種類や選択されたコンパイラオプションで変わります。
    • Linuxではスタッククッキーの前にシード変数のパディングがあるようで、4バイトのオーバーフローはスタッククッキーの代わりにこの初期化されていない変数を上書きし、プログラムはクラッシュしません。

いずれの脆弱性も少なくともサービス拒否(DoS)を引き起こすことは確認されているので、パロアルトネットワークスはお客様に最新パッチの適用をお勧めします。どうにかして悪意のある証明書を作成してそれに署名してもらえるのであれば、誰でもパッチ未適用のサーバーをクラッシュさせられる概念実証コード(PoC)は公開されています。

OpenSSLはソースコードの形でも配布されているので、どのようなコンパイラオプションを使うかはすべてエンドユーザーしだいです。なかにはスタッククッキーやASLR、DEP/NXなどの最新メモリ緩和策を使わないユーザーがいるかもしれません。そうした判断がされていれば、エクスプロイトは容易になり、CVE-2022-3786によるリモートコード実行の危険性は高まります。

パロアルトネットワークスのお客様は、以下の方法でCVE-2022-3786とCVE-2022-3602からの保護と緩和を受けています。

  • 高度な脅威防御セキュリティサブスクリプションを適用した次世代ファイアウォール製品(NGFW)とPrisma Accessは関連セッションを自動的にブロックできます。
  • Cortex XSOARのプレイブックは修復の自動化に役立ちます。
  • Cortex XDRのお客様は、リモートコード実行のメモリ破壊エクスプロイトから保護されています。
  • Cortex XDRで以下のXQLクエリを使うと、これらのCVEのエクスプロイト試行追跡に役立ちます。
  • Cortex Xpanseのお客様は「Insecure OpenSSL [CVE-2022-3602 and CVE-2022-3786]」ポリシーを通じて影響を受けるバージョンを特定できます。
  • Prisma Cloudのお客様は[Vulnerabilities (脆弱性)]タブで脆弱性のあるリソースを特定できます。
本稿で扱う脆弱性 CVE-2022-3602, CVE-2022-3786

脆弱性の詳細

OpenSSLがセキュリティアドバイザリで説明しているとおり、CVE-2022-3786CVE-2022-3602の脆弱性はいずれも「X.509証明書の検証、とくに名前制約のチェックによって引き起こされる」ものです。またOpenSSLは「この脆弱性が証明書チェーン署名の検証後に発生すること」や、「悪意のある証明書に署名してくれる認証局(CA)が存在するか、信頼できる発行者(trusted issuer)へのパスを構築できていないのに証明書の検証を継続してくれるアプリケーションが存在することが必要」、とも指摘しています。

いずれの脆弱性も、OpenSSLライブラリのossl_punycode_decode関数で発生します。

また、いずれもエクスプロイトの成功には以下を必要とします。

  • 有効なCAが署名した悪意のあるX.509証明書
  • クライアントサイドTLS証明書をパースするサーバーに脆弱性があること

悪意のある証明書は、otherNameフィールドにSmtpUTF8メールアドレスを指定したsubjectAltNameを持ちます。またこの証明書は、メールアドレスにPunycodeを含むnamedConstraintフィールドを持ちます。この2つの証明書項目を組み合わせると、パースされた証明書データがOpenSSLライブラリ内のossl_punycode_decode関数に到達できるようになります。namedConstraintフィールドは、513バイトのオーバーフローにデコードされるペイロードを含むことになります。

CVE-2022-3786で説明されている脆弱性により、攻撃者の制御する証明書内の悪意のあるメールアドレスを上記のように細工しておくと、「.」という文字 (10 進数 46) に限定された、任意の長さのスタックオーバーフローを得られます。

CVE-2022-3602で説明されている脆弱性はオフ バイ ワン(Off-by-one)の脆弱性です。この脆弱性により、攻撃者の制御する証明書内の悪意のあるメールアドレスを上記のように細工しておくと、スタック上に4バイトのオーバーフローを得られます。Windowsシステムの場合、このオーバーフローが原因でクラッシュ(もっとも可能性が高いシナリオはこちら)するか、潜在的なリモートコード実行(前者よりかなり可能性の低いシナリオ)につながることになります。

OpenSSLはデフォルトではスタッククッキーを有効にしてOpenSSLライブラリを配布しています。OpenSSLと外部リサーチャーによるCVE-2022-3602のテストでは、4バイトのオーバーフローによりスタッククッキーが上書きされ、クラッシュすることが確認されています。ただしOpenSSLはソースコードの形でも配布されているので、どのようなコンパイラオプションを使うかはすべてエンドユーザーしだいです。なかにはスタッククッキーやASLR、DEP/NXなどの最新メモリ緩和策を使わないユーザーがいるかもしれません。そうした判断がされていれば、エクスプロイトは容易になり、CVE-2022-3786によるリモートコード実行の危険性は高まります。

Linuxシステムの場合、スタッククッキー直前のスタックに、初期化されていないシード値が存在することが調査から判明しています。Linuxシステムではこの初期化されていないシード値が上書きされますが、それによる悪影響は確認されていません。この脆弱性は、セキュリティアドバイザリ公開までの1週間でかなり注目され、詳しく説明しているすばらしいブログがいくつかあります(とくにDatadog Security LabsColm MacCarthaighによる投稿など)。

現在の攻撃スコープ

いずれの脆弱性もエクスプロイト事例は確認されていません。プロセスのクラッシュを引き起こす概念実証(PoC)コードは存在します。攻撃者が、有効なCAによって署名された証明書を作りうるのであれば、サービス拒否攻撃が可能になります。

中間ガイダンス

できるだけ早くOpenSSLの最新バージョンにアップデートしてください。またOpenSSLは、TLSサーバーを運用している組織に対し、パッチ適用までのあいだはTLSクライアント認証の無効化を検討するよう推奨しています。

結論

OpenSSLの最新セキュリティ速報は、メモリ破壊脆弱性を2つ解説しています。このうち少なくともCVE-2022-3602については、当初はかのHeartbleed脆弱性と同程度に深刻たりうると見られていました。最終的にはどちらも深刻度「High(高)」と評価され、リモートコード実行にいたる可能性は低いと判断されています。

この問題に関するOpenSSLのブログ投稿によれば、OpenSSLと複数の外部リサーチャーたち(DatadogColm MacCarthaigh、OpenSSLの調査時に協力した匿名のリサーチャー)が、この結論を支持する広範な調査を実施したそうです。広く利用されているライブラリだけに、こうした結果となったことは望みうる最善の結果といえそうですが、最新パッチの適用は推奨されます。いずれの脆弱性も少なくともサービス拒否(DoS)を引き起こすことは確認されていますし、どうにかして悪意のある証明書を作成してそれに署名してもらえるのであれば、誰でもパッチ未適用のサーバーをクラッシュさせられる概念実証コード(PoC)も少なくとも1つ公開されているためです。

パロアルトネットワークス製品によるOpenSSL脆弱性からの保護

パロアルトネットワークスのお客様は、さまざまな製品の保護と更新により、同脅威の特定と防御を行えます。

侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、 こちらのフォームからご連絡いただくか、下記の電話番号までお問い合わせください(ご相談は弊社製品のお客様には限定されません)。

  • 北米フリーダイヤル: 866.486.4842 (866.4.UNIT42)
  • 欧州: +31.20.299.3130
  • アジア太平洋: +65.6983.8730
  • 日本: +81.50.1790.0200

高度な脅威防御を有効にした次世代ファイアウォールとPrisma Access

高度な脅威防御セキュリティサブスクリプションを有効化した次世代ファイアウォール (PA-Series、VM-Series、CN-Series)とPrisma Accessは、脅威ID 93212 (Application and Threat content update 8638)でCVE-2022-3602に関連するセッションを自動的にブロックできます。

Cortex XSOARによるOpenSSL脆弱性管理の自動化

関連するCortex XSOAR自動化プレイブックを参考にするとよいでしょう。

  • インシデントデータのエンリッチメントを自動化
    • CVEインジケータ(指標)のタグ付け
    • 自社環境内のインシデントをインジケータとリンク
  • エンドポイントハンティングの自動化
    • WindowsシステムやLinuxシステムの動作するエンドポイントを探しOSのエンドポイントIDを取得
    • 上記OS環境、Azure Sentinelのログ、SplunkでOpenSSL 3.xの動作しているアクティブなプロセスを探す
  • 緩和策を講じる
    • 最新版OpenSSLのダウンロード
    • 関連エンドポイントに最新バージョンのOpenSSLをインストール
  • アナリストへの通知
    • さらに調査が必要な場合アナリストに通知を送信
この画像はXSOARの自動化プレイブックのサンプルセクションを表示しています
図1. Cortex XSOARプレイブックのサンプルセクション。OpenSSL脆弱性への対応用に設計されたもの

このプレイブックはRapid Response Packに含まれているもので、このRapid Response Packには、脆弱性や脅威の傾向を把握するためのさまざまなプレイブックが含まれています。CVE-2022-3786、CVE-2022-3602用のCortex XSOARのプレイブックは、Cortexマーケットプレイスから入手できます。

Cortex XDR

Cortex XDRのお客様は、多層的セキュリティアプローチにより、リモートコード実行によるメモリ破壊のエクスプロイト(本稿に解説した脆弱性に関連して発生しうるものを含む)から保護されています。

また、以下のセクションに記載したUnit 42マネージド スレット ハンティング チームによるXQLクエリを活用すると、エクスプロイトの兆候をハントできます。

Unit 42 マネージド スレット ハンティング チームによるクエリ

Unit 42マネージド スレット ハンティング チームは、顧客ベース全体に対し、Cortex XDRとXQLクエリ(下記)を使ってこれらCVEのエクスプロイト試行を継続的に追跡しています。

Host InsightsはSearch and Destroy機能でエンドポイントのホストファイルをインデックス化します。これにより、アナリストはほぼリアルタイムでエンドポイント全体を概観し、脆弱なOpenSSLソフトウェアなどのファイルを迅速に特定できるようになります。

Host InsightsなしでCortex XDR Proエンドポイントを利用している場合は以下のクエリでOpenSSLの有無を確認できます。

Unit 42のマネージド スレット ハンティング サービスやマネージド検出対応サービスを含むUnit 42のマネージドサービスを契約しているCortex XDRのお客様には、技術的詳細とガイダンスを含むスレット インパクト レポートが自動で送付されています。

Cortex Xpanse

Cortex Xpanseのお客様は「Insecure OpenSSL [CVE-2022-3602 and CVE-2022-3786]」ポリシーを通じて影響を受けるバージョンを特定できます。このポリシーはすべてのお客様にご利用いただけます。これはデフォルトで有効になっています。

Cortex Xpanse Insecure OpenSSLポリシーの画面
図2. Cortex Xpanseの「Insecure OpenSSL [CVE-2022-3602 and CVE-2022-3786]」ポリシー

Prisma Cloudによる脆弱性管理

Prisma Cloudのお客様は[Vulnerabilities (脆弱性)]タブで脆弱性のあるリソースを特定できます。スキャンによって脆弱性のあるOpenSSLパッケージを含む脆弱なエンティティは自動的に検出され、アラートが発報されます。

またVulnerability Explorer(脆弱性エクスプローラ)でCVE-2022-3786とCVE-2022-3602を検索すると、自社環境内の影響を受けるリソースを一覧表示できます。

Prisma CloudのVulnerability Explorer(脆弱性エクスプローラ)でCVE-2022-3602を検出したようすを表すイメージ
図3. Prisma CloudでCVE-2022-3602を検出したところ

2022-11-04 14:30 JST 英語版更新日 2022-11-03 15:30 PDT の内容を反映
2022-11-08 14:00 JST 英語版更新日 2022-11-04 08:00 PDT の内容を反映

Enlarged Image