Files
available-subnets/README.md
2026-04-19 18:49:49 +07:00

52 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Available Subnets
## Вступление
Для борьбы с блокировками вида Whitelist, мы неизбежно встречаемся с вопросом: к каким айпи и подсетям доступ разрешён? Если к каким-то ресурсам есть доступ, значит ли это что можно найти и свой "счастливый IP"? Этим вопросом задалась команда **Malenia-Research**.
Целью исследования можно установить **поиск доступных в условиях whitelist-ограничений IP, подсетей и компаний-хостеров, к которым эти адреса относятся**.
## Этап 1: Подготовка диапазона сканирования
**Цель:** Сопоставить две базы данных IP2Location (ASN и DB11), чтобы извлечь список всех CIDR-подсетей для заданной страны (например, RU) и сохранить их в текстовый файл (по одному CIDR на строку).
### Алгоритм
1. **Предварительная загрузка (DB11):**
База геолокации загружается в оперативную память в виде двух параллельных массивов:
- ip_starts — отсортированный список начальных IP-адресов (ip_from).
- geo_data — список кортежей с конечным IP и кодом страны (ip_to, country_code).
2. **Бинарный поиск (ASN):**
Скрипт построчно читает базу ASN. Для начального IP каждой подсети применяется встроенная функция bisect.bisect_right() к массиву ip_starts. Это позволяет за доли миллисекунды найти индекс блока геолокации, к которому относится данный IP.
3. **Валидация и фильтрация:**
Найдя нужный блок, скрипт делает две проверки:
- Не выходит ли IP за верхнюю границу диапазона (ip_from <= db_ip_to).
- Совпадает ли код страны с искомым (например, RU).
Eсли условия выполнены, подсеть (CIDR) записывается в итоговый .txt файл.
## Этап 2: Сканирование
**Цель:** Получить из списка подсетей конкретные IP-адреса, доступные при белых списках.
Этот шаг может быть выполнен по разному, в данном документе будет описано то, как сканирование проводилось в рамках данного исследования.
В зоне работы белых списков, на телефоне с сим-картой оператора Т2-Мобайл включался режим "Точки Доступа". К этой сети Wi-Fi подключался ноутбук с включенной Windows Subsystem for Linux (Ubuntu). Внутри папки `scanning` выполнялась следующая команда:
```bash
sudo masscan -iL russian_subnets.txt -p443,22 --excludefile exclude.txt --rate=5000 -oG results.txt
```
Порты выбраны не диапазоном для увеличения эффективности алгоритма. 22 и 443 были выбраны в качестве наиболее эффективных, т.к. практически на каждом сервере установлен сервер ssh, оперирующий на порте 22. Также, мы использовали 443, т.к. nginx тоже является одним из самых распространённых сервисов на виртуальных серверах.
Важно принять во внимание, что даже при выбраном `rate=5000` (5000 пакетов в секунду), список IP-адресов, по которому выполнялся наш поиск, будет обрабатываться около 5-7 часов.
В результате мы получаем `results.txt`, содержащий данные в формате
```
Timestamp * Host: * () Ports: *
```
Мы перевели эти данные в упрощённый вид IP-адресов:
```bash
grep -oP 'Host: \K[^ ]+ ' results.txt | aggregate > subnets.txt
```
## Этап 3: Обработка данных