Содержание статьи
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 целиком.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»