Написать пост

Найденная в systemd уязвимость приводит к отказу в обслуживании Linux

Аватар Вячеслав Шарунов

Уязвимость systemd способна привести к отказу в обслуживании Linux. Благодаря своевременному выходу патчей распространение атаки удалось остановить.

Дыра в DNS-преобразователе (DNS Resolver) может привести к атаке типа «отказ в обслуживании» (denial-of-service) на уязвимые системы.

Уязвимость DNS Resolver

По заявлениям исследователей, нашедших брешь, она может быть использована следующим образом. Уязвимую систему заставляют отправлять DNS-запрос на DNS-сервер злоумышленников. Он в свою очередь возвращает специально обработанный запрос, заставляющий systemd запустить бесконечный цикл, который и загрузит ЦП системы до 100%. Найденная уязвимость получила идентификатор CVE-2017-15908.

Существует множество способов заставить машину пользователя отправить запрос на контролируемый DNS-сервер. Самый лёгкий из них — заманить пользователя на скомпрометированную веб-страницу. Этого можно добиться при помощи зловреда или социальной инженерии.

Ключ к безопасности

По словам Уильяма Гамазо Санчеза, исследователя уязвимостей компьютерных систем, самым эффективным способом борьбы с найденной брешью является, как ни странно, патч systemd.

Мы обнаружили эту уязвимость ещё в июле 2017 года и сразу же сообщили соответствующим вендорам через программу Zero Day Initiative (ZDI). Их своевременная реакция на нашу находку смогла предотвратить широкое распространение атаки. Многие дистрибутивы Linux получили патчи, в том числе и Ubuntu.

Анализ уязвимости

За время существования DNS в неё было добавлено много функций, повышающих безопасность. Одним из новых типов записей ресурсов, добавленных в DNS Security Extensions (DNSSEC), как определено в документе RFC 4034, был NSEC (Next Secure).

Уязвимость заключалась в обработке битов, представляющих псевдотипы в битовой карте NSEC. На рисунке ниже изображены раздел кода и стековый кадр, где выделенная строка continue показывает, где именно while переходит в бесконечный цикл. Реализация dns_packet_read_type_window() находится в файле resolve-dns-packet.c.

Найденная в systemd уязвимость приводит к отказу в обслуживании Linux 1

Обратите внимание, что указанная выше функция dns_packet_read_type_window() вызывается из dns_packet_read_rr(), когда типом записи является DNS_TYPE_NSEC. На приведённом ниже рисунке показан раздел кода dns_packet_read_rr() в файле resolved-dns-packet.c.

Найденная в systemd уязвимость приводит к отказу в обслуживании Linux 2

Proof-of-concept

Чтобы протестировать эту уязвимость, был создан специальный DNS-сервер, отправляющий злонамеренно сформированные ответы. Каждый из них содержал запись NSEC, предназначенную для запуска уязвимости:

Найденная в systemd уязвимость приводит к отказу в обслуживании Linux 3

Как только система, использующая systemd для преобразования DNS, получит этот специально созданный пакет, загрузка ЦП достигнет 100%:

Найденная в systemd уязвимость приводит к отказу в обслуживании Linux 4

Поскольку некоторые крупные дистрибутивы выпустили исправления, пользователям рекомендуется установить их как можно скорее. Системные администраторы также могут заблокировать потенциально вредоносные пакеты вручную. Стоит также проверить ответы входящих DNS на наличие специфических записей, указанных в разделе 4 документа RFC 4034.

Следите за новыми постами
Следите за новыми постами по любимым темам
1К открытий1К показов