
IPSpinner работает как локальный прокси-сервер, который перенаправляет запросы через внешние сервисы.
IPSpinner — это локальный прокси, который можно использовать для перенаправления всех входящих запросов через различных выбранных провайдеров. Цель — создать сквозной прокси, который ротирует исходный IP-адрес каждого запроса. Например, запуск операции брутфорса через IPSpinner поможет избежать обнаружения, поскольку сервер будет получать запросы с сотен разных IP-адресов.
В настоящее время IPSpinner поддерживает AWS (API Gateway), Azure (Cloud Shell) и GitHub (GitHub Actions).
Рисунок 1: IPSpinner — Общая схема
IPSpinner работает как локальный прокси, который перенаправляет запросы через внешние сервисы. Для этого IPSpinner использует провайдеров и лаунчеров.
Провайдер соответствует облачному провайдеру или онлайн-провайдеру услуг (AWS, Azure, GitHub и т.д.), который предлагает различные сервисы, называемые лаунчерами, которые можно использовать для ретрансляции запросов пользователя (AWS API Gateway, GitHub Actions, Azure Cloud Shell и т.д.).
Таким образом, для запуска IPSpinner пользователь должен предоставить учетные данные для провайдеров, которые он хочет использовать, и дополнительные конфигурации для лаунчеров. Можно использовать несколько типов лаунчеров одновременно; IPSpinner будет выбирать случайным образом один из доступных для каждого запроса.
Кроме того, IPSpinner реализует функцию предварительной загрузки (preload). Некоторые лаунчеры можно предварительно загружать, чтобы избежать задержки перенастройки в случае, если прокси видит новый хост. Для этих лаунчеров процедура предварительной загрузки рекомендуется, но не обязательна. Для остальных предварительная загрузка не требуется.
IPSpinner может использовать AWS API Gateway для отправки запросов. Эта реализация основана на FireProx, который создает REST API Gateway для перенаправления входящих запросов. FireProx был адаптирован для поддержки нескольких хостов на один API Gateway и реализации новых функций. Если кратко, когда IPSpinner получает запрос, он выбирает или создает подходящий экземпляр API Gateway и направляет запрос к нему. Затем он собирает ответ и возвращает его пользователю. Таким образом, целевой сервер получает запрос от API Gateway, а не напрямую от пользователя. Поскольку API Gateway ротирует свой исходящий IP для каждого запроса, IPSpinner использует эту возможность для ротации IP-адресов.
Рисунок 2: AWS API Gateway — Общая схема
Следующий график, созданный в октябре 2024 года, показывает количество уникальных IP-адресов, доступных в каждом регионе AWS, в зависимости от количества отправленных запросов. Большинство регионов предлагают более 100 IP-адресов, и можно использовать несколько регионов одновременно, что позволяет пользователю пропускать свои запросы через тысячи адресов по всему миру.
Рисунок 3: AWS API Gateway — Доступные IP-адреса по регионам
Наконец, на рисунке 4 с помощью логарифмической шкалы зеленого цвета показано, сколько адресов доступно в каждой стране. Это демонстрирует, что пользователь имеет возможность подменить свой исходный IP-адрес адресами с любого континента.
Рисунок 4: AWS API Gateway — IP-адреса по странам
IPSpinner реализует функцию ротации, которая регулярно удаляет и пересоздает экземпляры FireProx. Как показывает следующий график, ротация экземпляра FireProx может предоставить новый поднабор IP-адресов. Однако каждый регион AWS имеет ограниченный набор IP-адресов, поэтому в какой-то момент ротация перестанет давать новые IP-адреса.
Рисунок 5: AWS API Gateway — Процесс ротации
Этот лаунчер реализует процедуру предварительной загрузки. Как уже говорилось, она не обязательна, но может предотвратить некоторые задержки перенастройки или ошибки синхронизации в первые секунды после перенастройки.
Кроме того, API Gateway по умолчанию устанавливает заголовок X-Forwarded-For, который нельзя удалить, но можно переопределить. Таким образом, пользователь может указать в конфигурации IPSpinner диапазон IP-адресов, из которого для каждого запроса будет выбран случайный IP-адрес (диапазон IPv4 или IPv6).
IPSpinner использует Azure Cloud Shell для отправки запросов. Azure Cloud Shell — это интерактивный терминал с аутентификацией, доступный через браузер, для управления ресурсами Azure. Cloud Shell работает во временном хостинге, предоставляемом на основе отдельного сеанса и отдельного пользователя.
Таким образом, IPSpinner использует несколько пользователей Azure, для которых подготавливается сеанс Cloud Shell. Затем каждый запрос будет перенаправлен в инициализированный Cloud Shell, после чего он будет перезапущен для сброса его IP-адреса.
Рисунок 6: Azure Cloud Shell — Общая схема
Как показывает следующий график, разные регионы, доступные для развертывания сеансов Cloud Shell, предлагают десятки IP-адресов. Пользователь может настроить несколько регионов одновременно, чтобы увеличить свой пул IP-адресов.
Рисунок 7: Azure Cloud Shell — Доступные IP-адреса по регионам