В начале месяца специалисты по ИБ обнаружили в ядре Linux две новые уязвимости: SegmentSmack и FragmentSmack. Обе они связаны с работой TCP-стека и позволяют злоумышленникам проводить DoS- и DDoS-атаки на систему жертвы. «Заплатки» для большинства дистрибутивов уже выпущены.
Под катом — подробнее о сути.
/ фото Eli Duke CC
«Корень зла» SegmentSmack — функции tcp_collapse_ofo_queue() и tcp_prune_ofo_queue(). Злоумышленник вызывает их с помощью специальным образом модифицированных TCP-сегментов, отправленных на сервер, персональный компьютер или мобильное устройство жертвы.
Это приводит к перерасходу ресурсов памяти и процессора. Таким образом хакер может «повесить» хост или устройство трафиком всего в 2 тыс. пакетов за секунду.
На сайте RedHat приведен пример результата такой атаки. Команда top показывает полную загрузку четырех ядер CPU и задержки в обработке сетевых пакетов:
Отметим, что для поддержания «DoS-состояния» требуется открытая TCP-сессия, поэтому атаку нельзя проводить с помощью IP-спуфинга.
Атака FragmentSmack использует особенности фрагментации IP-датаграмм. Когда IP-датаграмма передается на канальный уровень, она фрагментируется, если не помещается в кадр. Таким образом, она передается по кусочкам, а хост-получатель потом собирает её воедино. Однако он узнает конечную длину датаграммы только тогда, когда получит последний фрагмент.
Злоумышленники используют эту особенность и корректируют значения смещения фрагментов, чтобы процессор сервера постоянно занимался сборкой IPv4- и IPv6-пакетов.
FragmentSmack дает работать с подставными IP-адресами, чтобы обмануть системы безопасности (получится использовать IP-спуфинг). Однако требует большей скорости отправки пакетов, чем SegmentSmack — 30 тыс. пакетов в секунду.
RedHat также приводят результат подобной атаки (ядро загружено на 99%):
Подобные уязвимости обнаруживаются уже не в первый раз. В девяностых годах похожий баг нашли в 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), эксперт по кибербезопасности (а также автор независимого блога по теме), могут изменить эти значения, используя такие команды (они должны сработать без перезагрузки устройства).
Чем мы занимаемся в ИТ-ГРАД — основные направления:
• Виртуальная инфраструктура (IaaS) • PCI DSS хостинг • Облако ФЗ-152
Другие материалы из нашего блога об IaaS:
Под катом — подробнее о сути.
/ фото 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.
/ фото Christopher Michel CC
В качестве временного решения проблемы с FragmentSmack (если патч по каким-то причинам установить не получается) можно изменить значения net.ipv4.ipfrag_high_thresh и net.ipv4.ipfrag_low_thresh на 256 и 192 Кбайт соответственно (вместо 4 МБ и 3 МБ).
Первый параметр задает максимальный объем памяти, выделяемый под очередь фрагментированных пакетов. Если длина очереди превысила его, обработчик фрагментов будет игнорировать все пакеты, пока длина очереди не станет меньше значения ipfrag_low_thresh.
Владельцы Android, как пишет Кевин Бомонт (Kevin Beaumont), эксперт по кибербезопасности (а также автор независимого блога по теме), могут изменить эти значения, используя такие команды (они должны сработать без перезагрузки устройства).
Чем мы занимаемся в ИТ-ГРАД — основные направления:
• Виртуальная инфраструктура (IaaS) • PCI DSS хостинг • Облако ФЗ-152
Другие материалы из нашего блога об IaaS:
- Как протестировать дисковую систему в облаке: практические советы
- Что скрывается за термином vCloud Director — взгляд изнутри