Skip to content

BRIGHTNESS

Air-gapped bir workstation'dan, LCD ekran parlaklığında insan gözünün fark edemeyeceği kadar küçük değişiklikler yaparak veri exfiltrate et; bunları bir kamera kaydedip decode edebilir.

Mechanism

Note

Bir LCD'nin algılanan parlaklığı sürekli ve software ile kontrol edilebilen bir değerdir (backlight seviyesi / per-pixel luminance). İnsanın görsel sistemi küçük, kademeli parlaklık değişimlerine duyarsızdır, ama bir kameranın image sensor'ı luminance'ı hassas biçimde integrate eder ve algı-altı (sub-perceptual) delta'ları frame frame çözebilir. Değişmez nokta şu: malware, görüntülenen image'ın ortalama luminance'ını birkaç yüzde oranında — insanın just-noticeable-difference eşiğinin altında — modüle edebilirken, bir kamera (yerel CCTV, webcam ya da ekrana doğrultulmuş bir smartphone) ekranı kaydedip parlaklık time-series'ini geri kazanır. 1'i biraz daha parlak bir frame'e, 0'ı biraz daha sönük bir frame'e map'lemek, monitörü odadaki bir kişiye tamamen sabit görünen covert bir optik transmitter'a dönüştürür.

Walkthrough

Transmitter: ekran luminance'ını ayarlayan malware. Receiver: ekranı gözleyen bir kamera; offline işleme her frame için ortalama parlaklığı çıkarır.

// Transmitter: OOK by nudging overall luminance by a sub-perceptual delta.
// Apply a faint full-screen overlay or scale the gamma/backlight.
void send_bit(int bit) {
    float lum = bit ? (BASE + DELTA) : (BASE - DELTA);  // DELTA a few %
    set_screen_luminance(lum);   // e.g. xrandr --brightness, or overlay alpha
    sleep_ms(SYMBOL_MS);         // hold one symbol period
}
# Receiver: decode the recorded video into bits via mean-frame brightness.
import cv2, numpy as np
def decode(video):
    cap = cv2.VideoCapture(video); series = []
    while True:
        ok, frame = cap.read()
        if not ok: break
        series.append(frame.mean())          # average luminance per frame
    series = np.array(series)
    sync(series)                             # align to preamble
    return [1 if s > threshold else 0 for s in sampled_symbols(series)]
Expected results (from the paper)
Channel:    optical, sub-perceptual LCD brightness modulation
Receiver:   local security camera / webcam / smartphone camera
Invisible:  brightness delta below human JND
Payload:    keystrokes, passwords, small keys from the isolated host

Detection

Periyodik düşük genlikli parlaklık flicker'ı için kamera tarafında analiz; gamma/backlight/overlay ayarlayan beklenmedik process'lerin host tarafında izlenmesi; hassas monitörlere line-of-sight'ı olan kameralar için policy yasakları.

Mitigation

Güvenli display'lere bakan kameraları kaldır ya da perdele; privacy filter'ları / polarizer'lar; sertleştirilmiş endpoint'lerde programatik parlaklık/overlay değişikliklerine izin verme; gizli bir carrier'ı maskelemek için randomize brightness dithering uygula.

References