Хабрахабр

Почему Интернет до сих пор онлайн?

Интернет кажется сильной, независимой и нерушимой структурой. В теории, прочности сети хватит, чтобы пережить ядерный взрыв. В реальности, интернет может уронить один маленький роутер. Все из-за того, что интернет — это нагромождение противоречий, уязвимостей, ошибок и роликов про котиков. Основа интернета — протокол BGP — содержит кучу проблем. Удивительно, что он еще дышит. Кроме ошибок в самом интернете, его еще ломают все кому не лень: крупные интернет-провайдеры, корпорации, государства и DDoS-атаки. Что с этим делать и как с этим жить?

Главная его задача — доступность платформы для пользователей. Ответ знает Алексей Учакин (Night_Snake) — лидер команды сетевых инженеров в компании IQ Option. В конце — пара советов, как все это пережить.
В расшифровке доклада Алексея на Saint HighLoad++ 2019 поговорим про BGP, DDOS-атаки, рубильник от интернета, ошибки провайдеров, децентрализацию и случаи, когда маленький роутер отправил интернет поспать.

День, когда Интернет сломался

Я приведу лишь несколько инцидентов, когда в Интернете ломалась связность. Этого будет достаточно для полной картины.

Первый раз интернет сломался в апреле 1997. «Инцидент с AS7007». В какой-то момент роутер проанонсировал соседям свою внутреннюю таблицу маршрутизации и отправил половину сети в black hole. В ПО одного роутера из автономной системы 7007 была ошибка.

В 2008 году бравые ребята из Пакистана решили заблокировать у себя YouTube. «Пакистан против YouTube». Сделали они это настолько хорошо, что без котиков осталось полмира.

В 2017 году Ростелеком по ошибке начал анонсировать префиксы VISA, MasterCard и Symantec. «Захват префиксов VISA, MasterCard и Symantec компанией Ростелеком». Утечка продолжалась недолго, но финансовым компаниям было неприятно. В результате финансовый трафик направился через канал которые контролирует провайдер.

В августе 2017 Google начал анонсировать в части своих аплинков префиксы крупных японских провайдеров NTT и KDDI. «Google против Японии». Так как Google это не провайдеро и транзитный трафик не пропускает, то значительная часть Японии осталась без Интернета. Трафик отправился в Google как транзитный, скорее всего, по ошибке.

В том же 2017 российский провайдер DV LINK начал зачем-то анонсировать сети Google, Apple, Facebook, Microsoft и некоторых других крупных игроков. «DV LINK захватил префиксы Google, Apple, Facebook, Microsoft».

В 2018 году провайдер из Огайо или кто-то из его клиентов проанонсировал сети Amazon Route53 и криптокошелька MyEtherwallet. «eNet из США захватил префиксы AWS Route53 и MyEtherwallet». Атака прошла успешно: даже несмотря на самоподписанный сертификат, предупреждение о котором появлялось пользователю при заходе на сайт MyEtherwallet, многие кошельки угнали и украли часть криптовалюты.

Сеть все еще децентрализованная, поэтому ломается не все и не у всех. Подобных инцидентов только за 2017 год было больше 14 000! Но инциденты происходят тысячами, и все они связаны с протоколом BGP, на котором работает интернет.

BGP и его проблемы

Протокол BGP — Border Gateway Protocol, впервые был описан в 1989 году двумя инженерами из IBM и Cisco Systems на трёх «салфетках» — листах формата А4. Эти «салфетки» до сих пор лежат в главном офисе Cisco Systems в Сан-Франциско как реликвия сетевого мира.

Автономная система — это просто некоторый ID, за которым в публичном реестре закреплены сети IP. В основе протокола взаимодействие автономных систем — Autonomous Systems или сокращенно — AS. Соответственно, любой маршрут в интернете можно представить в виде вектора, которые называют AS Path. Роутер с таким ID может анонсировать в мир эти сети. Вектор состоит из номеров автономных систем, которые нужно пройти, чтобы достичь сети назначения.

Нужно попасть из системы AS65001 в систему AS65003. Например, есть сеть из некоторого количества автономных систем. Он состоит из двух автономок: 65002 и 65003. Путь от одной системы представлен AS Path на схеме.

BGP — это протокол доверия

Протокол BGP — trust based. Это значит, что мы по умолчанию доверяем нашему соседу. Это особенность многих протоколов, которые разрабатывались на самой заре интернета. Разберемся, что значит «доверяем»

Формально есть MD5, но MD5 в 2019 году — ну такое… Нет аутентификации соседа.

У BGP есть фильтры и они описаны, но ими не пользуются, либо пользуются неправильно. Нет фильтрации. Позже объясню, почему.

Настройка соседства в протоколе BGP почти на любом роутере — пара строчек конфига. Очень просто установить соседство.

Не нужно сдавать экзамены, которые подтвердят вашу квалификацию. Не требуются права на управление BGP. Никто не отберет права за настройку BGP в пьяном виде.

Две основные проблемы

Угоны префиксов — prefix hijacks. Угон префикса — анонсирование сети, которая вам не принадлежит, как в случае с MyEtherwallet. Мы взяли некоторые префиксы, договорились с провайдером или взломали его, и через него анонсируем эти сети.

С утечками немного сложнее. Утечки маршрутов — route leaks. В лучшем случае изменение приведет к большей задержке, потому что нужно пройти маршрут длиннее или по менее емкому линку. Утечка — это изменение AS Path. В худшем — повторится случай с Google и Японией.

Но когда он проанонсировал своему провайдеру сети японских операторов, то трафик через Google по AS Path виделся как более приоритетный. Сам Google не оператор и не транзитная автономная система. Трафик пошел туда и дропнулся просто потому, что настройки маршрутизации внутри Google сложнее, чем просто фильтры на границе.

Почему не работают фильтры?

Nobody cares. Это главная причина — всем все равно. Админ маленького провайдера или компании, которая подключилась к провайдеру по BGP, взял MikroTik, настроил на нем BGP и даже не знает, что там можно настраивать фильтры.

Что-то дебажили, ошиблись в маске, поставили не ту сеточку — и вот, снова ошибка. Ошибки конфигурации.

Например, у провайдеров связи много клиентов. Нет технической возможности. Следить за этим сложно, руками — еще сложнее. По-умному следует автоматически обновлять фильтры для клиентов — следить, что у него появляется новая сеть, что он сдал свою сеть кому-то в аренду. Поэтому ставят просто расслабленные фильтры либо не ставят фильтры вообще.

Бывают исключения для любимых и больших клиентов. Исключения. Например, у ТрансТелеКом и Ростелеком куча сетей и между ними стык. Особенно в случае с межоператорскими стыками. Если стык ляжет — хорошо никому не будет, поэтому фильтры расслабляют либо убирают совсем.

Фильтры строятся на основе информации, которая записана в IRR — Internet Routing Registry. Устаревшая/неактуальная информация в IRR. Часто в реестрах устаревшая или неактуальная информация, либо все вместе. Это реестры региональных интернет-регистраторов.

Кто такие эти регистраторы?

Когда вы покупаете у кого-то сеть IP, то покупаете не адреса, а право их использования. Все адреса в интернете принадлежат организации IANA — Internet Assigned Numbers Authority. Адреса — это нематериальный ресурс, и по общей договоренности все они принадлежат агентству IANA.

IANA делегирует управление IP-адресами и номерами автономных систем пяти региональным регистраторам. Система работает так. Дальше LIR выделяют IP-адреса конечным пользователям. Те выдают автономные системы LIR — локальным интернет-регистраторам.

У каждого свои взгляды на то, какая информация должна содержаться в реестрах, кто ее должен или не должен проверять. Недостаток системы в том, что каждый из региональных регистраторов ведет свои реестры по-своему. В результате получается бардак, который ест сейчас.

Как еще можно бороться с этими проблемами?

IRR — посредственное качество. С IRR понятно — там все плохо.

Это некоторый атрибут, который описан в протоколе. BGP-communities. Когда у нас линк P2P, мы обмениваемся только своими сетями. Мы можем навесить, например, специальное community на наш анонс, чтобы сосед не отправлял наши сети своим соседям. Чтобы случайно маршрут не ушел в другие сети, мы навешиваем community.

Это всегда договор на двоих и это их недостаток. Community не транзитивны. Мы не можем быть уверены, что это community все примут и правильно интерпретируют. Мы не можем навесить какое-нибудь community, за исключением одного, которое принимается по умолчанию всеми. Но может не понять его сосед, либо оператор просто сбросит вашу метку, и вы не достигнете того, чего хотели. Поэтому, в лучшем случае, если вы договоритесь со своим uplink, он поймет, что вы от него хотите по community.

RPKI — это Resource Public Key Infrastructure — сертификат интернет-ресурса. RPKI + ROA решает только малую часть проблем. Но с ним есть одна проблема. Хорошая идея, чтобы заставить LIR-ов и их клиентов вести актуальную базу адресного пространства.

Как вообще работает RPKI + ROA? RPKI, кроме того, что сертификат, это еще и иерархическая система открытых ключей. Организация распространяет интернет-ресурсы через региональных регистраторов — RIR, те — распределяют их локальным — LIR, а те уже распределяют интернет-ресурсы между своими клиентами. В основе всего лежит IANA.

У IANA есть свой ключ или сертификат. RPKI и ROA все это сопровождают при каждом распределении. Дальше RIR создает ключ-сертификат для LIR, которыми они подписывают своё адресное пространство: Для RIR она создает ключ-сертификат со своей подписью.

— Я заверяю, что этот префикс будет анонсироваться от имени вот этой автономки.

Но она не защищает нас от утечек от слова «совсем» и не решает все проблемы с угонами префиксов. Кажется, что штука хорошая и полезная. Хотя уже от крупных игроков типа AT&T и крупных IX-ов есть заверения, что префиксы с invalid-записью ROA будут дропаться. Поэтому игроки не очень торопятся ее внедрять.

С одной стороны, непонятно, валидно ли они анонсируются. Возможно они будут это делать, но пока у нас огромное количество префиксов, которые никак не подписаны. С другой — мы не можем их дропать по умолчанию, потому что не уверены в том, правильно это или нет.

Что есть ещё?

BGPSec. Это клевая штука, которую придумали академики для сети розовых пони. Они сказали:

Давайте заведем отдельный BGP-атрибут и назовем его BGPSec Path. — У нас есть RPKI + ROA — механизм заверения подписи адресного пространства. Так мы получим доверенный путь из цепочки подписанных анонсов и сможем его проверить. Каждый роутер будет подписывать своей подписью анонсы, которые он анонсирует соседям.

BGPSec ломает много существующих механик BGP по выбору next-hop и управлению входящим/исходящим трафиком непосредственно на маршрутизаторе. В теории хорошо, а на практике много проблем. BGPSec не работает, пока его не внедрят 95% участников всего рынка, что само по себе утопия.

На текущем железе скорость проверки анонсов примерно 50 префиксов в секунду. У BGPSec огромные проблемы с производительностью. Для сравнения: текущая таблица интернета в 700 000 префиксов будет заливаться 5 часов, за которые еще 10 раз поменяется.

Свежее предложение на основе модели Гао-Рексфорда. BGP Open Policy (Role-based BGP). Это два ученых, которые занимаются исследованием BGP.

Если упрощать, в случае с BGP есть небольшое число типов взаимодействий: Модель Гао-Рексфорда заключается в следующем.

  • Provider Customer;
  • P2P;
  • внутреннее взаимодействие, допустим, iBGP.

На основании роли маршрутизатора уже можно по умолчанию навешивать некие политики импорта/экспорта. Администратору не нужно конфигурировать префикс-листы. На основании роли, о которой договорятся между собой маршрутизаторы и которую можно выставить, мы уже получаем некоторые дефолтные фильтры. Сейчас это draft, который обсуждается в IETF. Надеюсь, что скоро мы увидим это в виде RFC и имплементации на железе.

Крупные Интернет-провайдеры

Рассмотрим на примере провайдера CenturyLink. Это третий по величине провайдер США, который обслуживает 37 штатов и имеет 15 дата-центров. 

Во время инцидента были проблемы с работой банкоматов в двух штатах, несколько часов не работал номер 911 в пяти штатах. В декабре 2018 года CenturyLink лежал на рынке США 50 часов. По этому инциденту комиссия по электросвязи США сейчас ведет расследование. До кучи сорвали лотерею в Айдахо.

Карточка вышла из строя, отправляла некорректные пакеты и все 15 дата-центров провайдера легли. Причина трагедии в одной сетевой карточке в одном дата-центре.

Эта идея вообще не работает. Для этого провайдера не сработала идея «слишком большой, чтобы упасть». В США еще все хорошо со связанностью. Можно взять любого крупного игрока и положить какой-то мелочью. Потом альтернативные операторы жаловались на перегрузку своих линков. Клиенты CenturyLink, у которых был резерв, массово ушли в него.

Если ляжет условный «Казахтелеком» — вся страна останется без интернета.

Корпорации

Наверно на Google, Amazon, FaceBook и других корпорациях держится интернет? Нет, они его тоже ломают.

В нем говорится, что мы привыкли, что взаимодействие, потоки денег и трафик в интернете вертикальны. В 2017 году в Санкт-Петербурге на конференции ENOG13 Джефф Хьюстон из APNIC представил доклад «Смерть транзита». У нас есть маленькие провайдеры, которые платят за связанность более крупным, а те уже платят за связанность глобальному транзиту.

Все бы хорошо, но мир меняется — крупные игроки строят свои трансокеанские кабели для постройки собственных backbones. Сейчас у нас такая вертикально-ориентированная структура.


Новость о CDN-кабеле.

Это трафик, который имеет отношение к интернету, но это уже не та сеть, о которой мы говорили. В 2018 году TeleGeography выпустил исследование, что больше половины трафика в интернете — это уже не интернет, а backbones CDN крупных игроков.

Интернет распадается на большой набор слабосвязанных друг с другом сетей.

У Microsoft есть своя сеть, у Google — своя, и друг с другом они слабо пересекаются. Трафик, который зародился где-то в США, идет по каналам Microsoft через океан в Европу где-то на CDN, дальше через CDN или IX стыкуется с вашим провайдером и попадает к вам в роутер.

Децентрализация исчезает.

Эта сильная сторона интернета, которая поможет ему выжить после ядерного взрыва, теряется. Появляются места концентрации пользователей и трафика. Если ляжет условный Google Cloud — будет много пострадавших разом. Частично мы это почувствовали, когда Роскомнадзор заблокировал AWS. А на примере CenturyLink видно, что для этого хватит и мелочи.

В будущем мы можем прийти к тому, что, повлияв на одного крупного игрока, можно поломать много чего, много где и много у кого. Раньше ломалось не все и не у всех.

Государства

Следующие на очереди государства, и с ними происходит обычно так.

Подобная практика Internet shutdown есть в Иране, Индии, Пакистане. Здесь наш Роскомнадзор вообще даже ни разу не пионер. В Англии есть законопроект о возможности отключения интернета.

Они не то, чтобы не понимают, что у них это никогда не получится, но очень этого хотят. Любое крупное государство желает получить рубильник для отключения интернета либо полностью, либо частями: Twitter, Telegram, Facebook. Применяют рубильник, как правило, в политических целях — для устранения политических конкурентов, или выборы на носу, или русские хакеры опять что-нибудь сломали.

DDoS-атаки

Не буду отнимать хлеб у товарищей из Qrator Labs, они это делают гораздо лучше меня. У них есть ежегодный отчет по стабильности интернета. И вот, что они написали в отчете за 2018 год.

5 часов. Средняя продолжительность DDoS-атак падает до 2. Атакующие тоже начинают считать деньги, и если ресурс не лег сразу, то его быстро оставляют в покое.

В 2018 году мы видели 1. Растёт интенсивность атак. 7 Тб/с на сети Akamai, и это не предел.

Появляются новые протоколы, подверженные амплификации, появляются новые атаки на существующие протоколы, особенно на TLS и подобные. Появляются новые векторы атак и усиливаются старые.

При этом интернет-трафик переходит на мобильных клиентов. Большая часть трафика — мобильные устройства. С этим нужно уметь работать как тем, кто атакует, так и тем, кто защищается.

Это главная мысль — не существует и не появится универсальной защиты, которая точно защитит от любого DDoS. Неуязвимых — нет.

Систему нельзя положить, только если она не подключена к интернету.

Надеюсь, я вас достаточно напугал. Давайте теперь подумаем, что с этим делать.

Что делать?!

Если у вас есть свободное время, желание и знание английского — участвуйте в рабочих группах: IETF, RIPE WG. Это открытые mail-листы, подписывайтесь на рассылки, участвуйте в обсуждениях, приезжайте на конференции. Если у вас есть статус LIR, то можете голосовать, например, в RIPE за разные инициативы.

Чтобы знать что сломалось. Для простых смертных — это мониторинг.

Мониторинг: что проверять?

Обычный Ping, причем не только бинарная проверка — работает или нет. Записывайте RTT в историю, чтобы потом смотреть аномалии.

Это служебная программа для определения маршрутов следования данных в сетях TCP/IP. Traceroute. Помогает выявлять аномалии и блокировки.

Блокировки часто выполняются подменой DNS и с заворачиванием трафика на страницу заглушки. HTTP checks-проверки custom URL и TLS certificates помогут обнаружить блокировки либо подмену DNS для атаки, что практически одно и то же.

Так вы обнаружите аномалии перехвата DNS, чем иногда грешат провайдеры. Если есть возможность, то с ваших клиентов проверяйте resolve вашего origin из разных мест, если у вас приложение.

Мониторинг: откуда проверять?

Универсального ответа нет. Проверяйте там, откуда приходит пользователь. Если пользователи сидят в России — проверяйте из России, но не ограничивайтесь ей. Если ваши пользователи живут в разных регионах — проверяйте из этих регионов. Но лучше со всего мира.

Мониторинг: чем проверять?

Я придумал три способа. Если знаете больше — напишите в комментариях.

  • RIPE Atlas.
  • Коммерческий мониторинг.
  • Своя сеть виртуалок.

Поговорим о каждом из них.

Для тех, кто знает отечественный «Ревизор» — это такая же коробочка, но с другой наклейкой. RIPE Atlas — это такая маленькая коробочка.

Вы регистрируетесь, получаете по почте роутер и включаете его в сеть. RIPE Atlas — бесплатная программа. На эти кредиты вы можете сами проводить какие-то исследования. За то, что кто-то другой пользуется вашей пробой вам капают некоторые кредиты. Покрытие довольно большое, много нод. Можно тестировать по-разному: ping, traceroute, проверять сертификаты. Но есть нюансы.

Кредитов на постоянное исследование или коммерческий мониторинг не хватит. Система кредитов не позволяет строить продакшн-решения. Дневная норма с одной пробы съедается 1-2 проверками. Кредитов хватает на короткое исследование либо one-time проверку.

Так как программа бесплатна в обе стороны, то покрытие хорошее в Европе, в европейской части России и некоторых регионах. Покрытие неравномерно. Но если вам нужна Индонезия или Новая Зеландия, то все сильно хуже — 50 проб на страну может не набраться.

Это вызвано техническими нюансами. Нельзя проверять http с пробы. Можно проверить только сертификат. Обещают пофиксить в новой версии, но пока http проверять нельзя. Какой-то http check можно сделать только до специального устройства RIPE Atlas, которое называется Anchor.

С ним же все хорошо, вы же деньги платите? Второй способ — коммерческий мониторинг. Но, опять же, есть проблемы. Вам обещают несколько десятков или сотен точек мониторинга по всему миру, рисуют красивые дашборды «из коробки».

Мониторинг пингом, проверки со всего мира и множество http-проверок могут стоить несколько тысяч долларов в год. Это платно, местами очень. Если финансы позволяют и вам нравится это решение — пожалуйста.

Тем же пингом уточняют максимум абстрактную часть света — Азию, Европу, Северную Америку. Покрытия может не хватать в интересующем регионе. Редкие системы мониторинга могут детализировать пробу до конкретной страны или региона.

Если вам нужно что-то кастомное, а не просто «курлык» на url, то с этим тоже проблемы. Слабая поддержка custom-тестов.

Это классика: «А давайте напишем свое!» Третий способ — свой мониторинг.

Вы ищете провайдера инфраструктуры, смотрите, как это деплоить и мониторить — мониторинг же нужно мониторить, правильно? Свой мониторинг превращается в разработку программного продукта, причем распределенного. Десять раз подумайте, прежде чем за это возьметесь. А еще требуется поддержка. Возможно, проще заплатить кому-нибудь, кто это сделает за вас.

Мониторинг BGP-аномалий и DDoS-атак

Здесь по доступным ресурсам все еще проще. BGP-аномалии обнаруживаются с помощью специализированных сервисов типа QRadar, BGPmon. Они принимают full view-таблицу от множества операторов. На основании того, что они видят от разных операторов, могут обнаружить аномалии, искать амплификаторы и прочее. Обычно регистрация бесплатная — забиваете номер своей автономки, подписываетесь на уведомления на почту, и сервис алертит ваши проблемы.

Как правило, это NetFlow-based и логи. В мониторинге DDoS-атак тоже все просто. На крайний случай есть ваш поставщик DDoS-защиты. Есть специализированные системы типа FastNetMon, модули для Splunk. Ему тоже можно сливать NetFlow и на его основании он будет оповещать вас об атаках в вашу сторону.

Выводы

Не питайте иллюзий — интернет обязательно сломается. Сломается не всё и не у всех, но 14 тысяч инцидентов за 2017 год намекают, что инциденты будут.

Как минимум, не позже, чем ваш пользователь. Ваша задача — заметить проблемы как можно раньше. План — это стратегия, что вы будете делать, когда все сломается: резервные операторы, ДЦ, CDN. Мало того, что необходимо заметить, всегда держите в запасе «план Б». План должен работать без привлечения сетевых инженеров, потому что их обычно мало, и они хотят спать. План — это отдельный чек-лист, по которому проверяете работу всего.

Желаю вам высокой доступности и зеленого мониторинга. На этом все.

В Сибири прогнозируется фронт докладов про мониторинг, доступность и тестирование, безопасность и менеджмент. На следующей неделе в Новосибирске ожидается солнце, хайлоад и высокая концентрация разработчиков на HighLoad++ Siberia 2019. Рекомендуем отложить все дела 24 и 25 июня и бронировать билеты. Ожидаются осадки в виде исписанных конспектов, нетворкинга, фотографий и постов в соцсетях. Ждем вас в Сибири!

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть