
Artefactos de investigación para ataques de canal lateral de notificación de archivos en Linux, Windows y macOS, que demuestran la fuga de inotify/FSEvents, la sincronización de pulsaciones de teclas y la huella digital de sitios web.
Este repositorio contiene los artefactos (¡todavía en revisión!) para el artículo "File Notification Attacks: Templating and Exploiting Side-Channel Leakage from the File-Notification Systems on Linux, Windows, and macOS", aceptado en CCS '26.
Visita el sitio web con demos en: https://inoti.fyi/
Lee el artículo en: https://snee.la/pdf/pubs/file-notification-attacks.pdf o http://inoti.fyi/pubs/file-notification-attacks.pdf
Como parte de la evaluación de artefactos en CCS'26 (¡todavía en curso!), enviamos una VM Debian 13 + KDE Plasma 6 con un kernel pre-parcheado. Esta VM no se utilizó para producir los resultados de evaluación del artículo y no pretende reproducir su magnitud exacta. Este repositorio puede actualizarse para incorporar revisiones y comentarios de nuestros evaluadores de artefactos. Haremos la VM públicamente accesible cuando se complete nuestra evaluación de artefactos.
Empleamos Claude (Opus 4.8) para envolver nuestro código en artefactos decentemente bien documentados y de alto rendimiento (por ejemplo, el de Windows era un poco lento). Sin embargo, el código, scripts, makefiles que generó se basaron en
Las instrucciones para probar el código de Linux a continuación son específicas para ejecutar comandos en
la VM. Por favor, mira el código en su lugar en Linux/.
La VM existe puramente por conveniencia, para que montar cada ataque no requiera una configuración de entorno desde cero o una degradación del kernel. El mecanismo subyacente demostrado en la VM es idéntico al descrito en el artículo, pero ten en cuenta que no utilizamos la VM para producir los números reportados en el artículo. Los tiempos absolutos pueden diferir debido al entorno virtualizado y al hardware subyacente.
Los hallazgos se reproducen dentro de una VM Debian 13 (linux-vm/), instalada desde la
ISO oficial live de Debian con KDE Plasma 6 (Wayland) instalado con un kernel
que es anterior a la corrección de
fsnotify.
inotify-tools, los encabezados de desarrollo de Qt6 y pkexec están instalados. Nada más
se actualiza, y el kernel nunca se toca después de la instalación. Por favor, NO ejecutes
apt upgrade ni intentes actualizar el kernel. Esta imagen de VM es
deliberadamente antigua, no está actualizada y no tiene los últimos parches de seguridad.
¡Esta imagen de VM solo está destinada a validación y pruebas rápidas!
El código, los ataques y las demostraciones ubicadas dentro de la VM están replicados en
Linux/.
Nota: Mencionamos como qué usuario ejecutar los comandos en la parte superior de cada
bloque de comandos. Está [host], que es la máquina anfitriona que ejecuta la
VM, [user] que es la víctima de los ataques en la VM, y [spyuser] que
requiere ser configurado y será el atacante en la mayoría de los ataques de Linux.
La imagen de disco se envía como linux-vm-upload.qcow2, comprimida con zstd.
Renómbrala a linux-vm.qcow2 antes de ejecutar run.sh (que espera ese
nombre de archivo):
# Run As: [host]
cd linux-vm/
mv linux-vm-upload.qcow2 linux-vm.qcow2
./run.sh
Leer un qcow2 comprimido con zstd requiere qemu-img/qemu-system-x86_64 versión
5.2 o superior (2020+), verifica con qemu-img --version. Si estás atascado en un
QEMU más antiguo y falla al abrir la imagen, descomprímela en un qcow2 plano
primero:
qemu-img convert -O qcow2 linux-vm-upload.qcow2 linux-vm.qcow2
4 núcleos, 4GB de RAM, pantalla GUI. Los inicios de sesión son:
root, contraseña password,user, contraseña password,spyuser, contraseña password (¡no inicies sesión como spyuser!)La VM proporcionada ya ejecuta un kernel vulnerable, pre-parcheado
(6.12.43+deb13-amd64), por lo que no se necesita degradación para usarla. Necesitarás QEMU
para ejecutar esta imagen (que tiene una GUI). El artefacto se encuentra en
/home/user/Linux-File-Notification-Attacks dentro de la VM.
Un comando configura todo desde cero en la VM: (i) una cuenta spyuser sin privilegios
(no-sudo), (ii) su propia copia del directorio de artefactos (una cuenta sin privilegios separada
no puede acceder al directorio home de user de otra manera),
(iii) y cada script hecho ejecutable en ambas copias.
# In the VM, Run As: [user]
sudo bash ~/Linux-File-Notification-Attacks/setup_attacks.sh
Cada ataque a continuación se ejecuta como spyuser (su - spyuser, contraseña password),
excepto auth-ui-redress, que se ejecuta como user (explicado a continuación).
Demuestra que las notificaciones de operaciones de archivos se entregan en archivos que no pueden leerse directamente, siempre que su directorio padre sea legible.
# 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
Déjalo ejecutándose, luego genera una línea de registro desde otra terminal como user:
# Run As: [user]
logger "hello"
Esta imagen de Debian 13 no tiene rsyslog, por lo que no hay un archivo /var/log/syslog como
se muestra en el artículo. El script recurre a vigilar
/var/log/journal/<machine-id>/ en su lugar. Esta es la misma idea, ya que los
archivos .journal que se monitorean son propiedad de root (usuario) y
systemd-journal (grupo), ninguno de los cuales es spyuser.
Mide el retraso de notificación de 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 abre una vigilancia de inotify en un archivo de prueba y marca con tiempo cada IN_ACCESS
que recibe. accessor lee ese mismo archivo 1000 veces con un retraso aleatorio de 5-10ms entre lecturas, marcando con tiempo cada lectura él mismo. stats.py compara las dos
grabaciones de marcas de tiempo e imprime el retraso promedio/desviación estándar/mínimo entre la lectura
que ocurre y la notificación que llega, es decir, la resolución temporal de
inotify.
No es el ataque completo del artículo, sino solo la primitiva de prueba de concepto de filtrado
sobre la que se construye el ataque: por cada tecla presionada en cualquier lugar del
sistema, imprime una notificación con marca de tiempo, sin leer nunca /dev/input
directamente.