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

в 11:14, , рубрики: linux, TCP-стек, Блог компании ИТ-ГРАД, информационная безопасность, ИТ-ГРАД

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

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

Ситуация: закрыты две уязвимости в TCP-стеке ядра Linux - 1
/ фото Eli Duke CC

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

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

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

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

$ 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-спуфинга.

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

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

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

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. Поэтому компания выпустила ряд патчей.

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

Чем лечить

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

Ситуация: закрыты две уязвимости в TCP-стеке ядра Linux - 2
/ фото 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. Еще несколько статей по теме из нашего блога на Хабре:

Автор: ИТ-ГРАДовец

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js