Dlaczego nie możesz krzyczeć na swój dysk twardy

Dlaczego nie możesz krzyczeć na swój dysk twardy

Na konferencji poświęconej bezpieczeństwu komputerowemu Ekoparty 2017 w Buenos Aires argentyński haker Alfredo Ortega pokazał bardzo ciekawe rozwiązanie – system do tajnego podsłuchiwania pomieszczeń bez użycia mikrofonu. Dźwięk nagrywane bezpośrednio na dysk twardy!

Dysk twardy wychwytuje głównie dźwięki o wysokiej intensywności i niskiej częstotliwości, kroki i inne wibracje. Ludzka mowa nie została jeszcze rozpoznana, chociaż naukowcy prowadzą badania w tym kierunku (rozpoznawanie mowy na podstawie wibracji o niskiej częstotliwości, które są rejestrowane np. z żyroskopu lub dysku twardego).

Dźwięk to wibracja powietrza lub innego ośrodka. Osoba odbiera je przez błonę bębenkową, która przenosi wibracje do ucha wewnętrznego. Mikrofon zaprojektowany jest mniej więcej tak, jak ucho – tutaj również wibracje rejestrowane są przez cienką membranę, która wzbudza impuls elektryczny. Dysk twardy jest oczywiście również narażony na mikroskopijne wibracje spowodowane wahaniami otaczającego powietrza. Wiadomo to nawet z właściwości technicznych dysków twardych: producenci zwykle wskazują maksymalny dopuszczalny poziom wibracji, a sam dysk twardy często próbuje umieścić go w odpornym na wibracje pojemniku wykonanym z gumy lub innego materiału izolacyjnego. Z tego łatwo wywnioskować, że dźwięki można nagrywać na dysku twardym. Pozostaje tylko dowiedzieć się, jak to zrobić.

Alfredo Ortega zaproponował unikalną wersję ataku bocznego, a mianowicie atak czasowy. Atak ten opiera się na założeniu, że na urządzeniu wykonywane są różne operacje w różnym czasie, w zależności od podanych danych wejściowych. W tym przypadku „danymi wejściowymi” są drgania głowicy czytającej oraz talerza dysku twardego, które korelują z wibracjami otoczenia, czyli dźwiękiem. Zatem mierząc czas obliczeń i przeprowadzając analizę statystyczną danych, można zmierzyć drgania głowicy/talerza, a tym samym wibracje nośnika. Im dłuższe opóźnienie odczytu danych, tym silniejsze wibracje dysku twardego, a co za tym idzie, głośniejszy dźwięk.

Jak zmierzyć wibracje dysku twardego? Bardzo proste: wystarczy uruchomić wywołanie systemowe read () — i zapisz czas potrzebny na wykonanie. Nowoczesne systemy operacyjne pozwalają na odczytanie czasu wywołań systemowych z dokładnością do nanosekund.

Szybkość odczytu informacji z sektora zależy od położenia głowicy i talerza, co koreluje z wibracjami obudowy dysku twardego. To wszystko.

Analizę statystyczną przeprowadza się za pomocą prostego narzędzia o nazwie Kscope. Jak mówią, wszystko genialne jest proste.

Dlaczego nie możesz krzyczeć na swój dysk twardy
Narzędzie Kscope (wywołanie systemowe stat())

Kscope to małe narzędzie do wizualizacji niewielkich różnic w czasie wykonywania wywołań systemowych. Źródłoopublikowane na GitHubie.

W osobnym repozytorium Czas dysku twardego istnieje wersja narzędzia skonfigurowana do ataku czasowego na dysk twardy, to znaczy skonfigurowana do analizy wywołania systemowego read ().

Demonstracja nagrywania dźwięku przy użyciu dysku twardego, obsługa narzędzia Kscope


Oczywiście mowy nie można rozumieć w ten sposób, ale dysk twardy jest całkiem odpowiedni jako czujnik wibracji. Można np. zarejestrować, czy osoba w twardych butach lub boso weszła do pokoju z komputerem (prawdopodobnie, jeśli napastnik ma na sobie miękkie tenisówki lub na podłodze leży gruby dywan, dysk twardy nie będzie w stanie zarejestrować wibracji - warto to sprawdzić). Komputer jest w stanie zarejestrować stłuczone szkło lub inne zdarzenia o dużym natężeniu dźwięku. Oznacza to, że dysk twardy może służyć jako rodzaj systemu wykrywania nieautoryzowanych włamań.

Zabójca dysku twardego

Nawiasem mówiąc, podobną technikę można zastosować do wyłączania dysków twardych. Tylko tutaj nie usuwamy oscylacji z dysku twardego, a wręcz przeciwnie, generujemy oscylacje, które są podawane na dysk twardy. Jeśli odtwarzasz dźwięk z głośnika z częstotliwością rezonującą z częstotliwością dysku twardego, system wkrótce wyłączy urządzenie z błędem wejścia/wyjścia (jądro Linuksa całkowicie wyłączy dysk twardy po 120 sekundach). Sam dysk twardy może ulec nieodwracalnemu uszkodzeniu.

Dlaczego nie możesz krzyczeć na swój dysk twardy
Jądro Linuksa wyłączyło dysk twardy po 120 sekundach dostarczania dźwięku o częstotliwości rezonansowej przez głośnik głośnika USB Edifier r19u. Głośnik włącza się na około jedną czwartą mocy (mniej niż 100 mW) i znajduje się 20 cm od dysku twardego, skierowany w stronę stołu, aby zwiększyć wibracje. Rama z Film z demonstracją zabójcy HDD

Ciekawe, że takie „ataki” na dyski twarde czasami zdarzają się zupełnie przypadkowo w życiu codziennym. Na przykład we wrześniu 2016 r. centrum danych ING Banku zostało zmuszone do zawieszenia działalności na 10 godzin po ćwiczeniach przeciwpożarowych. Dziesiątki dysków twardych uległy awarii z powodu głośnego dźwięku gazu obojętnego wydobywającego się z butli pod wysokim ciśnieniem. Dźwięk był bardzo głośny (ponad 130 dB), ale na dyski twarde nie można nawet krzyczeć - zwiększa to opóźnienie w dostępie do dysku twardego.

Demonstracja ludzkiego krzyku na dyskach twardych w centrum danych. Pomiar opóźnienia


Aby wygenerować rezonujący dźwięk, Alfredo Ortega napisał skrypt w języku Python o nazwie zabójca dysku twardego (demonstracja wideo).

Skrypt zabójcy dysku twardego Jest dość mały, więc możesz opublikować go w całości tutaj.

"""PyAudio hdd-killer: Generate sound and interfere with HDD """
"""Alfredo Ortega @ortegaalfredo"""
"""Usage: hdd-killer /dev/sdX"""
"""Where /dev/sdX is a spinning hard-disk drive"""
"""Turn the volume to the max for better results"""
"""Requires: pyaudio. Install with 'sudo pip install pyaudio' or 'sudo apt-get install python-pyaudio'"""

import pyaudio
import time
import sys
import math
import random

RATE=48000
FREQ=50

# validation. If a disk hasn't been specified, exit.
if len(sys.argv) < 2:
    print "hdd-killer: Attempt to interfere with a hard disk, using sound.nn" +
	  "The disk will be opened as read-only.n" + 
          "Warning: It might cause damage to HDD.n" +
          "Usage: %s /dev/sdX" % sys.argv[0]
    sys.exit(-1)

# instantiate PyAudio (1)
p = pyaudio.PyAudio()
x1=0
NEWFREQ=FREQ

# define audio synt callback (2)
def callback(in_data, frame_count, time_info, status):
    global x1,FREQ,NEWFREQ
    data=''
    sample=0
    for x in xrange(frame_count):
        oldsample=sample
        sample=chr(int(math.sin(x1*((2*math.pi)/(RATE/FREQ)))*127)+128)
        data = data+sample
        # continous frequency change
        if (NEWFREQ!=FREQ) and (sample==chr(128)) and (oldsample<sample) :
                FREQ=NEWFREQ
                x1=0
        x1+=1
    return (data, pyaudio.paContinue)

# open stream using callback (3)
stream = p.open(format=pyaudio.paUInt8,
                channels=1,
                rate=RATE,
                output=True,
                stream_callback=callback)

# start the stream (4)
stream.start_stream()

# wait for stream to finish (5)
while stream.is_active():
    timeprom=0
    c=file(sys.argv[1])
    for i in xrange(20):
        a=time.clock()
        c.seek(random.randint(0,1000000000),1) #attempt to bypass file buffer
        c.read(51200)
        b=time.clock()
        timeprom+=b-a
    c.close()
    timeprom/=20
    print("Frequency: %.2f Hz File Read prom: %f us" % (FREQ,timeprom*1000000))
    NEWFREQ+=0.5

# stop stream (6)
stream.stop_stream()
stream.close()

# close PyAudio (7)
p.terminate()

Źródło: www.habr.com

Dodaj komentarz