C and C++ Binaries


BADFUNC.MEMSET : memsetの使用

要旨

memset() を使用しています。後で使用するために memset() を使用してデータの書き込みを行うのは問題にはなりませんが、コンパイラによっては最適化により削除される可能性があるため、メモリ消去用途での使用は危険です。

プロパティ

クラス名 Use of memset
日本語クラス名 memsetの使用
クラス分類 セキュリティ (security)
ニーモニック BADFUNC.MEMSET
カテゴリー
CWE CWE:14 Compiler Removal of Code to Clear Buffers
  CWE:676 Use of Potentially Dangerous Function
  CWE:1037 Processor Optimization Removal or Modification of Security-critical Code
CERT-C CERT-C:MSC06-C Beware of compiler optimizations
CERT-CPP CERT-CPP:EXP62-CPP Do not access the bits of an object representation that are not part of the object's value representation
  CERT-CPP:OOP57-CPP Prefer special member functions and overloaded operators to C Standard Library functions
DISA-3r10 DISA-3r10:V-16793 The designer will ensure the application properly clears or overwrites all memory blocks used to process sensitive data, if required by the information owner, and clears or overwrites all memory blocks used for classified data.
BSI BSI:MEMSET Use of memset
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっています。チェックを有効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += allow class="Use of memset"
全ての BSI 固有の BADFUNC クラスを含む BSI 関連クラスを有効にするには、 bsi 設定プリセットを使用してください。

解決法

memset() をメモリの機密データ消去のために使用していなければ、これらの懸念は当てはまりません。
問題がないことを確認できた場合は、ワーニングの stateSuppressed (抑制)に変更して除外することができます。

メモリの機密データ消去のために memset() を使用しており、消去したデータを後で使用していない場合は、コンパイラが memset() を最適化で削除しないことを以下の様に確認してください。

問題がないことを確認できた場合は、ワーニングの stateSuppressed (抑制)に変更して除外することができます。

関連のある設定ファイルパラメータ

このクラスは一般テンプレート設定ファイルで BAD_FUNCTION_* ルールセットによって実装されています。

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。