Уязвимости ядра Linux, влияющие на компонент выборочного ACK
18 июня 2019 года в 19:00 по центральноевропейскому летнему времени были обнаружены 4 уязвимости, влияющие на стек TCP ядра Linux. Эти уязвимости связаны с целочисленным переполнением в ядре Linux, которое может привести к панике ядра, с одной стороны, и с алгоритмической сложностью реализации SACK, приводящей к исчерпанию ресурсов ЦП, с другой стороны. В обоих случаях влияние ограничивается доступностью сервиса.
Как исправить?
Есть 3 разных способа, вам нужно выбрать только ОДИН из них.
Является ли эксплойт общедоступным?
Насколько нам известно (18.06.2019), публичных эксплойтов пока нет, но это, вероятно, вопрос часов / дней.
Целочисленное переполнение 16-битного счетчика (tcp_skb_pcount) может произойти в ядре, которое приведет к ошибке BUG_ON (не совсем паника, но оставит вашу систему в нестабильном — потенциально непригодном для использования — состоянии).
Уменьшая значение параметра MSS до небольшого значения, злоумышленник может заставить вашу систему отправлять большое количество пакетов на вредоносный удаленный IP-адрес, находящийся под его контролем. Функция SACK позволит удаленному вредоносному IP подтверждать только несколько пакетов из всех отправленных.
Ваше ядро будет хранить список неподтвержденных пакетов, который увеличивает 16-разрядный счетчик (tcp_skb_pcount), который в какой-то момент переполняется и вызывает ошибку сравнения, приводящую к BUG_ON.
Используя тот же предыдущий сценарий, злоумышленник может фрагментировать буфер сокета (SKB) ядра Linux, подтвердив только несколько пакетов. Затем структура данных фрагментируется, что снижает производительность и может заставить ядро потреблять больше ЦП.
Уменьшая параметр MSS до минимально допустимого значения (48 байтов), злоумышленник может замедлить (заморозить) систему. Поскольку для пользовательских данных остается только 8 байтов, у сервера могут возникнуть трудности с ответом на запросы, отправленные злоумышленником, что может привести к ненормальному потреблению ресурсов процессора ядром.
Эти уязвимости упоминаются в общих уязвимостях и уязвимостях следующим образом:
Кто уязвим?
- Все Linux Oses с ядром 2.6.29 и выше (с марта 2009 г.)
- FreeBSD 12 использует стек RACK TCP. Обратите внимание, что, к счастью, это не стек по умолчанию, вы можете запустить следующую команду, чтобы указать, использует ли ваша система реализацию «RACK» или нет:
# sysctl net.inet.tcp.cc.algorithm - Если вы открываете службу TCP в Интернете (веб-службу, ssh, rcp,…), ваша система потенциально может быть затронута, поскольку для успешной атаки требуется только установить TCP-канал.
- Если ваша служба находится за брандмауэром или iptables / pfsense настроен так, чтобы открывать службу только для доверенных IP-адресов, вы в безопасности.
Как исправить?
Есть 3 разных способа, вам нужно выбрать только ОДИН из них.
1. Обновите ядро
Основные дистрибутивы Linux уже выпустили исправление:- Linux версии 4.4.182 или выше
- Linux версии 4.9.182 или выше
- Linux версии 4.14.127 или выше
- Linux версии 4.19.52 или выше
- Linux версии 5.1.11 или выше.
- Обратите внимание, что ветка Linux версии 3.16 еще не была объявлена исправляемой. (2019-06-18)
2. Снижение риска брандмауэра
Атака основана на небольшом варианте MSS, который очень необычен для стандартного сетевого взаимодействия. Следовательно, вы можете отбросить все пакеты с помощью небольшой опции MSS, чтобы предотвратить атаку вашей системы. Например, правила iptables могут выглядеть так:3. Отключить SACK (не рекомендуется)
Поскольку основной причиной уязвимости является проблема обработки SACK, вы также можете отключить SACK в своем ядре. Имейте в виду, что SACK — это оптимизация протокола TCP с целью повышения производительности подтверждения пакетов. Отключение этой функции может сильно повлиять на вашу производительность, и мы не рекомендуем это решение.Является ли эксплойт общедоступным?
Насколько нам известно (18.06.2019), публичных эксплойтов пока нет, но это, вероятно, вопрос часов / дней.
Краткие технические пояснения
CVE-2019-11477
Целочисленное переполнение 16-битного счетчика (tcp_skb_pcount) может произойти в ядре, которое приведет к ошибке BUG_ON (не совсем паника, но оставит вашу систему в нестабильном — потенциально непригодном для использования — состоянии).
Уменьшая значение параметра MSS до небольшого значения, злоумышленник может заставить вашу систему отправлять большое количество пакетов на вредоносный удаленный IP-адрес, находящийся под его контролем. Функция SACK позволит удаленному вредоносному IP подтверждать только несколько пакетов из всех отправленных.
Ваше ядро будет хранить список неподтвержденных пакетов, который увеличивает 16-разрядный счетчик (tcp_skb_pcount), который в какой-то момент переполняется и вызывает ошибку сравнения, приводящую к BUG_ON.
CVE-2019-11478
Используя тот же предыдущий сценарий, злоумышленник может фрагментировать буфер сокета (SKB) ядра Linux, подтвердив только несколько пакетов. Затем структура данных фрагментируется, что снижает производительность и может заставить ядро потреблять больше ЦП.
CVE-2019-11479
Уменьшая параметр MSS до минимально допустимого значения (48 байтов), злоумышленник может замедлить (заморозить) систему. Поскольку для пользовательских данных остается только 8 байтов, у сервера могут возникнуть трудности с ответом на запросы, отправленные злоумышленником, что может привести к ненормальному потреблению ресурсов процессора ядром.
Идентификационные номера
Эти уязвимости упоминаются в общих уязвимостях и уязвимостях следующим образом:
- CVE-2019-11477: SACK Panic (Linux> = 2.6.29) | CVSS: 8,2
- CVE-2019-11478: медленная работа SACK (Linux <4.15) или чрезмерное использование ресурсов (все версии Linux) | CVSS: 5,3
- CVE-2019-11479: чрезмерное потребление ресурсов из-за низких значений MSS (все версии Linux) | CVSS: 7,5
- CVE-2019-5599: Медлительность SACK (FreeBSD 12 с использованием стека TCP RACK) | Низкая степень серьезности
0 комментариев