Belkin Wemo Smart Plug V2 – パッチが適用されないバッファ オーバーフロー

Belkin Wemo Smart Plug V2 – パッチが適用されないバッファ オーバーフロー

ソースノード: 2657924

IoTセキュリティ企業Sternumの研究者 掘り起こした 有名なデバイス ブランド Belkin の人気のホーム オートメーション電源プラグ。

彼らが検討したモデルは、 Wemo ミニ スマート プラグ (F7C063) どうやら賞味期限が終わりに近づいているようですが、オンラインで販売されているものがたくさん見つかり、Belkin のサイトにはセットアップ方法に関する詳細なアドバイスや説明書も掲載されています。

(短期的に現代的な意味で)古いかもしれないが、研究者らは次のように指摘した。

私たちがこのデバイスに最初に興味を持ったのは、これらのデバイスが研究室の周りにいくつか転がっていたり、自宅で使用されていたことがきっかけでした。そのため、それらがどれだけ安全に使用できるか (またはそうでないか) を確認したかっただけです。 […これはかなり人気のある消費者向けデバイスのようです[; [これらの数字に基づくと、Amazon だけでの総売上は数十万に達すると推定しても問題ありません。

簡単に言うと、すでにこれらのものを購入して接続し、自宅のコンセントを制御するために使用している人がたくさんいます。

「スマート プラグ」とは、簡単に言うと、既存の壁コンセントに差し込み、壁コンセントの前面にある主電源コンセントと、壁のコンセントの前面にある同じ外観の主電源コンセントの間に Wi-Fi 制御のスイッチを介在させる電源ソケットです。スマートプラグの前面。 これは、たとえば丸いユーロソケットを三角形の英国ソケットに変換する代わりに、たとえば手動で切り替えられる米国のソケットを、アプリやアプリ経由でリモート制御できる電子的に切り替えられる米国のソケットに変換する電源アダプタのようなものだと考えてください。 Web タイプのインターフェイス。

IoTのS…

古いジョークにあるように、多くのいわゆるモノのインターネット (IoT) デバイスの問題は、セキュリティを表す「IoT」の文字「S」であることです…

…ということは、もちろん、多くの場合、サイバーセキュリティが期待ほどではない、あるいはまったくないということです。

ご想像のとおり、安全でないホーム オートメーション デバイス、特に家の外や地球の裏側にいる誰かが自由に電化製品のオン/オフを許可できるデバイスは、多くの問題を引き起こす可能性があります。

私たちはこれまで、さまざまな製品における IoT のセキュリティ上の不安について書いてきました。 インターネットケトル (はい、本当に) 自宅の Wi-Fi パスワードがセキュリティ カメラに漏洩し、犯罪者がそのパスワードを保持するために使用できる可能性があります。 あなたに目を向けて その逆ではなく、ネットワークに接続されたディスク ドライブにアクセスする危険があります。 ランサムウェアによる被害 インターネット経由で直接。

このケースでは、研究者らは 2023 年 2023 月に Wemo Mini スマート プラグにリモート コード実行ホールを発見し、2023 年 XNUMX 月に報告し、XNUMX 年 XNUMX 月に CVE 番号を受け取りました (CVE-2023-27217).

残念ながら、これらのデバイスの多くが実際にアクティブに使用されているのはほぼ確実であるにもかかわらず、Belkin は、そのデバイスが「寿命を迎えている」と考えており、そのためセキュリティ ホールは修正されないと述べたようです。

(デバイスが 120 V AC または 230 V AC の電気回路に欠陥があることが判明した場合、過熱して有害な化学物質が放出されたり、異常が発生したりする可能性があることが判明した場合、この種の「耐用年数終了」の解雇がどの程度受け入れられるかはわかりません。しかし、たとえサイバー攻撃者がデバイスの主電源スイッチを自由にオン/オフを繰り返し点滅させる可能性があるとしても、デバイスの低電圧デジタル電子機器やファームウェアの障害は無視できるようです。)

フレンドリーな名前が敵の場合

研究者たちが発見した問題は古き良きものでした スタックバッファオーバーフロー デバイス ソフトウェアの一部で、いわゆる FriendlyName デバイスの – 携帯電話のアプリを使用してデバイスに接続したときに表示されるテキスト文字列。

デフォルトでは、これらのデバイスは次のようなフレンドリ名で起動します。 Wemo mini XYZここで、 XYZ は、擬似ランダムに選択されたと推測される XNUMX つの XNUMX 進数を示します。

つまり、これらのデバイスを XNUMX つまたは XNUMX つ所有している場合でも、最初はほぼ確実に異なる名前が付いているため、簡単にセットアップできます。

ただし、後で区別しやすいように、次のようなわかりやすい名前を割り当てて、それらの名前を変更することもできます。 TV power, Laptop charger & Raspberry Pi server.

Belkin のプログラマー (より正確に言えば、これらの Belkin ブランドのデバイスに組み込まれたコードのプログラマーであり、他のブランド名にもスマート プラグ ソフトウェアを提供していた可能性があります) は、明らかに、名前変更プロセス中の新しい名前。

しかし、彼らは、指定した名前がその 68 バイトのスロットに収まるかどうかを確認するのを忘れていました。

代わりに、彼らは、公式の電話アプリを使用してデバイスの名前変更プロセスを実行することを想定しており、そのため、デバイスに送信されるデータ量を最初から制限して、そうでない場合に発生する可能性のあるバッファオーバーフローを回避できると考えました。起きます。

皮肉なことに、デバイス自体が適切に動作するために必要な 68 バイト制限を守るだけでなく、入力できる文字数を 30 文字に制限することにも細心の注意を払っていました。

サーバー側でエラー チェックを行うのではなく、クライアント側でエラー チェックを実行させるのがなぜ悪い考えであるのかは誰もが知っています。

  • クライアント コードとサーバー コードが一致していない可能性があります。 将来のクライアント アプリは、72 文字の名前が適切なオプションであると判断し、安全に処理できる量を超えるデータをサーバーに送信し始める可能性があります。 将来のサーバーサイドのプログラマーは、予約されている 68 バイトをすべて使用している人がいないことに気づき、24 バイトで十分であると決定するかもしれません。
  • 攻撃者はアプリを利用しないことを選択する可能性があります。 独自のリクエストを生成してデバイスに送信することで、アプリのみに依存するセキュリティ チェックを簡単に回避できます。

研究者らは、新しい名前用に予約されているメモリ バッファの最後に上書きし、直後のバイトに保存されているデータを破損することで、Wemo デバイスを意のままにクラッシュさせることができるほど、これまでにない長い名前をすぐに試すことができました。

スタックの破損

残念ながら、スタックベースのオペレーティング システムでは、ほとんどのソフトウェアはスタックベースの一時メモリ バッファをレイアウトすることになり、これらのバッファのほとんどのすぐ後に別の重要なメモリ ブロックが続き、プログラムが終了したらどこに行くかを指示します。それは今やっています。

技術的には、これらの「次にどこに行くか」のデータ チャンクは次のように呼ばれます。 差出人住所、プログラムがいわゆる functionまたは サブルーチンこれは、プログラムのいくつかの部分で使用できるようにするコードの塊 (たとえば、「このメッセージを印刷する」や「警告ダイアログをポップアップする」など) です。

サブルーチンが使用されるたびに戻りアドレスが魔法のようにスタックに記録されるため、コンピュータはそのパスを自動的に「巻き戻し」て、サブルーチンが呼び出された場所に戻ることができます。このパスは、サブルーチンが起動されるたびに異なる可能性があります。

(サブルーチンの戻りアドレスが固定されている場合は、プログラム内の XNUMX か所からしか呼び出すことができません。その場合、そもそもそのコードを別のサブルーチンにパッケージ化する手間が無意味になります。)

ご想像のとおり、サブルーチンの実行が終了する前にその魔法のリターン アドレスを踏みにじると、サブルーチンが終了すると、確信犯的に、しかし無意識のうちに間違った場所に「巻き戻されて」しまいます。

少し (あるいはかなり) 運が良ければ、攻撃者は返信先アドレスを独創的に踏みにじる方法を事前に予測でき、それによって意図的かつ悪意のある方法でプログラムを誤った方向に誘導できる可能性があります。

単にクラッシュするだけでなく、誤って誘導されたプログラムはだまされて攻撃者が選択したコードを実行する可能性があり、これによりいわゆる リモートコード実行 エクスプロイト、または RCE。

この種のエクスプロイトから保護するには、次の XNUMX つの一般的な防御策が役立ちます。

  • アドレス空間レイアウトのランダム化。ASLR とも呼ばれます。 オペレーティング システムは、プログラムを実行するたびに、プログラムをわずかに異なるメモリ位置に意図的にロードします。 これにより、攻撃者は、単にコードをクラッシュさせるのではなく、最終的に制御を取得して保持する方法で、バグのあるプログラムを誤って誘導する方法を推測することが困難になります。
  • カナリアを積み上げて、 この名前は、メタンの存在下で気を失うため、鉱山労働者が地下に連れて行っていた鳥にちなんで名付けられ、爆発の危険性について残酷だが効果的な早期警告を提供しました。 このプログラムは、サブルーチンが呼び出されるたびに、既知ではあるがランダムなデータ ブロックをリターン アドレスの直前に意図的に挿入します。これにより、バッファ オーバーフローが、踏みにじるほどオーバーランする前に、まず不可避かつ検出可能な形で「カナリア」を上書きします。非常に重要な返送先住所について。

エクスプロイトを迅速かつ確実に機能させるには、研究者らは Wemo プラグを強制的に ASLR オフにする必要がありましたが、これはリモート攻撃者には不可能ですが、実際には何度も試行すれば、それでも攻撃者は幸運に恵まれる可能性があります。プログラムが使用しているメモリアドレスにアクセスし、とにかく制御を取得します。

しかし、バグのあるアプリは「カナリアチェックの安全指示の挿入」機能をオフにしてソースコードからコンパイルされていたため、研究者らはスタックカナリアの問題を心配する必要はなかった。

(カナリアで保護されたプログラムは、安全性チェックを行うためにすべてのサブルーチンに追加のコードが必要になるため、通常、保護されていないプログラムよりもわずかに大きく、速度が遅くなります。)

何をするか?

  • Wemo Smart Plug V2 の所有者であれば、 「外部」からインターネット経由でデバイスにアクセスできるようにホームルーターを設定していないことを確認してください。 これにより、専門用語で「あなたの」と呼ばれるものが減ります。 攻撃対象領域.
  • ユニバーサル プラグ アンド プレイをサポートするルーターをお持ちの場合は、 UPnP とも呼ばれます。オフになっていることを確認してください。 UPnP を使用すると、内部デバイスが不用意に部外者に公開されてしまうことが容易になることで知られています。
  • プログラマーなら、 数バイトを節約するためだけにソフトウェアの安全機能 (スタック保護やスタック カナリア チェックなど) をオフにすることは避けてください。 本当にメモリが不足している場合は、セキュリティを低下させるのではなく、コードを改善したり機能を削除したりして、メモリをさらに詰め込むことでフットプリントを削減することを検討してください。

タイムスタンプ:

より多くの 裸のセキュリティ