Pourquoi vous ne devriez pas crier sur votre disque dur

Pourquoi vous ne devriez pas crier sur votre disque dur

Lors de la conférence sur la sécurité informatique Ekoparty 2017 à Buenos Aires, le hacker argentin Alfredo Ortega a présenté un développement très intéressant : un système d'écoute électronique secrète des locaux sans utiliser de microphone. Son enregistré directement sur le disque dur!

Le disque dur capte principalement les sons basse fréquence de haute intensité, les pas et autres vibrations. La parole humaine ne peut pas encore être reconnue, même si les scientifiques mènent des recherches dans ce sens (reconnaissance vocale par vibrations basse fréquence, enregistrées, par exemple, à partir d'un gyroscope ou d'un disque dur).

Le son est la vibration de l'air ou d'un autre milieu. Une personne les perçoit à travers le tympan, qui transmet les vibrations à l'oreille interne. Le microphone est conçu à peu près comme une oreille - ici aussi, les vibrations sont enregistrées par une fine membrane qui excite une impulsion électrique. Bien entendu, le disque dur est également soumis à des vibrations microscopiques dues aux fluctuations de l’air ambiant. Cela est connu même grâce aux caractéristiques techniques des disques durs : les fabricants indiquent généralement le niveau de vibration maximum autorisé et le disque dur lui-même essaie souvent de le placer dans un conteneur résistant aux vibrations en caoutchouc ou en un autre matériau isolant. Il est facile de conclure de là que les sons peuvent être enregistrés à l'aide du disque dur. Il ne reste plus qu'à trouver comment.

Alfredo Ortega a proposé une version unique d'une attaque par canal secondaire, à savoir une attaque temporelle. Cette attaque repose sur l'hypothèse que différentes opérations sont effectuées sur l'appareil à des moments différents, en fonction des données d'entrée fournies. Dans ce cas, les « données d'entrée » sont les vibrations de la tête de lecture et du plateau du disque dur, qui sont en corrélation avec les vibrations de l'environnement, c'est-à-dire avec le son. Ainsi, en mesurant le temps de calcul et en effectuant une analyse statistique des données, les vibrations de la tête/plateau et donc les vibrations du support peuvent être mesurées. Plus le délai de lecture des données est long, plus les vibrations du disque dur sont fortes et, par conséquent, plus le son est fort.

Comment mesurer les vibrations d’un disque dur ? Très simple : il suffit d'exécuter l'appel système read () - et enregistrez le temps nécessaire pour terminer. Les systèmes d'exploitation modernes vous permettent de lire le timing des appels système avec une précision à la nanoseconde.

La vitesse de lecture des informations d'un secteur dépend de la position de la tête et du plateau, qui est en corrélation avec les vibrations du boîtier du disque dur. C'est tout.

L'analyse statistique est effectuée à l'aide d'un simple utilitaire Kscope. Comme on dit, tout ce qui est ingénieux est simple.

Pourquoi vous ne devriez pas crier sur votre disque dur
Utilitaire Kscope (appel système stat())

Kscope est un petit utilitaire permettant de visualiser de minuscules différences dans les temps d'exécution des appels système. Sourcepublié sur GitHub.

Dans un référentiel séparé Durée du disque dur il existe une version de l'utilitaire configurée pour une attaque temporelle sur le disque dur, c'est-à-dire configurée pour analyser l'appel système read ().

Démonstration d'enregistrement sonore sur disque dur, fonctionnement de l'utilitaire Kscope


Bien sûr, la parole ne peut pas être comprise de cette manière, mais le disque dur convient tout à fait comme capteur de vibrations. Par exemple, vous pouvez enregistrer si une personne portant des chaussures rigides ou pieds nus est entrée dans une pièce avec un ordinateur (probablement, si l'attaquant porte des baskets souples ou s'il y a un tapis épais sur le sol, le disque dur ne pourra pas enregistrer les vibrations - cela vaut la peine d'être vérifié). L'ordinateur est capable d'enregistrer des bris de verre ou d'autres incidents avec une forte intensité sonore. Autrement dit, le disque dur peut servir d’une sorte de système de détection d’intrusion non autorisé.

Tueur de disque dur

À propos, une technique similaire peut être utilisée pour désactiver les disques durs. Seulement ici, nous ne supprimons pas les oscillations du disque dur, mais au contraire, nous générons des oscillations qui sont transmises au disque dur. Si vous diffusez le son d'un haut-parleur à une fréquence qui résonne avec la fréquence du disque dur, le système éteint rapidement l'appareil avec une erreur d'E/S (le noyau Linux éteint complètement le disque dur après 120 secondes). Le disque dur lui-même peut subir des dommages irréversibles.

Pourquoi vous ne devriez pas crier sur votre disque dur
Le noyau Linux a éteint le disque dur après 120 secondes de diffusion de son à une fréquence de résonance via le haut-parleur du haut-parleur USB Edifier r19u. Le haut-parleur est allumé à environ un quart de la puissance (moins de 100 mW) et est situé à 20 cm du disque dur, orienté vers la table pour améliorer les vibrations. Cadre de Film avec une démonstration du HDD Killer

Il est curieux que de telles « attaques » contre les disques durs se produisent parfois de manière complètement accidentelle dans la vie quotidienne. Par exemple, en septembre 2016, le centre de données de la banque ING a été contraint de suspendre ses opérations pendant 10 heures après un exercice d'incendie. Des dizaines de disques durs sont en panne en raison du bruit fort du gaz inerte libéré des bouteilles sous haute pression. Le son était très fort (plus de 130 dB), mais vous ne pouvez même pas crier sur les disques durs - cela augmente le délai d'accès au disque dur.

Démonstration d'humains criant sur des disques durs dans un centre de données. Mesure de latence


Pour générer le son de résonance, Alfredo Ortega a écrit un script Python appelé tueur de disque dur (démonstration vidéo).

Script tueur de disque dur Il est assez petit, vous pouvez donc le publier dans son intégralité ici.

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

Ajouter un commentaire