27 февраля 2018 года Cloudflare опубликовали рассказ о серьезном росте количества amplification атак на memcached. Memcached, популярная система кэширования объектов, часто используется для сокращения времени отклика и загрузки компонентов во время развертывания. Атака amplification (усиления) нацелена на экземпляры Memcached с доступом к публичной сети по UDP.
Лучший способ смягчить атаку – связать Memcached с локальным интерфейсом, отключить UDP и защитить сервер обычными методами сетевой безопасности. В этом руководстве вы узнаете, как это сделать, а также научитесь открывать доступ к сервису только заведомо безопасным клиентам.
Защита Memcached на серверах Ubuntu и Debian
Сервис Memcached на Ubuntu и Debian можно защитить, отредактировав файл /etc/memcached.conf с помощью nano:
sudo nano /etc/memcached.conf
По умолчанию Ubuntu и Debian связывают Memcached с локальным интерфейсом 127.0.0.1. Установки, привязанные к 127.0.0.1, не уязвимы для amplification атак из сети. Убедитесь, что параметр -l содержит этот адрес:
. . .
-l 127.0.0.1
. . .
Если в будущем вы измените адрес прослушивания и откроете доступ к сети, рекомендуется отключить UDP, который, скорее всего, будет использоваться в этой конкретной атаке. Чтобы отключить UDP (TCP по-прежнему будет работать), добавьте следующий параметр в конец файла:
. . .
-U 0
Сохраните и закройте файл.
Перезапустите сервис Memcached, чтобы обновить настройки:
sudo service memcached restart
Убедитесь, что Memcached привязан к локальному интерфейсу и прослушивает только TCP, с помощью команды:
sudo netstat -plunt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
. . .
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2383/memcached
. . .
Сервис memcached должен быть привязан к адресу 127.0.0.1 и поддерживать только TCP.
Защита Memcached на серверах CentOS и Fedora
Защитить сервис Memcached на серверах CentOS и Fedora можно в файле /etc/sysconfig/memcached:
sudo vi /etc/sysconfig/memcached
Нужно привязать адрес к локальному сетевому интерфейсу, чтобы ограничить трафик; это делается с помощью параметра -l 127.0.0.1. Это ограничение может быть слишком строгим для некоторых сред, но это хорошее начало.
Также нужно установить значение -U 0, чтобы отключить прослушиватель UDP. Протокол UDP активно используется в различных атаках, поэтому отключив его, вы снизите вероятность атаки на сервер, если позже вы решите изменить порт.
Добавьте оба параметра в переменную OPTIONS:
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -U 0"
Сохраните и закройте файл.
Чтобы обновить настройки, перезапустите Memcached:
sudo service memcached restart
Убедитесь, что Memcached привязан к локальному интерфейсу и прослушивает только TCP:
sudo netstat -plunt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
. . .
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2383/memcached
. . .
Сервис memcached должен быть привязан к адресу 127.0.0.1 и поддерживать только TCP.
Настройка доступа через частную сеть
Согласно вышеуказанным инструкциям Memcached прослушивает только локальный интерфейс. Это предотвращает атаки amplification, защищая интерфейс Memcached от посторонних. Если вам нужно разрешить доступ к Memcached с других серверов, нужно изменить конфигурацию.
Самый надежный способ расширить доступ – привязать Memcached к частному сетевому интерфейсу.
Ограничение доступа по IP с помощью брандмауэров
Для начала с помощью брандмауэра нужно заблокировать машины, которые могут подключаться к серверу Memcached. Для настройки правил брандмауэра вам понадобятся внутренние IP-адреса клиентов.
Если вы используете UFW, вы можете ограничить доступ к Memcached с помощью этих правил:
sudo ufw allow OpenSSH
sudo ufw allow from client_servers_private_IP/32 to any port 11211
sudo ufw enable
Читайте также: Основы UFW: общие правила и команды фаервола
В Iptables доступ ограничат эти команды:
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 --dport 11211 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -P INPUT DROP
Обязательно сохраните правила брандмауэра Iptables, используя механизм, предоставляемый вашим дистрибутивом. Вы можете узнать больше о Iptables в мануале Основы Iptables: общие правила и команды брандмауэра.
Затем можно привязать Memcached к интерфейсу частной сети сервера.
Привязка Memcached к интерфейсу частной сети
Теперь, когда ваш брандмауэр готов, вы можете настроить Memcached для привязки к интерфейсу частной сети сервера вместо 127.0.0.1.
На сервере Ubuntu или Debian снова откройте файл /etc/memcached.conf:
sudo nano /etc/memcached.conf
Внутри найдите строку -l 127.0.0.1 и укажите в ней адрес интерфейса частной сети:
. . .
-l memcached_servers_private_IP
. . .
Сохраните и закройте файл.
В CentOS и Fedora откройте /etc/sysconfig/memcached:
sudo vi /etc/sysconfig/memcached
В файле измените параметр -l 127.0.0.1 в переменной OPTIONS, он должен ссылаться на внутренний IP-адрес сервера Memcached:
. . .
OPTIONS="-l memcached_servers_private_IP -U 0"
Сохраните и закройте файл.
Перезапустите сервис Memcached:
sudo service memcached restart
Проверьте новые параметры с помощью netstat:
sudo netstat -plunt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
. . .
tcp 0 0 memcached_servers_private_IP:11211 0.0.0.0:* LISTEN 2383/memcached
. . .
Проверьте подключение с внешнего клиента, чтобы убедиться, что вы можете получить доступ к сервису. Рекомендуется также проверить доступ с неавторизованного клиента, чтобы убедиться, что правила брандмауэра не пропустят трафик.
Заключение
Amplification атаки Memcached могут оказать серьезное влияние на работу сети и стабильность ваших сервисов. Тем не менее, атаку можно предупредить путем использования лучших методов работы сетевых сервисов. После выполнения данного мануала рекомендуется продолжать отслеживать сервисы, чтобы обеспечить надлежащую функциональность и возможность подключения.