ファームウェア解析における安全でない機能呼び出しデータの理解

ファームウェア解析は、ファームウェアイメージから抽出されたサポート実行ファイルに潜在的に危険な関数呼び出しを特定します。 これらの結果は、追加のセキュリティレビューが必要な実装パターンを特定し、潜在的な露出に基づいてバイナリの優先順位付けに役立ちます。

この記事では、ファームウェア解析結果で見られる可能性のある安全でない機能呼び出し信号について説明します。 サポートファイル、カバレッジの制限、実行ファイルおよびデバイスの文脈での調査結果の評価方法について説明しています。

Note

安全でない関数呼び出しが存在するからといって、実行ファイルやデバイスが脆弱であることを必ずしも意味しません。 実際のリスクは関数の使い方、信頼できない入力が到達するかどうか、実行ファイルがどのように公開・保護されるかに依存します。

ファームウェア解析における安全でない機能呼び出し信号

Unsafe Function Calls analysisは、サポートされる実行可能およびリンク可能フォーマット(ELF)実行ファイルの静的解析を行います。 適切な入力検証、境界チェック、バッファサイズ検証、その他の安全なコーディング制御なしに使用された場合にセキュリティ問題を引き起こす可能性のある関数への参照を特定します。

一部のメモリ処理関数は誤った使用でバッファオーバーフローやその他のメモリ破損を引き起こすことがあります。 影響を受けるコードパスや利用可能な緩和策によっては、攻撃者がこれらの条件を利用してデバイスを妨害したり、不正コードを実行したりすることがあります。

各結果は脆弱性の判定ではなく、シグナルを表しています。 シグナルを一緒に評価し、実行ファイルがファームウェア内で果たす役割の文脈で判断してください。

unsafe関数呼び出しのスクリーンショットはプレビュー結果で、unsafeやネットワーク呼び出しの合計数、実行ファイルごとの関数ごとのカウントなどが含まれます。

潜在的に安全でない機能

一部のライブラリ機能は、処理するデータの規模や信頼性を本質的に強制しないためリスクを伴います。 例えば、 strcpy や strcat のような関数は、プログラムが過大または信頼できない入力を宛先バッファにコピーするとバッファオーバーフローの原因となることがあります。

報告された参照によると、ファームウェア解析により実行ファイル内で追跡された関数が特定されました。 関数の使い方が間違っているとは証明されません。 この関数は、入力長の確認、十分な宛先スペースの確保、信頼できるデータへの入力制限などの安全対策と併用されることがあります。

ソースコードを変更する際は、宛先バッファのサイズを受け入れ、データのコピーや連結前に入力長を検証する文字列処理関数を使用してください。 結果がnull終端であることを確認し、切断やエラーを処理してください。 strncpyやstrncatなどの有界関数は、無界代替関数と比べてリスクを低減できますが、適切なバッファサイズ計算と共に使用する必要があります。

この特徴が進化するにつれて、追跡される関数のセットは変化することがあります。 関数名とカウントを、メモリ安全リスクやコマンド実行リスクの完全なインベントリとしてではなく、コードレビューの出発点として解釈してください。

ネットワーキング通話情報

ファームウェア解析はまた、解析された実行ファイル内でネットワーク関連関数呼び出しがいつ特定されるかを示します。 このシグナルを使って実行ファイルの優先順位を決め、さらなるレビューに備えましょう。 実行ファイルがリモート接続を受け入れているか、デバイス外で通信するか、デプロイされた環境で到達可能かを判断するものではありません。

発見の優先順位をつける際は、まず安全でない関数呼び出しとネットワーク関連呼び出しの両方を含む実行ファイルをレビューすることを検討してください。 これらの実行ファイルはネットワークから受信したデータを処理し、早期調査が必要になることがあります。

実行可能パスと呼び出し数

結果はファームウェアイメージから抽出された実行可能パスに関連付けられます。 関数呼び出し数は、その実行ファイルに対して追跡された関数への参照数が特定されたことを示します。 数が多いほど、レビューすべき場所が増えることを示すかもしれませんが、それだけでは深刻度や悪用の可能性が高いとは限りません。

同じ実行ファイルが複数の抽出された場所に現れることがあり、異なる実行ファイルが同じ関数への参照を含むことがあります。 エクストラクターパスとファームウェアのバージョンを使って、正しいソースコンポーネントやサプライヤーのアーティファクトを特定しましょう。

対応ファイルとサポート範囲

Unsafe Function Calls 解析はプレビュー版で利用可能で、Linuxベースのファームウェアイメージから抽出されたサポートされたELFユーザースペース実行ファイルに適用されます。

Linuxカーネルモジュール(.ko)ファイルはプレビューがユーザー空間の実行可能解析に限定されているため含まれていません。

プレビューは以下のプロセッサアーキテクチャをサポートしています:

  • AMD64またはx86-64
  • ARM64またはAArch64
  • ARM32

バイナリ要件

実行ファイルは、ファームウェア解析で使用している機能を特定できる情報を保持しなければなりません。 静的リンクやストリップされたバイナリは、関数名やその他の必要な情報が利用できない場合、結果を生み出さないことがあります。

ファームウェアイメージは、他の解析作業を成功裏に完了させることができ、安全でない機能呼び出しの結果を生み出しません。 各ファームウェアアナライザーには独自のファイル、アーキテクチャ、メタデータ要件があります。

非安全関数コールデータを一緒に使うこと

それぞれの信号は潜在的なリスクに対する異なる視点を提供します:

信号 それが理解に役立つこと
実行可能パス 抽出された実行ファイルには、特定された呼び出しが含まれています。
安全でない関数呼び出しの数 実行ファイル内で特定された安全でない関数呼び出しの総数。
ネットワーク通話回数 ネットワーク関連の動作により、その実行ファイルをさらに詳しく確認する対象として優先すべきかどうか。 カウントだけで遠隔地での到達可能性は証明されません。
<function name>通話回数 実行ファイル内で名前付き関数への参照数が何回特定されたか。 関数固有のカウントを使って、バッファサイズ、入力検証、フォーマット文字列の処理、メモリ権限、コマンド入力検証などの該当するセキュリティ制御についてさらに詳しく確認してください。

以下の関数に対して機能固有のカウントが提供されています:

  • strcpy
  • strcat
  • printf
  • fprintf
  • sprintf
  • system
  • mmap
  • popen

一つの分野に頼るのではなく、これらの信号を一緒に評価して、どの実行ファイルが最も即時のレビューを必要としているかを理解しましょう。

重要な考慮事項

ゼロおよび空の結果の解釈

結果は実行ファイルに対してゼロカウントを示す場合もあれば、実行ファイル自体を省略することもあります。 カウントがゼロの場合は実行ファイルは解析されたものの、そのフィールドで追跡された呼び出しは検出されなかったことを意味します。

実行ファイルが結果に表示されなくても、安全でない関数呼び出しが一切含まれていないと考えないでください。 ファームウェア解析では、実行ファイルがサポートされていないアーキテクチャを使っていたり、関数参照を特定するために必要な情報が含まれていないために解析できなかった可能性があります。

結果リストが空の場合、ファームウェアイメージに対してUnsafe Function Callの結果が利用できないことを意味します。 だからといって、ファームウェアに危険な関数呼び出しが全くないわけではありません。

以下の場合、結果が表示されません:

  • ELFユーザースペースの実行ファイルは抽出されませんでした。
  • 抽出された実行ファイルはサポートされていないアーキテクチャを使用しています。
  • 静的または剥離されたバイナリには、識別情報が十分に含まれていません。
  • 解凍されたファイルは除外されたLinuxカーネルモジュールです。
  • ファームウェアイメージは、Unsafe Function Calls解析が利用可能になる前に分析されました。
  • 抽出や分析は成功しなかった。

Note

空の結果は、ファームウェアに安全でない関数呼び出しが含まれていないことを確認できません。 Unsafe Function Callsプレビューが利用可能になる前に処理されたイメージの現在の解析を受け取りたい場合は、ファームウェアイメージを再度アップロードしてください。

イメージのアップロード方法や結果の閲覧方法については、「 ファームウェア解析サービスでファームウェアイメージを分析する」をご覧ください。 関連するコンパイラおよびリンカー保護を評価するには、同じ実行ファイルの バイナリ強化 タブを確認してください。