Slack / RAM Slack: почему Windows записывает произвольные байты RAM на диск? Есть ли у Linux тоже?

1341
Byte Commander

Я только что прочитал о слабости файлов в книге о Windows 7. Что я уже (думаю) знаю:

  • Windows хранит данные на диске в кластерах. Кластер обычно содержит 8 секторов по 512 байт каждый, то есть 4096 байт или 4 кбайт.
  • Большие файлы разделяются на несколько кластеров, когда оставшаяся часть файла не заполняет весь кластер, это оставшееся неиспользуемое пространство в конце кластера называется «слабая файловая система».
  • Windows всегда записывает 512-байтовые блоки сразу, поэтому первый только частично используемый сектор должен быть заполнен перед записью на диск.
  • По любой причине Windows решает выбрать случайную последовательность из оперативной памяти, чтобы заполнить этот сектор.
  • Оставшиеся неиспользуемые сектора в частично используемом кластере остаются неизменными и сохраняют байты, которые они имели ранее, которые могут быть частями ранее удаленного файла в этом месте. Это называется провисание диска.

Эти предположения верны?

И почему Windows записывает случайные куски памяти (которые могут содержать пароли и т. Д.) На мой диск просто для заполнения места, а не просто для обнуления этих байтов?

И характерно ли это поведение для Windows (какие версии?) Или для файловой системы NTFS? Будут ли файловые системы Linux или ext4 делать то же самое?

2
Я очень сомневаюсь, что ваше последнее предположение верно. Ссылаясь на ту, о которой вы не спрашивали - «Windows [записывает] случайные фрагменты памяти на мой диск» звучит так, как если бы она нарушила довольно много требований к тестированию безопасности, которые Windows [утверждает, что прошла] (https: / /msdn.microsoft.com/en-us/library/windows/desktop/aa376387(v=vs.85).aspx). grawity 8 лет назад 0

2 ответа на вопрос

2
Wes Sayeed

"File Slack" refers to the data between the last byte of the file and the end of the cluster. It usually contains whatever bit pattern the OS uses to represent unallocated memory.

"Drive Slack" refers to clusters that have been deallocated but not overwritten. It can also refer to unallocated space that no longer falls within a partition boundary.

"RAM Slack" -- I have never heard this term before. Googling this, all the resources I find seem to be quoting or deriving from a book titled "Cyber Forensics: A Field Manual For Collecting, Examining, and Preserving Evidence of Computer Crimes" by Albert J. Marcella, Jr. and Doug Menendez.

I read the chapter where the term is used. Even though it was copyrighted in 2010, it makes reference to the way DOS and Windows 95/98 did things. That hasn't been relevant for over a decade. I could be reading it out of context though. Either way, this book appears to be the source of the term.


Windows stores data on the disk in clusters. A cluster usually contains 8 sectors of 512 bytes each, so 4096 bytes or 4kiB.

This is correct in the case of legacy drives and 4K "advanced format" drives. The sector size is truly 4KB on 4K "native" drives, so there is a 1:1 correlation between sectors and clusters for those drives.

Large files get split over multiple clusters, when the remainder of a file does not fill an entire cluster, this remaining unused space at the end of the cluster is called "file slack".

Also correct.

Windows always writes 512 byte blocks at once, so the first only partially used sector must get filled up before being written to disk.

This is incorrect. Windows does not write in blocks; only clusters. It will write data at any arbitrary size, but they will be in multiples of the cluster size (usually 4KB). The only time Windows cares about sectors/blocks is when an LBA address must be calculated. The low-level disk driver does this, not the filesystem driver. It's actually very inefficient to do reads/writes in 512-byte chunks. It works against the drive's internal hardware caches. Doing a dd in Linux with a 512-byte blocksize will confirm this. It's an order of magnitude slower on both reads and writes.

For whatever reason, Windows decides to pick a random sequence from RAM to fill this sector.

Also incorrect. Windows will write whatever is in the buffer. Almost every application (including the filesystem driver) allocates fresh memory from the heap when writing to the output buffer. When an application allocates memory, it does so in pages, which are (guess what!) 4KB in size. Unallocated memory is usually represented by a repeating bit pattern (not 00 or FF), so that is what will be written to the end of the cluster if it's not full. In cases where the application's output buffer is a modified copy of its input buffer, the slack will contain whatever data the input buffer had in it.

The remaining unused sectors in the partially used cluster remain unchanged and keep the bytes they had before, which can be parts of a previously deleted file in this location. It's called drive slack.

Also incorrect. Windows will always do a full-cluster commit even if there's only 1 byte of changed data. It is true that deallocated clusters have whatever data was in them before. Windows does not bother with zeroing out deallocated clusters. But none of this takes place at the sector level.

4KB is a magic number. Memory pages are 4KB. I/O buffers are 4KB. Sectors are 4KB now. Even the drive's hardware is optimized for I/O requests that are 4KB (or some multiple thereof).


All modern operating systems work this way (Windows, Linux, and OS X). The only exceptions to the rules above are applications that have the disk open for raw access. They completely bypass the operating system's API calls for doing writes. You only see this with low-level recovery and forensic tools because such applications do not benefit from all of the optimizations you get with buffered I/O.

Хорошо, спасибо за ваш подробный ответ. Не могли бы вы привести некоторые официальные источники? Я бы хотел больше изучить эту тему и узнать, что вы узнали. Однако, если ваши утверждения верны, почему так много источников заявляют об описанном феномене нехватки ОЗУ и почему существуют криминалистические инструменты для чтения и анализа этой части файла и сканирования ее на предмет возможных конфиденциальных данных, таких как пароли? Byte Commander 8 лет назад 1
Я обнаружился здесь сам, потому что мой учебник колледжа покрывает слабую оперативную память (хотя и не углубленно) Книга была издана в 2014 году. Seth 7 лет назад 0
@Seth; Мне было бы очень интересно услышать, что эта книга говорит о предмете. Вполне возможно, что «слабая память» относится к какой-то другой вещи, которую я назвал другим именем. Wes Sayeed 7 лет назад 0
@WesSayeed https://i.stack.imgur.com/9hUUF.jpg. В основном только этот абзац. Seth 7 лет назад 0
@Seth; Как называется эта книга? Формулировка и контекстное использование звучат почти так же, как источник, который я нашел. Wes Sayeed 7 лет назад 0
@WesSayeed Ой, извините, это "Руководство CompTIA Security + по основам сетевой безопасности" от Mark Ciampa. Seth 7 лет назад 0
0
Jambalaya

Недостаток оперативной памяти на самом деле является хорошо известным артефактом криминалистической экспертизы.

Действительно, более старые (т.е. Win 95/98) версии Windows записывали блоки памяти по 512 байт. Пожалуйста, не путайте кластерную запись с носителем. Когда я записываю 512-байтовую память, я имею в виду выделенную / захваченную память Windows для записи в 512-байтовых блоках, что составляет кластер носителей данных.

Например, 4096-байтовые кластеры на носителе и файл длиной 2049 байт. Старые Windows выделяли и захватывали буфер / кэш / память в кусках по 512 байт в памяти для этого файла размером 2049 байт.

Это требует 5 х 512-байтовых блоков памяти . Это оставляет 511 байт, которые не были включены в файл 2049 байт. (5 х 512 = 2560, но 2049/512 = 4,002).

Так что же в 511-байтовой памяти (2560 - 2049 = 511)? В более старых версиях Windows не очищала 511-байтовую часть и записывала ее со всеми 4 КБ. Это то, что в кругах специалистов по криминалистике называют недостатком оперативной памяти.

Похоже, что существует некоторая путаница в этой теме (например, другой ответ не соответствует тому, что вы написали), есть ли у вас источники, на которые вы можете ссылаться? Byte Commander 7 лет назад 1