
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 !
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ță (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.

Utilitar Kscope (stat() syscall)
Kscope este un mic utilitar pentru vizualizarea micilor diferențe în timpul de execuție a apelurilor de sistem. Sursă.
Într-un depozit separat 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
De altfel, o tehnică similară poate fi utilizată pentru a dezactiva hard disk-urile. Totuși, aici nu captăm vibrațiile de la HDD, ci generăm vibrații care sunt transmise HDD-ului. Dacă redați sunet de la un difuzor la o frecvență care rezonează cu frecvența HDD-ului, sistemul va opri în curând dispozitivul cu o eroare I/O (nucleul). Linux (Această operațiune oprește complet hard disk-ul după 120 de secunde.) Hard disk-ul în sine poate fi deteriorat ireversibil.

Miezul Linux Hard disk-ul s-a oprit după 120 de secunde de redare a sunetului la o frecvență de rezonanță prin difuzorul USB Edifier r19u. Difuzorul a fost pornit la aproximativ un sfert din puterea sa (mai puțin de 100 mW) și poziționat la 20 cm de HDD, îndreptat spre masă pentru a amplifica vibrațiile. Imagine statică din... 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. 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 ().
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
