Под катом — подробнее о сути.
Чем опасны эти уязвимости
«Корень зла» 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.
/ фото 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. Еще несколько статей по теме из нашего блога на Хабре:
Комментариев нет:
Отправить комментарий