Да­же если ты заботишь­ся о сох­раннос­ти сво­их дан­ных, не кле­ишь лис­точки с пароля­ми на монитор, шиф­руешь жес­ткий диск и всег­да бло­киру­ешь комп, преж­де чем отлу­чить­ся в туалет, это совер­шенно не озна­чает, что твоя информа­ция в безопас­ности. Содер­жимое памяти мож­но лег­ко сдам­пить с помощью обыч­ной флеш­ки, и сей­час я под­робно рас­ска­жу, как это сде­лать.

info

Этой стать­ей мы начина­ем серию пуб­ликаций о прак­тичес­ких при­емах взло­ма и атак с исполь­зовани­ем под­ручных устрой­ств, которые мож­но соб­рать дома. Мы рас­кро­ем прос­тые спо­собы получе­ния несан­кци­они­рован­ного дос­тупа к защищен­ной информа­ции и покажем, как ее огра­дить от подоб­ных атак.

Пред­ставь, что ты вышел погово­рить по телефо­ну, переку­сить либо прос­то погулять и оста­вил свой компь­ютер или ноут­бук без прис­мотра на 10–15 минут. Воз­можно, ты сот­рудник офи­са или сту­дент вуза и у тебя перерыв. При этом ты, как пра­виль­ный поль­зователь, заб­локиро­вал свой компь­ютер. У тебя даже зашиф­рован­ный HDD или SSD, стой­кий пароль на вход в сис­тему, уста­нов­лены все необ­ходимые обновле­ния. Кажет­ся, что все отлично и твои дан­ные в безопас­ности. Но так ли это на самом деле?

Да­вай подума­ем. Пред­ста­вим себя в роли потен­циаль­ного зло­умыш­ленни­ка. Пер­вое и самое прос­тое, что мы можем сде­лать, ког­да вре­мя огра­ничен­но, — это при­соеди­нить­ся к компь­юте­ру нап­рямую с помощью витой пары. Ведь для это­го не нуж­но даже вхо­дить в сис­тему. Так мы получим сетевой канал вза­имо­дей­ствия, который, воз­можно, поз­волит взло­мать компь­ютер одним из сле­дующих спо­собов:

  • уяз­вимос­ти (MS17-010, BlueKeep, PrintNightmare);
  • NetBIOS/LLMNR spoofing (Responder);
  • bruteforce (SMB, RDP);
  • MITM (Evilgrade, BDFProxy, MS16-101).

Каж­дый из перечис­ленных спо­собов зас­лужива­ет отдель­ного опи­сания, но это не наш слу­чай. Мы счи­таем, что сис­тема дос­таточ­но «све­жая» и име­ет все необ­ходимые обновле­ния, а пароль на вход более‑менее стой­кий.

Вто­рое, что мы можем, — перевес­ти машину в спя­щий режим или гибер­нацию. Даже в спя­щем режиме диск не исполь­зует­ся, под­питыва­ется толь­ко RAM. Пос­ле это­го мож­но извлечь жес­ткий диск и под­клю­чить­ся к нему нап­рямую, нап­ример с помощью девай­са, изоб­ражен­ного на сле­дующем рисун­ке.

USB-адаптер для прямого доступа к диску
USB-адап­тер для пря­мого дос­тупа к дис­ку

В боль­шинс­тве слу­чаев это­го ока­жет­ся дос­таточ­но. Если бы перед нами был обыч­ный незашиф­рован­ный 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:BX. Дос­туп на запись к жес­тко­му дис­ку или флеш­ке осу­щест­вля­ется при помощи BIOS-пре­рыва­ния 0x13 (по сути, это что‑то вро­де API для BIOS). И в резуль­тате выпол­нения такого кода содер­жимое 512 байт RAM будет ско­пиро­вано на сек­тор HDD. Завер­нув этот учас­ток кода в цикл, мы, в прин­ципе, можем счи­тать всю RAM целиком.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Подписаться
Уведомить о
3 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии