
IPSpinner funciona como un proxy local que redirige las solicitudes a través de servicios externos.
IPSpinner es un proxy local que se puede utilizar para redirigir todas las solicitudes entrantes a través de diferentes proveedores elegidos. El propósito es crear un proxy de paso que rote la dirección IP de origen de cada solicitud. Por ejemplo, ejecutar una operación de fuerza bruta a través de IPSpinner ayudará a evitar ser detectado, ya que el servidor recibirá las solicitudes desde cientos de direcciones IP diferentes.
IPSpinner actualmente es compatible con AWS (API Gateway), Azure (Cloud Shell) y GitHub (GitHub Actions).
Figura 1: IPSpinner - Diagrama general
IPSpinner funciona como un proxy local que redirige las solicitudes a través de servicios externos. Para ello, IPSpinner utiliza proveedores y lanzadores (launchers).
Un proveedor corresponde a un proveedor de nube o a un proveedor de servicios en línea (AWS, Azure, GitHub, etc.) que ofrece diferentes servicios, denominados lanzadores, que pueden utilizarse para retransmitir las solicitudes del usuario (AWS API Gateway, GitHub Actions, Azure Cloud Shell, etc.).
Por lo tanto, para ejecutar IPSpinner, el usuario deberá proporcionar credenciales para los proveedores que quiera utilizar y configuraciones adicionales para los lanzadores. Se pueden usar varios tipos de lanzadores al mismo tiempo; IPSpinner elegirá aleatoriamente uno de los disponibles para cada solicitud.
Además, IPSpinner implementa una función de precarga. Algunos lanzadores pueden precargarse para evitar la demora de reconfiguración en caso de que el proxy vea un nuevo host. Para estos lanzadores, el procedimiento de precarga es recomendable pero no obligatorio. Para los demás, no es necesaria ninguna precarga.
IPSpinner puede utilizar AWS API Gateway para enviar solicitudes. Esta implementación se basa en FireProx, que crea una API Gateway REST para redirigir las solicitudes entrantes. FireProx se ha adaptado para manejar múltiples hosts por API Gateway e implementar nuevas funciones. En resumen, cuando IPSpinner recibe una solicitud, selecciona o crea la instancia de API Gateway adecuada y envía la solicitud hacia el destino. Luego, recopila la respuesta y la devuelve al usuario. De este modo, el servidor de destino recibe la solicitud desde la API Gateway y no directamente del usuario. Dado que API Gateway rota su IP de salida en cada solicitud, IPSpinner usa esta característica para rotar la dirección IP.
Figura 2: AWS API Gateway - Diagrama general
El siguiente gráfico, realizado en octubre de 2024, muestra el número de direcciones IP únicas disponibles por región de AWS según el número de solicitudes enviadas. La mayoría de las regiones ofrecen más de 100 direcciones IP y se pueden usar varias regiones al mismo tiempo, lo que permite al usuario enrutar sus solicitudes a través de miles de direcciones de todo el mundo.
Figura 3: AWS API Gateway - Direcciones IP disponibles por región
Finalmente, la Figura 4 muestra, con un nivel de color verde logarítmico, cuántas direcciones están disponibles por país. Esto demuestra que el usuario tiene la posibilidad de falsear su dirección IP de origen con direcciones de cualquier continente.
Figura 4: AWS API Gateway - Direcciones IP por país
IPSpinner implementa una función de rotación que elimina y renueva periódicamente las instancias FireProx creadas. Como muestra el siguiente gráfico, rotar una instancia de FireProx puede entregar un nuevo subconjunto de IP. Sin embargo, cada región de AWS tiene un conjunto limitado de IP y, por lo tanto, en algún momento las rotaciones no entregarán IP nuevas.
Figura 5: AWS API Gateway - Proceso de rotación
Este lanzador implementa un procedimiento de precarga. Como se ha dicho antes, no es obligatorio, pero puede evitar demoras de reconfiguración o errores de sincronización durante los primeros segundos después de ser reconfigurado.
Además, las API Gateway establecen por defecto una cabecera X-Forwarded-For, que no se puede eliminar pero sí sobrescribir. Así, el usuario puede especificar en la configuración de IPSpinner un rango de direcciones IP del cual se elegirá una IP aleatoria para cada solicitud (rango IPv4 o IPv6).
IPSpinner utiliza Azure Cloud Shell para enviar solicitudes. Azure Cloud Shell es una terminal interactiva, autenticada y accesible desde el navegador para administrar recursos de Azure. Cloud Shell se ejecuta en un host temporal proporcionado por sesión y por usuario.
De este modo, IPSpinner utiliza varios usuarios de Azure para los cuales se prepara una sesión de Cloud Shell. Luego, cada solicitud se redirige a un Cloud Shell inicializado, antes de que este se renueve para restablecer su dirección IP.
Figura 6: Azure Cloud Shell - Diagrama general
Como muestra el siguiente gráfico, las diferentes regiones disponibles para desplegar sesiones de Cloud Shell ofrecen cada una decenas de direcciones IP. El usuario puede configurar varias regiones al mismo tiempo para aumentar su pool de IP.