Съдържание

/file-notification-attacks/file-notification-attacks.png

Пълен курс по етично хакерство: от нула до експерт

Хаквайте като „black hat“ хакери. Тестване за проникване, Kali Linux, хакване на WiFi и уеб, както и хакерският начин на мислене зад всичко това.

95,7 процента от сайтовете, които сте отворили във Firefox, са се появили за друг профил на вашия Windows компютър, както и 32 процента от тези в Edge. Приложение за Android с никакви разрешения е видяло пристигането на вашите снимки в WhatsApp. Windows прави това от 2000 г. насам.

Изследователи от Технологичния университет в Грац, Австрия, анализираха това подробно в четири операционни системи: Windows, Linux, Android и macOS. Windows, Linux и macOS са изградили своя собствена версия, Android се базира на тази от Linux, и всяка една от тях пропуска информация. Техният научен доклад ще бъде представен на ACM CCS, една от големите конференции за сигурност, в Хаага през ноември, а кодът за възпроизвеждането му вече е публичен.

Функцията зад това е нормална част от всяка от тези системи. Когато даден файл се промени, операционната система може веднага да информира дадена програма, така че тази програма да не трябва да извършва постоянни проверки. Текстов редактор я използва, за да забележи, че файлът е бил променен от нещо друго. Файлов мениджър я използва, за да опресни папката, която разглеждате. Софтуер за архивиране и синхронизация я използва, за да знае какво да качи, а антивирусните скенери я използват, за да знаят какво да сканират. В Windows тази функция се нарича ReadDirectoryChangesW, в Linux е inotify, в Android — FileObserver, а в macOS — FSEvents.

За да наблюдава папка, дадена програма се нуждае от разрешение за четене на тази папка. Това е проверката. В Windows и Linux изследователите откриха, че проверката спира до папката. След като имате право да наблюдавате папка, получавате информация за файловете вътре в нея, включително файлове, които нямате право да отваряте.

Наблюдаващият модул получава името на всеки файл, неговия път и точния момент, в който се е случило нещо с него, без съдържанието. Това се оказа напълно достатъчно.

В Windows изследователите създадоха обикновен профил без администраторски права на машина с Windows 11 24H2 и насочиха наблюдаващия модул към C:\, кореновата директория на диска. От този момент нататък профилът получаваше пълния път на всеки файл, който беше създаден, променен или преименуван където и да е в системата. Това включва файловете в домашната папка на друг потребител, които този профил не може да отвори.

Браузърите съхраняват данни за уебсайтовете, които посещавате, във вашата собствена папка AppData, а Firefox именува тези папки според уебсайта. Посетете target.com и папка като тази бива засегната:

Наблюдаващият профил прочита името на уебсайта директно от пътя, докато все още сте на страницата. Сред първите 1000 най-популярни уебсайта, Firefox създаде такава папка за 95,7 процента от тях. Изследователите прихванаха посещенията с F1 резултат от 97,8 процента — показател, който отчита както пропуснатите посещения, така и грешно отчетените. Edge прави такива папки само за сайтове, които използват един конкретен вид хранилище на браузъра, наречен IndexedDB. Той създаде такава папка за 32 процента от сайтовете, което даде F1 резултат от 48,5 процента. И при двата браузъра нямаше нито един фалшиво положителен резултат: сайт, който се появяваше в списъка, действително е бил посетен.

Самият Windows също пропуска данни. Всеки път, когато дадена програма стартира, Windows актуализира файл в папката Prefetch, който носи името на програмата, така че стартирането на SSH или Edge се появява по име. И когато Windows Defender изпълнява първото си пълно сканиране, той засяга файловете на диска един по един. Всеки файл, който засегне, се появява за наблюдаващия профил с пълния си път, включително документите и видеоклиповете на други хора.

Zoom разкрива вашите срещи по същия начин. Престоят в чакалнята постоянно актуализира един от неговите файлове с бази данни, присъединяването към срещата на живо създава отделна база данни за тази сесия, а напускането я премахва отново. При измерванията на изследователите наблюдаващият модул никога не е използвал повече от 0,21 процента от процесора, което е твърде малко, за да бъде забелязано.

За Android изследователите използваха Google Pixel 9a и Samsung Galaxy A54, и двата с Android 16, както и приложение, което не изискваше никакви разрешения. В Android се предполага приложенията да бъдат изолирани едно от друго. Приложение, което разглежда споделеното хранилище — частта от телефона, където се намират папки като Downloads, вижда само файловете, които самото то е създало, а частната папка на всяко приложение е затворена за останалите.

FileObserver заобикаля това. Поставете наблюдение върху споделеното хранилище и приложението получава информация за файлове, които няма право да листва, с техните точни имена и пътища. Това включва частната медийна папка на WhatsApp. WhatsApp автоматично изтегля получените снимки, видеоклипове и документи там, така че наблюдаващото приложение научава момента, в който всеки от тях пристига. Изпратените медийни файлове отиват в отделна папка Sent, така че приложението вижда и в каква посока е отишъл даден файл. Имената на файловете разкриват още: екранната снимка обикновено носи името на приложението, в което е направена, и часа на заснемане. Когато тези файлове бъдат изтрити, приложението вижда и това, а изследователите посочват, че това може да разкрие опит за скриване на разговор.

Същият трик показва кога изтегляте файл, правите снимка или създавате екранна снимка. Android няма решение за това.

Linux изпуска най-много данни. От трите десктоп системи тя е единствената, която надеждно изпраща известие, когато даден файл просто се прочете.

Заобикалянето за нечетливи файлове работи и тук. Нормален потребител не може да чете /var/log/syslog, но папката /var/log е четлива, така че наблюдението върху тази папка съобщава за всяка промяна в дневника. Насочете това към /dev/input, папката, в която вашата клавиатура съществува като файл, и всяко натискане на клавиш произвежда две известия: едно, когато клавишът се натисне надолу, и едно, когато се върне нагоре.

Наблюдаващият модул научава само момента на всяко натискане на клавиш. Времето между две натискания на клавиши зависи от това как пръстите ви се движат по клавиатурата, а това зависи от това какво въвеждате. През 2001 г. изследователи от Бъркли използваха тези времеви интервали, за да познаят SSH пароли 50 пъти по-бързо, а KeyTAR, публикуван на IEEE S&P тази година, възстановява въведения текст от тях. Шест души са въвели текст, който никога преди не са виждали, и изследователите са прихванали натисканията на клавишите им с F1 резултати между 93,1 и 100 процента. Две трети от известията са пристигнали в рамките на една милисекунда от натискането на клавиша, а често известието е пристигало преди програмата, която записва клавиатурата, изобщо да го е регистрирала.

Когато въвеждате текст в SSH сесия на сървър, вашият терминал на този сървър също е файл, намиращ се в /dev/pts. Друг потребител на този сървър е наблюдавал постъпването на 402 натискания на клавиши със скорост 7,21 в секунда и е прихванал всички 402, без нито едно фалшиво. Парола, въведена при подкана за sudo, остава незасегната, тъй като тази подкана не показва текст, а без текст на екрана няма известие. В Linux Mint обаче по подразбиране се показва звездичка за всеки символ, а всяка звездичка представлява текст на екрана.

При KDE Plasma 6 с Wayland — графичната система, проектирана да предотвратява четенето на входни данни между отделните програми — изследователите са създали фалшив прозорец за парола. Тяхната програма е наблюдавала помощния файл, който се стартира, когато системата поиска вашата парола. Веднага след като този файл е бил прочетен, програмата е изчертала свой собствен прозорец за парола върху автентичния. 374 милисекунди след началото на заявката за парола, фалшивият прозорец вече е бил на екрана. Когато изследователите са докладвали за това, разработчиците са отговорили, че тяхната защита срещу изскачащи отпред прозорци никога не е била предназначена като мярка за сигурност.

Уебсайтовете също изтичат в Linux чрез шрифтовете. Firefox отваря различни шрифтови файлове за различни сайтове, като само target.com е докоснал 657 от тях при средно посещение. При тестване спрямо топ 100 уебсайта, смесени с 750 други сайта за затруднение, изследователите са идентифицирали сайта с F1 оценка от 87,9 процента. Това е работило и при snap версиите на Firefox и Chrome.

macOS разкрива най-малко информация. Наблюдаващият там вижда само публично достъпни файлове (world-readable), т.е. тези, които други профили имат право да отварят. Изследователите не са открили начин за достъп до личните папки, но добавянето на Bluetooth устройства, промяната на аудио настройките, включването на мрежов кабел и инсталирането или премахването на приложения все пак са се появявали.

За да се осъществи това, атакуващият трябва вече да изпълнява код на вашата машина: втори профил на споделенพีซี, компрометирана услуга във фонов режим, заразен пакет или, при телефон — приложение, което сте инсталирали. В Android последното е най-лесната част, тъй като всяко приложение се изпълнява като отделен потребител и този трик не изисква никакви разрешения.

Отговорът на Microsoft към изследователите е бил, че поведението показва само имена на файлове и пътища в профилната папка на друг потребител и не разкрива съдържанието на файловете. Пред SecurityWeek компанията е заявила, че атакуващият вече би трябвало да изпълнява код под отделен профил и че това не представлява уязвимост в сигурността.

Имената на файлове и пътищата в профилната папка на друг потребител са точно това, което е издало уебсайтовете. И компанията се е сблъсквала с този проблем и преди.

През февруари 2007 г. той е публикуван като CVE-2007-0843. Описанието гласи, че функцията на Windows не проверява разрешенията за файловете в дадена папка, така че локален потребител може да наблюдава файлове, които няма право да вижда, и да научи техните имена и времена на достъп. Засегнати са Windows 2000, XP, Server 2003 и Vista. Това е същото поведение, описано преди повече от 19 години.

Човекът, който е съобщил за него тогава, е Владимир Дубровин, известен като 3APA3A. Той го е нарекъл несигурен дизайн (insecure design), пуснал е малък инструмент, наречен SpyDir, и е написал, че той работи от локалната мрежа през споделена папка, давайки за пример фирмен споделен ресурс.

През април 2025 г. проблемът се завърна, докладван от изследователя Себастиан Юно (Sébastien Huneault). Този път той получи два CVE номера: CVE-2025-21197 за NTFS и CVE-2025-27738 за ReFS (две файлови системи на Windows), и двете с оценка 6,5, както и коригираща мярка: стойност в регистъра, наречена EnforceDirectoryChangeNotificationPermissionCheck. Тази корекция се доставя изключена. Страницата за поддръжка посочва, че тя е деактивирана по подразбиране, за да се предотвратят неочаквани рискове за сигурността или смущения в работата на приложенията. В своя отговор относно новото изследване компанията посочи същата тази настройка. Собствената оценка на компанията и за двете уязвимости от 2025 г. ги определя като атака, която работи по мрежата — по същия начин, по който бе описано в доклада от 2007 г.

Няколко месеца по-късно изследователите изпратиха своя доклад и получиха отговора, че това е „по дизайн“. Те са научили за уязвимостите от април едва след това и пишат, че докато настройката остава изключена (което е състоянието по подразбиране), техните атаки срещу Windows работят директно без допълнителна настройка.

През август, на DEF CON, наградите Pwnie Awards номинираха реакцията на компанията към това изследване в категорията Най-слаб отговор от вендор (Lamest Vendor Response). Другите две номинации в тази категория също бяха за Microsoft. Наградата отиде при загатнатите от нея правни заплахи срещу Nightmare Eclipse — изследователя, за когото писах по-рано този месец.

Докладът е изготвен от Судхийндра Рагхав Нила (Sudheendra Raghav Neela) и шест негови колеги. Един от тях е Даниел Грус (Daniel Gruss), който беше в екипа, открил Meltdown.

Linux е единствената система, която промени нещо. След доклада разработчиците на ядрото спряха изпращането на известия за четене и запис за устройства като /dev/input. Тази корекция за сигурност е CVE-2025-68788, включена в ядрата 5.10.248, 5.15.198, 6.1.160, 6.6.120, 6.12.64, 6.18.3 и 6.19. Тя премахва атаката за прихващане на натиснатите клавиши през /dev/input. Изследователите отбелязват, че това покрива само файловете на устройствата, а останалата част от файловата система продължава да изтича по същия начин, както преди.

В Windows включете корекцията, която вече беше доставена през април 2025 г. От командния промпт, отворен като администратор:

  • → Тя беше оставена изключена, за да се избегнат проблеми с приложенията, така че следете софтуера си след това
  • → На споделен компютър отделният профил не скрива сърфирането ви във Firefox от другите профили, докато тази настройка е изключена
  • → Обновете ядрото си. Дистрибуциите използват свои собствени номера на версиите (Ubuntu 24.04 получи корекцията в 6.8.0-110, а 22.04 в 5.15.0-173), така че тестът по-долу ще ви каже повече от uname -r
  • → Тествайте го сами с inotifywait -m -e access,modify /dev/input от пакета inotify-tools, след което въведете текст. Липсата на изходен резултат означава, че корекцията е налична
  • → В KDE Plasma щракнете с десния бутон върху лентата със заглавието на прозореца за парола, изберете „Още действия“, „Конфигуриране на специални настройки на приложението“, добавете „Задържане над други прозорци“ и го настройте на „Принудително“

В Android няма налична корекция за сигурност, така че самото приложение е единственото нещо, което контролирате:

  • → Премахнете приложенията, които вече не използвате
  • → Приложение, което не иска никакви разрешения, все пак може да наблюдава вашето хранилище за съхранение на данни, така че липсата на подкана за разрешение не прави приложението безвредно

Инсталирайте inotify-tools на вашата собствена Linux машина, наблюдавайте /dev/input и въведете няколко букви: появяват ли се вашите натискания на клавиши? Моят пълен курс по етично хакерство от нула до експерт ви превежда през това стъпка по стъпка: разузнаване, сканиране, експлоатация и анализ на трафика, практически, от първия ви ден без опит с Linux или хакерство.

→ Присъединете се към моя пълен курс по етично хакерство

Хакерството не е хоби, а начин на живот.

File Notification Attacks, TU Graz | Microsoft: Access check enhancements for file paths | 3APA3A on Full Disclosure, 2007