Comment sécuriser Memcached en réduisant l’exposition

introduction

Le 27 février 2018,Cloudflare posted a story about a severe increase in the volume of memcached amplification attacks. Memcached, un système de mise en cache d'objets répandu, est fréquemment utilisé pour réduire les temps de réponse et la charge des composants tout au long d'un déploiement. L’attaque d’amplification cible les déploiements Memcached exposés sur le réseau public à l’aide du protocole UDP.

Afin d'atténuer l'attaque, la meilleure option consiste à lier Memcached à une interface locale, à désactiver le protocole UDP et à protéger votre serveur avec les meilleures pratiques de sécurité réseau conventionnelles. Dans ce guide, nous verrons comment procéder, ainsi que pour exposer le service à des clients externes sélectionnés.

[.Attention]##

Note: en raison de l'impact potentiel de cette attaque d'amplification sur la stabilité du réseau, DigitalOcean a désactivé le trafic UDP et TCP sur l'interface publique vers le port 11211 à compter du 1er mars 2018. Cela affecte l'accès aux Droplets depuis l'extérieur du centre de données, mais les connexions depuis l'intérieur du centre de données sont toujours autorisées.

Pour plus de sécurité, si vous avez besoin d'un accès Memcached entre Droplets au sein du même centre de données, la liaison à l'interface réseau privée de votre Droplet et l'utilisation de règles de pare-feu pour limiter les adresses source autorisées aideront à empêcher les demandes non autorisées.

Sécurisation de Memcached sur les serveurs Ubuntu et Debian

Pour les services Memcached fonctionnant sur des serveurs Ubuntu ou Debian, vous pouvez ajuster les paramètres du service en éditant le fichier/etc/memcached.conf avecnano, par exemple:

sudo nano /etc/memcached.conf

Par défaut, Ubuntu et Debian lient Memcached à l'interface locale127.0.0.1. Les installations liées à127.0.0.1 ne sont pas vulnérables aux attaques d'amplification du réseau. Vérifiez que l'option-l est définie sur cette adresse pour confirmer le comportement:

/etc/memcached.conf

. . .
-l 127.0.0.1
. . .

Au cas où l'adresse d'écoute serait modifiée à l'avenir pour être plus ouverte, il est également judicieux de désactiver UDP, qui est beaucoup plus susceptible d'être exploité par cette attaque particulière. Pour désactiver UDP (le protocole TCP fonctionnera comme prévu), ajoutez l'option suivante au bas de votre fichier:

/etc/memcached.conf

. . .
-U 0

Lorsque vous avez terminé, enregistrez et fermez le fichier.

Redémarrez votre service Memcached pour appliquer vos modifications:

sudo service memcached restart

Vérifiez que Memcached est actuellement lié à l’interface locale et n’écoute que TCP en tapant:

sudo netstat -plunt
OutputActive 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
. . .

Vous devriez voirmemcached lié à l'adresse127.0.0.1 en utilisant uniquement TCP.

Sécurisation de Memcached sur des serveurs CentOS et Fedora

Pour les services Memcached fonctionnant sur les serveurs CentOS et Fedora, vous pouvez ajuster les paramètres du service en éditant le fichier/etc/sysconfig/memcached avecvi, par exemple:

sudo vi /etc/sysconfig/memcached

À l'intérieur, nous voudrons nous lier à l'interface réseau locale pour restreindre le trafic vers les clients sur la même machine en utilisant l'option-l 127.0.0.1. Cela peut être trop restrictif pour certains environnements, mais c'est un bon point de départ.

Nous allons également définir-U 0 pour désactiver l'écouteur UDP. UDP en tant que protocole est beaucoup plus efficace pour les attaques par amplification. Par conséquent, sa désactivation limitera la force de certaines attaques si nous décidons de modifier le port de liaison ultérieurement.

Ajoutez ces deux paramètres à l'intérieur de la variableOPTIONS:

/etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -U 0"

Enregistrez et fermez le fichier lorsque vous avez terminé.

Pour appliquer les modifications, redémarrez le service Memcached:

sudo service memcached restart

Vérifiez que Memcached est actuellement lié à l’interface locale et n’écoute que TCP en tapant:

sudo netstat -plunt
OutputActive 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
. . .

Vous devriez voirmemcached lié à l'adresse127.0.0.1 en utilisant uniquement TCP.

Autoriser l'accès sur le réseau privé

Les instructions ci-dessus indiquent à Memcached de n'écouter que sur l'interface locale. Cela empêche l'attaque d'amplification en n'exposant pas l'interface Memcached à des tiers. Si vous devez autoriser l'accès à partir d'autres serveurs, vous devrez ajuster la configuration.

L'option la plus sûre pour étendre l'accès consiste à lier Memcached à l'interface de réseau privé.

Limiter l'accès IP avec des pare-feu

Avant de le faire, il est judicieux de configurer des règles de pare-feu afin de limiter les ordinateurs pouvant se connecter à votre serveur Memcached. Vous aurez besoin de connaître lesclient servers private IP addresses pour configurer vos règles de pare-feu.

Si vous utilisez le pare-feuUFW, vous pouvez limiter l'accès à votre instance Memcached en tapant ce qui suit:

sudo ufw allow OpenSSH
sudo ufw allow from client_servers_private_IP/32 to any port 11211
sudo ufw enable

Vous pouvez en savoir plus sur les pare-feu UFW en lisant nosessentials guide.

Si vous utilisez Iptables, un pare-feu de base peut être établi en tapant:

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

Assurez-vous de sauvegarder vos règles de pare-feu Iptables en utilisant le mécanisme fourni par votre distribution. Vous pouvez en savoir plus sur Iptables en jetant un œil à nosessentials guide.

Ensuite, vous pouvez ajuster le service Memcached pour le lier à l’interface réseau privée de votre serveur.

Lier Memcached à l'interface de réseau privé

Maintenant que votre pare-feu est en place, vous pouvez ajuster la configuration Memcached pour se lier à l’interface réseau privée de votre serveur au lieu de127.0.0.1.

Pour les serveursUbuntu ouDebian, ouvrez à nouveau le fichier/etc/memcached.conf:

sudo nano /etc/memcached.conf

À l'intérieur, recherchez la ligne-l 127.0.0.1 et modifiez l'adresse pour qu'elle corresponde à l'interface réseau privée de votre serveur:

/etc/memcached.conf

. . .
-l memcached_servers_private_IP
. . .

Enregistrez et fermez le fichier lorsque vous avez terminé.

Pour les serveursCentOS etFedora, ouvrez à nouveau le fichier/etc/sysconfig/memcached:

sudo vi /etc/sysconfig/memcached

À l'intérieur, modifiez le paramètre-l 127.0.0.1 dans la variableOPTIONS pour référencer l'adresse IP privée de votre serveur Memcached:

/etc/sysconfig/memcached

. . .
OPTIONS="-l memcached_servers_private_IP -U 0"

Enregistrez et fermez le fichier lorsque vous avez terminé.

Ensuite, redémarrez à nouveau le service Memcached:

sudo service memcached restart

Vérifiez vos nouveaux paramètres avecnetstat pour confirmer la modification:

sudo netstat -plunt
OutputActive 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
. . .

Testez la connectivité de votre client externe pour vous assurer que vous pouvez toujours accéder au service. Il est également judicieux de vérifier l'accès à partir d'un client non autorisé afin de garantir l'efficacité de vos règles de pare-feu.

Conclusion

L'attaque d'amplification Memcached peut avoir de graves conséquences sur la santé du réseau et la stabilité de vos services. Toutefois, l'attaque peut être efficacement atténuée en suivant les meilleures pratiques pour l'exécution de services en réseau. Une fois les modifications apportées dans ce guide appliquées, il est judicieux de continuer à surveiller vos services pour vous assurer que les fonctionnalités et la connectivité sont conservées.