Хабрахабр

Ситуация: закрыты две уязвимости в TCP-стеке ядра Linux

В начале месяца специалисты по ИБ обнаружили в ядре Linux две новые уязвимости: SegmentSmack и FragmentSmack. Обе они связаны с работой TCP-стека и позволяют злоумышленникам проводить DoS- и DDoS-атаки на систему жертвы. «Заплатки» для большинства дистрибутивов уже выпущены.

Под катом — подробнее о сути.


/ фото Eli Duke CC

Чем опасны эти уязвимости

«Корень зла» SegmentSmack — функции tcp_collapse_ofo_queue() и tcp_prune_ofo_queue(). Злоумышленник вызывает их с помощью специальным образом модифицированных TCP-сегментов, отправленных на сервер, персональный компьютер или мобильное устройство жертвы.

Таким образом хакер может «повесить» хост или устройство трафиком всего в 2 тыс. Это приводит к перерасходу ресурсов памяти и процессора. пакетов за секунду.

Команда top показывает полную загрузку четырех ядер CPU и задержки в обработке сетевых пакетов: На сайте RedHat приведен пример результата такой атаки.

$ top
%Cpu25 : 0.0 us, 0.0 sy, 0.0 ni, 1.4 id, 0.0 wa, 0.0 hi, 98.5 si, 0.0 st
%Cpu26 : 0.0 us, 0.0 sy, 0.0 ni, 1.4 id, 0.0 wa, 0.0 hi, 98.6 si, 0.0 st
%Cpu28 : 0.0 us, 0.3 sy, 0.0 ni, 0.7 id, 0.0 wa, 0.0 hi, 99.0 si, 0.0 st
%Cpu30 : 0.0 us, 0.0 sy, 0.0 ni, 1.4 id, 0.0 wa, 0.0 hi, 98.6 si, 0.0 st PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 141 root 20 0 0 0 0 R 97.3 0.0 1:16.33 ksoftirqd/26 151 root 20 0 0 0 0 R 97.3 0.0 1:16.68 ksoftirqd/28 136 root 20 0 0 0 0 R 97.0 0.0 0:39.09 ksoftirqd/25 161 root 20 0 0 0 0 R 97.0 0.0 1:16.48 ksoftirqd/30

Отметим, что для поддержания «DoS-состояния» требуется открытая TCP-сессия, поэтому атаку нельзя проводить с помощью IP-спуфинга.

Когда IP-датаграмма передается на канальный уровень, она фрагментируется, если не помещается в кадр. Атака FragmentSmack использует особенности фрагментации IP-датаграмм. Однако он узнает конечную длину датаграммы только тогда, когда получит последний фрагмент. Таким образом, она передается по кусочкам, а хост-получатель потом собирает её воедино.

Злоумышленники используют эту особенность и корректируют значения смещения фрагментов, чтобы процессор сервера постоянно занимался сборкой IPv4- и IPv6-пакетов.

Однако требует большей скорости отправки пакетов, чем SegmentSmack — 30 тыс. FragmentSmack дает работать с подставными IP-адресами, чтобы обмануть системы безопасности (получится использовать IP-спуфинг). пакетов в секунду.

RedHat также приводят результат подобной атаки (ядро загружено на 99%):

top - 08:59:45 up 1:34, 2 users, load average: 0.39, 0.15, 0.08
%Cpu9 : 0.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi,100.0 si, 0.0 st PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 54 root 20 0 0 0 0 R 99.7 0.0 0:47.53 ksoftirqd/9

Подобные уязвимости обнаруживаются уже не в первый раз. В девяностых годах похожий баг нашли в Windows NT 4.0, Windows 95 и версиях ядра Linux вплоть до 2.0.32. Эксплойт известен как teardrop attack — злоумышленник тоже отправлял фрагментированные пакеты на целевое (сетевое) устройство, вызывая DoS. Уязвимость пропатчили, однако она проявилась позже.

В 2009 году баг вновь нашли в Windows 7 и Windows Vista.

Кто пострадал

FragmentSmack угрожает всем версиям ядра Linux, начиная с 3.9, а SegmentSmack — с 4.9. Список вендоров, в системах которых есть эти уязвимости, вы найдете на сайте CERT.

Поэтому компания выпустила ряд патчей. На прошлой неделе в Cisco сообщили, что атакам SegmentSmack и FragmentSmack подвержена их операционная система AsyncOS.

Если вывод команды покажет большое количество TCP-соединений в состоянии CLOSE_WAIT, то, вероятно, устройство подвержено этим уязвимостям. Как отмечают в Сisco, «симптомы» уязвимости можно отследить при помощи команды netstat (пример есть на сайте Cisco в разделе Indicators of Compromise).

Чем лечить

Подробности о SegmentSmack-патчах для ряда дистрибутивов уже опубликовали на CVE (например, вот патч для Ubuntu 14.04 LTS). Там же вы найдете инструкции и файлы для установки заплаток для всех дистрибутивов Linux. Что касается FragmentSmack, то патчи против этой уязвимости уже выкатили разработчики Ubuntu, Red Hat, Debian и Android OS.


/ фото Christopher Michel CC

В качестве временного решения проблемы с FragmentSmack (если патч по каким-то причинам установить не получается) можно изменить значения net.ipv4.ipfrag_high_thresh и net.ipv4.ipfrag_low_thresh на 256 и 192 Кбайт соответственно (вместо 4 МБ и 3 МБ).

Если длина очереди превысила его, обработчик фрагментов будет игнорировать все пакеты, пока длина очереди не станет меньше значения ipfrag_low_thresh. Первый параметр задает максимальный объем памяти, выделяемый под очередь фрагментированных пакетов.

Владельцы Android, как пишет Кевин Бомонт (Kevin Beaumont), эксперт по кибербезопасности, а также автор независимого блога по теме, могут изменить эти значения, используя команды:

echo “262144” > /proc/sys/net/ipv4/ipfrag_high_threshold
echo “196608” > /proc/sys/net/ipv4/ipfrag_low_thresh

Они должны сработать без перезагрузки устройства.
P.S. Пара дополнительных материалов из Первого блога о корпоративном IaaS:
P.P.S. Еще несколько статей по теме из нашего блога на Хабре:

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть