По согласованию с редакцией журнала публикую свою статью "Защита от DDoS подручными средствами. Часть 3. SNMP Amplification" из номера 164-165 (июль-август 2016) выпуска журнала "Системный администратор".
Чтобы сделать свой
вклад в защиту всемирного киберпространства
от DDoS, совсем не обязательно
покупать дорогостоящее оборудование
или сервис. Любой администратор сервера,
доступного из Интернет, может поучаствовать
в столь благородном деле без дополнительных
материальных вложений, используя только
знания и немного времени.
Рассмотрим DDoS-атаки типа "усиление"(amplification) с использованием сервиса SNMP.
SNMP
amplification
Суть атаки заключается
в том, чтобы инициировать многократно
увеличенный ответ на 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 IFACES
1.3.6.1.2.1.2
included
после чего к
созданному 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 IFACES
access 10
затем добавить в
группу учетную запись пользователя
(v3user), задав
ему пароли на аутентификацию и шифрование,
а также алгоритм шифрования (в
данном случае AES128):
(config)#
snmp-server
user v3user
SECURE 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.
И если так поступит каждый
администратор серверов, доступных из
сети Интернет, цифровой мир приблизится
еще на один шаг к совершенству.
Useful information shared..I am very happy to read this article..thanks for giving us nice info. Fantastic walk-through. I appreciate this post. ddos protected vps with sla
ОтветитьУдалить