Tại sao bạn không nên hét vào ổ cứng của mình

Tại sao bạn không nên hét vào ổ cứng của mình

Tại hội nghị bảo mật máy tính Ekoparty 2017 ở Buenos Aires, hacker người Argentina Alfredo Ortega đã cho thấy một sự phát triển rất thú vị - một hệ thống để nghe lén bí mật các cơ sở mà không cần sử dụng micrô. Âm thanh ghi trực tiếp vào ổ cứng!

Ổ cứng chủ yếu thu âm thanh tần số thấp cường độ cao, tiếng bước chân và các rung động khác. Lời nói của con người vẫn chưa thể được nhận ra, mặc dù các nhà khoa học đang tiến hành nghiên cứu theo hướng này (nhận dạng giọng nói bằng các rung động tần số thấp, chẳng hạn như được ghi lại từ con quay hồi chuyển hoặc ổ cứng HDD).

Âm thanh là sự rung động của không khí hoặc môi trường khác. Một người cảm nhận được chúng thông qua màng nhĩ, nơi truyền rung động đến tai trong. Micrô được thiết kế gần giống như một chiếc tai - ở đây, các rung động cũng được ghi lại bởi một màng mỏng, màng này kích thích một xung điện. Tất nhiên, ổ cứng cũng chịu những rung động cực nhỏ do sự biến động của không khí xung quanh. Điều này thậm chí còn được biết đến từ các đặc tính kỹ thuật của ổ cứng: các nhà sản xuất thường chỉ ra mức độ rung tối đa cho phép và bản thân ổ cứng thường cố gắng đặt nó trong một hộp chống rung làm bằng cao su hoặc vật liệu cách điện khác. Từ đó dễ dàng kết luận rằng âm thanh có thể được ghi lại bằng ổ cứng HDD. Tất cả những gì còn lại là tìm ra cách.

Alfredo Ortega đề xuất một phiên bản độc đáo của tấn công kênh bên, cụ thể là tấn công theo thời gian. Cuộc tấn công này dựa trên giả định rằng các hoạt động khác nhau được thực hiện trên thiết bị vào các thời điểm khác nhau, tùy thuộc vào dữ liệu đầu vào được cung cấp. Trong trường hợp này, “dữ liệu đầu vào” là những rung động của đầu đọc và đĩa HDD, tương quan với những rung động của môi trường, tức là với âm thanh. Do đó, bằng cách đo thời gian tính toán và thực hiện phân tích thống kê dữ liệu, có thể đo được độ rung của đầu/đĩa và do đó độ rung của môi trường. Độ trễ trong việc đọc dữ liệu càng lâu thì độ rung của ổ cứng càng mạnh và do đó âm thanh càng to.

Làm thế nào để đo độ rung của ổ cứng? Rất đơn giản: chỉ cần chạy lệnh gọi hệ thống read () - và ghi lại thời gian cần thiết để hoàn thành. Các hệ điều hành hiện đại cho phép bạn đọc thời gian của các cuộc gọi hệ thống với độ chính xác nano giây.

Tốc độ đọc thông tin từ một khu vực phụ thuộc vào vị trí của đầu và đĩa, tương quan với độ rung của vỏ ổ cứng. Đó là tất cả.

Phân tích thống kê được thực hiện bằng tiện ích Kscope đơn giản. Như họ nói, mọi thứ khéo léo đều đơn giản.

Tại sao bạn không nên hét vào ổ cứng của mình
Tiện ích Kscope (tòa nhà stat())

Kscope là một tiện ích nhỏ để trực quan hóa những khác biệt nhỏ về thời gian thực hiện lệnh gọi hệ thống. Nguồnđược xuất bản trên GitHub.

Trong một kho lưu trữ riêng biệt HDD-thời gian có một phiên bản tiện ích được cấu hình để tấn công theo thời gian vào ổ cứng, tức là được cấu hình để phân tích lệnh gọi hệ thống read ().

Trình diễn ghi âm bằng HDD, thao tác tiện ích Kscope


Tất nhiên, không thể hiểu lời nói theo cách này, nhưng ổ cứng HDD khá thích hợp làm cảm biến rung. Ví dụ: bạn có thể đăng ký nếu một người đi giày cứng hoặc đi chân trần vào phòng có máy tính (có thể, nếu kẻ tấn công đi giày thể thao mềm hoặc có một tấm thảm dày trên sàn, ổ cứng sẽ không thể ghi lại rung động - điều này đáng để kiểm tra). Máy tính có thể ghi lại kính vỡ hoặc các sự cố khác với cường độ âm thanh mạnh. Nghĩa là, ổ cứng có thể hoạt động như một loại hệ thống phát hiện xâm nhập trái phép.

sát thủ ổ cứng

Nhân tiện, một kỹ thuật tương tự có thể được sử dụng để vô hiệu hóa ổ cứng. Chỉ ở đây, chúng tôi không loại bỏ các dao động khỏi ổ cứng mà ngược lại, chúng tôi tạo ra các dao động được đưa vào ổ cứng. Nếu bạn phát âm thanh từ loa ở tần số cộng hưởng với tần số ổ cứng, hệ thống sẽ sớm tắt thiết bị có lỗi I/O (nhân Linux sẽ tắt hoàn toàn ổ cứng sau 120 giây). Bản thân ổ cứng có thể bị hư hỏng không thể phục hồi.

Tại sao bạn không nên hét vào ổ cứng của mình
Nhân Linux đã tắt ổ cứng sau 120 giây phát ra âm thanh ở tần số cộng hưởng qua loa của loa USB Edifier r19u. Loa được bật ở mức công suất khoảng 100/20 (dưới XNUMX mW) và được đặt cách ổ cứng XNUMX cm, hướng về phía bàn để tăng cường độ rung. Khung từ video với màn trình diễn của kẻ giết ổ cứng

Điều tò mò là những “cuộc tấn công” như vậy vào ổ cứng HDD đôi khi lại xảy ra hoàn toàn tình cờ trong cuộc sống hàng ngày. Chẳng hạn, vào tháng 2016 năm 10, trung tâm dữ liệu của Ngân hàng ING đã buộc phải tạm dừng hoạt động trong XNUMX giờ sau một cuộc diễn tập cứu hỏa. Hàng chục ổ cứng bị lỗi do âm thanh lớn của khí trơ thoát ra từ xi lanh dưới áp suất cao. Âm thanh rất lớn (hơn 130 dB), nhưng bạn thậm chí không thể hét vào ổ cứng - điều này làm tăng độ trễ khi truy cập vào ổ cứng.

Trình diễn tiếng la hét của con người trước ổ cứng trong trung tâm dữ liệu. Đo độ trễ


Để tạo ra âm thanh cộng hưởng, Alfredo Ortega đã viết một tập lệnh Python có tên sát thủ hdd (trình diễn video).

Kịch bản sát thủ ổ cứng Nó khá nhỏ nên bạn có thể xuất bản toàn bộ ở đây.

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

Nguồn: www.habr.com

Thêm một lời nhận xét