
Artefatti di ricerca per attacchi side-channel basati sulle notifiche dei file su Linux, Windows e macOS, che dimostrano la fuga di informazioni tramite inotify/FSEvents, il timing dei tasti e il fingerprinting dei siti web.
Questo repository contiene gli artefatti (ancora in revisione!) per il paper "File Notification Attacks: Templating and Exploiting Side-Channel Leakage from the File-Notification Systems on Linux, Windows, and macOS", accettato a CCS '26.
Visita il sito web con le demo su: https://inoti.fyi/
Leggi il paper su: https://snee.la/pdf/pubs/file-notification-attacks.pdf o http://inoti.fyi/pubs/file-notification-attacks.pdf
Come parte della valutazione degli artefatti a CCS'26 (ancora in corso!), abbiamo fornito una VM Debian 13 + KDE Plasma 6 con un kernel pre-patchato. Questa VM non è stata utilizzata per produrre i risultati di valutazione del paper e non è pensata per riprodurne l'esatta magnitudine. Questo repository potrebbe essere aggiornato per incorporare le revisioni e i feedback dei nostri valutatori di artefatti. Renderemo la VM pubblicamente accessibile quando la nostra valutazione degli artefatti sarà completata.
Abbiamo impiegato Claude (Opus 4.8) per incapsulare il nostro codice in artefatti decentemente documentati e ad alte prestazioni (ad esempio, quello per Windows era un po' lento). Tuttavia, il codice, gli script e i makefile generati erano basati su
Le istruzioni per testare il codice Linux di seguito sono specifiche per
l'esecuzione di comandi nella VM. Si prega invece di guardare il codice in
Linux/.
La VM esiste puramente per comodità, in modo che il montaggio di ogni attacco non richieda una configurazione dell'ambiente da zero o un downgrade del kernel. Il meccanismo sottostante dimostrato nella VM è identico a quello descritto nel paper, ma si noti che non abbiamo utilizzato la VM per produrre i numeri riportati nel paper. I tempi assoluti possono differire a causa dell'ambiente virtualizzato e dell'hardware sottostante.
I risultati sono riprodotti all'interno di una VM Debian 13 (linux-vm/),
installata dall'ISO live ufficiale di Debian con KDE Plasma 6 (Wayland)
installato con un kernel precedente alla correzione di
fsnotify.
Sono installati inotify-tools, gli header di sviluppo Qt6 e pkexec. Nient'altro
viene aggiornato e il kernel non viene mai toccato dopo l'installazione. Si
prega di NON eseguire apt upgrade o tentare di aggiornare il kernel.
Questa immagine della VM è deliberatamente vecchia, non è aggiornata e non
dispone delle ultime patch di sicurezza. Questa immagine della VM è pensata
solo per una rapida validazione e test!
Il codice, gli attacchi e le dimostrazioni presenti all'interno della VM sono
rispecchiati in Linux/.
Nota: Indichiamo come quale utente eseguire i comandi all'inizio di ogni
blocco di comandi. C'è [host], che è la macchina host che esegue la VM,
[user] che è la vittima degli attacchi nella VM, e [spyuser] che richiede
di essere configurato e sarà l'attaccante nella maggior parte degli attacchi
Linux.
L'immagine del disco è fornita come linux-vm-upload.qcow2, compressa con zstd.
Rinominarla in linux-vm.qcow2 prima di eseguire run.sh (che si aspetta quel
nome di file):
# Run As: [host]
cd linux-vm/
mv linux-vm-upload.qcow2 linux-vm.qcow2
./run.sh
La lettura di un qcow2 compresso con zstd richiede qemu-img/qemu-system-x86_64
versione 5.2 o successiva (2020+), verificare con qemu-img --version. Se si
utilizza una versione precedente di QEMU e questa non riesce ad aprire
l'immagine, decomprimerla prima in un qcow2 flat:
qemu-img convert -O qcow2 linux-vm-upload.qcow2 linux-vm.qcow2
4 core, 4GB di RAM, display GUI. Le credenziali di accesso sono:
root, password password,user, password password,spyuser, password password (non effettuare il login come spyuser!)La VM fornita esegue già un kernel vulnerabile e pre-patchato
(6.12.43+deb13-amd64), quindi non è necessario alcun downgrade per
utilizzarla. Sarà necessario QEMU per eseguire questa immagine (che ha una GUI).
L'artefatto si trova in /home/user/Linux-File-Notification-Attacks all'interno
della VM.
Un singolo comando configura tutto da zero nella VM: (i) un account spyuser
non privilegiato (non-sudo), (ii) la propria copia della directory degli
artefatti (un account non privilegiato separato non può altrimenti accedere
alla home directory di user), (iii) e ogni script reso eseguibile in entrambe
le copie.
# In the VM, Run As: [user]
sudo bash ~/Linux-File-Notification-Attacks/setup_attacks.sh
Ogni attacco di seguito viene eseguito come spyuser (su - spyuser, password
password), tranne auth-ui-redress, che viene eseguito come user (spiegato
di seguito).
Dimostra che le notifiche delle operazioni sui file vengono consegnate per file che non possono essere letti direttamente, purché la loro directory genitore sia leggibile.
# Run As: [spyuser]
# To switch to spyuser, in a new terminal type `su - spyuser`. The password
# is `password`.
cd ~/Linux-File-Notification-Attacks/unreadable-file-bypass
./watch-syslog.sh
Lasciarlo in esecuzione, poi generare una riga di log da un altro terminale
come user:
# Run As: [user]
logger "hello"
Questa immagine Debian 13 non ha rsyslog, quindi non esiste un file
/var/log/syslog come mostrato nel paper. Lo script ripiega sul monitoraggio
di /var/log/journal/<machine-id>/. È la stessa idea, poiché i file .journal
monitorati sono di proprietà di root (utente) e systemd-journal (gruppo),
nessuno dei quali è spyuser.
Misura il ritardo di notifica di inotify.
# Run As: [user], ensure numpy is installed (or pip3)
sudo apt install python3-numpy
# Run As: [spyuser]
cd ~/Linux-File-Notification-Attacks/temporal-resolution
./run.sh
watcher apre un watch inotify su un file di test e registra il timestamp di
ogni IN_ACCESS che riceve. accessor legge lo stesso file 1000 volte con un
ritardo casuale di 5-10ms tra le letture, registrando il timestamp di ogni
lettura stessa. stats.py confronta le due registrazioni di timestamp e stampa
il ritardo medio/deviazione standard/minimo tra il verificarsi della lettura e
l'arrivo della notifica, ovvero la risoluzione temporale di inotify.
Non è l'attacco completo del paper, ma solo la primitiva di proof-of-concept del
filtraggio su cui si basa l'attacco: per ogni tasto premuto ovunque sul sistema,
stampa una notifica con timestamp, senza mai leggere direttamente /dev/input.