Содержание статьи
info
Этой статьей мы начинаем серию публикаций о практических приемах взлома и атак с использованием подручных устройств, которые можно собрать дома. Мы раскроем простые способы получения несанкционированного доступа к защищенной информации и покажем, как ее оградить от подобных атак.
Представь, что ты вышел поговорить по телефону, перекусить либо просто погулять и оставил свой компьютер или ноутбук без присмотра на 10–15 минут. Возможно, ты сотрудник офиса или студент вуза и у тебя перерыв. При этом ты, как правильный пользователь, заблокировал свой компьютер. У тебя даже зашифрованный HDD или SSD, стойкий пароль на вход в систему, установлены все необходимые обновления. Кажется, что все отлично и твои данные в безопасности. Но так ли это на самом деле?
Давай подумаем. Представим себя в роли потенциального злоумышленника. Первое и самое простое, что мы можем сделать, когда время ограниченно, — это присоединиться к компьютеру напрямую с помощью витой пары. Ведь для этого не нужно даже входить в систему. Так мы получим сетевой канал взаимодействия, который, возможно, позволит взломать компьютер одним из следующих способов:
- уязвимости (MS17-010, BlueKeep, PrintNightmare);
- NetBIOS/LLMNR spoofing (Responder);
- bruteforce (SMB, RDP);
- MITM (Evilgrade, BDFProxy, MS16-101).
Каждый из перечисленных способов заслуживает отдельного описания, но это не наш случай. Мы считаем, что система достаточно «свежая» и имеет все необходимые обновления, а пароль на вход более‑менее стойкий.
Второе, что мы можем, — перевести машину в спящий режим или гибернацию. Даже в спящем режиме диск не используется, подпитывается только RAM. После этого можно извлечь жесткий диск и подключиться к нему напрямую, например с помощью девайса, изображенного на следующем рисунке.

В большинстве случаев этого окажется достаточно. Если бы перед нами был обычный незашифрованный HDD или SSD, мы смогли бы получить доступ ко всем документам и файлам, включая системные, извлечь пароли и так далее. С подобным прямым доступом к диску мы не будем довольствоваться только пассивным чтением информации, а получим возможность изменять данные на нем. Теоретически мы можем сбросить пароль и, вернув диск обратно в комп, успешно войти в пользовательскую сессию через пятикратное нажатие клавиши Shift:
mount /dev/sdb2 /media/hdd
cp /media/hdd/Windows/System32/cmd.exe /media/hdd/Windows/System32/sethc.exe
Мы не станем развивать данный сценарий, поскольку реализовать его довольно просто, хотя в нем есть свои тонкости. И все‑таки наша цель — это компьютер с зашифрованным диском.
Наконец, третье, что мы можем сделать, — атака холодной перезагрузкой (cold boot attack), которой и посвящена сегодняшняя статья.
Cold boot attack — это широко известный способ получения доступа к RAM, использующий эффект сохранения данных в памяти, который достигается так называемой холодной перезагрузкой — перезагрузкой без использования ПО, или, грубо говоря, аппаратной перезагрузкой.
Почему не программной? При программной перезагрузке закроются все процессы и файлы, смаппленные в RAM, и, возможно, она даже будет принудительно затерта. Вот почему нам так важно сделать перезагрузку самостоятельно, без привлечения операционной системы, сохранив все ценные данные в памяти.
Добиться такой перезагрузки можно, например, следующими способами:
- аппаратно отключить‑включить питание (очень быстро);
- выполнить аппаратный reset;
- вызвать Blue Screen of Death (BSOD).
При использовании каждого из перечисленных способов ОС не успеет или не сможет затереть данные в RAM перед перезагрузкой. Если вставить загрузочную флешку, то управление может перейти уже на нее, и можно будет исполнить загрузочный код, который и считает ту самую незатертую память.
На ноутбуке мы получаем дополнительные проблемы. Во‑первых, только у малой части ноутбуков сейчас есть отдельная кнопка аппаратной перезагрузки. Во‑вторых, современные ноутбуки часто не снабжаются съемными аккумуляторами, так что вынуть аккумулятор на короткое время вряд ли получится. В таком случае можно попробовать вызвать перезагрузку, вставив флешку со специально поврежденной файловой системой, которая искусственно вызовет BSOD.
Скачать и записать на флешку такой образ можно, например, так (подразумевается, что у тебя Linux и установлен Git):
git clone https://github.com/mtivadar/windows10_ntfs_crash_dos
dd if=tinyntfs of=/dev/sdb
Как поступить, каждый раз приходится решать отдельно, но нужно помнить, что ошибка недопустима, ведь можно потерять данные в RAM. Хотя современная Windows, которая так любит уходить в спящий режим, может нам помочь и вернуть состояние RAM из файла гибернации.
В крайнем случае есть еще вариант: извлечь и охладить планки памяти DRAM/SRAM и перенести их на другую плату, но он технически намного сложнее и реализуется не так быстро, поскольку требует разбирать компьютер, поэтому его мы не рассматриваем. Другое дело — загрузочная флешка: открытый порт USB есть почти везде.
Все необходимые примитивы — это чтение физической памяти и прямая запись на жесткий диск, которые можно взять из следующего кода:
[org 0x7C00]
[bits 16]
resetdisk:
mov ah, 0x00 ; reset function mov dl, 0x00 ; drive
int 0x13 ; disk int
jc resetdisk
getmem:
mov bx, 0x0000 ; segment
mov es, bx
mov bx, 0x8000 ; offset
; es:bx = 0x0000:8000
writedisk:
mov ah, 0x03 ; write function mov al, 0x01 ; sectors
mov ch, 0x00 ; cylinder
mov cl, 0x03 ; sector
mov dh, 0x00 ; head mov dl, 0x80 ; drive
int 0x13 ; disk int
times 510 - ($ - $$) db 0x00
db 0x55, 0xAA
times 8096 db 0xfe
Если скомпилировать и поместить этот код в самое начало любой флешки или диска, то BIOS выполнит его как загрузочный:
nasm bootcode.asm
qemu-system-i386 -hda bootcode
У компьютера с классическим BIOS загрузочный код выполняется в реальном режиме (16 бит) и доступ к памяти идет по физическому адресу. Адрес читаемой RAM указывается в паре регистров ES:
. Доступ на запись к жесткому диску или флешке осуществляется при помощи BIOS-прерывания 0x13
(по сути, это что‑то вроде API для BIOS). И в результате выполнения такого кода содержимое 512 байт RAM будет скопировано на сектор HDD. Завернув этот участок кода в цикл, мы, в принципе, можем считать всю RAM целиком.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее