Немного теорий заговора. Сетевого уровня.

Маршрутизаторы – эффективное направление атак на сети, которые являются сегментами глобальной Сети. В подавляющем большинстве случаев, если “погасить” несколько умело выбранных маршрутизаторов, сеть падает полностью, несмотря на попытки резервирования, предпринятые при проектировании и построении сегмента. Хрестоматийная ситуация: резервные маршрутизаторы не справляются с изменившейся конфигурацией сети; причин может быть много разных – от возросшего трафика, до невозможности обмена управляющей информацией в результате возникших в сети “штормов”. Например, предполагается, что довольно давний случай с глобальной аварией сети в Сирии был вызван тем, что специалисты АНБ, во время операции по удалённому внедрению (обновлению?) программных закладок, случайно “уронили” ключевой маршрутизатор.

Интересно, как можно обнаруживать подобные действия?

Предположим, доверять маршрутизатору нет оснований, поэтому сразу считаем, что там есть закладки. Естественно, крайний вариант закладки – это продвинутый kill switch, срабатывающий по какой-нибудь последовательности в проходящих через маршрутизатор данных. Обнаружить его до срабатывания – чрезвычайно сложно, поэтому противодействовать не получится. Можно рассчитывать, что нет универсального “выключателя”, поэтому взамен вышедших из строя удастся быстро ввести новые маршрутизаторы. (Наличие подобного инструмента, конечно, вообще выглядит довольно фантастично. Тем не менее, совсем не рассматривать его тоже нельзя.)

С универсальным выключателем – мало что можно сделать. Но возможен более мягкий вариант: наличие несанкционированного удалённого доступа к маршрутизатору (через недокументированные возможности). Такой доступ позволяет управлять настройками и, скажем, выстраивать хитрые логические атаки. Каналы, реализующие доступ, могут быть хорошо замаскированы средствами стеганографии. Быстрый поток там не нужен, достаточно передавать несколько десятков коротких команд в минуту. Поэтому набор транспортов – радует свой широтой. Можно передавать биты “полезной нагрузки” в заголовках пакетов (TCP, IP, UDP и т.п. – выбирайте сами). Для этого нужно знать маршруты и располагать узлами, находящимися по разные стороны от контролируемого маршрутизатора: пакеты должны ходить через маршрутизатор, чтобы процессоры могли считывать недокументированные команды и отвечать на них. Естественно, можно ограничиться и отправкой пакетов только снаружи, лишь бы они достигали маршрутизатора, но вариант с трафиком, проходящим “через пару портов”, гораздо более привлекателен с точки зрения реализации недокументированных возможностей: во-первых, так проще реализовать скрытую обработку (из-за архитектуры маршрутизатора); во-вторых, больше способов отправить ответ. С ответами – вообще отдельная задача. Маршрутизатор не может просто так заменять какие-то параметры в заголовках, допустим, произвольных пакетов – велика вероятность ненамеренно испортить значимые данные, тем самым демаскировав всю операцию. Но зато специально выделенные пакеты – можно заменить (или сгенерировать) полностью, даже вместе с содержимым. Выделить пакеты для связи помогут ранее отправленные команды, сам пакет – будет передан узлом, находящимся за одним из портов, но данные в пакете заменяются маршрутизатором (пакет передаётся для того, чтобы не рисковать поднятием флагов во всяких системах учёта трафика, повсеместно внедрённых – они считают именно пакеты и иногда их длину; впрочем, перекос даже в один процент – вряд ли вызовет подозрения).

IP или, например, UDP, оказываются универсальными в силу того, что работают на общем для всех узлов IP-сети логическом уровне. При этом другие протоколы спускаются на несколько уровней ниже. Так, есть инструменты VLAN (виртуальные сети) и другие логические элементы, невидимые для IP. Связанные с ними протоколы также можно было бы использовать для передачи недокументированных сигналов. Однако из-за того, что свойства даже соседствующих сетей на соответствующих уровнях очень сильно разнятся, тут встречаются трудности. С другой стороны, можно представить ситуацию, когда использование расширений стандарта Ethernet (например) позволяет скрывать от анализаторов трафика, работающих параллельно маршрутизаторам, целый пласт ходящих по физической линии связи данных. Элементарный пример, понятный каждому: представим, что для анализа трафика используется обычный компьютер и Wireshark, но продвинутая сетевая карта – игнорирует часть пакетов, например, обнаружив в заголовке Ethernet некоторый заранее зашитый в процессор карты индекс (заметьте, что такое поведение аналогично штатной функции, позволяющей разграничивать VLAN-ы). Понятно, что Wireshark в таком случае не будет видеть часть трафика, и обнаружить, что видны не все пакеты, вряд ли получится. Конечно, пакеты могло бы прятать и ядро ОС, но аппаратная фильтрация сетевой картой – куда как более эффективна: зафиксировать передачу данных теперь можно только при помощи логического анализатора, подключенного непосредственно к проводам. А вот уже представить себе логический анализатор, который прячет сигналы, гораздо сложнее, чем только что описанную конфигурацию с продвинутой сетевой картой. Но многие ли мониторят сети при помощи логических анализаторов? (Вопрос даже не риторический, а скорее похож на шутку.)

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



Comments Off on Скрытое управление пограничными маршрутизаторами

River and a fieldОсновой для объединения множества сетей в Интернет является понятие автономной системы (AS). В случае Интернета, а точнее, в случае IP, автономная система – это вовсе “не вычислительная система, способная работать автономно”, а, фактически, набор маршрутизаторов, формирующих видимую для Интернета IP-сеть, которая находится под единым управлением. В рамках этого управления определяется то, как внутри этой сети доставляются пакеты. (В терминологии IP – группа маршрутизаторов с общей собственной политикой маршрутизации). Очень важная оговорка: этот “набор маршрутизаторов” подключен к другим автономным системам. То есть, определение автономной системы (AS) обладает некоторой занятной рекурсивностью: нельзя определить понятие AS, если нет других AS. Почему? Потому что “единое управление маршрутизацией” определяется с внешней точки зрения. Грубо говоря, подключающиеся к данной AS через пограничный узел – видят внутреннюю политику маршрутизации как единую. Как ни странно, эта политика не обязана являться единой, если вы вдруг влезли внутрь AS и исследуете взаимосвязи между составляющими её узлами. Определение автономной системы – не столько техническое, сколько административное. Автономные системы в Интернете пронумерованы, и за каждой из них закреплено некоторое подмножество адресного пространства IP (так называемые IP-префиксы, обозначающие “непрерывные” блоки адресов), а смотрят они друг на друга, используя BGP.

BGP – или Border Gateway Protocol – это строго описанный формальный интерфейс, который автономные системы используют для формирования представления о маршрутах в Интернете. Фундамент BGP – обмен информацией о возможностях доставки пакетов. То есть, это внешний протокол взаимодействия между AS. Элементарную основу такого взаимодействия составляет распространение информации о желании автономных систем, являющихся соседними, доставлять пакеты в адрес того или иного IP-префикса. Под “соседними” подразумевается, что пограничные маршрутизаторы этих AS взаимодействуют непосредственно (заметьте, это не означает, что маршрутизаторы физически соединены напрямую). На логическом стыке между маршрутизаторами появляется понятие анонса: одна автономная система анонсирует префикс, а вторая – принимает или не принимает данный анонс. Отсюда же вырастают все другие конструкции, определяющие пути пакетов в глобальной Сети. Самой известной такой конструкцией является таблица Full View – глобальная сводная таблица путей (маршрутов), построенная для той или иной точки Сети.

Вот. При чём же здесь связность? Дело в том, что исследование BGP – подчеркну: внешнего протокола маршрутизации, – выливающееся, например, в анализ взаимной “видимости” AS по таблице Full View, это не более чем исследование BGP. Связность Сети – существенно сложнее. Например, распространена ситуация, когда некоторые операторы устраивают между собой широкий канал, который, между тем, никак не анонсируется наружу: в общедоступном BGP его нет, а соответствующие автономные системы, хоть и имеют прямой канал между собой, используют его только чтобы друг к другу ходить. Пример (реальный): сеть роботов поисковой системы и тот или иной крупный хостер. Хостеру нередко выгодно напрямую подключить поисковик к своим фермам, чтобы он индексировал сайты, чем платить кому-то за транзит того же трафика. Это пример лучшей реальной связности, по сравнению с глобальной картиной.

Обратный пример (не менее реальный): внутри некоторой выборки автономных систем анализ BGP обнаруживает большое количество путей и высокую степень “видимости” (когда одна AS анонсирует префиксы других AS). Вроде бы, это говорит о высокой связности. В реальности же все физические каналы между этими автономными системами, хоть и принадлежат разным операторам, но сходятся в одной общей канализации – поэтому единственный точечный удар ковшом экскаватора разом прерывает все, казавшиеся надёжными, связи. Чуть более продвинутый вариант: в BGP вовсе не видно ёмкости канала, наличие пути говорит лишь о том, что ближайшая AS готова принять пакеты для данного префикса (заметьте, эта AS вообще может задумать какую-нибудь атаку, так что вовсе не собирается доставлять пакеты в заявленном направлении). Соответственно, когда ковш экскаватора где-то уничтожает широкий канал, перераспределённый трафик успешно затапливает заявленные в BGP пути, которые ещё за сутки до этого служили основанием для демонстрации “высокой степени связности”.

При этом, сам по себе анализ BGP является очень полезным инструментом. Но его эффективность велика только при “локальном” применении, когда результат используется в разрезе информации о внутренней топологии сети, например, берётся в связке с данными мониторинга трафика (NetFlow и эквиваленты). При глобальном же использовании – нельзя забывать, что таким образом проводится лишь анализ таблиц BGP, а вовсе не оценка связности Интернета.



Комментарии (2) »

Old computer(На правах технократического юмора.) Если кто не знает, то “циска” – это собирательное название маршрутизаторов, произошедшее от Cisco и почти ставшее нарицательным. Известно, что если отключить достаточное число маршрутизаторов, то национальный сегмент Интернета потеряет внутреннюю связность (а не только связность с глобальной Сетью). То есть внешняя атака, отключающая “циски”, приводит к пропаданию Интернета в выбранной стране. Естественно, маршрутизаторы содержат уязвимости-закладки, некоторые из них позволяют маршрутизатор не просто отключить, а убить совсем. Идеальным решением задачи активации закладки является передача в составе трафика специального ключа.

Маршрутизаторы копируют все пакеты и обязательно анализируют часть их заголовков, а факультативно – содержимое самих пакетов. Так что обнаружив ключ активации в составе полученного пакета данных, маршрутизатор отключается. Ключ может представлять собой строку из 256 бит, соответственно подобрать его не представляется возможным. Понятно, что программная реализация проверки валидности полученного кода должна быть устроена так, что сам код на основании анализа алгоритма вычислить не удастся. Это очень важный аспект: иначе кто-то сможет получить ключ уничтожения в своё распоряжение, прикупив одну уязвимую “циску”.

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

Предположим, что пакет, содержащий “смертельный код”, отправляется внешним узлом в направлении ближайшего пограничного маршрутизатора атакуемого сегмента сети. Если маршрутизатор, получив пакет, умирает немедленно, то гарантировать можно лишь уничтожение этого самого маршрутизатора – остальные узлы-маршрутизаторы останутся работоспособными, а вот связь их с внешним сетевым миром прервётся, поэтому вырубить их извне уже не получится. Проблема.

Допустим, маршрутизатор сперва отправляет пакет далее по маршруту, и лишь потом – умирает. При такой схеме возможно вывести из строя один из маршрутов, в который входит начальный маршрутизатор, да и то – гарантировать ничего нельзя: пакет может потеряться в пути, а переслать его повторно будет уже некому. Так как маршрутов доставки пакетов обычно несколько, получаем проблему с покрытием: после того, как откажет несколько “цисок”, эпидемия затихнет, а связность сохранится.

Естественно, можно продолжать бомбардировать все доступные узлы пакетом, содержащим смертельный код, но есть и другое решение. Для качественного уничтожения связности пакеты должны пройти через каждый маршрутизатор, обеспечивающий работу национального сегмента Сети. При этом желательно, чтобы вредоносные пакеты вообще не покидали пределов сегмента. Это означает, что источником пакетов должны быть пользовательские компьютеры – тогда они заведомо охватят большое число маршрутизаторов, а распространяться эпидемия отключений начнёт с самого подходящего уровня: ведь без конечных пользователей Интернет не имеет особого смысла.

Как получить нужный эффект? Например, использовать механизм, встроенный в распространённую операционную систему. Пусть в определённый момент центральные серверы, куда эта операционная система обращается за обновлениями, отправят некий “праймер” – сигнал к атаке. После этого операционная система в любой пакет исходящего трафика встраивает убивающий маршрутизаторы код и – вуаля, сегмент посыпался, причём падают маршрутизаторы во всех возможных путях доставки пакетов к пользователям, покрытие идеальное. Естественно, операционная система пользовательских компьютеров не содержит секретного кода: он передаётся центральными серверами, в зашифрованном виде, чтобы не вызвать преждевременного срабатывания. От конечного компьютера требуется только расшифровать код и вернуть его обратно в Сеть – самая обычная операция, кстати, не вызывает подозрений, встречается во многих протоколах, так как может являться чем-то вроде проверки электронной подписи или служить частью системы аутентификации.

А после того как в национальном сегменте умерли хотя бы две трети “цисок”, на восстановление связности потребуются многие месяцы (не исключено, что и годы).



Комментарии (10) »

Кстати, я не так давно писал, что гипотетически возможен вариант с “внешним отключением Интернета“. Однако, насколько можно судить, сейчас в новостях речь идёт не просто об отключении Рунета, а о том, чтобы получить возможность всё же использовать Интернет, в том случае, если от него пытаются отключить внешние силы.

Вообще, разумными представляются действия, направленные на сохранение присутствия в глобальной Сети, вне зависимости от внешних попыток отключения. Действующая сейчас глобальная инфраструктура, конечно, создаёт тут весьма заметные трудности, но их можно и преодолеть. Неотключаемый (для всех) Интернет – был бы наиболее интересен. Однако, он, пока что, невозможен.

Технически, сломать национальный сегмент можно, если ломающая сторона обладает достаточными полномочиями и ресурсами. Тут сомнений быть не может. Ломать, естественно, нужно не на уровне DNS, а на уровне BGP (то есть, на уровне маршрутизации). Если у вас не работает BGP, то национальный сегмент разваливается на множество автономных систем, которые не могут обмениваться трафиком. То есть, нет даже единого интранета. Естественно, DNS при этом тоже не работает. Но локальные сети – остаются. Также, остаётся “локальный” обмен трафиком, если между несколькими автономными системами установлены прямые подключения (“пиры”). Например, у “Яндекса” есть прямые каналы к крупным российским хостингам (возможно, и к зарубежным). Эти каналы не видны для всего остального Интернета. (Не видны – в терминах BGP.)

(Очень интересно будет вспомнить, что отключение Интернета в Сирии, если верить иностранной прессе, произошло из-за ошибки сотрудников АНБ, которые удалённо ковырялись в пограничном маршрутизаторе и – сломали его. Медийное пространство хорошо выстроено, да.)



Комментарии (1) »

Между прочим, сильный противник в Интернете может сделать гораздо больше, чем просто устраивать банальные DDoS. Сильный противник – это игрок уровня АНБ, например. А самый действенный вариант здесь – активная атака на ключевые маршрутизаторы и на BGP.

Известно, что системное программное обеспечение маршрутизаторов содержит уязвимости. Это касается не только “домашних роутеров”, но и дорогих продуктов уровня Cisco. Эти уязвимости, вероятно, позволяют не просто остановить работу маршрутизатора, но повлиять на то, как работает большой сегмент сети, где взломанный маршрутизатор находится. Маршрутизатор позволяет делать с трафиком всё что угодно, в том числе, проводить инъекцию пакетов, заменять данные в пакетах и выполнять другие, не менее занимательные, вещи. Атаковать маршрутизатор можно удалённо, а если он удачно расположен, то послужит отличной отправной точкой для проведения других атак.

Что касается BGP (это протокол обмена информацией о сетевых маршрутах, определяющий то, как ходят пакеты в Сети): здесь поможет использование точек присутствия на основных магистралях для воздействия на BGP . При должном масштабе и информированности атакующего эта, вполне себе инфраструктурная, атака может заставить трафик в выбранном сегменте Интернета “ходить не туда”. Естественно, захваченные чужие маршрутизаторы служат идеальным базисом для BGP-атак.



Комментарии (1) »

В Renesys нашли много подтверждений тому, что целевой перехват трафика в Интернете реализуется и путём подмены маршрутов через BGP. Странно, конечно, что они в заголовке называют такое явление “новой угрозой” (The New Threat) – подобные методы известны достаточно давно: например, я писал об одном из сценариев BGP-перехвата в начале 2010 года, это равно тот механизм, который пронаблюдали в Renesys. Но, похоже, сейчас к этой теме привлекут внимание.

Проблема там следующая. Логическую основу Интернета, как сети передачи данных, составляют автономные системы (AS) – это обособленные вычислительные сети, имеющие собственную административную и техническую политику. Существует старый протокол BGP, по которому пограничные узлы-маршрутизаторы автономных систем обмениваются информацией об известных путях доставки пакетов данных. Эти пути (“роуты”) формируют динамическую глобальную систему маршрутов, благодаря которой пакеты от узла в одной автономной системе могут быть доставлены узлу в другой автономной системе, проследовав через ряд транзитных автономных систем. Так работает глобальная Сеть. У BGP есть фундаментальные особенности, которые позволяют автономным системам, активно манипулирующим маршрутами, “заводить” к себе трафик, предназначенный для любой другой автономной системы. Делать так можно даже в том случае, если атакующая система не являлась, в штатном варианте, транзитной для перехватываемого пути (маршрута). Другими словами – узел, находящийся, например, в Праге, может слушать IP-трафик между двумя узлами, находящимися в Вашингтоне.

Image: Renesys

Почему это возможно? Грубо говоря, потому, что в BGP нет эффективных механизмов проверки того, какие маршруты могут проходить через данную автономную систему. Глобальная таблица заполняется на основе так называемых анонсов, которые выдают пограничные маршрутизаторы, если маршрутизатор анонсирует “чужой” маршрут, то, часто, обнаружить это удаётся только после того, как трафик уже утёк. (Англоязычное название явления: Internet route hijacking.) Очевидно, что трафик, следующий по перехваченному маршруту, может прослушиваться в транзитной автономной системе – для чего и делается перехват. При этом существуют методы, позволяющие скрыть следы такого перенаправления.

Противодействуют перехвату маршрутов с помощью различных фильтров, вводимых в точках обмена трафиком. Это не слишком эффективный способ. Радикально решить проблему может глобальное введение особой системы электронных подписей анонсов маршрутов – инициатива называется RPKI, она более или менее активно развивается сейчас. Видимо, шумиха подстегнёт развитие.

(Кстати, а в материале Renesys, отчего-то, упоминаются белорусские сети, замеченные в описанной выше подмене маршрутов.)



Comments Off on Перехват трафика с помощью атак на BGP

Кстати, для провайдера, заблокировать доступ к сайту по IP-адресу – это самое простое решение, потому что IP-маршрутизация большей частью работает, примерно, на аппаратном уровне. То есть, очень быстро и прозрачно. А вот блокирование на уровне прикладных протоколов (DNS, HTTP), позволяющее сделать блокировку более избирательной – это уже сильно другая задача. Тут требуется анализ содержимого пакетов, а не заголовков, который тянет за собой дополнительное ПО и заметные вычислительные мощности.

Хотя, надо заметить, блокирование по прикладным протоколам математически выглядит куда более правильным – ведь для чтения сайтов используют именно их. В плане реализации особенно занимательно выглядит инспектирование HTTPS, да. Ну а верный способ построить эффективную систему, это строгий контроль пользовательского ПО, служащего для просмотра Интернета.



Комментарии (4) »