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).
-
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.
-
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
}
- 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)
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".