memsetによる機密情報の消去

memsetによる機密情報の消去

説明

機密データの消去に使った通常の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を提供する環境の抜粋です。

参考資料