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

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

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


    / фото 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:



    • +28
    • 8,5k
    • 3

    ИТ-ГРАД

    298,00

    vmware iaas provider

    Поделиться публикацией
    Комментарии 3
      +1
      echo “262144” > /proc/sys/net/ipv4/ipfrag_high_threshold
      echo “196608” > /proc/sys/net/ipv4/ipfrag_low_thresh
      С такими кавычками не сработает. Кавычки здесь просто не нужны.
        0

        А это разве не хабровская автозамена кавычек?

          0

          Нет, это автозамена кавычек на стороннем ресурсе :)

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое