
IPSpinner fonctionne comme un proxy local qui redirige les requêtes via des services externes.
IPSpinner est un proxy local qui peut être utilisé pour rediriger toutes les requêtes entrantes via différents fournisseurs choisis. L'objectif est de créer un proxy de transit qui fait varier l'adresse IP source de chaque requête. Par exemple, lancer une opération de force brute via IPSpinner aidera à éviter d'être détecté, car le serveur recevra les requêtes depuis des centaines d'adresses IP différentes.
IPSpinner prend actuellement en charge AWS (API Gateway), Azure (Cloud Shell) et GitHub (GitHub Actions).
Figure 1 : IPSpinner - Schéma global
IPSpinner fonctionne comme un proxy local qui redirige les requêtes via des services externes. Pour cela, IPSpinner s'appuie sur des fournisseurs et des lanceurs.
Un fournisseur correspond à un fournisseur de cloud ou à un fournisseur de services en ligne (AWS, Azure, GitHub, etc.) qui propose différents services, appelés lanceurs, pouvant être utilisés pour relayer les requêtes de l'utilisateur (AWS API Gateway, GitHub Actions, Azure Cloud Shell, etc.).
Ainsi, pour lancer IPSpinner, l'utilisateur devra fournir les identifiants des fournisseurs qu'il souhaite utiliser ainsi que des configurations supplémentaires pour les lanceurs. Plusieurs types de lanceurs peuvent être utilisés en même temps ; IPSpinner choisira aléatoirement l'un de ceux disponibles pour chaque requête.
De plus, IPSpinner implémente une fonctionnalité de préchargement. Certains lanceurs peuvent être préchargés pour éviter le délai de reconfiguration lorsqu'un nouvel hôte est vu par le proxy. Pour ces lanceurs, la procédure de préchargement est recommandée mais pas obligatoire. Pour les autres, aucun préchargement n'est nécessaire.
IPSpinner peut utiliser AWS API Gateway pour envoyer des requêtes. Cette implémentation est basée sur FireProx, qui crée une API Gateway REST pour rediriger les requêtes entrantes. FireProx a donc été adapté pour gérer plusieurs hôtes par API Gateway et pour implémenter de nouvelles fonctionnalités. En résumé, lorsqu'IPSpinner reçoit une requête, il sélectionne ou crée l'instance API Gateway appropriée et lui envoie la requête. Ensuite, il recueille la réponse et la renvoie à l'utilisateur. Ainsi, le serveur ciblé a reçu la requête depuis l'API Gateway et non directement de l'utilisateur. Comme l'API Gateway fait varier son IP sortante pour chaque requête, IPSpinner utilise cette fonctionnalité pour faire varier l'adresse IP.
Figure 2 : AWS API Gateway - Schéma global
Le graphique suivant, réalisé en octobre 2024, montre le nombre d'adresses IP uniques disponibles par région AWS en fonction du nombre de requêtes envoyées. La plupart des régions offrent plus de 100 adresses IP et plusieurs régions peuvent être utilisées en même temps, permettant à l'utilisateur de faire transiter ses requêtes par des milliers d'adresses dans le monde entier.
Figure 3 : AWS API Gateway - Adresses IP disponibles par région
Enfin, la figure 4 montre, avec un niveau de couleur verte logarithmique, combien d'adresses sont disponibles par pays. Elle démontre que l'utilisateur a la possibilité de falsifier son adresse IP source avec des adresses sur n'importe quel continent.
Figure 4 : AWS API Gateway - Adresses IP par pays
IPSpinner implémente une fonctionnalité de rotation qui supprime et renouvelle régulièrement les instances FireProx créées. Comme le montre le graphique suivant, faire tourner une instance FireProx peut fournir un nouveau sous-ensemble d'IP. Cependant, chaque région AWS dispose d'un ensemble limité d'IP et, par conséquent, à un moment donné, les rotations ne fourniront plus de nouvelles IP.
Figure 5 : AWS API Gateway - Processus de rotation
Ce lanceur implémente une procédure de préchargement. Comme indiqué précédemment, elle n'est pas obligatoire, mais peut éviter certains délais de reconfiguration ou des erreurs de synchronisation durant les premières secondes après une reconfiguration.
De plus, les API Gateway définissent par défaut un en-tête X-Forwarded-For qui ne peut pas être supprimé mais peut être remplacé. Ainsi, l'utilisateur peut spécifier dans la configuration d'IPSpinner une plage d'adresses IP à partir de laquelle une IP aléatoire sera choisie pour chaque requête (plage IPv4 ou IPv6).
IPSpinner utilise Azure Cloud Shell pour envoyer des requêtes. Azure Cloud Shell est un terminal interactif, authentifié et accessible via navigateur pour gérer les ressources Azure. Cloud Shell s'exécute sur un hôte temporaire fourni par session et par utilisateur.
Ainsi, IPSpinner utilise plusieurs utilisateurs Azure pour lesquels une session Cloud Shell est préparée. Ensuite, chaque requête est redirigée vers un Cloud Shell initialisé, avant d'être renouvelé pour réinitialiser son adresse IP.
Figure 6 : Azure Cloud Shell - Schéma global
Comme le montre le graphique suivant, les différentes régions disponibles pour déployer des sessions Cloud Shell offrent chacune des dizaines d'adresses IP. L'utilisateur peut configurer plusieurs régions en même temps pour augmenter son pool d'IP.