Espressif ESP-NOW の欠陥により、攻撃者が通信をリプレイすることが可能に

Espressif ESP-NOW の欠陥により、攻撃者が通信をリプレイすることが可能に

Nozomi Networks Labs は、既存の無線ハードウェア上でスマートデバイスの直接制御を高速かつ低消費電力で実現する Espressif の無線プロトコル ESP-NOW のリファレンス実装にふたつの脆弱性があることを確認しました。

注目すべきは、発見された脆弱性の1つで、攻撃者がESP-NOWが実装しているリプレイ防止策をバイパスし、脆弱な2つのESP-NOWノード間で交換された以前にキャプチャされたパケットを自由に再送信できる可能性があることである。この脆弱性は暗号化レイヤーで保護されたパケットにさえ影響し、暗号化キーの知識を必要としません。実際の攻撃シナリオの例としては、警報システムの任意の解除や、自動入場ゲートの不正な開放などがあります。

私たちの発見が公表された後、Espressifはこれらの問題に対処するための修正を同社の公式GitHubリポジトリに速やかに実装しました。資産所有者は、脆弱なコンポーネントを使用しているデバイスのファームウェアを早急に更新するよう促されている。当社のお客様には、NozomiのGuardian Air ワイヤレスセンサーが、これらの欠陥の悪用に対する保護を提供するためにアップデートされました。

このブログでは、まずEspressifとESP-NOWプロトコルについて簡単に紹介する。次に、これらの脆弱性によって促進される可能性のある実際の攻撃シナリオを、欠陥そのものと影響を受けるデバイスの詳細な概要とともに説明する。最後に、これらの脆弱性に対処するために利用可能な公式の改善策を紹介します。

リサーチ範囲

Espressif Systems は、IoT ソリューションの有名なプロバイダーであり、半導体業界で優位な地位を占めています。2023年には、同社は 2億個近いチップの販売を報告し、2014年に画期的な ESP8266 モデルを導入して以来、10億個以上の SoC (システムオンチップ) を出荷しています。これらの数字は、Espressif が半導体市場に大きな影響を与えていることを示すだけでなく、IoT およびスマートデバイス分野の形成における同社の主導的な役割を浮き彫りにしています。

図1.ESP-NOWスタック。(出典:エスプレシフ)

Espressif は、その革新技術の1つとして、デバイス間の直接ワイヤレス通信を可能にする独自プロトコル ESP-NOW を開発しました。データリンク層で動作し、Wi-Fi アクションフレーム (図1) を利用するこのプロトコルは、同社の ESP-IDF SDK の一部としてオープンソースの拡張モジュールとして提供されています。ESP-NOW は、Wi-Fi 接続機能を備えたEspressifの各種 SoC と互換性があり、デバイス間のシームレスで効率的な通信を可能にします。特に素早いレスポンスを実現するように設計されており、混雑したネットワーク環境で一般的に発生する遅延やパケット損失を最小限に抑えます。これにより、ESP-NOW は、IoT アプリケーションの接続性を強化したい開発者にとって人気のソリューションとなっています。

これらの脆弱性の影響

最も影響が大きい脆弱性は CVE-2024-42483 で、脆弱な ESP-NOW ノードに対してリプレイ攻撃を実行することが可能です。これは、暗号化セキュリティレイヤーで保護された通信でも、暗号化キーなしで発生する可能性があります。

対象となるシステムによっては、この脆弱性は深刻な結果をもたらす可能性があります。例えば、ESP-NOW はビル警報などのセキュリティシステムで使用されており、モーションセンサーとの通信を可能にしています。このような状況では、攻撃者はこの脆弱性を悪用して、以前に傍受した正当な "OFF" コマンドを再送信し、モーションセンサーを自由に無効にすることができます。

ESP-NOW のもう一つの一般的な用途は、自動ゲートやガレージのドアなどに使用される遠隔操作式ドアオープナーの導入です。このような状況では、攻撃者が "OPEN" コマンドを傍受し、後でそのコマンドを再生してドアを開け、建物に不正にアクセスすることが可能です。

これらの攻撃を成功させるために必要な唯一の前提条件は、標的の通信を傍受して再生する能力であることを強調したいと思います。この能力は、高利得の Wi-Fi 指向性アンテナを使用すれば容易に実現でき、攻撃者は送信ノードから数十メートル離れた場所から攻撃を実行できる可能性があります。

CVE-2024-42484 によって引き起こされる追加の影響として、任意のノードで DoS (サービス拒否) 状態を引き起こす可能性が挙げられます。しかし、参照実装で実施されたテストでは、脆弱性自体を悪用することには成功したものの、この影響を引き起こすのに必要な条件を再現することはできませんでした。

その結果、この脆弱性がリファレンスコードを使用するデバイスに重大な脅威をもたらす可能性は低いと思われます。この脆弱性がリスクをもたらす可能性があるのは、メーカーや資産所有者がリファレンスコードに変更を加えた場合 (たとえば、新しい機能を追加したり、特定のシナリオにおけるデバイスの動作を変更したりする場合) など、まれな状況のみです。

脆弱性リストと影響を受けるバージョン

以下の表は、CVSS v3.1 基本値の順に並べられた、発見されたふたつの脆弱性を示しています。

CVE IDCWECVSS v3.1 ベーススコアCVSS v3.1 ベクトル
CVE-2024-42483信頼されたデータによる信頼されないデータの受け入れ (CWE-349)5.3CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L/E:H/RL:W/RC:C
CVE-2024-42484境界外読み取り (CWE-125)4.3CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L

CVE-2024-42483 は、コミット 0c8bd74456e797520351d72ed85b44a8ddf0ed63 (included) までのESP-NOW GitHub リポジトリに影響します。

コミット e8748dd33eced44e5f0dd6ad7ba11a39e4ab71d9 (included) までの CVE-2024-42484 が影響します。

脆弱性スポットライト

私たちが発見したふたつの脆弱性の中で、CVE-2024-42483 は最も危険であり、最終的に脅威の主体がリプレイ攻撃を実行することを可能にする可能性があるからです。

リプレイ攻撃を防止することを明確な目的として、すべての ESP-NOW パケットには、送信ごとにランダムに生成される 16ビットで構成される固有の "マジック" 値が含まれています。ESP-NOW ノードは、受信メッセージのタイプとマジック値のペアを格納する "g_msg_magic_cache" と呼ばれるローカルマジックキャッシュを使用します。

このメカニズムの原理は単純です。各メッセージを受信すると、ESP-NOW ノードはキャッシュの内容をチェックします。メッセージの種類とマジック値がすでに存在している場合、そのメッセージは重複として識別され、破棄されます。存在しない場合、メッセージは受け入れられ、処理フローは通常通り進行します。

このアプローチは理論上は堅牢に見えますが、実際には以下のふたつの欠点により不十分であることが証明されています。

  • これらのマジック値を保存するために各ノードが維持するローカルキャッシュは、容量に制限があります。デフォルトでは、図2 に示されているように、各ノードのキャッシュには 32 のスロットのみが含まれています。これらのスロットはラウンドロビン方式で管理されており、つまり、キャッシュが一杯になると、新しいメッセージが古いエントリをタイプとマジック値で上書きします。
  • ローカルキャッシュはメッセージの種類によって区別されません。ブロードキャストまたはユニキャストであるか、暗号化されているか平文で送信されているかに関わらず、すべての種類のメッセージに対して単一の共有リソースとして機能します。
図2. g_msg_magic_cache "の宣言

その結果、攻撃者は、平文、ブロードキャスト、および認証されていない ESP-NOW メッセージのバーストをネットワークに大量に送信し、キャッシュ全体を急速に埋め尽くし、その後上書きすることができます。この戦略により、攻撃者は正当なエントリをキャッシュから消去し、暗号化の状態に関係なく、以前に捕捉したパケットを再注入する機会を作り出すことができます。

この攻撃シナリオを図3に示します。

図3. 自動ゲートのドアを開けることになる攻撃シナリオの例

修復

これらの脆弱性が報告された後、Espressif は ESP-NOW のリファレンス実装における欠陥を迅速に修正しました。

資産所有者が、ESP搭載機器のファームウェアを直接制御している場合、ESP-NOW GitHubリポジトリのローカルコピーを少なくともコミット4e30db50d541b2909d278ef0db05de1a3d7190ef (両方の脆弱性に対するパッチを含む最初のもの) に更新した後に、新しいイメージを構築することで、これらの脆弱性を修正することができます。

あるいは、資産所有者は、前述の脆弱性を修正するパッチを適用したファームウェアイメージを入手するために、デバイスの製造元に連絡することが推奨されます。

何らかの理由で資産所有者がデバイスを更新できない場合、悪用を成功させる可能性を低減するために、以下の緩和策を実施することができます。

  • 受信側の脆弱なデバイスに近接する無線チャンネル (例:Guardian Air) を監視
  • 送信装置の無線信号の電力を最小限に減らし、敵対者が有効なメッセージを傍受する可能性を低減
  • 定期的に、受信側の脆弱なデバイスが適切に機能しているか、期待通りに機能しているかを確認