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

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

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

1296

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

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

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

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

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

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

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

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

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

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

Proof-of-concept

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

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

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

Следите за новыми постами по любимым темам

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

Linux
Безопасность
1296
Что думаете?
0 комментариев
Сначала интересные
Курсы
набор еще идетонлайн7590₽
набор еще идетонлайнбесплатно
набор еще идетонлайнбесплатно
набор еще идетонлайн2790₽
Все курсы