
En la conferencia de seguridad informática Ekoparty 2017 en Buenos Aires, el hacker argentino Alfredo Ortega mostró un desarrollo muy interesante: un sistema para escuchas telefónicas encubiertas en locales sin utilizar un micrófono. Sonido !
El disco duro capta principalmente sonidos de baja frecuencia de alta intensidad, pasos y otras vibraciones. El habla humana aún no puede reconocerse, aunque los científicos (reconocimiento de voz mediante vibraciones de baja frecuencia, que se registran, por ejemplo, desde un giroscopio o un disco duro).
El sonido es la vibración del aire u otro medio. Una persona los percibe a través del tímpano, que transmite vibraciones al oído interno. El micrófono tiene un diseño similar al de una oreja; también en este caso las vibraciones se registran a través de una fina membrana que excita un impulso eléctrico. Por supuesto, el disco duro también está sujeto a vibraciones microscópicas debido a las fluctuaciones del aire circundante. Esto se sabe incluso por las características técnicas de los discos duros: los fabricantes suelen indicar el nivel de vibración máximo permitido y el propio disco duro a menudo intenta colocarlo en un recipiente a prueba de vibraciones hecho de goma u otro material aislante. De esto es fácil concluir que los sonidos se pueden grabar usando HDD. Todo lo que queda es descubrir cómo.
Alfredo Ortega propuso una versión única de un ataque de canal lateral, es decir, un ataque de tiempo. Este ataque se basa en la suposición de que se realizan diferentes operaciones en el dispositivo en diferentes momentos, dependiendo de los datos de entrada proporcionados. En este caso, los "datos de entrada" son las vibraciones del cabezal de lectura y el disco HDD, que se correlacionan con las vibraciones del entorno, es decir, con el sonido. Así, midiendo el tiempo de cálculo y realizando un análisis estadístico de los datos, se pueden medir las vibraciones del cabezal/plato y, por tanto, las vibraciones del medio. Cuanto mayor sea el retraso en la lectura de datos, más fuertes serán las vibraciones del disco duro y, por tanto, más fuerte será el sonido.
¿Cómo medir la vibración del disco duro? Muy simple: simplemente ejecuta la llamada al sistema. read () - y registre el tiempo que tarda en completarse. Los sistemas operativos modernos le permiten leer el tiempo de las llamadas al sistema con una precisión de nanosegundos.
La velocidad de lectura de información de un sector depende de la posición del cabezal y del plato, lo que se correlaciona con las vibraciones de la carcasa del disco duro. Eso es todo.
El análisis estadístico se lleva a cabo utilizando una sencilla utilidad Kscope. Como dicen, todo lo ingenioso es sencillo.

Utilidad Kscope (llamada al sistema stat())
Kscope es una pequeña utilidad para visualizar pequeñas diferencias en los tiempos de ejecución de llamadas al sistema. Fuente.
En un repositorio separado existe una versión de la utilidad configurada para un ataque de tiempo en el disco duro, es decir, configurada para analizar la llamada del sistema read ().
Demostración de grabación de sonido utilizando HDD, funcionamiento de la utilidad Kscope

Por supuesto, el habla no se puede entender de esta manera, pero el disco duro es muy adecuado como sensor de vibración. Por ejemplo, puede registrar si una persona con zapatos duros o descalzo entró en una habitación con una computadora (probablemente, si el atacante usa zapatillas suaves o hay una alfombra gruesa en el piso, el disco duro no podrá registrar vibraciones). esto vale la pena comprobarlo). El ordenador es capaz de registrar cristales rotos u otros incidentes con una fuerte intensidad sonora. Es decir, el disco duro puede servir como una especie de sistema de detección de intrusos no autorizados.
Asesino de disco duro
Кстати, схожую технику можно использовать для выведения из строя жёстких дисков. Только здесь мы не снимаем колебания с HDD, а наоборот — генерируем колебания, которые подаются на HDD. Если воспроизводить с колонки звук на частоте, которая резонирует с частотой HDD, то система вскоре отключает устройство с ошибкой ввода-вывода (ядро Linux полностью отключает HDD через 120 секунд). Сам жёсткий диск может получить необратимые повреждения.

núcleo Linux отключило жёсткий диск после 120 секунд подачи звука на резонирующей частоте через динамик USB-колонки Edifier r19u. Динамик включен примерно на четверть мощности (менее 100 мВт) и располагается в 20 см от HDD, направлен на стол для усиления вибраций. Кадр из con una demostración del asesino del HDD
Es curioso que este tipo de "ataques" a los discos duros a veces se produzcan por accidente en la vida cotidiana. Por ejemplo, en septiembre de 2016, el centro de datos del ING Bank se vio obligado a suspender sus operaciones durante 10 horas después de un simulacro de incendio. debido al fuerte sonido del gas inerte que se libera de los cilindros a alta presión. El sonido era muy fuerte (más de 130 dB), pero ni siquiera se puede gritar a los discos duros, lo que aumenta el retraso en el acceso al HDD.
Demostración de gritos humanos contra discos duros en un centro de datos. Medición de latencia

Para generar el sonido resonante, Alfredo Ortega escribió un script en Python llamado ().
Es bastante pequeño, por lo que puedes publicarlo 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()Fuente: habr.com
