web-dev-qa-db-ja.com

ファイルのスラック/ RAMスラック:Windowsが任意のRAMバイトをディスクに書き込むのはなぜですか?Linuxもそうですか?

Windows 7に関する本で、ファイルのたるみについて読んだばかりです。私がすでに知っていること(考えていること):

  • Windowsは、ディスク上のデータをクラスターに保存します。クラスタには通常、それぞれ512バイトの8つのセクターが含まれているため、4096バイトまたは4kiBです。
  • 大きなファイルは複数のクラスターに分割されます。ファイルの残りの部分がクラスター全体を埋めない場合、クラスターの最後に残っているこの未使用のスペースは「ファイルスラック」と呼ばれます。
  • Windowsは常に512バイトのブロックを一度に書き込むため、最初の部分的にのみ使用されるセクターは、ディスクに書き込まれる前にいっぱいになる必要があります。
  • 何らかの理由で、Windowsはこのセクターを埋めるためにRAMからランダムなシーケンスを選択することにしました。
  • 部分的に使用されているクラスター内の残りの未使用セクターは変更されず、以前のバイトが保持されます。これは、この場所で以前に削除されたファイルの一部である可能性があります。これはドライブスラックと呼ばれます。

それらの仮定は正しいですか?

そして、なぜWindowsは、単にスペースを埋めるために、これらのバイトをゼロにするだけでなく、ランダムなメモリ(パスワードなどを含む可能性がある)をディスクに書き込むのですか?

そして、この動作はWindows(どのバージョン?)に固有ですか、それともNTFSファイルシステムに固有ですか? Linuxまたはext4ファイルシステムは同じことをしますか?

2
Byte Commander

"File Slack"は、ファイルの最後のバイトからクラスターの終わりまでのデータを指します。 通常には、OSが未割り当てのメモリを表すために使用するビットパターンが含まれています。

"Drive Slack"割り当てが解除されたが、上書きされていないクラスターを指します。また、パーティション境界内に含まれなくなった未割り当てスペースを指す場合もあります。

"RAM Slack"-この用語は今まで聞いたことがありません。これをグーグルで検索すると、私が見つけたすべてのリソースは、Albert J. Marcella、Jr。とDoug Menendezによる「Cyber​​Forensics:A Field Manual for Collecting、Examineing、and Preserving Evidence ofComputerCrimes」というタイトルの本から引用または派生しているようです。

この用語が使われている章を読みました。 2010年に著作権で保護されていましたが、DOSとWindows95/98が行った方法を参照しています。それは10年以上の間関係がありませんでした。しかし、私はそれを文脈から外して読んでいる可能性があります。いずれにせよ、この本は用語の源であるように思われます。


Windowsは、ディスク上のデータをクラスターに保存します。クラスタには通常、それぞれ512バイトの8つのセクターが含まれているため、4096バイトまたは4kiBです。

これは、レガシードライブと4K「アドバンストフォーマット」ドライブの場合に正しいです。セクターサイズは4K「ネイティブ」ドライブで実際に4KBであるため、これらのドライブのセクターとクラスターの間には1:1の相関関係があります。

大きなファイルは複数のクラスターに分割されます。ファイルの残りの部分がクラスター全体を埋めない場合、クラスターの最後に残っているこの未使用のスペースは「ファイルスラック」と呼ばれます。

また正しい。

Windowsは常に512バイトのブロックを一度に書き込むため、最初の部分的にのみ使用されるセクターは、ディスクに書き込まれる前にいっぱいになる必要があります。

これは正しくありません。 Windowsはブロックに書き込みません。クラスターのみ。任意のサイズでデータを書き込みますが、クラスターサイズの倍数(通常は4KB)になります。 Windowsがセクター/ブロックを気にするのは、LBAアドレスを計算する必要があるときだけです。これは、ファイルシステムドライバーではなく、低レベルのディスクドライバーが行います。 512バイトのチャンクで読み取り/書き込みを行うのは実際には非常に非効率的です。ドライブの内部ハードウェアキャッシュに対して機能します。 Linuxで512バイトのブロックサイズでddを実行すると、これが確認されます。読み取りと書き込みの両方で1桁遅くなります。

何らかの理由で、Windowsはこのセクターを埋めるためにRAMからランダムなシーケンスを選択することにしました。

また、正しくありません。 Windowsは、バッファにあるものをすべて書き込みます。ほとんどすべてのアプリケーション(ファイルシステムドライバーを含む)は、出力バッファーに書き込むときにヒープから新しいメモリを割り当てます。アプリケーションがメモリを割り当てるときは、4KBのサイズのページで割り当てます(何を推測しますか!)。割り当てられていないメモリは通常、繰り返しビットパターン(00またはFFではない)で表されるため、クラスターがいっぱいでない場合は、クラスターの最後に書き込まれます。アプリケーションの出力バッファがその入力バッファの変更されたコピーである場合、スラックには入力バッファに含まれていたデータがすべて含まれます。

部分的に使用されているクラスター内の残りの未使用セクターは変更されず、以前のバイトが保持されます。これは、この場所で以前に削除されたファイルの一部である可能性があります。これはドライブスラックと呼ばれます。

また、正しくありません。変更されたデータが1バイトしかない場合でも、Windowsは常にフルクラスターコミットを実行します。 istruedeallocatedクラスターには以前にあったデータがすべて含まれています。 Windowsは、割り当て解除されたクラスターをゼロにすることを気にしません。しかし、これはいずれもセクターレベルでは発生しません。

4KBはマジックナンバーです。メモリページは4KBです。 I/Oバッファは4KBです。セクターは現在4KBです。ドライブのハードウェアでさえ、4KB(またはその倍数)のI/O要求用に最適化されています。


最新のオペレーティングシステムはすべてこのように機能します(Windows、Linux、およびOS X)。上記のルールの唯一の例外は、rawアクセス用にディスクを開いているアプリケーションです。これらは、書き込みを行うためのオペレーティングシステムのAPI呼び出しを完全にバイパスします。このようなアプリケーションは、バッファI/Oで得られるすべての最適化の恩恵を受けるわけではないため、これは低レベルのリカバリツールとフォレンジックツールでのみ見られます。

2
Wes Sayeed

RAMスラックは、実際にはよく知られているデジタルフォレンジックアーティファクトです。

実際、古い(つまり、Win 95/98)バージョンのWindowsは、512バイトのメモリブロックを書き込みました。メディアへのクラスター書き込みを混同しないでください。 512バイトのメモリを書き込むときは、Windowsが512バイトのチャンクで書き出すために割り当てられた/取得したメモリを意味し、ストレージメディアクラスターを合計します。

したがって、例-ストレージメディア上の4096バイトのクラスター、および2049バイトの長さのファイル。古いWindowsは、その2049バイトのファイルに対して512バイトのチャンクでバッファ/キャッシュ/メモリストレージを割り当てて取得しましたメモリ内

これには、5 x 512バイトmemoryチャンクが必要です。これにより、2049バイトのファイルの一部ではなかった511バイトが取得されたままになります。 (5 x 512 = 2560、ただし2049/512 = 4.002)。

では、511バイトのメモリ(2560-2049 = 511)には何がありますか?古いバージョンでは、Windowsは511バイトの部分をクリアせず、4KB全体で書き出していました。これは、デジタルフォレンジックサークルのRAMスラックと呼ばれるものです。

0
Jambalaya