Дата: 20/10/17 - 20:55 pm   9448 Тем и 92517 Сообщений

Автор Тема: Ищем транзитные маршрутизаторы.  (Прочитано 30586 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Декабря 21, 2015, 12:54:21 pm
Прочитано 30586 раз

klanc

  • Elementary Level

  • Оффлайн
  • ***

  • 72
    03.11.15
  • Reputation:
    115
    • Просмотр профиля
Обозначения.
Сразу необходимо оговорить всю терминологию и обозначения.
Классификаций маршрутизаторов очень много и по большому счету они зависят от рассматриваемого контекста, так относительно протокола OSPF мы можем определить магистральные маршрутизаторы, зональные и тд. В этой статье будут затрагиваться так называемые транзитные маршрутизаторы - это просто условное обозначение их в определенном контексте (а именно в передаче пакетов по сетям).
Чтобы было более понятно - транзитными можно считать маршрутизаторы, через которые проходит трафик из "внешних" сетей, то есть которые имеют свой (не частный) IP-адрес и учавствуют в непосредственном обмене пакетами между другими маршратизаторами, другими словами, они передают трафик от множества разных (под)сетей другим различным (под)сетям. Остальные же маршрутизаторы, если разделять по этому принципу, будут "пограничными", то есть соединять локальные сети с глобальными и при этом будут передавать пакеты только из одной сети (или подсети) в другие через сеть провайдера, у них, обычно есть интерфейс с частным IP адресов типа 198.0.0.1. К таким маршрутизаторам в основном относятся домашние точки WiFi (или SOHO роутеры), которые являются одновременно еще и коммутаторами и маршрутизаторами (хотя в неокторых случаях эти пограничные маршрутизаторы могут быть и транизтными, если поставить на них нужный софт и включить IP Forwarding).

Также следуем заметить, что понятие роутер = маршрутизатор, то есть это два одинаковых термина, как файрвол (firewall) и межсетевой экран.

Цель.
Итак задача состоит в том, чтобы "выцепить" из общего адресного пространства как можно больше адресов, которые будут являться адресами именно маршрутизаторов, а не конечных хостов (то есть клиентов или серверов, не выполняющих функции маршрутизации по сетям).
Теория.
Самый простой способ - просканировать большие диопазоны IP адресов на наличие определенных сервисов, учавствующих в передачи трафика и на основе этого уже отделить нужные адреса. Но такой способ очень затратный, как по вычислительным ресурсам, так и по временным. К тому же он не даст особой точности, ведь только по информации об открытых портах (особенно портах сервисов, не относящихся к маршрутизации) нельзя определить, является ли эта машина роутером.
Но можно поступить хитрее и косвенно использовать те данные, которые накопились на куче других маршрутизаторов и которые используются при передачи трафика.
То есть идея будет заключаться в том, чтобы посылать запросы на разные хосты и мониторить промежуточные звенья, через которые проходят пакеты. Для этой задачи и была разрботана специальная утилита traceroute, которую и можно исопльзовать. Еще следует заметить, что начало маршрута будет постоянно (или почти постоянно) совпадать, так как пакет сначала будет идти через сеть нашего провайдера, топология и таблицы маршрутизации которого меняются через достаточно большие промежутки времени.
Но тут после определенного количества таких запросов велика вероятность, что нам будут попадаться уникальные (то есть не встречавшиеся до этого) адреса роутеров. Дело в том, что если мы будем отправлять запросы на адреса из одной (под)сети или сетям одного провайдера, то пакеты постоянно будут идти по очень похожему (в некоторых случаях даже идентичному) маршруту.
Эту проблему можно решить следующими путями:
  • traceroute на слабо "похожие" айпишники, разных местоположений (которые могут быть распарсены из разныз GeoIP баз);
  • traceroute на разных провайдеров;
Первый способ несет в себе много гемора с парсингом, к тому же он не обладает достаточной гарантией, что мы не попадем на айпишник из того же провайдера, даже если будет возьмем его из другого территориального региона.
Теперь про реализацию второго способа.
Вся глобальная сеть разделяется на автономные системы (AS), которые в свою очередть включают в себя множество хостов, агрегируемых в (под)сети. Как правило провайдеры имеют от одной AS в своем распоряжении и соединяются с другими AS (то есть с другими провайдерами), через которых потом направляют трафик до места назначения, если оно не в их AS.

Поэтому идея заключается в роутинге IP-адресов из разных AS. И самое удобное для нас свойство, что маршруты в разные AS одного провайдера могут различаться, как маршруты к разным провайдерам. Хотя можно даже роутить через traceroute в одну и ту же AS, но в разные (под)сети, иногда маршруты будут также различаться, как при роутинге в разные AS.
Данные о том, какие диопазоны IP-адресов к каким AS (то есть к AS с какими номерами) можно взять из публичных баз данных регистраторов номеров AS и пулов IP-адресов, я использовал сервис ipinfo.io. На данный момент существует более 50000 AS, то есть мы можем брать AS с номерами от AS1 до AS50000 мы можем брать смело, тем более в этот диопазон не входят частные номера AS (64512-65534) и зарезервированные (0 и 65535)
Практика.
Теперь про конкретный алгоритм действий:
  • берем определенный диопазон номеров AS;
  • получаем диопазоны IP-адресов для кажой из этих AS;
  • для каждого из диопазонов выбираем один IP, на который потом будем роутить через traceroute;
  • через traceroute получаем списки промежуточных узлов и сохраняем их;
Автоматизация.
Для гибкой автоматизации всего этого был написан скрипт (будет прикреплен). Запускать скрипт надо под 3 питоном и также заранее придется установить пару нестандартных модулей (если при запуске ошибок не будет, то модули уже стоят).
Как пользоваться скриптом и как он работает.
Для начала стоит заметить, что все данные скрипт сохраняет в MySQL. То есть перед запуском надо в его начале в соответствуюих переменных указать нужные данные для MySQL сервера. Скрипт сам создаст базу данных и таблицы в ней, которые будут исопльзованы. Также должна быть установлена утилита traceroute (и nmap, если потом будет использоваться опция сканирования).
Описание таблиц: subnets - тут сохраняются диопазоны IP-адресов, выцепленные из различных AS, routers - тут храняться IP адреса, к которым потом будут строиться маршруты через traceroute и добываться уже реальные IP маршрутизаторов, ibgp, ebgp - по этим двум таблицам рассортировываются адреса транзитных маршрутизаторов в конечном итоге, в таблице ibgp храняться адреса маршрутизаторов, которые являются внутринними маршрутизаторами одной AS, то есть маршрутизируют трафик только по ней, в ebgp находятся адреса роутеров, которые являются пограничными, то есть находятся на границах AS и соединяются с AS соседей. Это разделение было обусловлено возможными будущими необходимостями в определениях функций маршрутизаторов.
Для вывода всех опций можно использовать ключ --help.
Для выбора действий надо использовать ключ --action, который принимает 3 значения:
- grab для граббинга AS, то есть диопазонов IP из разных AS и выбирая по одному конкретному адресу из каждого диопазона;
- check для чека через traceroute каждого IP, полученного из предыдущего шага, то есть получение IP-адресов транзитных маршрутизаторов;
- scan для сканирования полученных роутеров на открытые порты и пр (результаты сканирования появляются в текстовом файлв в папке со скриптом);
Вместе с ключом grab надо использовать ключ range, чтобы через запятую указать с какого по какой номера AS будет происходить отбор диопазонов IP адресов, и конкретных IP, на которые потом будут проводиться маршруты через traceroute. Также можно использовать ключ gmode для указания режима, в котором будут выдергиваться IP из AS, если через этот ключ указать значение min, то из каждой AS будет браться только по 1 IP, если значение будет max (по умолчанию), то из для каждой AS будет браться набор диопазоно ее IP и из кадого диопазона браться по 1 IP.
Вместе с ключом check можно использовать ключ tnum, который устанавливает количество потоков (то есть количество одновременных запусков traceroute) во время проверки маршрутов. Это сделано для улучшения скорости выдергивания айпишников из цепочки, так как один сеанс traceroute работает пару десятков секунд. Но слишком много потоков ставить не надо, иначе из-за нагрузки на сеть очень много будут уходить в холостую и отдача будет слишком маленькой, для меня оптимальным числом оказалось 15 потоков. Также с этим ключом можно использовать ключ rnum, который указывает, сколько еще на "опробованных" адресов из таблицы routers можно использовать при построении цепочек через traceroute.
Вместе с ключом scan можно исопльзовать ключ ports, в котором указать через запятую порты для скана, ключ skeys можно использовать для указания дополнительных параметров сканирования для Nmap'a (через него в принципе можно тоже задать порты), и ключ rnum - сколько сканировать роутеров из таблиц ibgp и ebgp.
Функцию сканирования пришлось сделать, так как все резульаты работы скрипта храняться в MySQL, поэтому чтобы их использовать для Nmap'a придется сначала как-то экспортировать, а если в этом нет необходимости, то как раз понадобиться такая функция.
Но функцию экспортирования IP адресов (при чем из любой таблицы, а не только ibgp и ebgp), можно осуществить через ключ export, в котором указать через запятую имена таблиц, откуда будут экспортироваться адреса. После в папке со скриптом появиться файл с адресами, который потом можно также загрузить в тот же Nmap.
Для очистки результатов или какой-либо из таблиц можно воспользоваться ключом clear, в который подать имя (имена через запятую) таблицы, которую нужно очистить, для очистки всех таблиц можно просто в этом ключе прописать "all".
Также есть функция коррекции IP адресов в таблицах, если по какой-то причине они потерпели изменения и какие-то октеты не были разделены точкой, для этого можно использовать ключ fixtable, в который также записать име (имена через запятую) таблицы, в которой надо провести фиксацию.
Во время каждого из процессов скрипт уведомляет о статусе завершенности (в количественных и процентных показателях), а также по завершенею работы пишет о результатах (включая время работы), чтобы желающие могли вести статистику.
Теперь на примере покажу, как можно задействовать скрипт для получения адресов маршрутизаторов.
Возьмем для начала автономные системы с AS10000 по AS11000 и выцепим из них дипоазоны IP, а из них уже конкретные адреса, на которые позже будет проводить маршруты:
python3 routerget.py --action=grab --range=10000,11000
После завершения работы этой операции переходим непосредственно вытягиванию IP-адресов роутеров из маршрутов к полученным на первом шаге адресам (запустим это в 15 потоков и попробуем сначало чекнуть только 1000 IP из различных AS):
python3 routerget.py --action=check --rnum=1000 --tnum=15
После завершения работы можно уже либо экспортировать полученные результаты:
python3 routerget.py --export=ibgp,ebgp
либо сразу же их просканировать (например, просканируем 10 роутеров на откртые 80 и 22 порты, c детектом ОС):
python3 routerget.py --action=scan --rnum=10 --ports=80,22 --skeys=-O
Таким образом можно поставить на автомат и добывать для каких-либо целей довольно большое количество адресов транзитных маршрутизаторов без особых проблем.
« Последнее редактирование: Декабря 21, 2015, 08:21:44 pm от klanc »
by Ar3s - действие аккаунта приостановлено.

Декабря 23, 2015, 09:51:37 am
Ответ #1

Ar3s

  • Administrator

  • Оффлайн
  • *****

  • 1991
    30.12.04
  • Reputation:
    • Просмотр профиля
    • http://dlab.im
Все клево, но это чисто сканирование bgp роутеров. Где продолжение банкета? Я жаждю продолжения. Что можно сделать, как вломиться, что изменить, как поиметь трафик/рекламу/гемор?... Начало просто супер но тему нужно продолжить. Если поднимете хоть один пограничный роутер - просто опишите сам процесс и что из этого вышло по итогу. Потому как тема на самом деле мало изучена в наших кругах и о ней мало кто знает. А тем более не знает что делать с такими роутерами. И юзают под ПРОКСИ!!!!!

Декабря 23, 2015, 10:42:42 am
Ответ #2

klanc

  • Elementary Level

  • Оффлайн
  • ***

  • 72
    03.11.15
  • Reputation:
    115
    • Просмотр профиля
Ar3s да, это только первый этам, получения материала, который потом надо реализовывать, но это не только bgp маршрутизаторы так можно получать, а любые транзитные - OSPF, RIP и др, которые находятся внутри одной сети или AS провайдеров.
Сейчас как раз исследуется процесс реализации всех этих действий уже после получения базы для тестов, насколко сложно, какие проблемы возникают и потенциально могут возникнуть еще, какой результат может получиться в теории и выходит на практике, все это будет, в одной (или даже нескольких) из следующих статей, а вот насколько быстро получиться ее составить пока сказать не могу, к сожалению.
by Ar3s - действие аккаунта приостановлено.

Декабря 23, 2015, 08:27:18 pm
Ответ #3

Dark Koder

  • Elementary Level

  • Оффлайн
  • ***

  • 199
    21.03.10
  • Reputation:
    14
    • Просмотр профиля
    • http://
лучше обьединить в одну тему)
вопрос - как относиться провайдер к такому количеству соединений? все-таки видно трафик ему =)
Magicus Technicus

на уровне пользователя мы формируем реальный ип, админом мы спуфим.
шо за стеб?)

Декабря 23, 2015, 11:04:25 pm
Ответ #4

klanc

  • Elementary Level

  • Оффлайн
  • ***

  • 72
    03.11.15
  • Reputation:
    115
    • Просмотр профиля
Dark Koder хорошее замечание, тут конечно зависит от провайдера, насколько четко он мониторит пользовательский траф, но для огаражевания себя от лишних проблем лучше это все выполнять на каком-нибудь отдельном хостинге или vps, ведь для сервера генерация трафа особых подозрений не возникнет да и там можно вообще все это 24/7 прокручивать без остановок
by Ar3s - действие аккаунта приостановлено.

Декабря 28, 2015, 08:59:04 am
Ответ #5

Ar3s

  • Administrator

  • Оффлайн
  • *****

  • 1991
    30.12.04
  • Reputation:
    • Просмотр профиля
    • http://dlab.im
Сам провайдер редко мониторит по какому пути идет его траф. Оно ушло на внешний шлюз и ладушки. А то что маршрут изменился - отследить не всегда можно. У меня на ядре более 6000 маршрутов для внешнего трафика. Иди отследи что там поменялось... Оно там каждый день нарезает изменения. Только трасерт поможет отследить. Но нужно знать конкретно какой из маршрутов работает "не так".

Декабря 28, 2015, 05:41:23 pm
Ответ #6

instr0ne

  • Elementary Level

  • Оффлайн
  • ***

  • 48
    17.05.15
  • Reputation:
    1
    • Просмотр профиля
Интересная тема. Было бы забавно составить "карту интернета" в виде графов...

Января 25, 2016, 08:45:21 pm
Ответ #7

Dark Koder

  • Elementary Level

  • Оффлайн
  • ***

  • 199
    21.03.10
  • Reputation:
    14
    • Просмотр профиля
    • http://
Ar3s, по графам трацерта очень хорошо можно сделать и увидеть изменения, по крайней мере в юниксе так точно.
а вот про провайдера  так не думаю... почему ему безразлично как идет траф? как же тогда балансировки, выбор лучшего маршрута и пр. пряники? алгоритмы и автоматика сами такое на 100% не осилят в промышленном масштабе.
Magicus Technicus

на уровне пользователя мы формируем реальный ип, админом мы спуфим.
шо за стеб?)

Января 29, 2016, 08:40:28 pm
Ответ #8

Ar3s

  • Administrator

  • Оффлайн
  • *****

  • 1991
    30.12.04
  • Reputation:
    • Просмотр профиля
    • http://dlab.im
Ты действительно думаешь что там есть какая-то магия? Там оптимальность маршрута рассчитывается ядром путем просмотра количества прыжков к той или иной АЗ. Выбирается по дефолту маршрут с минимальным количеством прыжков и туда маршрутизируется траф. Ни один админ в здравом уме туда не лезет. Единственная причина туда лезть - наличие 3 и более пограничных АЗ. Тогда есть смысл посчитать где траф дешевле обходится и больше вкачивать в нужный канал. Но опять же там тупо один раз прописанные правила приоритетов, которые работают годами и всех устраивают.

Января 29, 2016, 10:13:43 pm
Ответ #9

klanc

  • Elementary Level

  • Оффлайн
  • ***

  • 72
    03.11.15
  • Reputation:
    115
    • Просмотр профиля
Добавлю лишь, что есть еще небольшой критерий выбора маршрута - префикс анонсируемой сети, порой может быть, что путь с меньшим префиксом сети имеет более высокий приоритет над альтернативным менее коротким (по хопам) маршрутом. Но сути это не меняет - провайдер сначала делает какую-то настройку своих роутеров, где выставляет фильтры, приоритеты, пиринг и дальше софт на автомате сам всю работу делает, поэтому острой необходимости следить по логике быть не должно у большинства провайдеров. Есть конечно единичные случаи, когда АС принадлежит какому-нибудь банку или другой серьезной организации, для которой все аспекты безопасности играют роль, вот там периодический мониторинг как раз и осуществляется, но таких случаев реально мало.
by Ar3s - действие аккаунта приостановлено.