Атаки по времени на файловые системы

Атаки по времени на файловые системы

Время – один из ключевых факторов в работе пентестера. С одной стороны, недостаток времени может мешать выполнению качественного анализа, когда вы находитесь в режиме дедлайна, а с другой – помогать в аудите безопасности. Как? – спросите вы. В качестве примера возьмем технику извлечения данных из базы данных, которая основана на измерении времени ответа сервера, где используются слепые SQL-инъекции.

Время – один из ключевых факторов в работе пентестера. С одной стороны, недостаток времени может мешать выполнению качественного анализа, когда вы находитесь в режиме дедлайна, а с другой – помогать в аудите безопасности. Как? – спросите вы. В качестве примера возьмем технику извлечения данных из базы данных, которая основана на измерении времени ответа сервера, где используются слепые SQL-инъекции. Однако эта техника может применяться не только к базами данных, но и к файловым системам. Практически каждый пентест начинается со сбора информации о системе, где наиболее вероятно применяется поиск файлов по словарю или просто атака по словарю. Но почему же не упростить этот шаг? Чтобы конкретизировать эту мысль, в этой статье мы приведем исследование этого вопроса, которое недавно было представлено на конференции ZeroNights 2013.

Вводное слово

Термин «атака по времени» происходит из криптографии, когда речь заходит об атаке по сторонним каналам на криптосистему, реализуя которую злоумышленник пытается скомпрометировать систему посредством анализа времени, требуемого для выполнения криптографического алгоритма. Однако сам криптографический алгоритм – не единственная цель при осуществлении атаки по времени, которая также может иметь более широкую область применения. Только недавно, в июле 2013 года, Пол Стоун (Paul Stone) из компании Context IS наглядно представил, как атаку по времени можно реализовать в отношении браузеров. В работе Пола был продемонстрирован обход SOP (Same Origin Policy) в современных браузерах путем вычисления задержек во время обработки пикселов на страницах. Как правило, манипуляции с пикселами недоступны через обычные методы из-за ограничений принципа одинакового источника (Same Origin Policy) в случае с кросс-доменами.

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

Исходная информация и область исследования

При анализе веб-приложения или безопасности сетевого сервиса методом черного ящика, на начальном этапе мы собирали информацию о целевой системе. Информация о доступных файлах, директориях и обработчиках приложения (в случае, если дело касается техник перезаписи URL и любых других техниках относительно user-friendly URL’ов), в основном, получается при помощи атаки по словарю, которая, например, может быть выполнена при помощи утилит наподобие OWASP DirBuster.

Наша цель – усовершенствовать метод поиска файлов веб-приложений, используя атаки по времени. В идеале, мы хотим заменить классический перебор имен директорий (по сути, метод прямой атаки по словарю) на метод, похожий на поиск файлов по части их имени. В самом простейшем случае метод касается файловых систем. В случае с серверами приложений, мы будем использовать атаки по времени против механизмов перезаписи и других методов выбора какого-то действия для конкретного URL.

На это исследование нас сподвигли практические наблюдения времени ответа TFTP-сервера (время между отсылкой и получением UDP-дейтаграммы) при запросе различных имен файлов во время аудита безопасности. Используя статистику при разрешении соответствующих ошибок, нам удалось вычислить возможные встроенные файловые префиксы (первые 3-5 байта файлового имени на сервере) посредством атаки по словарю. Затем мы продолжили атаку, пытаясь найти оставшихся частей имени файла, посредством поиска префиксов, которые создают аномальные времена ответа сервера.

Основы атаки по времени

Прежде, чем двинуться дальше, углубимся немного в теорию. Возьмем абстрактную функцию A, которая оперирует пользовательскими данными (UserData) и определенными секретными данными (PrivateData). Эта функция выполняет некоторые операции с PrivateData на основе UserData без полного отображения на выходе полных секретных данных. Для простоты предположим, что выходная информация у функции отсутствует вообще.

Рисунок 1: Суть алгоритма атаки по времени

Перевод с Рисунка 1: время выполнения функции Function зависит от UserData и PrivateData. На основе времени выполнения функции и UserData можно определить PrivateData.

Утверждается, что функция A() уязвима к атаке по времени, если результат выполнения функции A() зависит от UserData так, что время выполнения функции может быть использовано для получения некоторой информации о PrivateData. Классическая атака по времени на криптосистемы представляет собой извлечение секретного ключа (PrivateData) при помощи времени, которое требуется для дешифровки соответствующих шифротекстов (UserData).

Атака по времени на файловую систему

Рисунок 2: Суть алгоритма атаки по времени на файловую систему

Перевод с Рисунка 2: Время поиска зависит от двух факторов: поисковой строки и массива данных, по которому проводится поиск. Концепция атаки заключается в нахождении данных по временам, затрачиваемым на поиск посредством различных поисковых строк.

Когда дело касается файловых систем, наиболее целесообразно выбрать такую модель, где функция, уязвимая к атаке по времени, ищет файлы по имени. Для UNIX-систем это означало бы проверку времени выполнения системного вызова STAT(). Имейте в виду: как только у нас есть права на доступ к директории, мы также можем проверить права доступа к файлу при помощи данных, полученных при вызове того же самого системного вызова STAT(). Соответственно, права на доступ к файлу не влияют на атаку по времени.

Естественно, способы реализации атаки по времени не ограничиваются лишь проверкой времени выполнения вызова STAT(). Существуют и другие варианты, однако в нашем случае подобный подход представляется наиболее общим и практически применимым к нашему исследованию.

Алгоритм поиска файлов внутри директории

Во время нашего исследования мы анализировали поисковые алгоритмы следующих файловых систем: EXT2, EXT3, EXT4, UFS2, NFS, FAT, и NTFS (эти файловые системы были выбраны на основе тенденций их использования в веб-серверах). Так как файловые системы будут непосредственно влиять на время ответа, их алгоритмы индексирования директорий можно разделить на две категории: неоптимизированные (списки) и оптимизированные (деревья и хеш-таблицы):

📎📎📎📎📎📎📎📎📎📎