
Ekoparty 2017 -tietokoneturvakonferenssissa Buenos Airesissa argentiinalainen hakkeri Alfredo Ortega esitteli erittäin mielenkiintoisen kehityksen - järjestelmän tilojen salakuunteluun ilman mikrofonia. Ääni !
Kiintolevy poimii pääasiassa korkean intensiteetin matalataajuisia ääniä, askeleita ja muuta tärinää. Ihmisen puhetta ei voida vielä tunnistaa, vaikka tiedemiehet (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.

Kscope-apuohjelma (stat() syscall)
Kscope on pieni apuohjelma pienten erojen visualisointiin järjestelmäkutsujen suoritusajoissa. Lähde.
Erillisessä arkistossa 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
Samanlaista tekniikkaa voidaan muuten käyttää kiintolevyjen poistamiseen käytöstä. Tässä emme kuitenkaan tallenna kiintolevyn värähtelyjä, vaan 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 (ytimen) vuoksi. Linux (Tämä sammuttaa kiintolevyn kokonaan 120 sekunnin kuluttua.) Itse kiintolevy voi vaurioitua peruuttamattomasti.

Ydin Linux Kiintolevy sammui 120 sekunnin kuluttua äänen toistamisesta resonanssitaajuudella Edifier r19u USB-kaiuttimen kautta. Kaiutin oli päällä noin neljännesteholla (alle 100 mW) ja sijoitettu 20 cm:n päähän kiintolevystä, suunnattuna pöytää kohti värähtelyjen vahvistamiseksi. Kuva taululta 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. 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ä ().
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
