De ce nu ar trebui să strigi la HDD

De ce nu ar trebui să strigi la HDD

La conferința de securitate informatică Ekoparty 2017 de la Buenos Aires, hackerul argentinian Alfredo Ortega a arătat o dezvoltare foarte interesantă - un sistem de interceptare secretă a localurilor fără a folosi un microfon. Sunet înregistrat direct pe hard disk!

HDD-ul preia în principal sunete de înaltă intensitate, joasă frecvență, pași și alte vibrații. Vorbirea umană nu poate fi încă recunoscută, deși oamenii de știință fac cercetări în această direcție (recunoașterea vorbirii prin vibrații de joasă frecvență, care sunt înregistrate, de exemplu, de la un giroscop sau HDD).

Sunetul este vibrația aerului sau a altui mediu. O persoană le percepe prin timpan, care transmite vibrații către urechea internă. Microfonul este proiectat aproximativ ca o ureche - și aici, vibrațiile sunt înregistrate de o membrană subțire, care excită un impuls electric. Desigur, hard disk-ul este supus și vibrațiilor microscopice din cauza fluctuațiilor aerului din jur. Acest lucru este cunoscut chiar și din caracteristicile tehnice ale HDD-urilor: producătorii indică de obicei nivelul maxim admis de vibrații, iar hard disk-ul însuși încearcă adesea să-l plaseze într-un recipient rezistent la vibrații din cauciuc sau alt material izolator. De aici este ușor de concluzionat că sunetele pot fi înregistrate folosind HDD. Rămâne doar să ne dăm seama cum.

Alfredo Ortega a propus o versiune unică a unui atac pe canal lateral, și anume un atac în timp. Acest atac se bazează pe presupunerea că diferite operațiuni sunt efectuate pe dispozitiv în momente diferite, în funcție de datele de intrare date. În acest caz, „datele de intrare” sunt vibrațiile capului de citire și ale platoului HDD, care se corelează cu vibrațiile mediului, adică cu sunetul. Astfel, prin măsurarea timpului de calcul și efectuarea unei analize statistice a datelor, se pot măsura vibrațiile capului/platorului și deci vibrațiile mediului. Cu cât întârzierea citirii datelor este mai mare, cu atât vibrațiile HDD sunt mai puternice și, prin urmare, cu atât sunetul este mai puternic.

Cum se măsoară vibrația hard diskului? Foarte simplu: rulați apelul de sistem read () — și înregistrați timpul necesar pentru finalizare. Sistemele de operare moderne vă permit să citiți timpul apelurilor de sistem cu precizie de nanosecundă.

Viteza de citire a informațiilor dintr-un sector depinde de poziția capului și a platoului, care se corelează cu vibrațiile carcasei HDD. Asta e tot.

Analiza statistică este efectuată folosind un simplu utilitar Kscope. După cum se spune, totul ingenios este simplu.

De ce nu ar trebui să strigi la HDD
Utilitar Kscope (stat() syscall)

Kscope este un mic utilitar pentru vizualizarea micilor diferențe în timpul de execuție a apelurilor de sistem. Sursăpublicat pe GitHub.

Într-un depozit separat timp HDD există o versiune a utilitarului configurată pentru un atac de timp pe hard disk, adică configurată să analizeze apelul de sistem read ().

Demonstrație de înregistrare a sunetului folosind HDD, funcționarea utilitarului Kscope


Desigur, vorbirea nu poate fi înțeleasă în acest fel, dar HDD-ul este destul de potrivit ca senzor de vibrații. De exemplu, vă puteți înregistra dacă o persoană care poartă pantofi duri sau desculț a intrat într-o cameră cu un computer (probabil, dacă atacatorul poartă adidași moi sau există un covor gros pe podea, HDD-ul nu va putea înregistra vibrațiile - merită verificat). Computerul este capabil să înregistreze sticlă spartă sau alte incidente cu intensitate puternică a sunetului. Adică, hard disk-ul poate servi ca un fel de sistem de detectare a intruziunilor neautorizate.

Ucigaș HDD

Apropo, o tehnică similară poate fi folosită pentru a dezactiva hard disk-urile. Numai că aici nu eliminăm oscilațiile de pe HDD, ci dimpotrivă, generăm oscilații care sunt alimentate pe HDD. Dacă redați sunet de la un difuzor la o frecvență care rezonează cu frecvența HDD, sistemul oprește în curând dispozitivul cu o eroare I/O (kernel-ul Linux oprește complet HDD-ul după 120 de secunde). Hard disk-ul în sine poate suferi daune ireversibile.

De ce nu ar trebui să strigi la HDD
Nucleul Linux a oprit hard disk-ul după 120 de secunde de a furniza sunet la o frecvență de rezonanță prin difuzorul difuzorului USB Edifier r19u. Difuzorul este pornit la aproximativ un sfert din putere (mai puțin de 100 mW) și este situat la 20 cm de HDD, îndreptat spre masă pentru a spori vibrațiile. Cadru din video cu o demonstrație a ucigașului HDD

Este curios că astfel de „atacuri” asupra HDD-urilor apar uneori complet accidental în viața de zi cu zi. De exemplu, în septembrie 2016, centrul de date ING Bank a fost obligat să suspende operațiunile timp de 10 ore după un exercițiu de incendiu. Zeci de hard disk-uri au eșuat datorită sunetului puternic al gazului inert eliberat din butelii sub presiune înaltă. Sunetul era foarte puternic (mai mult de 130 dB), dar nici măcar nu puteți striga la hard disk - acest lucru crește întârzierea accesării HDD-ului.

Demonstrație de țipete umane la hard disk-uri într-un centru de date. Măsurarea latenței


Pentru a genera sunetul rezonant, Alfredo Ortega a scris un script Python numit hdd-killer (demonstrație video).

Script ucigaș HDD Este destul de mic, așa că îl puteți publica în întregime aici.

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

Sursa: www.habr.com

Adauga un comentariu