ゼファーネットのロゴ

製品には望ましくないファームウェアの脆弱性

日付:

製品には望ましくないファームウェアの脆弱性
イラスト:©IoT For All

ファームウェアの脆弱性とは、デバイスのファームウェアで見つかったセキュリティの弱点または欠陥を指します。 ファームウェアは、ハードウェア デバイス内に組み込まれ、低レベルの制御と機能を提供するソフトウェアの一種です。

ハードウェアと上位ソフトウェア間のブリッジとして機能します。 攻撃者はこれらの脆弱性を悪用して、不正アクセスを取得し、デバイスを制御または操作する可能性があります。

過去 XNUMX 年間にわたり、私たちは商用および産業用 IoT デバイスを標的とした多数のセキュリティ侵害を目撃してきました。 たとえば、サイバー犯罪者はフィンランドのラッペーンランタ市にある XNUMX つの建物の暖房をオフにすることができました。 シャムーンニューヨークダム、 そしてその Mirai ボットネット ドイツテレコムルーターなどの産業用IoTデバイスに影響を及ぼし、サービスの中断を引き起こしました。

セキュリティが IoT デバイスの弱点であることは広く知られていましたが、ロシアがウクライナを攻撃した昨年まで、この問題への対処はほとんど進展していませんでした。 この攻撃は、アノニマスがクレムリンの監視カメラシステムをハッキングし、ロシアがウクライナの送電網を攻撃するなど、サイバー攻撃の真の力を実証した。

これらの事件を受けて、米国と欧州連合は、IoT/IIoT サイバーセキュリティ体制の規制に関心を表明しており、これは切望されている措置です。 ただし、どこから始めるべきか、そのような攻撃につながる可能性のある最も危険な脆弱性は何なのかという疑問は残ります。

メーカーをこうした攻撃から守る特効薬はあるのでしょうか? 最も危険な脆弱性のいくつかとその潜在的な緩和策を見てみましょう。

脆弱性の聖杯: RCE

ほとんどの IT プロフェッショナルは、ファームウェア セキュリティの脅威の中で最も恐れられているものの XNUMX つであるリモート コード実行 (RCE) の概念をよく知っています。 攻撃者が RCE の脆弱性を悪用できる場合、デバイスを完全に制御できるようになり、ボットネットが作成される可能性があります。

さらに、攻撃者はユーザー データを盗んだり、さまざまなメーカーに対してスパイ活動を行ったりする可能性があります。 基本的に、攻撃者は望むあらゆる結果を達成できます。

次の疑問が生じます。攻撃者はどのようにしてデバイスの RCE 脆弱性を見つけることができるのでしょうか。また、どのようなタイプが RCE につながる可能性があるのでしょうか?

最も一般的なものを見てみましょう。

  • 認証バイパス: 攻撃者は、弱いパスワードまたはデフォルトのパスワードを使用する IoT デバイスの認証メカニズムをバイパスする可能性があります。 場合によっては、論理的なバグを悪用したり、特定のセキュリティ チェックを回避したりする可能性があります。 デフォルトのパスワード、ブルート フォース攻撃、ネットワークの脆弱性、ファームウェアの脆弱性など、いくつかの手法により認証がバイパスされる可能性があります。
  • バッファオーバーフロー: バッファ オーバーフローの脆弱性は、プログラムがバッファに保持できる量を超えるデータをバッファに保存しようとしたときに発生し、隣接するメモリ位置にデータがオーバーフローします。 攻撃者は、バッファをオーバーフローさせ、隣接するメモリ位置を悪意のあるコードで上書きする入力データを作成することで、この脆弱性を悪用する可能性があります。
  • 射出欠陥: インジェクションの欠陥は、攻撃者が Web フォームや API などのセキュリティで保護されていない入力やインターフェイスを通じて、悪意のあるコードを IoT デバイスに挿入できる場合に発生します。

それぞれについて詳しく見ていきます。

認証バイパス

認証は、組み込みシステムのセキュリティの重要な側面です。 これにより、許可された個人のみがデバイスとその機能にアクセスできるようになります。

認証バイパスとは、攻撃者がユーザー名やパスワードなどの必要な認証資格情報を提供せずにデバイスにアクセスできる状況を指します。 このセキュリティの脆弱性により、攻撃者がデバイスとその機能を制御できるようになり、デバイスに損害を与えたり、機密データにアクセスしたりする可能性があります。

攻撃者が認証をバイパスするために使用できる手法はさまざまです。 標準的な方法の XNUMX つは、デフォルトのパスワードまたは弱いパスワードを悪用することです。 多くの IoT デバイスには、広く知られているデフォルトのログイン資格情報があり、オンラインで簡単に見つけることができます。

攻撃者はこの情報を使用して、認証プロセスを経ずにデバイスにアクセスすることができます。 また、ブルート フォース攻撃を使用して弱いパスワードを推測することもできます。

認証バイパスを実現する別の方法には、ファームウェアの脆弱性を悪用することが含まれます。 たとえば、これは、オープンソース ソフトウェアの脆弱なバージョンを利用したり、認証フローの論理的なバグを使用したりすることによって発生する可能性があります。

さらに、ネットワークの脆弱性を悪用して認証をバイパスする可能性があります。 攻撃者は、ネットワーク トラフィックを傍受してログイン資格情報を取得したり、中間者攻撃を使用してデバイスになりすまして認証をバイパスしたりする可能性があります。

認証バイパスの軽減

デフォルトのログイン認証情報を変更して使用することが重要です。 強力なパスワード。 強力なパスワードには、大文字、小文字、数字、記号が含まれており、長さは 12 文字である必要があります。

次に、製品で使用しているすべてのサードパーティのオープンソース コンポーネントを最新の状態に保ちます。

第三に、認証バイパスを軽減するには、ネットワークを保護することが重要です。 これは、HTTPS や TLS などの安全な通信プロトコルを実装してネットワーク トラフィックを暗号化することで実現できます。 最後に、新製品がリリースされるたびに定期的に侵入テストを実施します。

バッファオーバーフロー

バッファ オーバーフローは、ソフトウェア システムで最もよく知られ、蔓延している脆弱性の XNUMX つです。 これらの脆弱性はさまざまな理由で発生する可能性があります。 一般的な原因の XNUMX つは、プログラム内の入力検証が欠如していることです。これにより、攻撃者は割り当てられたバッファ サイズより大きなデータを入力することができます。

これにより、過剰なデータが隣接するメモリ位置を上書きし、予期しない動作やクラッシュが発生する可能性があります。 バッファ オーバーフローの脆弱性のもう XNUMX つの原因は、strcpy や strcat など、境界チェックを実行しない安全でない関数の使用です。 実際のシナリオでバッファ オーバーフローのバグを示します。

そのためには、次を使用します DVRF (非常に脆弱なルーターのファームウェア) 私たちの目標として。 ファームウェアをプラットフォームにドロップすると、イメージが抽出され、すべてのバイナリが逆コンパイルされ、潜在的な脆弱性が検索されます。

私たちがこのターゲットを選択したのは、誰でもアクセスでき、公開されているメーカーのファームウェアを侵害したくないからです。

ここでわかるように、プログラムは XNUMX つの整数引数を受け取ります。 param_1param_2と呼ばれるローカル変数を宣言します。 ローカル_200 タイプの undefined2 (2 バイトまたは 16 ビットの符号なし整数)。 という配列も表示されます。 auStack510 サイズは 502 バイトです。

プログラムは次に、 memset() すべてのバイトを設定する関数 auStack510 ゼロに。 その後、次の値が満たされているかどうかを確認します。 param_1 2 より小さい場合、プログラムは使用法メッセージを出力し、エラー コード 1 で終了します。

If param_1 が 2 以上の場合、プログラムはウェルカム メッセージを出力し、XNUMX 番目の引数が指す文字列の内容をコピーします。 _(*(文字)(param_2 + 4))_** に ローカル_200   strcpy() 関数。 ここにバッファ オーバーフローの脆弱性があります。

16 番目の引数が指す文字列が XNUMX バイト (バイトのサイズ) より長い場合、 ローカル_200) strcpy() 関数は末尾を超えて書き込みます ローカル_200 バッファリングし、隣接するコンテンツの内容を上書きします。 auStack510 バッファ。

これにより、プログラムがクラッシュしたり、攻撃者がファームウェアの脆弱性から悪意のあるコードを実行できるようになったりするなど、予期しない動作が発生する可能性があります。

このタイプのバッファ オーバーフロー攻撃を防ぐには、バッファに書き込まれるデータ量を制限する関数を使用することが不可欠です。 strncpy() or snprintf()。 さらに、プログラムは次のようなバッファ オーバーフロー保護を備えてコンパイルする必要があります。 スタックカナリア およびアドレス空間レイアウトのランダム化 (ASLR、fASLR)。

コマンドインジェクション

コマンド インジェクションは、攻撃者が悪意のあるコードをコマンド シェルに挿入して、ターゲット デバイス上で任意のコマンドを実行する攻撃です。 この攻撃は、Web インターフェイス、入力フィールド、API など、さまざまな方法で実行される可能性があります。

ファームウェアでは、コマンド インジェクションは、ユーザーがデバイスと対話する一般的な方法である Web インターフェイスまたは API を通じて実行されることがよくあります。

ファームウェアでのコマンド インジェクションの影響は深刻になる可能性があります。 コマンド シェルへのコードの挿入に成功した攻撃者は、ターゲット デバイス上で任意のコマンドを実行できます。

これにより、攻撃者が機密データにアクセスしたり、デバイスを制御したり、ネットワーク上の他のデバイスに対して攻撃を開始したりする可能性があります。 さらに、コマンド インジェクションは正当なトラフィックとして現れることが多いため、検出が困難な場合があります。

このコードは、と呼ばれる関数であるようです wsc_generate_pin Wi-Fi Protected Setup (WPS) PIN を生成します。 WPS PIN は、Wi-Fi ネットワークに対してワイヤレス デバイスを認証するために使用される XNUMX 桁の番号です。

ただし、このコードにはコマンド インジェクションの潜在的な脆弱性があります。 この脆弱性は、シェル コマンドを実行するシステム関数を使用することで発生します。 具体的には、 スプリント 関数は、入力の適切な検証やサニタイズなしでシステムに渡されるコマンド文字列を構築するために使用されます。

脆弱なコードは強調表示された行です。

このコードは、次の値を書き込むシェル コマンドを構築します。 ローカル_18   / dev / random ファイル。 攻撃者が値を制御できる場合 ローカル_18、追加のシェルコマンドを acスタック141 バッファに侵入し、任意のコードが実行される可能性があります。 この変数はユーザー (WPS Pin) からのものであるため、この脆弱性が悪用可能です。

この脆弱性を防ぐには、シェル コマンドの構築に使用されるすべての入力を適切に検証し、サニタイズすることが不可欠です。 入力検証は、正規表現またはホワイトリスト フィルタリングを使用して実行できます。

ホワイトリスト フィルタリングには、入力に含めることができる文字または値の許可セットを定義することが含まれます。 開発者は、上で説明したように、バッファ オーバーフロー攻撃を防ぐために、入力に使用できる文字数も制限する必要があります。

IoTセキュリティの課題

私たちは、IoT セキュリティが重大な課題であり、多くのメーカーがこの分野のセキュリティ専門家を雇用するのに困難に直面していることを理解しています。 前述の緩和手法を実装することで、デバイスのセキュリティを確保するための実質的な措置を講じることができます。

さらに、セキュリティ向上の取り組みにおける最も簡単な最初のステップとして、コンパイル時の強化フラグを使用することを強くお勧めします。

潜在的な脆弱性を特定し、迅速に対処するには、定期的なセキュリティ監査とテストの実施も不可欠です。 これを実現するには、サードパーティのセキュリティ ラボを利用するか、少なくともファームウェア分析ツールを使用することをお勧めします。

スポット画像

最新のインテリジェンス

スポット画像