Kodėl neturėtumėte šaukti ant HDD

Kodėl neturėtumėte šaukti ant HDD

Buenos Airėse vykusioje kompiuterių saugumo konferencijoje „Ekoparty 2017“ Argentinos įsilaužėlis Alfredo Ortega pademonstravo labai įdomią plėtrą – slapto patalpų pasiklausymo nenaudojant mikrofono sistemą. Garsas įrašyti tiesiai į standųjį diską!

HDD daugiausia fiksuoja didelio intensyvumo žemo dažnio garsus, žingsnius ir kitas vibracijas. Žmogaus kalbos dar negalima atpažinti, nors mokslininkai atlieka tyrimus šia kryptimi (kalbos atpažinimas naudojant žemo dažnio virpesius, kurie įrašomi, pavyzdžiui, iš giroskopo ar HDD).

Garsas yra oro ar kitos terpės vibracija. Žmogus juos suvokia per ausies būgnelį, kuris perduoda vibracijas į vidinę ausį. Mikrofonas sukurtas maždaug kaip ausis – čia irgi vibracijas fiksuoja plona membrana, kuri sužadina elektrinį impulsą. Kietasis diskas, žinoma, taip pat yra veikiamas mikroskopinių vibracijų dėl aplinkos oro svyravimų. Tai žinoma net iš HDD techninių charakteristikų: gamintojai dažniausiai nurodo didžiausią leistiną vibracijos lygį, o pats kietasis diskas dažnai bando jį įdėti į vibracijai atsparų konteinerį iš gumos ar kitos izoliacinės medžiagos. Iš to nesunku daryti išvadą, kad garsus galima įrašyti naudojant HDD. Belieka tik išsiaiškinti, kaip.

Alfredo Ortega pasiūlė unikalią šoninio kanalo atakos versiją, būtent ataką laiku. Ši ataka pagrįsta prielaida, kad įrenginyje skirtingu laiku atliekamos skirtingos operacijos, priklausomai nuo pateiktų įvesties duomenų. Šiuo atveju „įvesties duomenys“ yra skaitymo galvutės ir HDD lėkštės virpesiai, kurie koreliuoja su aplinkos vibracijomis, tai yra su garsu. Taigi, išmatuojant skaičiavimo laiką ir atliekant statistinę duomenų analizę, galima išmatuoti galvos/lėkštės virpesius, taigi ir terpės vibracijas. Kuo ilgiau delsiama nuskaityti duomenis, tuo stipresnė HDD vibracija, taigi ir garsas.

Kaip išmatuoti kietojo disko vibraciją? Labai paprasta: tiesiog paleiskite sistemos skambutį read () — ir užrašykite laiką, kurio reikia atlikti. Šiuolaikinės operacinės sistemos leidžia nanosekundžių tikslumu nuskaityti sistemos skambučių laiką.

Informacijos nuskaitymo iš sektoriaus greitis priklauso nuo galvos ir lėkštės padėties, o tai koreliuoja su HDD korpuso vibracijomis. Tai viskas.

Statistinė analizė atliekama naudojant paprastą „Kscope“ įrankį. Kaip sakoma, viskas išradinga yra paprasta.

Kodėl neturėtumėte šaukti ant HDD
Kscope įrankis (stat() syscall)

„Kscope“ yra nedidelė priemonė, skirta vizualizuoti nedidelius sistemos skambučių vykdymo laiko skirtumus. Šaltinispaskelbta GitHub.

Atskiroje saugykloje HDD laikas yra programos versija, sukonfigūruota kietojo disko laiko atakai, tai yra, sukonfigūruota analizuoti sistemos skambutį read ().

Garso įrašymo naudojant HDD demonstravimas, Kscope programos veikimas


Žinoma, kalbos taip suprasti nepavyks, tačiau HDD gana tinka kaip vibracijos jutiklis. Pavyzdžiui, galite užsiregistruoti, jei žmogus, avintis kietus batus ar basas, įėjo į kambarį su kompiuteriu (tikriausiai, jei užpuolikas avi minkštais sportbačiais arba ant grindų yra storas kilimas, HDD negalės registruoti vibracijų - tai verta patikrinti). Kompiuteris gali užregistruoti stiklo duženus ar kitus incidentus, kurių garsas yra stiprus. Tai reiškia, kad kietasis diskas gali būti tam tikra neteisėto įsibrovimo aptikimo sistema.

HDD žudikas

Beje, panašią techniką galima naudoti ir norint išjungti standžiuosius diskus. Tik čia mes nepašaliname svyravimų iš HDD, o priešingai – generuojame svyravimus, kurie paduodami į HDD. Jei leidžiate garsą iš garsiakalbio tokiu dažniu, kuris rezonuoja su HDD dažniu, sistema netrukus išjungia įrenginį su I/O klaida (Linux branduolys visiškai išjungia HDD po ​​120 sekundžių). Pats standusis diskas gali būti negrįžtamai sugadintas.

Kodėl neturėtumėte šaukti ant HDD
„Linux“ branduolys išjungė standųjį diską po 120 sekundžių, kai garsas buvo perduodamas rezonansiniu dažniu per Edifier r19u USB garsiakalbio garsiakalbį. Garsiakalbis įjungiamas maždaug ketvirtadaliu galios (mažiau nei 100 mW) ir yra 20 cm atstumu nuo HDD, nukreiptas į stalą, kad padidintų vibraciją. Rėmas iš vaizdo įrašą su HDD žudiko demonstravimu

Įdomu, kad tokie „atakai“ prieš HDD kartais įvyksta visiškai atsitiktinai kasdieniame gyvenime. Pavyzdžiui, 2016 metų rugsėjį ING banko duomenų centras po gaisro pratybų buvo priverstas 10 valandų sustabdyti veiklą. Sugedo dešimtys standžiųjų diskų dėl didelio inertinių dujų, išsiskiriančių iš balionų esant aukštam slėgiui, garso. Garsas buvo labai stiprus (daugiau nei 130 dB), bet jūs net negalite šaukti ant standžiųjų diskų - tai padidina prieigos prie HDD delsą.

Žmonių rėkimo ant standžiųjų diskų duomenų centre demonstravimas. Latencijos matavimas


Norėdami sukurti rezonansinį garsą, Alfredo Ortega parašė Python scenarijų, pavadintą HDD žudikas (vaizdo demonstravimas).

HDD žudiko scenarijus Jis yra gana mažas, todėl čia galite paskelbti visą jį.

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

Šaltinis: www.habr.com

Добавить комментарий