メモリの初期化と問題をクリア

  一見3つのエッセイを書き、そして最近では正しいことに従事に関する記録にしませんでした。

  我々はプログラムを書くときには、多くの場合、プログラムの終了時に、キーは空きメモリ領域に残っていた、想像して、即座に、ユーザーのパスワードやキーなどの機密データを、消去一つのことを無視し、そのそれがために適用される別のプロセス、またはメモリのデータを読み込むため、攻撃者があれば、それは敗北価値があるだろう。

  実際には、システム開発者は、このことを考慮し、ある程度の保護を行ういる - Windowsで、システムが自動的に明確なメモリは、プロセスの終了後に返されましたでしょう、ではなくLinuxシステム、不足している可能性がありパフォーマンスを考慮し、データを消去するには思考の一種を使用してLinuxレイジー。メモリ、Linuxはちょうどそれに仮想ゼロページを割り当て、この時点でプログラムを読み込む方法アプリケーション・プロセスは、書き込み動作は、(そのように割り当てられたバッファとして発生した場合にのみ、このバッファ0から読み取ることができた場合ときバイト)、システムは、(同志興味がしようとするデモを書きますが、メモリの割り当てのない継続的な主張、その後、エクスプローラを見て、メモリのデモを与えることができなければなりません実際の物理メモリを割り当てますそれが上記の書かれている前には増加)、そして仮想メモリマッピングとカバレッジ、Linuxのページ・サイズは4キロバイトではありません、この時間は、例えば、4KBのメモリ書き込みのサイズになります。

1  INT メイン()
 2  {
 3      の符号なしのchar *バッファ= のmalloc1024 )。
4  
5が     ためint型 i = 0 ; iは< はsizeof緩衝液; iは++ 6          のprintf(" %02Xを" 、緩衝液[I])。
7  
8      バッファ[ 3 ] = 0xFFで;
9      
10      のためにint型 i = 0 ; iは< はsizeof緩衝液; iは++ 11         printf(" %02X " 、[I]をバッファ);
12      フリー(バッファ)
13      リターン 0 14 }

  ラインバッファ3に、アプリケーションが初期化されていないが、Linux上で実行されている上記の手順を想定するが、コピー・オン・ライトの原理、5,6- 0x0の必ずしも全て、このときの実際の物理的な行の値を読み出しますメモリのみライン8が終了し、システムは、現在のプロセスにページを割り当てるし、このページが書き込まれた00 00 00 FF 00 00 00によって覆われる、プロセスに割り当てられている......

  このメカニズムは解放され、他のプロセスのメモリ内の機密データを読み込むためのプロセスを防ぐことができますが、いわゆるそれが効果的に「法律上の」メモリ読み出しデータを防ぐことができ、「抗抗悪役は、紳士ではない」、単に抗DMAことはできませんが、こうしたコールドブート攻撃。だから、機密データ、または速やかに魚を消去するため。

  ただし、メモリは、プログラムの前にライン12は、そののmemset(バッファ、0、はsizeofバッファ)を追加して自由であるならば、そう単純でmemsetを呼び出すために何を、そして限り、コンパイラの最適化が開くように、それはときになることが明らかにされていませんGCCはデフォルトの最適化オプション-O2である一方で、それは、GCC -O1時間で開かれます--Deadストア撤廃を取り除く死コードを求めています。

  クリアメモリについては、ここに掲載のhttps://www.usenix.org/system/files/conference/usenixsecurity17/sec17-yang.pdfリンク、より包括的なゲイ関心の話USENIXセキュリティ2017の記事があります私は詳細にこの問題について話をする時間があるでしょう、見ることができます。

 

おすすめ

転載: www.cnblogs.com/weir007/p/11544119.html