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

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 целиком.

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

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

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

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

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