Skip to content

AIR-FI

Air-gapped bir bilgisayarın DDR memory bus'ını gizli bir Wi-Fi-band (2.4 GHz) vericisine dönüştür; physical-layer Wi-Fi bilgisini açığa çıkaran yakındaki herhangi bir cihaz tarafından decode edilir.

Mechanism

Note

DDR SDRAM GHz aralığında clock'lanır ve memory bus, çalışma frekansında ve civarında electromagnetic enerji yayar. Birçok DDR4 modülünde ilgili clock harmonikleri 2.4 GHz ISM / Wi-Fi band'inin içine düşer. Temel değişmez nokta: 2.4 GHz'deki emisyonun yoğunluğu memory-bus kullanımının bir fonksiyonudur — yoğun, sıkı zamanlanmış memory trafiği emanation'ı yükseltir; boştaki memory onu düşürür. Software dolayısıyla on-off keying (OOK) yapabilir: 1 iletmek için bus'ı döver, 0 iletmek için boş bırakır. Wi-Fi NIC, verici, kernel privilege ve özel bir instruction gerekmez — yalnızca timing'i kontrol edilen sıradan memory access'leri. Bir alıcının bir network'e associate olmasına bile gerek yoktur: 2.4 GHz band'inde ham sinyal gücünü / physical-layer göstergelerini örnekler ve OOK stream'ini demodüle eder.

Walkthrough

Verici, yalıtılmış host üzerindeki unprivileged user-space koddur; alıcı ise yakındaki bir cihazdır (SDR ya da PHY layer bilgisini açığa çıkaran bir Wi-Fi çip).

  1. Find the emission frequency. Hedefin yakınında bir SDR ile, host dönüşümlü olarak memory'yi zorlarken ve boşta bırakırken ~2.4 GHz'i tara; sinyal gücünün memory aktivitesini takip ettiği band carrier'dır.

  2. Modulate by memory activity. Memory bus üzerinde OOK:

#include <string.h>
#include <time.h>

#define BUF (16*1024*1024)   // large enough to thrash DRAM, not just cache
static char a[BUF], b[BUF];

static void busy_us(long us){ struct timespec s; clock_gettime(CLOCK_MONOTONIC,&s);
    struct timespec n; do{ memcpy(a,b,BUF); clock_gettime(CLOCK_MONOTONIC,&n);}
    while((n.tv_sec-s.tv_sec)*1000000L + (n.tv_nsec-s.tv_nsec)/1000 < us); }

static void idle_us(long us){ struct timespec t={us/1000000, (us%1000000)*1000};
    nanosleep(&t,0); }

void air_fi_send_bit(int bit){
    if (bit) busy_us(SYMBOL_US);   // saturate memory bus -> emission ON
    else     idle_us(SYMBOL_US);   // quiet bus           -> emission OFF
}
  1. Frame and receive. SDR senkronize olabilsin diye bir preamble + framing ekle, ardından alınan 2.4 GHz gücünü bit'lere demodüle et.
Beklenen sonuçlar (makaleden)
Carrier:    ~2.4 GHz (DDR clock harmonic, Wi-Fi band)
Modulation: On-Off Keying via memory-bus activity
Bit rate:   1 – 100 bit/s
Range:      up to ~several meters (a few meters typical)
Works from: unprivileged process, even inside a VM
Receiver:   SDR or Wi-Fi chip exposing physical-layer signal data

Detection

Yalıtılmış host'ların yakınında veriyle korelasyonlu emanation'lar için 2.4 GHz band'inde RF spectrum izleme; memory-bus kullanım desenlerinde anomaly detection (periyodik yapıya sahip sürekli patlamalı memcpy).

Mitigation

Faraday shielding / TEMPEST zonlama; güvenli makinelerin yakınında Wi-Fi yeteneğine sahip alıcıları yasaklama; RAM electromagnetic shielding; noise floor'u yükseltmek için rastgele arka plan memory iş yükleriyle memory-bus "jamming".

References