Атаки через уведомления о файловых изменениях: что можно узнать без доступа к файлам

Переводчик Google

Системы уведомлений о файловых изменениях сообщают приложениям о том, что с файлами происходит какое-либо действие: они открываются, закрываются, изменяются или удаляются. [/SIZE]При наличии только права на чтение файла или каталога атакующий может отслеживать такие уведомления и восстанавливать действия пользователя. Мы обнаружили схожие проблемы в Linux, Android, Windows и macOS. Однако на каждой из платформ есть по одной особенно серьёзной и специфичной проблеме.
  1. Linux. Наблюдение за доступным для чтения каталогом позволяет получать уведомления обо всех событиях с файлами внутри него — даже если непосредственно прочитать эти файлы атакующий не может. Самый серьёзный пример связан с /dev/input и рассмотрен ниже в разделе «Межсобытийные интервалы нажатий клавиш».
  2. Android. FileObserver обходит предоставляемое FUSE представление хранилища, специфичное для каждого приложения, позволяя непривилегированному приложению наблюдать за приватным каталогом другого приложения. Мы продемонстрировали атаку на WhatsApp: она позволяет точно определить, когда пользователю поступают или удаляются фотографии, видео и файлы. Подробности — в разделе «Раскрытие содержимого приватной коммуникации».
  3. Windows. Наблюдение за корневым каталогом (C:\) позволяет получать полный путь к каждому файлу, к которому обращается система, независимо от разрешений и даже если файл принадлежит другому пользователю. Microsoft считает это ✨ недокументированной возможностью ✨. Наиболее серьёзный найденный нами сценарий — утечка информации о том, какие сайты другой пользователь посещает в режиме реального времени. Мы показываем его в разделе «Прямая утечка посещаемых сайтов». Наши выводы также стали причиной номинации Microsoft в категории самого неудачного ответа поставщика на премии Pwnies Award 2026.
Полный текст исследования



В Linux подсистема уведомлений о файловых изменениях называется inotify. Она позволяет приложениям, работающим от имени разных пользователей, устанавливать наблюдение за файлами или каталогами начиная с версии ядра 2.6.13, выпущенной в 2005 году.

В Android эта подсистема представлена классом FileObserver, появившимся в 2008 году. Это Java-обёртка над inotify.

В Windows для этих целей существует Win32 API ReadDirectoryChangesW, доступный ещё со времён Windows 2000. С его помощью приложения, работающие от имени разных пользователей, могут устанавливать наблюдение за каталогами и получать уведомления об операциях с самим каталогом или расположенными в нём файлами. В .NET класс FileSystemWatcher использует именно ReadDirectoryChangesW.

В macOS существует API File System Events, позволяющий приложениям получать информацию об изменениях файлов в отслеживаемом каталоге. Этот API появился ещё в Mac OS X Leopard 10.5 в 2007 году.




Демонстрации​

Ниже мы рассмотрим четыре интересных сценария. Первые два относятся к Linux: определение межсобытийных интервалов между нажатиями клавиш и подмена интерфейса аутентификации. Третий сценарий демонстрирует атаку на Android, четвёртый — прямую утечку посещаемых сайтов в Windows.

Главное, что необходимо помнить применительно ко всем системам: содержимое этих файлов нам неизвестно. Мы получаем только уведомления о событиях с файлами, однако показываем, что даже этого достаточно для утечки информации о действиях пользователя, системы и приложений. В некоторых случаях мы также можем узнать о существовании файлов, о которых традиционно не имели возможности даже получить информацию.



1. Linux: межсобытийные интервалы нажатий клавиш​

В Linux попытка установить наблюдение inotify непосредственно за файлом, на чтение которого нет разрешения, завершается ошибкой доступа. Однако если родительский каталог этого файла доступен для чтения, наблюдение можно установить за каталогом, после чего система будет сообщать обо всех событиях, происходящих с файлами внутри него.

Например, если пользователь не может прочитать /dev/input/event4, попытка установить inotify-наблюдение непосредственно за этим файлом завершится ошибкой доступа. Но если пользователь может читать /dev/input — то есть хотя бы просматривать находящиеся там файлы, — наблюдение за каталогом успешно устанавливается, и пользователь получает уведомления обо всех событиях с расположенными внутри файлами.

1790353867220.webp

Обход ограничений на чтение в Linux с помощью наблюдения за родительским каталогом файла.

На рассматриваемой системе event4 соответствует событию нажатия клавиши. Важно, что сама нажатая клавиша при этом не раскрывается: атакующий узнаёт только о факте нажатия.

На первый взгляд это может показаться не слишком серьёзной проблемой. Однако исследования атак по межсобытийным интервалам между нажатиями клавиш ведутся уже более двух десятилетий. Время между последовательными нажатиями может содержать достаточно информации для восстановления вводимого текста. Например, при наборе слова «WindRunner» пользователи обычно нажимают вторую N быстрее остальных символов, поскольку палец уже находится над этой клавишей.

Подобные атаки исследовали Song и соавторы (2001), Zhang и Wang (2009), Monaco (2018), а совсем недавно — Qiu и соавторы (2025).

Посмотреть вложение 1.mp4
Видео. Межпользовательское наблюдение, установленное на /dev/input, получает уведомление при каждом нажатии клавиши.

Та же особенность проявляется, когда на одном сервере одновременно работают два разных пользователя через SSH. Один пользователь может определить момент, когда другой нажимает клавишу, отслеживая /dev/pts.

* При этом ввод должен приводить к изменению текста в терминале. Например, ввод пароля sudo при отключённой функции pwfeedback уведомлений не создаёт.

Посмотреть вложение 2linux-remote-iki.mp4
Видео. На SSH-сервере межпользовательское наблюдение на /dev/pts получает уведомление при каждом нажатии клавиши.



2. Linux: подмена интерфейса аутентификации​

Мы продемонстрировали атаку с подменой интерфейса аутентификации на KDE Plasma под Wayland. В этом случае процесс, работающий от имени того же пользователя, наблюдает за обращениями к /usr/bin/pkexec из polkit, чтобы определить момент появления запроса аутентификации.

Как только настоящее окно ввода пароля собирается появиться, атакующий быстро рисует поверх него поддельное окно. Пользователь видит поддельный запрос и вводит свои учётные данные, полагая, что взаимодействует с системным диалогом.

Хотя Wayland специально разработан таким образом, чтобы препятствовать перехвату пользовательского ввода, механизм защиты от кражи фокуса в KDE, согласно команде безопасности KDE Plasma, изначально не предназначен для использования в качестве механизма безопасности.


Посмотреть вложение linux-auth-ui.mp4
Видео. Наблюдение за обращениями к /usr/bin/pkexec позволяет определить момент появления запроса пароля и вывести поверх настоящего окна поддельный диалог. Визуальное отличие между двумя окнами на видео сделано намеренно.

Поскольку SteamOS также использует KDE Plasma 6, мы отдельно проверили этот сценарий на нём. Ниже показан пример, в котором окно терминала KDE (Konsole) оказывается поверх окна аутентификации. Эксперимент проводился внутри виртуальной машины, поэтому на реальном устройстве поведение может отличаться.

1790353993757.webp

Подмена окна аутентификации на SteamOS: поверх запроса пароля можно вывести другое окно, поскольку система также использует KDE Plasma 6.



3. Android: раскрытие приватной коммуникации​

Как уже отмечалось выше:

На Android FileObserver обходит предоставляемое FUSE представление хранилища, специфичное для каждого приложения, позволяя непривилегированному приложению наблюдать за приватным каталогом другого приложения. Мы продемонстрировали этот сценарий на WhatsApp, определяя, когда именно поступают или удаляются фотографии, видео и файлы.
Каждому приложению Android предоставляется собственный приватный каталог внутри /sdcard/Android/. От других приложений он скрывается с помощью FUSE. Предполагается, что механизм FUSE должен полностью скрывать эти файлы от остальных приложений.

Обычно непривилегированное приложение, вызывающее File.listFiles() для приватного каталога WhatsApp с медиаданными, например /sdcard/Android/media/com.whatsapp/WhatsApp, получает от ядра пустые каталоги и не видит ни одного файла. FUSE фильтрует файлы WhatsApp ещё на этапе формирования списка, поэтому для другого приложения каталог выглядит пустым.

Однако наше исследование показывает, что эта защита не распространяется на уведомления о файловых событиях. Второе непривилегированное приложение, не имеющее никаких специальных разрешений, всё ещё может установить FileObserver на тот же каталог и получать уведомления обо всех событиях с файлами, включая их имена, хотя прочитать или даже получить список этих файлов оно не может.

Например, в WhatsApp входящие медиаданные сопровождаются событием MOVED_TO с именем файла. В наших логах файл IMG-20260401-WA0011.jpg появляется в каталоге WhatsApp Images/ примерно через 100 мс после того, как WhatsApp завершает его загрузку и расшифровку в .Shared/. Это хорошо видно в огромном выводе logcat нашего proof-of-concept-приложения.


1790356553625.webp

Наблюдение за входящим изображением WhatsApp: слева — WhatsApp, где наш коллега Роланд отправляет изображение; справа — непривилегированное приложение, фиксирующее появление нового изображения.

Отправленные медиаданные хранятся отдельно, поэтому атакующий может определить, было ли изображение отправлено или получено. Изображения помещаются в WhatsApp Images/Sent/, документы — в WhatsApp Documents/Sent/, а остальные полученные файлы остаются в родительском каталоге.

Даже одного имени файла достаточно, чтобы определить тип медиаданных — изображение, видео, голосовое сообщение или документ — и приблизительное время их создания. Таким образом, атакующий может построить подробную временную шкалу того, что и когда пользователь отправлял или получал.

Удаление файлов также генерирует соответствующие события, поэтому можно определить и момент удаления медиаданных сообщения.




4. Windows: прямая утечка посещаемых сайтов​

В Windows попытка установить наблюдение ReadDirectoryChangesW за каталогом, недоступным для чтения, приводит к ошибке доступа. Однако установка наблюдения за корневым каталогом, например C:\, обходит это ограничение. В результате Windows сообщает обо всех файловых событиях во всей системе вместе с именем файла, независимо от того, имеет ли наблюдающий процесс право читать соответствующий файл.

В рамках ответственного раскрытия информации Microsoft сообщила нам, что считает такое поведение недокументированной возможностью.

Один из наиболее наглядных примеров — каталоги, которые браузеры создают при посещении сайтов. Firefox создаёт и использует отдельный каталог для каждого сайта, применяющего local storage, IndexedDB или кэш. При этом имя сайта содержится непосредственно в имени каталога.

Таким образом, в Firefox атакующий может надёжно отслеживать посещение сайтов из первой тысячи наиболее популярных ресурсов. В наших экспериментах F1-мера такого детектора достигла 97,8%.


Посмотреть вложение windows-website.mp4
Видео. Межпользовательское наблюдение, установленное на C:\, получает события обо всех файлах, даже если наблюдающий пользователь не может их прочитать. На видео атакующий фильтрует события по строке «http», пока другой пользователь открывает arstechnica.com в Firefox.


Больше примеров
1790356651549.webp


Источник
 
Последнее редактирование:

Похожие темы

Назад
Сверху Снизу