
IPSpinner funziona come un proxy locale che reindirizza le richieste attraverso servizi esterni.
IPSpinner è un proxy locale che può essere utilizzato per reindirizzare tutte le richieste in entrata attraverso diversi provider scelti. Lo scopo è creare un proxy di passaggio che ruoti l'indirizzo IP sorgente di ogni richiesta. Ad esempio, eseguire un'operazione di brute force tramite IPSpinner aiuta a evitare di essere scoperti, poiché il server riceverà le richieste da centinaia di indirizzi IP diversi.
IPSpinner supporta attualmente AWS (API Gateway), Azure (Cloud Shell) e GitHub (GitHub Actions).
Figura 1: IPSpinner - Diagramma generale
IPSpinner funziona come un proxy locale che reindirizza le richieste attraverso servizi esterni. A tale scopo, IPSpinner sfrutta provider e launcher.
Un provider corrisponde a un cloud provider o a un fornitore di servizi online (AWS, Azure, GitHub, ecc.), che offre diversi servizi, chiamati launcher, utilizzabili per inoltrare le richieste dell'utente (AWS API Gateway, GitHub Actions, Azure Cloud Shells, ecc.).
Pertanto, per avviare IPSpinner, l'utente dovrà fornire le credenziali per i provider che vuole utilizzare e configurazioni aggiuntive per i launcher. È possibile utilizzare più tipi di launcher contemporaneamente: IPSpinner sceglierà casualmente uno di quelli disponibili per ogni richiesta.
Inoltre, IPSpinner implementa una funzionalità di preload. Alcuni launcher possono essere precaricati per evitare il ritardo di riconfigurazione nel caso in cui il proxy veda un nuovo host. Per questi launcher, la procedura di preload è consigliata ma non obbligatoria. Per gli altri, non è necessario alcun preload.
IPSpinner può sfruttare AWS API Gateway per inviare richieste. Questa implementazione è basata su FireProx, che crea un REST API Gateway per reindirizzare le richieste in entrata. FireProx è stato quindi adattato per gestire più host per API Gateway e per implementare nuove funzionalità. In sintesi, quando IPSpinner riceve una richiesta, seleziona o crea l'istanza API Gateway corretta e invia la richiesta verso la destinazione. Poi raccoglie la risposta e la restituisce all'utente. In questo modo, il server di destinazione riceve la richiesta dall'API Gateway e non direttamente dall'utente. Poiché API Gateway ruota il suo IP in uscita per ogni richiesta, IPSpinner sfrutta questa funzionalità per rendere rotante l'indirizzo IP.
Figura 2: AWS API Gateway - Diagramma generale
Il grafico seguente, realizzato nell'ottobre 2024, mostra il numero di indirizzi IP univoci disponibili per regione AWS in base al numero di richieste inviate. La maggior parte delle regioni offre più di 100 indirizzi IP e più regioni possono essere utilizzate contemporaneamente, consentendo all'utente di instradare le proprie richieste attraverso migliaia di indirizzi in tutto il mondo.
Figura 3: AWS API Gateway - Indirizzi IP disponibili per regione
Infine, la Figura 4 mostra, con un livello di colore verde logaritmico, quanti indirizzi sono disponibili per paese. Dimostra che l'utente ha la possibilità di falsificare il proprio indirizzo IP sorgente con indirizzi di qualsiasi continente.
Figura 4: AWS API Gateway - Indirizzi IP per paese
IPSpinner implementa una funzionalità di rotazione che elimina e rinnova regolarmente le istanze FireProx create. Come mostra il grafico seguente, la rotazione di un'istanza FireProx può fornire un nuovo sottoinsieme di IP. Tuttavia, ogni regione AWS ha un set limitato di IP e quindi, a un certo punto, le rotazioni non forniranno nuovi IP.
Figura 5: AWS API Gateway - Processo di rotazione
Questo launcher implementa una procedura di preload. Come già detto, non è obbligatoria, ma può prevenire alcuni ritardi di riconfigurazione o errori di sincronizzazione durante i primi secondi dopo la riconfigurazione.
Inoltre, gli API Gateway impostano di default un header X-Forwarded-For, che non può essere eliminato ma può essere sovrascritto. L'utente può quindi specificare nella configurazione di IPSpinner un intervallo di indirizzi IP da cui verrà scelto un IP casuale per ogni richiesta (intervallo IPv4 o IPv6).
IPSpinner sfrutta Azure Cloud Shell per inviare richieste. Azure Cloud Shell è un terminale interattivo, autenticato e accessibile dal browser per la gestione delle risorse Azure. Cloud Shell viene eseguito su un host temporaneo fornito su base per-sessione e per-utente.
IPSpinner utilizza quindi diversi utenti Azure per i quali viene preparata una sessione Cloud Shell. Ogni richiesta verrà poi reindirizzata a una Cloud Shell inizializzata, prima di essere rinnovata per reimpostare il proprio indirizzo IP.
Figura 6: Azure Cloud Shell - Diagramma generale
Come mostra il grafico seguente, le diverse regioni disponibili per la distribuzione delle sessioni Cloud Shell offrono ciascuna decine di indirizzi IP. L'utente può configurare più regioni contemporaneamente per aumentare il proprio pool di IP.