Представлена атака по восстановлению содержимого страничного кэша
Группа исследователей безопасности, из которых несколько участвовали в выявлении первых уязвимостей Meltdown и Spectre, разработали новый вид атаки по сторонним каналам, позволяющей определить содержимое страничного кэша (page cache), в котором содержится информация, полученная в результате обращения операционной системы к диску, SSD-накопителю и другим блочным устройствам. В отличие от атак Spectre, новая уязвимость не вызвана аппаратными проблемами, а касается только программных реализаций страничного кэша и проявляется в Linux (CVE-2019-5489), Windows и вероятно во многих других операционных системах. Для ядра Linux исправление уже доступно в виде патча. В Windows 10 проблема устранена в тестовой сборке (Insider Preview Build) 18305.
Через манипуляции с системными вызовами mincore (Linux) и QueryWorkingSetEx (Windows), позволяющими определить наличие страницы памяти в системном страничном кэше, локальный непривилегированный атакующий может отслеживать некоторые обращения других процессов к памяти. Атака позволяет отслеживать доступ на уровне 4 килобайтовых блоков с временным разрешением в 2 микросекунды в Linux (6.7 измерений в секунду) и 446 наносекунд в Windows (223 измерений в секунду).
В страничном кэше оседают достаточно разнообразные данные, в том числе отрывки исполняемых файлов, разделяемые библиотеки, загружаемые с диска данные, отраженные в память файлы и другая информация, которая обычно хранится на диске и используется операционной системой и приложениями. Атака основана на том, что все процессы используют общий системный страничный кэш и наличие или отсутствие информации в этом кэше можно определить через изменение задержки при чтении данных с накопителя или через обращение к вышеупомянутым системным вызовам.
Страницы в кэше могут быть отражены в области виртуальной памяти, одновременно используемые несколькими процессами (например, в физической памяти может присутствовать только одна копия разделяемой библиотеки, которая отражена в виртуальную память разных приложений). В процессе вытеснения информации из страничного кэша и заполнении его при загрузке типовых данных с диска, можно анализировать состояние аналогичных страниц в виртуальной памяти других приложений. Системные вызовы mincore и QueryWorkingSetEx существенно упрощают проведение атаки, так как сразу позволяют определить какие страницы памяти из заданного диапазона адресов присутствуют в страничном кэше.
Среди продемонстрированных исследователями практических применений атаки на локальную систему упоминается создание канала передачи данных из полностью изолированных sandbox-окружений, воссоздание выводимых на экран элементов интерфейса (например, диалогов аутентификации), определение задержек при нажатии клавиш и восстановление автоматически генерируемых приложением phpMyFAQ временных паролей. Более того, предложен сценарий гипотетической удаленной атаки, позволяющей локально запущенному вредоносному процессу скрыто передать данные вовне через канал связи, организованный при помощи манипуляцией со страничным кэшем (принимающая сторона определяет данные через измерение задержек при отдаче http-сервером Apache частей публично доступных файлов).