Pull to refresh

Comments 29

Очень интересно, но есть немного вопросов:
1. Если переводить систему в спящий режим (т.е. когда дамп памяти сбрасывается на диск), то можно ли потом анализировать именно этот дамп?
2. Не совсем понял, как по закрытию программы память остается на месте. Или там образуется «каша», которую и анализируют? Файл подкачки тоже, если не ошибаюсь, может очищаться при перезагрузке.
1. да. ведь туда как раз и сбрасывает всю память
2. «Не совсем понял, как по закрытию программы память остается на месте. Или там образуется «каша», которую и анализируют?»
не понял полностью вопроса.
«Файл подкачки тоже, если не ошибаюсь, может очищаться при перезагрузке. „
зависит от настроек системы.

это програмное решение.
есть еще апаратные.
если мне попадет в руки хоть одно, опишу )
1. Да, я знаю, что скидывается. Но всегда есть нюансы… Может там шифруется все, может формат очень хитрый, может еще что вылезет…
Просто учитывая (2) мне кажется более надежным способом.

2. Я про то, что перезагрузка предварительно закрывает запущенные задачи.
И как потом найти область памяти, если она была освобождена, ссылки на нее перезатерты и еще из файла подкачки подгрузились старые задачи, которые опять же закрывались…

По аппаратному решению: азот и жесткая перезагрузка (ресет).
Если не ошибаюсь, именно в таком контексте я слышал про чтение памяти, кроме первых МБ.
Да, я знаю, что скидывается. Но всегда есть нюансы… Может там шифруется все, может формат очень хитрый, может еще что вылезет…

Ключи шифрования для FDE удаляются из памяти при блокировке компьютера или уходе в сон, это сделали после популяризации атаки через Firewire.
Для Linux — это отдельный раздел на носителе.

Linux давно уже умеет подключать файлы для подкачки, а не обязатльно отдельный раздел.
Просто мало кто использует именно файлы подкачки. Все установщики по умолчанию создают отдельный раздел. Да и смысла в файле подкачки меньше. Некоторые файловые системы не поддерживают файлы подкачки, например, btrfs.
О, отличная статья и отличный инструмент!
ВАЖНО: перезагрузка ни в коем случае не должна быть холодной (путем нажатия кнопки «ресет» или выключение\включение питания), а именно — перезагрузка должна быть осуществлена средствами самой работающей системы (например нажатием кнопок Ctrl-Alt-Del или путем выбора пункта «перезагрузка» в системе)

А почему так? Неужели современные BIOS/UEFI перезаписывают память при запуске? Там же Quick Boot сто лет, все дела?
В общем, пытались мы сдампить один комп, в котором использовалась кастомная материнская плата, кастомный BIOS, стоял Linux и все данные расшифровывались через TPM. Ну, достаточно стандартная связка из TrustedGRUB и BIOS, поддерживающий TPM. TrustedGRUB закидывает в TPM PCR все: MBR, свои настройки (grub.cfg), ядро, initrd и себя, т.е. если хоть что-то изменить, например, настройки grub, то TPM PCR будет в другом состоянии и ФС не расшифруется.
Ну и нагуглил я тогда msramdmp. Пробовали-пробовали, ничего не выходит, дамп содержит только образ BIOS. Решили, что система очищает память при перезагрузке, BIOS-то все-таки кастомный, да и грузится долго, секунд 15-20 до включения экрана. Решили быстренько память в другой компьютер переставлять, а там msramdmp запускать. Выключаем комп, быстро вынимаем память, вставляем, и опять пусто. Секунд 7 на перестановку памяти уходило, хоть и DDR2, но что-нибудь то должно было остаться.
В общем, так ничего и не получилось.
Нажатие клавиши ресет делает аппаратный сброс, читайте рвёт цепь питания (разумеется это не так, но для понимания достаточно). Не знаю как обстоят дела с оперативкой, ли тактирование прекращается, либо ставится сброс, но совершенно точно содержимое обнуляется.
По всей видимости вы правы, но я что-то не понимаю, как можно моментально очистить память.
Судя по некоторым статьям (вот, например, одна из них, собственно, в статье вторая картинка оттуда) у людей получается держать память без питания по 30 секунд при комнатной температуре и считывать с нее данные после включения. С ошибками, конечно, но не нули. Речь идет именно о выключении питания и холодной загрузке после выключения.
Выключение питания и reset — не одно и тоже. Выключение, это просто снятие питания. Заморозкой можно добиться сохранения ячеек. А ресет — это запись туда нулей. Ну схемотехнически это реализовать просто. Значение в ячейке — это заряд конденсатора, разрядили все конденсаторы, вот вам нули в оперативке. А там как реализовано — надо читать стандарт на соответствующую память.
Ну, я не могу ни подтвердить, ни опровергнуть ваши слова. Я много статей про cold-boot атаки и дампы памяти читал, но все сходились во мнении, что память может обнулить исключительно BIOS/UEFI при запуске без Quick Boot (когда вся память чекается во время POST, фактически, в нее просто нули пишутся), а насчет физической очистки памяти нигде не слышал, но, вполне возможно, что вы правы. По крайней мере, даже ECC-память очищается именно BIOS при загрузке.
В любом случае, у некоторых людей получалось физически переставить память в другой компьютер и успешно считать ее при комнатных температурах и без заморозки.
DRAM-память это не триггер, все ячейки разом обнулить не получится физически — как минимум нужно пройтись по всем строкам памяти.
нет у RAM-модулей вывода сброса… память не очищается. Просто прекращается рефреш и ячейки через некоторое время переходят в неопределенное состояние. Когда я эксперементировал с 128кБ модулем памяти, он спокойно переживал примерно 20 секунд без питания — все данные оставались целыми. Сейчас же, с уменьшением технологических норм это время повидимому сократилось, возможно до считанных секунд или десятых долей секунд. Единственное беспокойство — насчет процедуры определения объема памяти в БИОСе, алгоритм проходится по диагональным ячейкам и скорей всего они «затираются». Возможно, затирается содержимое в процессе первоначального теста памяти, т.е. желательно было бы еще и кастомный БИОС поставить, который память не тестирует.
Когда я эксперементировал с 128кБ модулем памяти, он спокойно переживал примерно 20 секунд без питания — все данные оставались целыми.


Какой тип памяти? Если SRAM — то ничего удивительного.
нет, именно DRAM — модуль от 286-го компа, 30-ти контактный SIMM.
Забавно :). Буду знать.

А как проходил эксперимент?
В обстановке строжайшей секр…

На самодельном компе, вестимо на Z80. Прикрутить-то прикрутил, поигрался и забросил. Всего-то надо два мультиплексора 555КП11 и небольшая логика с RC-цепью для реализации задержки RAS-CAS, даже рефреш не надо делать — это делал Z80 аппаратно.
Просто в первый раз удивился что после выключения и включения системы ячейки памяти не изменились. Потом стал перекрывать кислород системе все дольше и дольше, остановился на 30 секундах — там уже начинались повреждения. На 20 секундах стабильно держалось при комнатной температуре.
Потому, что при подаче аппаратного RESET BIOS/UEFI начнет проверку объема памяти, хотябы путем записи по границам параграфов ( размеры — где какие, у серверов раньше настраивалось, что сейчас — хз ), в худшем случае запись будет идти по всему объему ОЗУ. Соответственно вместо того, что нам надо было скопировать — будет мусор или нули или что там ещё биос запишет.
У меня совершенно очевидный и простой вопрос. Ведь этот linux, какой бы он маленький не был, таки будет выполняться в том же адресном пространстве, что и предыдущая ОС, и соответственно он затрёт её содержимое. А во вторых, никто не гарантирует, что программы, которые завешаются таким образом не проведут очистку памяти, им же приходит сигнал о заверении работы ОС.
У меня совершенно очевидный и простой вопрос. Ведь этот linux, какой бы он маленький не был, таки будет выполняться в том же адресном пространстве, что и предыдущая ОС, и соответственно он затрёт её содержимое.

Именно так. Есть тот же msramdmp, он весит несколько килобайт и является syslinux-приложением.
А во вторых, никто не гарантирует, что программы, которые завешаются таким образом не проведут очистку памяти, им же приходит сигнал о заверении работы ОС.

Обычные программы крайне-крайне редко перезаписывают память при завершении, как правило, это излишне. Как правило, очищают какие-то секретные данные, например, ключи шифрования, если они в программе использовались, как раз чтобы избежать атак на дамп памяти.
Большинство умных программ, работающих с паролями, зануляет области, где были ценные данные. Так что если ребутить — то передёргивая питание или роняя ОС, так, чтобы программы не могли завершиться.

В минимальном виде — хотя бы на stop поставить.
Для линукса — да. Но, тут есть пара факторов:

если есть kexec-ядро в памяти, будет запущено оно, а не стандартный биос.
если биос решит пошуршать памятью, мало не покажется (в смысле, потрёт много).
Мне со BSoD и full_memdump'ом как-то спокойнее
Тупой вопрос, да и не совсем по теме (обсуждается же программный способ) — а разве нельзя подключить свой источник питания к планке памяти, затем переставить её в свой компьютер второй планкой и считать информацию с неё?
DRAM… Ей требуется постоянное обновление (refresh). А делает его контроллер. Так что источника памяти тут мало — нужен таймер и вся соответствующая обвязка.
А если DRAM не обновится, то слетает содержимое, я правильно понимаю?
— Всё, понял, спасибо =)
Sign up to leave a comment.

Articles