Zašto ne biste trebali vikati na svoj HDD

Zašto ne biste trebali vikati na svoj HDD

Na konferenciji o računalnoj sigurnosti Ekoparty 2017. u Buenos Airesu argentinski haker Alfredo Ortega pokazao je vrlo zanimljiv razvoj - sustav za tajno prisluškivanje prostorija bez korištenja mikrofona. Zvuk snimljen izravno na tvrdi disk!

HDD uglavnom hvata niskofrekventne zvukove visokog intenziteta, korake i druge vibracije. Ljudski govor još se ne može prepoznati, iako znanstvenici provode istraživanja u tom smjeru (prepoznavanje govora niskofrekventnim vibracijama, koje se snimaju npr. iz žiroskopa ili HDD-a).

Zvuk je titranje zraka ili drugog medija. Osoba ih percipira kroz bubnjić, koji prenosi vibracije u unutarnje uho. Mikrofon je dizajniran otprilike kao uho - i ovdje se vibracije bilježe tankom membranom koja pobuđuje električni impuls. Tvrdi disk je, naravno, također podložan mikroskopskim vibracijama zbog fluktuacija u okolnom zraku. To je poznato čak i iz tehničkih karakteristika HDD-ova: proizvođači obično označavaju maksimalnu dopuštenu razinu vibracija, a sam tvrdi disk često pokušava staviti u spremnik otporan na vibracije od gume ili drugog izolacijskog materijala. Iz ovoga je lako zaključiti da se zvukovi mogu snimati pomoću HDD-a. Ostaje samo otkriti kako.

Alfredo Ortega predložio je jedinstvenu verziju bočnog napada, naime vremenski napad. Ovaj napad temelji se na pretpostavci da se različite operacije izvode na uređaju u različito vrijeme, ovisno o danim ulaznim podacima. U ovom slučaju, “ulazni podaci” su vibracije glave za čitanje i HDD ploče, koje koreliraju s vibracijama okoline, odnosno zvukom. Stoga se mjerenjem vremena izračuna i provođenjem statističke analize podataka mogu izmjeriti vibracije glave/ploče, a time i vibracije medija. Što je odgoda u očitavanju podataka duža, to su vibracije HDD-a jače, a time i zvuk glasniji.

Kako izmjeriti vibracije tvrdog diska? Vrlo jednostavno: samo pokrenite sistemski poziv read () — i zabilježite vrijeme potrebno za dovršetak. Moderni operativni sustavi omogućuju vam očitavanje vremena sistemskih poziva s točnošću do nanosekunde.

Brzina čitanja informacija iz sektora ovisi o položaju glave i ploče, što je u korelaciji s vibracijama kućišta HDD-a. To je sve.

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

Zašto ne biste trebali vikati na svoj HDD
Kscope uslužni program (stat() syscall)

Kscope je mali uslužni program za vizualizaciju sitnih 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 poziva sustava 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 u tvrdim cipelama ili bosa ušla u prostoriju s računalom (vjerojatno, ako napadač nosi mekane tenisice ili je na podu debeli tepih, HDD neće moći registrirati vibracije - ovo vrijedi provjeriti). Računalo može registrirati razbijeno staklo ili druge incidente s jakim intenzitetom zvuka. Odnosno, tvrdi disk može poslužiti kao neka vrsta sustava za otkrivanje neovlaštenog upada.

HDD ubojica

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

Zašto ne biste trebali vikati na svoj HDD
Linux kernel je isključio tvrdi disk nakon 120 sekundi isporučivanja 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 pojačavanja vibracija. Okvir iz video uz demonstraciju HDD ubojice

Zanimljivo je da se takvi "napadi" na HDD-ove ponekad događaju potpuno slučajno u svakodnevnom životu. Na primjer, u rujnu 2016. podatkovni centar ING banke bio je prisiljen obustaviti rad na 10 sati nakon protupožarne 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 tvrde diskove - to povećava kašnjenje u pristupu HDD-u.

Demonstracija ljudskog vrištanja na tvrdim diskovima u podatkovnom centru. Mjerenje latencije


Kako bi proizveo rezonantni zvuk, Alfredo Ortega napisao je Python skriptu pod nazivom hdd-ubojica (video demonstracija).

HDD killer skripta Prilično je malen, pa 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