Защита от DDoS подручными средствами. Часть 3. SNMP Amplification

Защита от DDoS подручными средствами. Часть 3. SNMP Amplification
По согласованию с редакцией журнала публикую свою статью "Защита от DDoS подручными средствами. Часть 3. SNMP Amplification" из номера 164-165 (июль-август 2016) выпуска журнала "Системный администратор" .

Чтобы сделать свой вклад в защиту всемирного киберпространства от DDoS, совсем не обязательно покупать дорогостоящее оборудование или сервис. Любой администратор сервера, доступного из Интернет, может поучаствовать в столь благородном деле без дополнительных материальных вложений, используя только знания и немного времени.

Рассмотрим DDoS-атаки типа "усиление"(amplification) с использованием сервиса
SNMP.


SNMPamplification

Суть атаки заключается в том, чтобы инициировать многократно увеличенный ответ на SNMP-запрос. Изначально разработанные для автоматизации получения табличных данных при минимизации количества отправляемых пакетов BULK-запросы стали довольно эффективным инструментом проведения DDoS-атак в руках злоумышленников. Как гласит RFC3416, GetBulkRequest, реализованный в SNMP версии 2, предназначен для возможности запросить большой объем данных, чем и пользуются атакующие, используя неправильно настроенные сервера в Интернет.
Если установить максимальное число возвращаемых строк в таблице 20000 и выполнить запрос в адрес неправильно настроенного сервера/устройства:

:~$ snmpbulkget -c public -v 2c -C r20000 192.168.10.129 1.3.6.1

ответ выдаст приблизительно следующее:

iso.3.6.1.2.1.1.1.0 = STRING: "SNMP4J-Agent - Windows 2003 - x86 - 5.2"
<пропущено 290 строк>
iso.3.6.1.6.3.18.1.1.1.8.123.123.12.123.123.12.12.123.123.12.123.123.12 = No more variables left in this MIB View (It is past the end of the MIB tree)

При этом запущенный tcpdump покажет размер возвращенного пакета:

21:41:18.185058 IP 192.168.10.128.39565 > 192.168.10.129.snmp: GetBulk(25) N=0 M=20000 .iso.org.dod.internet
21:41:18.603553 IP 192.168.10.129.snmp > 192.168.10.128.39565: [len1468<asnlen10102]

В ответ на запрос размером около 70 байт с учетом заголовков сервер возвращает ответ размером порядка 10 килобайт, то есть, почти в 150 раз больше. Коэффициент усиления не фиксирован и может принимать как большее (достигая 1700 раз), так и меньшее значение, в зависимости от типа ОС и параметров конфигурации устройства. Если при формировании подобного запроса использовать подмену IP-адреса отправителя на адрес жертвы и высокую интенсивность обращений к уязвимому серверу — DDoS-атака готова.


Причина

Суть проблемы заключается, как правило, не в уязвимости, не в настройке количества отдаваемых значений на один GetBulkRequest, а в том, что значение SNMP community установлено по умолчанию: public – read-only или, что еще хуже, private – read-write. Протокол SNMP версий 1 и 2 основан на UDP, используется для мониторинга и управления,а в качестве аутентификационного параметра доступа к управляемому оборудованию использует значение community, которое может быть задано только для чтения (read-only) либо с возможностью записи (read-write). Зачастую в системах при активации сервиса SNMP устанавливается значение по умолчанию — publicдля read-only и privateдля read-write. Даже если абстрагироваться от возможности использования некорректно настроенного сервера в качестве рефлектора для усиления атак SNMP, то очевидна угроза получения информации о сервере, установленном на нем ПО и его версиях, при использовании значения publicпо умолчанию для read-only. Практически безграничный привилегированный доступ с правами администратора к устройству дает read-write community private. Даже если не будет производиться вредоносных изменений, интенсивные запросы с использованием протокола SNMP могут вызвать значительную нагрузку на вычислительные ресурсы опрашиваемого сервера, чем повлиять на качество предоставляемых им сервисов.

Защита

Общие рекомендации для уязвимых к атакам с использованием подмены адреса протоколов на базе UDP, предоставленныtв BCP38 и RFC2827, описаны в предыдущих частях ( Часть 1. DNSAmplification , Часть 2. NTPAmplification ).
Специфические для SNMP рекомендации по обеспечению безопасности сервера либо сетевого оборудования можно разделить на такие направления:
1. Архитектурное: разрешение обработки запросов только на интерфейсах, недоступных из недоверенных сетей.
2. Смена community на более трудноугадываемое.
3. Ограничение IP-адресов управляющих станций.
4. Ограничение ветки OID, доступной для получения/изменения по SNMP.
5. Минимизация либо отказ от использования community на чтение и запись.
6. Переход на SNMP версии 3 с использованием дополнительных параметров аутентификации и шифрования.
7. Отключение SNMP, если не используется.

Как выполнить эти действия на разных операционных системах?

Unix

В конфигурационном файле сервиса snmp настраиваются следующие параметры:

agentAddress udp:10.0.0.1:161 # IP-адрес, протокол и порт, принимающий запросы SNMP

Если Unix-сервер по сути является маршрутизатором и архитектурно имеет несколько интерфейсов, для безопасности необходимо оставить доступным по SNMP только интерфейс, достуный из доверенного сегмента, но не из Интернет. Имя community для доступа задается параметром rocommunity (read-only)либо rwcommunity (read-write), также возможно задать подсеть, доступ из которой разрешен, и ветку OID, доступную для работы указанной подсети с заданными правами строки community. Например, для того, чтобы разрешить системам мониторинга из подсети 10.0.0.0/24 доступ к информации по интерфейсам (OID 1.3.6.1.2.1.2), используя строку доступа MaKe_It_SeCuRe с правами только для чтения, конфигурационный фрагмент будет выглядеть следующим образом:

rocommunity MaKe_It_SeCuRe 10.0.0.0/24.1.3.6.1.2.1.2

В частных случаях использования разнообразных Unix-систем вышеуказанная строка может иметь несколько видоизмененный синтаксис за счет использования других параметров и иерархической структуры компонентов конфигурационного файла. Подробное описание можно найти, набрав команду

man snmpd.conf

Но если задача состоит в том, чтобы максимально быстро обеспечить безопасность сервиса snmpd, который до этого был настроен неправильно предшественником, можно создать резервную копию snmpd.conf, в новый конфигурационный файл внести ограничения по подсети систем мониторинга и изменить community. В Debian это будет выглядеть следующим образом:

# cd <директория с snmpd.conf>
# mv snmpd.conf snmpd.conf.backup
# echo rocommunity MaKe_It_SeCuRe 10.0.0.0/24> snmpd.conf
# /etc/init.d/snmpd restart

После этого доступ по SNMP к серверу будет только у подсети 10.0.0.0/24 с использованием нового community, при этом все сервера, на которых не изменено community на новое, перестанут получать ответы на запросы, как и злоумышленники.
Более безопасным будет переход на использование SNMPv3, в котором существует возможность варьирования параметров аутентификации. Кроме того, в отличие от версий 1 и 2c, SNMPv3 позволяет обеспечить шифрование трафика между системой мониторинга и опрашиваемым оборудованием. Для создания пользователя с правами только на чтение, аутентификацией и шифрованием трафика, в конфигурационный файл snmpd.conf необходимо добавить:

createUser v3user SHA "some_AuThPaSs" AES some_privpass
authuser read v3user authpriv 1.3.6.1.2.1.2

Соответственно, пользователь v3user получит права read-only для просмотра ветки 1.3.6.1.2.1.2 по SNMP.
Проверить корректность конфигурации можно после рестарта сервиса SNMP на сервере 192.168.10.128 командой, выполненной на клиенте:

$ snmpwalk -v 3 -A some_AuThPaSs -X some_privpass -a SHA -x AES -u v3user -l authPriv 192.168.10.128 1

При этом, несмотря на то, что опрашиваться будет все дерево, начиная с 1, сервер отдаст только разрешенную ветку 1.3.6.1.2.1.2, которая будет задана в конфигурации.
При отказе от SNMP v1/v2c в пользу SNMPv3 необходимо также удалить из конфигурационного файла фрагменты настройки, не имеющие отношение к SNMPv3.
Если же SNMP для мониторинга серверане используется, наиболее верным решением будет удаление пакета snmpd.

Cisco

В Cisco IOS отсутствует возможность выбора интерфейса, который будет обрабатывать запросы SNMP. Ограничение выполняется с помощью списков доступа (access-control list, ACL). Предположим, разрешенной будет подсеть 10.0.0.0/24. Создается ACL:

(config)#access-list 10 permit 10.0.0.0 0.0.0.255

который затем применяется к соответствующему community для SNMP v1/v2c, в данном примере MaKe_It_SeCuRe с правом доступа только на чтение:

(config)#snmp-server community MaKe_It_SeCuRe RO 10

Ограничение к веткам SNMP OID применяется с помощью view

(config)#snmp-server view IFACES1.3.6.1.2.1.2included

после чего к созданному view прикрепляется community:

(config)#snmp-server community MaKe_It_SeCuRe view IFACES RO 10

Для того, чтобы использовать SNMPv3 с необходимыми ограничениями (аутентификация и шифрование, только чтение, доступ из подсети 10.0.0.0/24 к ветке интерфейсов, обозначенной во view IFACES), необходимо создать группу (SECURE) с доступом на чтение только к OID из view IFACES и необходимостью аутентификации с шифрованием, привязав ее к созданному ранее access-list 10:

(config)#snmp-server group SECURE v3 priv read IFACESaccess 10

затем добавить в группу учетную запись пользователя (v3user), задав ему пароли на аутентификацию и шифрование, а также алгоритм шифрования (в данном случае AES128):

(config)# snmp-server user v3userSECURE v3 auth sha Strong_Password priv aes 128 Priv_Password

Проверка работоспособности SNMPv3 с вышеописанными настройками производится командой:

$ snmpwalk -v 3 -A Strong_Password -X Priv_Password -a SHA -x AES -u v3user -l authPriv 192.168.10.128 1

При этом также устройством будут возвращены значения только тех веток SNMP OID, которые добавлены в соответствущее view (в данном случае IFACES).
При переходе с SNMP v1/v2c на более защищенный SNMPv3 также необходимо удаление настроек с snmp-server community.
Если принято решение не использовать SNMP для мониторинга и управления устройством под управлением Cisco IOS, отключение производится следующей командой:

(config)#no snmp-server

но (важно!) данная команда не удаляет конфигурацию SNMP, а только останавливает процесс в системе, запуск которого произойдет при введении любой команды, связанной с SNMP. Для удаления остальных фрагментов конфигурации SNMP, их необходимо найти с помощью команды

# sh run | in snmp-server

Предположим, на сервере определены значения community по умолчанию, и больше никаких настроек SNMP:

snmp-server community public RO
snmp-server community private RW

удалить их можно (и нужно) добавлением noи повторением команды из конфигурации:

(config)#no snmp-server community public RO
(config)#no snmp-server community private RW


Выводы

Первоначальной причиной возможности использования устройства для выполнения DDoS-атаки SNMP Amplification является не уязвимость, а настройка по умолчанию SNMP community.Наличие подобных настроек является существенной брешью в безопасности системы в связи с тем, что протокол SNMP может использоваться для управления, и настройка параметров доступа по умолчанию по степени опасности сравнима с легкоугадываемым паролем для входа по SSH. Выполнив описанные в статье рекомендации,мы не только напрямую защитимся от атак на нашу сеть и сервера, но сделаем невозможным использование своих ресурсов для атак на других, а также минимизируем количество оснований для кричащих заголовков в прессе «Русские хакеры атаковали...».
Итого, защитить свои сервера и сеть от несанкционированного доступа с использвоанием протокола SNMP, уменьшить количество DDoS-атак типа SNMP amplification и минимизировать участие в них своего инфраструктурного сегмента можно с помощью следующих действий, не требующих дополнительных финансовых вложений:
  • Управление оборудованием только из доверенного сегмента сети. Ограничение посредством привязки сервиса к определенному интерфейсу либо с помощью списков доступа.
  • Изменение значений SNMP community по умолчанию (public и private) на трудноугадываемые.
  • Ограничение ветки OID, доступной для получения/изменения по SNMP.
  • Использование только SNMPv3 с применением дополнительных параметров аутентификации и шифрования.
  • Отключение сервиса SNMP с удалением кофигурации — в случае принятия решения о полном отказе от SNMP.

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



Alt text

Домашний Wi-Fi – ваша крепость или картонный домик?

Узнайте, как построить неприступную стену

Андрей Дугин

Практическая информационная безопасность и защита информации | Information Security and Cyber Defense in Deed