ちゃっぴの監禁部屋

ガチガチに締めすぎて動きがとれなくなる。。。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  405  : 記事  5  : コメント  10908  : トラックバック  134

ニュース

記事カテゴリ

書庫

日記カテゴリ

Communities

Personal Information

機密情報を扱う場合、その情報が漏えいできないように最大限の配慮を払う必要があります。Disk 等の永続化された storage には保存しないとか、保存する場合は必ず暗号化して格納すべきなんてのは結構浸透していると思いますが、memory はどうでしょうか?

Memory 上の data は他の data と違い保護していないことがほとんどではないかと思います。というのは memory 上の data はあくまで一時的なものであり、永続化される可能性が低いため優先度はどうしても低くなってしまいますね。

ただ、memory でも永続化される状況が存在します。Crash dump, paging file, 休止状態で使われる hibernate file には出力される可能性がありますね。Paging file への出力は VirtualLockAllocateUserPhysicalPages のような関数を利用して利用している virtual addressworking set address に固定化することにより防止することはできますが、それ以外は無理ですね。また、debbuger を使って直接 memory に attach することにより読み取ることも可能です。

これらのことを考慮するなら機密情報はたとえ memory 上でも簡単には読み取れないように保護すべきです。

通常の場合この手の保護は暗号化を使って保護するのですが、今回対象は memory 上の data であるため、一時的には暗号化解除した情報が必要になる場合がほとんどでしょう。その場合どうするべきか?

使い終わったらすぐに消してやる。すぐに data を消しこんでやることで情報漏洩の risk を最低限にすることができます。正直これしか対処のしようがありません。

ただし、問題があります。通常の解放処理では memory 上の data の消去はされません。開放済みと mark されるだけで、その memory が再利用されるときまで memory 上に data は残っています。これを防ぐためには、開放前に対象の address に対して別の data を上書きします。Win32 にはこの処理用として SecureZeroMemory が用意されています。

似たような処理を行うものに memsetZeroMemory なんてものもありますが、最適化により省略されてしまう必要があるので、必ず SecureZeroMemory を利用しましょう。この仕組みについて詳しく知りたければ「良いニュースと悪いニュース」を参照するとよいでしょう。また、下記書籍にも詳しく解説されています。

Writing Secure Code 第2版 上

投稿日時 : 2010年1月1日 20:35

コメント

# Managed code で機密情報を扱う 2010/01/02 22:33 ちゃっぴの監禁部屋
Managed code で機密情報を扱う

# 自動的に 0 埋めしてくれる Class 2010/01/02 23:03 ちゃっぴの監禁部屋
自動的に 0 埋めしてくれる Class

# re: Memory ????????? 2021/08/07 13:32 what is hydrochloroquine
hloroquine https://chloroquineorigin.com/# hcq malaria

Post Feedback

タイトル
名前
Url:
コメント