
Na conferencia de seguridade informática Ekoparty 2017 en Bos Aires, o hacker arxentino Alfredo Ortega mostrou un desenvolvemento moi interesante: un sistema de escoitas telefónicas encubertas de locais sen utilizar un micrófono. Son !
O disco duro capta principalmente sons de baixa frecuencia de alta intensidade, pasos e outras vibracións. Aínda non se pode recoñecer a fala humana, aínda que os científicos (recoñecemento de voz por vibracións de baixa frecuencia, que se rexistran, por exemplo, desde un xiroscopio ou HDD).
O son é a vibración do aire ou doutro medio. Unha persoa percíbeas a través do tímpano, que transmite vibracións ao oído interno. O micrófono está deseñado aproximadamente como un oído; aquí tamén as vibracións son rexistradas por unha membrana delgada, que excita un impulso eléctrico. O disco duro, por suposto, tamén está suxeito a vibracións microscópicas debido ás flutuacións do aire circundante. Isto sábese incluso polas características técnicas dos discos duros: os fabricantes adoitan indicar o nivel de vibración máximo permitido e o propio disco duro adoita tentalo colocar nun recipiente a proba de vibracións feito de caucho ou outro material illante. A partir diso é doado concluír que os sons poden ser gravados usando o disco duro. Só queda descubrir como.
Alfredo Ortega propuxo unha versión única dun ataque de canle lateral, é dicir, un ataque de tempo. Este ataque baséase na suposición de que se realizan diferentes operacións no dispositivo en diferentes momentos, dependendo dos datos de entrada proporcionados. Neste caso, os "datos de entrada" son as vibracións do cabezal de lectura e do disco HDD, que se correlacionan coas vibracións do ambiente, é dicir, co son. Así, medindo o tempo de cálculo e realizando unha análise estatística dos datos, pódense medir as vibracións do cabezal/plato e, polo tanto, as vibracións do medio. Canto maior sexa o atraso na lectura dos datos, máis fortes serán as vibracións do disco duro e, polo tanto, máis alto será o son.
Como medir a vibración do disco duro? Moi sinxelo: só tes que executar a chamada do sistema read () — e rexistra o tempo que tarda en completar. Os sistemas operativos modernos permítenche ler o tempo das chamadas ao sistema cunha precisión de nanosegundos.
A velocidade de lectura da información dun sector depende da posición da cabeza e do prato, que se correlaciona coas vibracións da carcasa do disco duro. Iso é todo.
A análise estatística realízase mediante unha sinxela utilidade Kscope. Como din, todo o enxeñoso é sinxelo.

Utilidade Kscope (stat() syscall)
Kscope é unha pequena utilidade para visualizar pequenas diferenzas nos tempos de execución das chamadas do sistema. Fonte.
Nun repositorio separado hai unha versión da utilidade configurada para un ataque de tempo no disco duro, é dicir, configurada para analizar a chamada do sistema read ().
Demostración da gravación de son mediante HDD, funcionamento da utilidade Kscope

Por suposto, a fala non se pode entender deste xeito, pero o HDD é bastante axeitado como sensor de vibración. Por exemplo, pode rexistrarse se unha persoa que usa zapatos duros ou descalza entrou nunha habitación cun ordenador (probablemente, se o atacante leva unhas zapatillas de deporte suaves ou hai unha alfombra grosa no chan, o disco duro non poderá rexistrar vibracións). isto paga a pena comprobar). O ordenador é capaz de rexistrar vidros rotos ou outros incidentes con forte intensidade sonora. É dicir, o disco duro pode servir como unha especie de sistema de detección de intrusos non autorizados.
asasino de discos duros
Кстати, схожую технику можно использовать для выведения из строя жёстких дисков. Только здесь мы не снимаем колебания с HDD, а наоборот — генерируем колебания, которые подаются на HDD. Если воспроизводить с колонки звук на частоте, которая резонирует с частотой HDD, то система вскоре отключает устройство с ошибкой ввода-вывода (ядро Linux полностью отключает HDD через 120 секунд). Сам жёсткий диск может получить необратимые повреждения.

O núcleo Linux отключило жёсткий диск после 120 секунд подачи звука на резонирующей частоте через динамик USB-колонки Edifier r19u. Динамик включен примерно на четверть мощности (менее 100 мВт) и располагается в 20 см от HDD, направлен на стол для усиления вибраций. Кадр из cunha demostración do asasino de HDD
É curioso que estes "ataques" aos discos duros ocorren ás veces por accidente na vida cotiá. Por exemplo, en setembro de 2016, o centro de datos do ING Bank viuse obrigado a suspender as súas operacións durante 10 horas despois dun simulacro de incendio. debido ao forte son do gas inerte que se libera dos cilindros a alta presión. O son era moi alto (máis de 130 dB), pero nin sequera podes gritar aos discos duros; isto aumenta o atraso no acceso ao disco duro.
Demostración de gritos humanos contra os discos duros nun centro de datos. Medición de latencia

Para xerar o son resonante, Alfredo Ortega escribiu un guión Python chamado ().
É bastante pequeno, polo que podes publicalo completo aquí.
"""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()Fonte: www.habr.com
