説明
機密データの消去に使った通常のmemsetは、コンパイラーの最適化で削除され、シークレットがメモリに残る場合があります。
想定される影響
- メモリダンプ、コアダンプ、解放後の使用、スワップ領域を通じてシークレットが漏れる可能性があります。
対処方法
memset_s、explicit_bzero、SecureZeroMemoryなど、最適化で消去処理が削除されないことを対象環境が保証するAPIを使ってください。提供状況と使用条件を確認し、別のメモリ位置に残ったコピーも管理してください。
例
変更前
c
char password[64];
memset(password, 0, sizeof(password));
変更後
c
char password[64];
explicit_bzero(password, sizeof(password));
使われない通常のmemsetは削除される可能性があります。変更後は専用の消去APIを使います。バッファーにパスワードを入れて使う部分は省略しており、explicit_bzeroを提供する環境の抜粋です。