
Исследовательские материалы по атакам через побочный канал уведомлений о файлах в Linux, Windows и macOS, демонстрирующие утечку через inotify/FSEvents, тайминг нажатий клавиш и фингерпринтинг веб-сайтов.
Этот репозиторий содержит (всё ещё на рецензии!) артефакты для статьи "File Notification Attacks: Templating and Exploiting Side-Channel Leakage from the File-Notification Systems on Linux, Windows, and macOS", принятой на CCS '26.
Посетите сайт с демонстрациями: https://inoti.fyi/
Читайте статью: https://snee.la/pdf/pubs/file-notification-attacks.pdf или http://inoti.fyi/pubs/file-notification-attacks.pdf
В рамках оценки артефактов на CCS'26 (всё ещё продолжается!) мы предоставили виртуальную машину Debian 13 + KDE Plasma 6 с предварительно пропатченным ядром. Эта ВМ не использовалась для получения результатов оценки из статьи и не предназначена для воспроизведения их точной величины. Этот репозиторий может быть обновлён с учётом рецензий и отзывов наших оценщиков артефактов. Мы сделаем ВМ общедоступной после завершения оценки артефактов.
Мы использовали Claude (Opus 4.8) для обёртывания нашего кода в достаточно хорошо документированные и высокопроизводительные артефакты (например, версия для Windows была немного медленной). Однако код, скрипты, makefile, которые он сгенерировал, были основаны на
Приведённые ниже инструкции по тестированию кода для Linux относятся к запуску команд
в ВМ. Пожалуйста, вместо этого посмотрите на код в Linux/.
ВМ существует исключительно для удобства, чтобы монтирование каждой атаки не требовало настройки среды с нуля или понижения версии ядра. Базовый механизм, демонстрируемый в ВМ, идентичен описанному в статье, но обратите внимание, что мы не использовали ВМ для получения чисел, приведённых в статье. Абсолютные значения времени могут отличаться из-за виртуализированной среды и базового оборудования.
Результаты воспроизводятся внутри ВМ Debian 13 (linux-vm/), установленной с
официального live-ISO Debian с KDE Plasma 6 (Wayland) и ядром, которое предшествует
исправлению
fsnotify.
Установлены inotify-tools, заголовки разработки Qt6 и pkexec. Больше ничего не
обновляется, и ядро никогда не трогается после установки. Пожалуйста, НЕ запускайте
apt upgrade и не пытайтесь обновить ядро. Этот образ ВМ намеренно старый, не
обновлён и не имеет последних патчей безопасности. Этот образ ВМ предназначен только
для быстрой проверки и тестирования!
Код, атаки и демонстрации, находящиеся внутри ВМ, зеркально отражены в Linux/.
Примечание: В начале каждого блока команд мы указываем, от имени какого
пользователя запускать команды. Есть [host] — хост-машина, на которой запущена
ВМ, [user] — жертва атак в ВМ, и [spyuser], которого требуется настроить и который
будет атакующим в большинстве атак на Linux.
Образ диска поставляется как linux-vm-upload.qcow2, сжатый с помощью zstd.
Переименуйте его в linux-vm.qcow2 перед запуском run.sh (который ожидает именно
это имя файла):
# Run As: [host]
cd linux-vm/
mv linux-vm-upload.qcow2 linux-vm.qcow2
./run.sh
Для чтения qcow2, сжатого zstd, требуется qemu-img/qemu-system-x86_64 версии
5.2 или новее (2020+), проверьте с помощью qemu-img --version. Если вы застряли на
старом QEMU и он не может открыть образ, сначала распакуйте его в плоский qcow2:
qemu-img convert -O qcow2 linux-vm-upload.qcow2 linux-vm.qcow2
4 ядра, 4 ГБ ОЗУ, графический дисплей. Учётные данные для входа:
root, пароль password,user, пароль password,spyuser, пароль password (не входите как spyuser!)Предоставленная ВМ уже работает на уязвимом, предварительно пропатченном ядре
(6.12.43+deb13-amd64), поэтому для её использования понижение версии не требуется.
Для запуска этого образа (который имеет графический интерфейс) вам понадобится QEMU.
Артефакт находится по адресу /home/user/Linux-File-Notification-Attacks внутри ВМ.
Одна команда настраивает всё с нуля в ВМ: (i) непривилегированную учётную запись
spyuser (без sudo), (ii) её собственную копию каталога артефактов (иначе отдельная
непривилегированная учётная запись не сможет войти в домашний каталог user),
(iii) и все скрипты, сделанные исполняемыми в обеих копиях.
# In the VM, Run As: [user]
sudo bash ~/Linux-File-Notification-Attacks/setup_attacks.sh
Каждая атака ниже запускается от имени spyuser (su - spyuser, пароль password),
кроме auth-ui-redress, которая запускается от имени user (объяснено ниже).
Доказывает, что уведомления о файловых операциях доставляются для файлов, которые нельзя прочитать напрямую, если их родительский каталог доступен для чтения.
# 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
Оставьте его работающим, затем сгенерируйте строку лога из другого терминала от имени
user:
# Run As: [user]
logger "hello"
В этом образе Debian 13 нет rsyslog, поэтому нет файла /var/log/syslog, как
показано в статье. Вместо этого скрипт переключается на наблюдение за
/var/log/journal/<machine-id>/. Это та же идея, поскольку отслеживаемые файлы
.journal принадлежат root (пользователь) и systemd-journal (группа), ни один из
которых не является spyuser.
Измеряет задержку уведомлений 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 открывает наблюдение inotify за тестовым файлом и ставит метку времени для
каждого получаемого IN_ACCESS. accessor читает тот же файл 1000 раз со случайной
задержкой 5-10 мс между чтениями, самостоятельно ставя метку времени для каждого
чтения. stats.py сравнивает две записи меток времени и выводит среднюю/стандартное
отклонение/минимальную задержку между происходящим чтением и приходом уведомления,
т.е. временное разрешение inotify.
Не полная атака из статьи, а лишь примитив фильтрации — доказательство концепции, на
котором построена атака: для каждой клавиши, нажатой где угодно в системе, выводится
одно уведомление с меткой времени, без прямого чтения /dev/input.