Если вы немного шарите в форензике и информационной безопасности, то вероятно знаете, что содержимое памяти RAM можно легко сдампить с помощью простой флешки. В этой статье я покажу, как создать флешку для дампа памяти и реализации атаки Cold Boot.
Еще по теме: Флешка Kali Linux с возможностью сохранения Persistence
Атака Cold Boot
Представим сценарий, вы выходите поговорить по телефону, пообедать или курнуть и оставляете ваш ПК без присмотра на несколько минут. При этом вы, как осторожный пользователь, заблокировали ваш комп. У вас даже зашифрованный SSD, надежный пароль для входа и обновлена Windows. Вы думаете все норм и ваши данные в безопасности?
Нет, ваш компьютер не защищен от атаки Cold Boot.
Cold boot attack (холодная загрузка) — тип атак, при которых злоумышленник, при наличии физического доступа к ПК может извлечь из него ключи шифрования и прочие важные данные. Атака Cold boot требует полной перезагрузки компьютера без использования ПО или, грубо говоря, аппаратной перезагрузкой..
Почему не программной? При программном рестарте завершаются все процессы и файлы, смаппленные в оперативной памяти, и может быть, она даже будет принудительно очищена. Вот почему необходимо сделать перезагрузку самостоятельно, без привлечения ОС, сохранив все важные данные в RAM.
Реализовать холодную перезагрузку можно, например, такими способами:
- Очень быстро аппаратно отключить‑включить питание.
- Выполнить аппаратный reset.
- Вызвать BSOD (Синий экран смерти).
Если говорить о ноутбуках, то у их малой части сейчас есть отдельная кнопка аппаратного рестарта. Кроме этого, сегодняшние ноутбуки редко комлектуются съемными аккумуляторами, так что вытащит аккум на короткое не получится.
Eсть решение, которое может помочь в реализации атаки Cold Boot. Можно попробовать вызвать холодную перезагрузку, вставив USB-флешку с намерено поврежденной файловой системой (ФС), которая и вызовет BSOD.
Далее рассммотрим создание флешки для дампа оперативной памяти.
Флешка для дампа RAM и атаки Cold Boot
Подготовим атакующую загрузочную флешку, которая будет дампить RAM в неразмеченную область. Так файловая система флешки не пострадает.
Установка bios_memimage64:
1 |
wget https://github.com/baselsayeh/coldboot-tools/releases/download/2/bios_memimage64.zip |
Установка загрузчика GRUB4DOS в MBR:
1 |
sudo dd if=grldr.mbr of=/dev/sdb conv=notrunc |
Создание одного раздела, не до конца области диска, оставив 4–8 Гбайт:
1 |
sudo fdisk /dev/sdb |
Использование самой простой файловой системы:
1 2 |
sudo mkfs.fat /dev/sdb1 sudo mount /dev/sdb1 /media/usb |
Установка dump RAM:
1 |
cp grldr menu_sec_part.lst scraper*.bin /media/usb/ |
Содержимое конфигурационного файла загрузчика menu_sec_part.lst:
1 2 3 4 5 6 |
title Dump the ram (64bit Halt) map (hd0) (hd1) map (hd0,1)+1 (hd0) # Раздел флешки, на который будет сохранен дамп RAM map --hook rootnoverify (hd0,0) chainloader --force --boot-cs=0x7c0 --boot-ip=0x200 (hd1,0)/boot/grub4dos/scraper/scraper64_haltonly.bin # Используем длинный режим, чтобы скопировать больше 4 Гбайт RAM |
Эта конфигурация предусматривает, что содержимое RAM будет сохраняться непосредственно в дополнительный раздел на флешке, минуя файловую систему. На самом деле с помощью загрузчика GRUB мы можем создать виртуальный диск из файла. Это дало бы нам в дальнейшем удобный доступ к дампу в виде файла на флешке.
Несомненно, это было бы более правильно, но на современных файловых системах не так просто создать нефрагментированный сплошной файл большого размера. На FAT32 файл больше 4 Гбайт вообще не создать, а, например, на NTFS ровно посередине раздела будет расположен служебный MFT, описывающий файлы, и при записи на такой виртуальный диск ты попросту затрешь свою ФС.
Так что рекомендую классический вариант с дампом RAM в раздел, а не в файл.
Использование флешки для дампа RAM
Совсем необязательно, чтобы на целевом компе была включена автоматическая загрузка с USB-флешки. Многие версии BIOS поддерживают выбор носителя для загрузки через нажатие клавиши F8 (или аналогичной). Но даже если нет, это по‑прежнему можно сделать через вход в BIOS и изменение настроек в нем.
Сама атака занимает некоторое время и выглядит как простое подключение USB-флешки. И пока пользователь отсутствует, данные из его RAM постепенно утекают на съемный носитель злоумышленника. Демонстрация этой атаки представлена на следующем рисунке.

Как только атака будет завершена, точная копия оперативной памяти сохранится во втором разделе нашей флешки (/dev/sdb2). Преобразуем ее в привычный файл для удобства:
1 |
sudo dd if=/dev/sdb2 of=ram.img bs=512 status=progress |
У меня получившийся дамп был немного сдвинут — на 0x53000 байт, но это легко исправить:
1 2 |
truncate -s $[0x53000] pad.img cat pad.img ram.img > _ram.img |
Теперь перед нами та самая оперативная память, что была на момент аппаратного сброса, со всеми лежащими в ней секретами, которые можно легко обнаружить:
1 2 3 |
radare2 -n ram.img /wi cookie: # Ищем все cookie /wi passw # Ищем пароли |
Используя сигнатурный подход, то есть зная определенные ключевые слова, такие как Password, Secret или Cookie, мы можем простым поиском по содержимому найти те или иные чувствительные данные. Например, по сигнатурам, которые есть у большинства файлов, можно искать RSA-ключи, возможно — какие‑то фотографии, PDF-документы, архивы и прочее.
На следующем рисунке представлен пример того, что было запущено в системе перед блокировкой компьютера и началом атаки.

А после — на машине атакующего в памяти содержится введенная строка.

Но извлекать данные из RAM по сигнатурам — это далеко не все, что мы можем. В дампе памяти присутствуют еще те самые структуры ОС, которые позволят восстановить хронологию событий в системе перед аппаратным сбросом.
Внимательный читатель заметит, что для реализации такой атаки требуется запустить на целевом компьютере код загрузочной флешки, а это перезапишет некоторые области в памяти. Экспериментально, с помощью побайтового сравнения содержимого RAM виртуальных машин на соответствующих этапах, было выявлено, что разнообразные загрузчики затирают собой не так уж и много памяти.
Вот количество перезаписываемых байтов в RAM на разных этапах загрузки:
- bootmgr (загрузчик Windows 7, 10) — 5 157 389 байт;
- GRUB 2 (загрузчик Linux) — 8 219 883 байт;
- burg (альтернативный загрузчик Linux) — 9 599 333 байт;
- liveOS для форензики — 171 944 965 байт.
Загрузочный код из Coldboot-Tools для дампа памяти на диск расходует порядка 95 Кбайт памяти. Суммарно вся цепочка GRUB4DOS + scraper64_haltonly.bin перезапишет 820 Кбайт оперативной памяти. В то время как полный объем RAM современных компьютеров измеряется десятками гигабайт.
Тем не менее перезапись даже нескольких мегабайт в неудачном месте может нарушить важные структуры и сделать невозможным восстановление картины состояния ОС. Опытным путем на примере Windows 7 было установлено, что в первых 100 Мбайт RAM содержится не так много данных и только перезапись области 5–15 Мбайт и 105–110 Мбайт разрушает важные структуры данных, нужные для анализа состояния ОС.
На практике же выполняемый дамп памяти посредством GRUB4DOS + scraper64_haltonly.bin все же окажется пригоден для анализа. Все изменения в RAM будут происходить в самом начале, тогда как сама ОС будет размещена после первых 100 Мбайт, что практически исключит вероятность перезаписи. Энтропия дампа показывает общую картину расположения в ней данных и пустот.

Таким образом, мы расширим простой сигнатурный подход к извлечению секретов из дампа памяти до продвинутого с использованием форензики, который сможет нам многое рассказать о жертве нашей атаки.
Извлечение секретов
И здесь мы плавно переходим к форензике. Используя известные инструменты, такие как Volatility (см. Анализ дампа памяти в Volatility) или Rekall, мы можем получить большой объем данных о состоянии ОС на момент нашего вмешательства. Список процессов — это отличная демонстрация того, что мы на верном пути.

Например, мы можем найти расположение файлов реестра в RAM и извлечь оттуда хеши паролей локальных учетных записей.

Подобное можно сделать и для доменных учеток, получая пароли уже открытым текстом:
1 |
vol.py --plugins=/path/to/volatility_plugins/FrancescoPicasso -f ram.img mimikatz |
Далее следует список открытых файлов и их содержимое, сетевые соединения, буфер обмена и даже снимок рабочего стола:
1 2 3 4 5 |
vol.py -f ram.img filescan vol.py -f ram.img dumpfiles -r '.sqlite' -D files/ vol.py -f ram.img netscan vol.py -f ram.img clipboard vol.py -f ram.img screenshot -D . |
И так далее… Словом, все как при обычной форензике.
EFI
У этой атаки есть маленькая особенность — она работает главным образом на компьютерах с классическим BIOS.
На EFI разных производителей опытным путем было установлено, что сразу после перезагрузки при начальной инициализации оборудования случайные байты записываются во всю оперативную память, и это полностью защищает пользователей современных ПК с EFI от покушений со стороны злоумышленников.
Проверить это легко с помощью того же загрузчика GRUB4DOS. Он поддерживает чтение/запись произвольных участков RAM посредством специальных команд. Находим любой адрес в памяти для теста, смотрим его содержимое и запоминаем:
1 2 3 |
map --rd-base=0xADDR map --rd-size=0x200 cat --hex (rd)0x0+1 |
Перезаписываем, например словом test, и делаем перезагрузку:
1 2 |
write (rd)0x0+1 test reboot |
Загрузчик GRUB4DOS при перезагрузке не затирает память, так что этот способ идентичен холодной перезагрузке.
Далее проверяем, затер ли EFI нашу память, или же после перезагрузки наши данные в RAM остались нетронутыми. В моем случае память изменилась. Проверялось это на ноутбуках фирм HP и Lenovo. Тем не менее инструмент memory scrapper доступен и для EFI.
Заключение
Мы увидели, что в RAM все данные открыты и описанная атака Cold Boot позволяет обойти полное шифрование диска, да еще и на заблокированном компе! Иными словами, мы смогли атаковать реально защищенный компьютер, который считается эталоном безопасности для стандартных рабочих мест большинства компаний, не говоря уже о простых домашних машинах.
Несмотря на то что компьютеры с классическим BIOS постепенно уходят в прошлое, в корпоративном сегменте, где массовая замена техники стоит больших денег, по‑прежнему можно встретить немало старых системников, за которыми продолжают работать сотрудники. Кроме того, современные материнские платы с EFI всё еще поддерживают старый legacy-режим BIOS, что делает их также уязвимыми к этой атаке.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Как извлечь шеллкод из памяти
- Как сделать дамп оперативной памяти в Linux
- Создание дампа оперативной памяти с помощью FTK Imager