Резюме
28 февраля 2018 года GitHub подвергся DDoS-атаке с отражением и усилением, использующей memcached-серверы, доступные по UDP. Согласно отчёту компании, трафик достиг пика 1,35 Тбит/с и 126,9 млн пакетов в секунду. GitHub.com был недоступен с 17:21 до 17:26 UTC, затем периодически доступен до 17:30. GitHub уточнил, что конфиденциальность и целостность данных не были под угрозой. [1]
В 17:21 система мониторинга сети обнаружила аномалию в соотношении входящего и исходящего трафика. В 17:26 команды выполнили команду, отозвавшую BGP-анонсы AS36459 у обычных транзитных провайдеров и анонсировавшую префиксы исключительно через соединения с Akamai. Сходимость маршрутов и применение списков контроля на границе сети Akamai позволили GitHub зафиксировать полное восстановление в 17:30. [1]
Изменение BGP не отфильтровало вредоносные пакеты. Оно изменило путь, по которому интернет достигал префиксов GitHub, чтобы трафик поступал на инфраструктуру, способную поглотить и отфильтровать поток. Маршрутизация, фильтрация и возврат легитимного трафика — три разные функции, даже если они сменяют друг друга в течение нескольких минут.
Атака не была простым прямым потоком с фермы машин на GitHub. UDP-запросы с подделанным исходным адресом отправлялись на публичные экземпляры memcached. Эти серверы отвечали на адрес жертвы объёмами, значительно превышающими запросы. Cloudflare оценил, что протокол при определённых условиях мог обеспечить усиление примерно 51 200 к 1; это значение описывает технический потенциал, а не средний коэффициент, измеренный во время инцидента с GitHub. [3]
Две независимые слабости сделали отражение возможным: службы memcached, доступные из ненадёжных сетей, и возможность отправлять пакеты с подделанным исходным адресом. Разработчики программного обеспечения, администраторы серверов, хостинг-провайдеры и сети доступа имели разные рычаги влияния. Никто из них не контролировал всю цепочку в одиночку.
BCP 38 и BCP 84 описывают проверки исходных адресов, подходящие соответственно для обычных случаев и для сред с несколькими подключениями. Они могут снизить возможности подделки, но не закрывают открытые службы memcached, не заменяют мощности для смягчения атак и не гарантируют повсеместного внедрения. Измерения CAIDA и рекомендации MANRS показывают как полезность этих проверок, так и их экономическую сложность. [9][10][14][15]
Операционная ответственность должна распределяться в соответствии с реальными полномочиями. GitHub контролировал обнаружение, прямую пропускную способность, анонсирование маршрутов и решение о переключении. Akamai контролировал мощности смягчения и фильтрацию на своей границе. Разработчики memcached контролировали значения по умолчанию и документацию. Операторы экземпляров контролировали доступность и межсетевые экраны. Сети доступа контролировали проверку исходных адресов на своих границах.
Главный урок не в том, что достаточно купить больше пропускной способности, и не в том, что одна правильная практика устранила бы весь риск. Он заключается в возможности продемонстрировать непрерывность: обнаружить аномалию, ограниченно передать полномочия маршрутизации, проверить фильтрацию, сохранить легитимный трафик, сократить число отражателей и задокументировать неизвестное.
Девять минут, которые делают контроль наблюдаемым
Отчёт GitHub содержит необычно точную хронологию для DDoS-инцидента. 28 февраля 2018 года GitHub.com был недоступен с 17:21 до 17:26 UTC. Затем сервис оставался периодически доступным до 17:30. Это различие важно: полная недоступность и периодическая деградация описывают не одинаковое воздействие на пользователей и не одинаковое состояние инфраструктуры. GitHub также указал, что конфиденциальность и целостность данных ни в какой момент не подвергались опасности. Инцидент касался доступности сервиса, а не доказанной компрометации размещённого контента. [1]
В 17:21 системы мониторинга обнаружили аномалию в соотношении входящего и исходящего трафика и оповестили дежурного инженера и других членов команды. GitHub сообщил, что одна из его площадок получала более 100 Гбит/с входящего трафика по транзитным каналам. Этот сигнал сам по себе ещё не говорил, какие пакеты вредоносны. Однако он показывал, что резкое изменение, несовместимое с нормальными условиями работы, требует операционного решения. [1]
В 17:26 это решение приняло форму команды, выполненной через операционный инструментарий GitHub. BGP-анонсы AS36459 были отозваны у обычных транзитных провайдеров, а соответствующие префиксы стали анонсироваться исключительно через соединения с Akamai. Внешние сети затем пересчитали свои пути в соответствии с новыми доступными анонсами. По мере сходимости маршрутов всё большая доля трафика, предназначенного для GitHub, достигала инфраструктуры смягчения. [1]
GitHub связывает восстановление, зафиксированное в 17:30, с этой сходимостью в сочетании со списками контроля, применёнными на границе Akamai. Уровни трафика на транзитных каналах и коды ответов балансировщиков нагрузки служили индикаторами восстановления. В 17:34 GitHub также отозвал маршруты, анонсированные в точках обмена интернет-трафиком, чтобы вывести ещё около 40 Гбит/с за пределы собственной границы сети. Этот последующий шаг показывает, что состояние «восстановлено» не завершило работу с инцидентом: контроль над путём ещё нужно было закрепить. [1]
Второй пик около 400 Гбит/с произошёл вскоре после 18:00 и не вызвал такого же результата, как первый. Это не доказывает постоянного иммунитета. Объём был другим, путь смягчения изменился, условия эксплуатации больше не были идентичными. Тем не менее это даёт элемент непрерывности: на этом этапе новый существенный пик не воссоздал первоначальную недоступность. [1]
Цифры 1,35 Тбит/с и 126,9 млн пакетов в секунду описывают две разные нагрузки. Битрейт измеряет давление на пропускную способность каналов. Скорость пакетов показывает число решений по пересылке или фильтрации, возложенных на оборудование. Инфраструктура может иметь видимый запас по битам в секунду, приближаясь к пределу обработки пакетов. И наоборот, крупные пакеты могут насытить канал, не исчерпав вычислительную мощность маршрутизатора. Публикация обеих величин позволяет не сводить пропускную способность сети к одному числу.
Таким образом, хронология важнее одного рекорда трафика. Она связывает измеримый сигнал с человеческими полномочиями, командой маршрутизации, распределённой сходимостью, внешней фильтрацией и прикладными индикаторами восстановления. Она позволяет изучить, что произошло на самом деле, не предполагая, что GitHub контролировал все серверы-отражатели, все исходные сети или все решения своего поставщика услуг.
Атака с отражением, а не обычный прямой поток
Memcached — это распределённый кэш в памяти, предназначенный для быстрой выдачи данных приложениям. Его нормальное использование находится внутри контролируемой среды, между компонентами, которые знают друг друга. Механизм, использованный в 2018 году, опирался на экземпляры, UDP-интерфейс которых оставался доступным из публичного интернета. Эти экземпляры принимали запрос без достаточной аутентификации отправителя и выдавали гораздо более объёмный ответ. [3][6][7][8]
Отправитель вписывал в пакет IP-адрес GitHub вместо своего собственного. Сервер memcached получал запрос, который выглядел исходящим от жертвы, и затем отправлял ответ на этот адрес. Отражателю не нужно было знать реальный адрес отправителя. Такое перенаправление отличает отражение от прямой атаки, в которой участвующие системы сами открывают потоки к цели со своими настоящими адресами.
Усиление давало атакующему второе преимущество. Сравнительно небольшой запрос мог вызвать гораздо больший ответ. Cloudflare описал потенциал примерно 51 200 к 1 в своём анализе протокола. [3] Необходимо сохранять точный смысл этого значения. Оно не является константой, применимой к каждому экземпляру, поскольку результат зависит от содержимого кэша, запроса, сегментации ответов и метода измерения. Оно также не представляет средний коэффициент, который GitHub наблюдал во время инцидента.
Операционное значение этого соотношения остаётся огромным: пропускная способность исходящего трафика открытых серверов добавлялась к пропускной способности отправителя. Организатору атаки не нужно было напрямую располагать 1,35 Тбит/с. Сетевые ресурсы, принадлежащие другим организациям, отвечали на подделанные запросы и доставляли свои ответы до GitHub. Таким образом, стоимость трафика перекладывалась на отражатели, их хостинг-провайдеров, транзитных операторов и жертву.
Должны были сосуществовать два условия. Во-первых, требовался публичный сервис, способный генерировать усиленный ответ. Во-вторых, пакет с подделанным исходным адресом должен был покинуть сеть отправителя. Устранение первого условия убирает соответствующий отражатель из схемы. Устранение второго не позволяет отправителю направить ответ жертве, которая никогда не отправляла запрос. Меры контроля дополняют друг друга, но находятся в разных местах.
Документация проекта memcached указывает, что UDP отключён по умолчанию начиная с версии 1.5.6, и предупреждает операторов, что сервер не должен быть доступен из ненадёжных сетей. [7][8] Более безопасное значение по умолчанию снижает вероятность того, что недавняя установка непреднамеренно станет отражателем. Оно не исправляет удалённо старые версии, не закрывает существующие правила межсетевого экрана и не доказывает, что все экземпляры были обновлены.
Для администратора сервера средства контроля более прямые: отключить UDP, когда он не нужен, ограничить прослушивание частными интерфейсами, фильтровать порт 11211, инвентаризировать открытые сервисы и применять обновления. Для хостинг-провайдера контроль может принимать форму обнаружения рискованных открытых портов, уведомления клиента и соразмерной процедуры вмешательства. Для сети доступа рычаг находится ещё в другом месте: не допустить, чтобы клиент отправлял пакет с исходным адресом, который ему не разрешено использовать.
Такое разделение позволяет избежать удобного, но ошибочного вывода. GitHub был целью и не настраивал отражатели. Разработчики memcached могли улучшить продукт, но не контролировали каждое развёртывание. Хостинг-провайдер мог ограничить открытость, но не мог предотвратить подделку в другой сети. Интернет-провайдер мог блокировать подделанные источники, одновременно обслуживая у другого клиента неправильно настроенный сервис, остающийся уязвимым для неосознанного использования. Цепочка не сводится к одной вине.
Проверка исходных адресов выполняется до отражения
Отражённая атака опирается на ложную информацию в IP-заголовке. Пакет запроса несёт адрес жертвы в поле источника. Сервер, получающий пакет, обычно не имеет возможности восстановить по этому заголовку реального отправителя. Он обрабатывает запрос и отправляет ответ на подделанный адрес. Наиболее эффективная точка контроля этого обмана находится рядом с сетью, из которой отправлен пакет, до того как он пересечёт несколько автономных систем.
RFC 2827, обычно ассоциируемый с BCP 38, описывает фильтрацию, предназначенную для предотвращения отправки клиентом за точкой агрегации пакетов, исходный адрес которых не соответствует префиксам, легитимно используемым этим клиентом. [9] С точки зрения провайдера пакет приходит со стороны клиентского доступа; проверка определяет, правдоподобен ли заявленный источник на этом интерфейсе. Адрес, не входящий в разрешённый набор, может быть отброшен до того, как пакет достигнет отражателя.
Этот принцип кажется простым в элементарной топологии: у клиента есть известный префикс и одно подключение. Он усложняется, когда организация имеет несколько подключений, использует несколько путей или получает и отправляет трафик асимметрично. RFC 3704, ассоциируемый с BCP 84, рассматривает такие ситуации и ограничения слишком строгой проверки, основанной только на обратном пути. [10] Неправильно подобранная политика может блокировать легитимные пакеты; отсутствующая политика пропускает подделанные источники.
Качество контроля, следовательно, зависит от качества операционных данных. Разрешённые префиксы должны быть точными. Изменения в назначении должны отражаться в фильтрах. Исключения должны документироваться. Отбрасывания должны быть наблюдаемыми и проверяемыми. Правило, установленное и забытое, может стать неверным. Слишком широкое правило может принимать источники, которые клиент не должен использовать. Проверка исходных адресов — это непрерывная практика, а не раз и навсегда отмеченный пункт конфигурации.
Проект Spoofer от CAIDA измеряет, позволяют ли сети отправлять пакеты с подделанными исходными адресами. [14] Такой тип измерения делает видимым свойство, которое иначе осталось бы абстрактным. Он может показать, что доступ разрешает или запрещает определённые попытки подделки. Однако без соответствующих данных он не позволяет задним числом идентифицировать сеть, которая могла нести запросы атаки против GitHub.
MANRS также представляет антиспуфинг как конкретное действие, ожидаемое от сетевых операторов, и даёт указания по внедрению. [15] Эти ссылки превращают общую цель — предотвратить обманное использование адресов — в проверяемые практики. Они не являются вердиктом против какой-либо конкретной автономной системы. Публичное досье GitHub не содержит ни полного списка сетей, размещавших отражатели, ни сетей, из которых фактически отправлялись подделанные запросы.
Осторожность в атрибуции крайне важна. Адрес отражателя показывает видимое местоположение сервера, который ответил, но не обязательно местонахождение исходного отправителя. Сеть, видимая на пути, может быть промежуточным транзитом. Измерение способности к подделке, выполненное в другую дату, не доказывает, что конкретный пакет прошёл через эту сеть 28 февраля 2018 года. Требовать от операторов сохранения доказательств законно; превращать общие признаки в обвинение — нет.
Проверка источников имеет и чёткое функциональное ограничение. Она нацелена на пакеты с подделанным исходным адресом. Она не останавливает прямой поток, отправленный с реального адреса скомпрометированной машиной. Она не закрывает публичный интерфейс memcached. Она не даёт GitHub возможности поглощения и не гарантирует, что маршруты к Akamai сойдутся. Представление её как полного решения проблемы DDoS скрыло бы другие решающие зависимости.
Её ценность заключается именно в месте в цепочке. При развёртывании на правильной границе сети она защищает третьи стороны, которых оператор, возможно, не знает и с которыми у него нет договора. Выгода глобальна, тогда как стоимость инженерных работ, поддержки и обслуживания остаётся локальной. Эта асимметрия частично объясняет, почему технически известная мера контроля может применяться неравномерно.
Экономическая проблема антиспуфинга
Сеть, правильно внедрившая проверку исходных адресов, снижает прежде всего риск того, что её клиенты станут отправной точкой атак против других организаций. Её собственные абоненты не обязательно замечают немедленную выгоду. Зато они могут быстро заметить ошибку фильтрации, блокирующую асимметричную архитектуру или новое назначение префикса. Видимые издержки внутренние; значительная часть выгод распределяется вовне.
Такая структура ослабляет коммерческий сигнал. Жертва атаки не всегда знает, какая сеть могла предотвратить первые подделанные запросы. Поэтому она не может легко вознаградить добросовестных операторов или оказать давление на тех, чьи меры контроля недостаточны. Провайдер, со своей стороны, может с трудом обосновывать время эксплуатации для риска, который не приводит к видимым инцидентам у его собственных клиентов.
Сопоставимые измерения, требования к межсетевым соединениям и публичные обязательства могут изменить это уравнение. Оператор, способный продемонстрировать, что его доступ не позволяет отправку произвольных источников, предоставляет свойство безопасности, полезное его партнёрам и клиентам. Однако доказательство должно быть свежим, репрезентативным для разных топологий и сопровождаться процедурой исправления. Общий процент внедрения не заменяет реальное состояние конкретного интерфейса.
Контакты для сообщений о нарушениях играют здесь операционную роль. Когда жертва или исследователь обнаруживает открытый сервис, нужно иметь возможность быстро связаться с организацией, контролирующей сервер или соответствующий доступ. Устаревший контактный адрес, неясная цепочка эскалации или отсутствие телеметрии удлиняют период уязвимости. Профилактика, следовательно, не сводится к фильтрам; она также зависит от способности связать сетевой ресурс с ответственным лицом, с которым можно связаться.
Разумная ответственность состоит в том, чтобы требовать соразмерных элементов: какие префиксы были разрешены, какая проверка применялась, как управлялись исключения, когда проводился последний тест и как обрабатывалось сообщение о нарушении. Она не состоит в предположении, что оператор обязательно знал об использовании каждого пакета, и не в выводе юридической ответственности из одной технической возможности.
Обнаружить аномалию до того, как маршрутизация сможет помочь
Переключение на Akamai было бы бесполезно, если бы GitHub сначала не определил, что аномальное событие выходит за рамки его обычных условий эксплуатации. Компания заявила, что её система мониторинга обнаружила необычный дисбаланс между входящим и исходящим трафиком. [1] Такой выбор индикатора уместен для атаки с отражением: массивный объём приходит без соответствия исходящей активности или ожидаемым ответам приложений.
Однако аномальное соотношение не даёт полного диагноза. Оно может быть результатом атаки, легитимного наплыва, ошибки измерения, сбоя ниже по цепочке или изменения поведения пользователей. Необходимо сопоставить несколько плоскостей наблюдения: пропускную способность и число пакетов на интерфейсах, протоколы и порты в данных потоков, концентрацию назначений, состояние маршрутизаторов и балансировщиков, долю успешных запросов приложений, региональную задержку и сообщения пользователей.
Каждый взгляд отвечает на свой вопрос. Пропускная способность показывает давление на канал, но не намерение пакетов. Сигнатура, соответствующая UDP-ответам с порта 11211, проясняет вектор, но не доказывает, что каждая дейтаграмма вредоносна. Коды ответов балансировщиков показывают, работает ли сервис, но могут скрывать деградацию, ограниченную отдельными регионами. Видимость BGP подтверждает изменение маршрута, но не измеряет качество фильтрации.
Порог запуска смягчения сам по себе является выбором ответственности. Слишком поздний порог позволяет сервису достичь предела до сходимости маршрутов. Слишком чувствительный порог может отводить легитимный трафик при каждом кратковременном пике, увеличивать расходы, вызывать нестабильность маршрутизации или подвергать пользователей сбоям резервного пути. Порог должен основываться на известных измерениях, сопровождаться возможностью отступления и пересматриваться после инцидента.
GitHub объявил о намерении снизить зависимость от вмешательства человека, используя больше своей инфраструктуры мониторинга для активации провайдеров смягчения. [1] Цель понятна: пять минут — долгий срок для глобального сервиса. Но ускорение действий недостаточно. Автоматическое обнаружение должно знать, какие префиксы оно может переносить, к какому провайдеру, при каких условиях и с какими средствами возврата.
Решающий элемент — не абстрактный выбор между человеком и автоматизацией. Нужно определить ограниченные полномочия. Система может рекомендовать переключение при совпадении нескольких сигналов, автоматически выполнять ограниченное действие для заранее одобренных префиксов и требовать подтверждения в неизвестной ситуации. В любом случае оператор должен иметь возможность прервать действие и проверить из внешних точек наблюдения, что нужные анонсы действительно видны.
BGP перемещает доступность; он не очищает пакеты
AS36459 идентифицирует домен маршрутизации, используемый GitHub в отчёте. [1] Номер автономной системы — не просто административная метка: он обозначает совокупность, которая может анонсировать IP-префиксы и обмениваться маршрутами с другими сетями. Когда оператор изменяет соседей, через которых анонсируется префикс, он изменяет пути, которые внешние сети могут выбрать для достижения соответствующих адресов.
В 17:26 GitHub отозвал свои анонсы у обычных транзитных провайдеров и анонсировал маршруты исключительно через соединения с Akamai. [1] Это действие переместило логическое назначение входящего трафика. Оно не проверило и не отбросило ни одного пакета. Пакеты стали фильтруемыми, потому что теперь поступали на границу, где Akamai имел мощность и правила смягчения.
Это различие фундаментально. BGP отвечает на вопрос: «Через какую сеть должен проходить трафик, предназначенный для этого префикса?» Фильтрация отвечает на другой вопрос: «Какие пакеты следует отбросить или разрешить?» Возврат легитимного трафика ставит третий: «Как сохранённые пакеты достигают сервиса, не создавая нового узкого места?» Смешение этих функций приводит к приписыванию маршрутизации эффекта, которого у неё нет.
Сходимость не мгновенна. GitHub может отправить анонс или отзыв своим соседям, но не может приказать всем маршрутизаторам интернета обновить свои таблицы одновременно. Каждая сеть обрабатывает изменение, применяет собственную политику, выбирает путь и распространяет то, что принимает. В этот период одни пользователи могут всё ещё следовать старому пути, тогда как другие уже достигают сети смягчения.
Отчёт позволяет утверждать, что сочетание изменения маршрута и фильтрации привело к восстановлению в течение нескольких минут. Он не раскрывает точные длины префиксов, использованные BGP-сообщества, локальные предпочтения, архитектуру возврата или внутренние правила Akamai. Анализ должен остановиться на этой границе. Публичные факты устанавливают операционную последовательность, а не полную схему частной конфигурации.
Переключение такого рода несёт несколько рисков. Забытый префикс может оставить часть сервиса недоступной. Более специфичный или более агрегированный анонс может неожиданно взаимодействовать с существующими маршрутами. Отсутствие разрешения у провайдера может привести к отклонению анонса. Утечка маршрута может перенаправить трафик. Недостаточная пропускная способность обратного канала может превратить выход из центра смягчения в новую точку перегрузки.
Асимметрия путей также может нарушить работу оборудования, поддерживающего состояние соединений. Службы DNS, системы аутентификации или другие зависимости могут оставаться недоступными, даже когда основной префикс снова становится достижимым. Проверка, ограниченная фактом появления маршрута в локальной таблице, недостаточна. Нужно контролировать внешнюю видимость и реальное поведение приложения.
Подготовленное переключение должно создавать доказательства до наступления чрезвычайной ситуации. Оператор должен знать соответствующие префиксы, доступные сессии, применимые фильтры и лимиты, процедуру авторизации у провайдера, пропускную способность обратного канала и механизм отката после атаки. Учения должны проверять полный успех, а также пропущенный префикс, перегруженный обратный канал, регион, где маршруты не сходятся, или провайдера, который не может принять всю нагрузку.
Наконец, переключение создаёт принятую зависимость. Как только трафик идёт исключительно через сеть Akamai, непрерывность GitHub зависит также от мощности, систем управления, фильтров и связности этого провайдера. Такая зависимость может повышать устойчивость, если она выбрана, протестирована и наблюдаема. Она становится хрупкой, когда клиент не может проверить готовность пути или корректно вернуться к обычной маршрутизации.
Сырая пропускная способность не синоним устойчивости
GitHub более чем удвоил свою транзитную пропускную способность за предыдущий год и развивал отношения межсетевого обмена в нескольких точках обмена трафиком. [1] Эти инвестиции позволили ему поглощать некоторые объёмные атаки без видимого влияния на пользователей. Тем не менее трафик 28 февраля потребовал привлечения сети с большей граничной мощностью.
Было бы ошибочно заключить, что прямая пропускная способность бесполезна. Она поглощает нормальный рост, локальные пики и менее масштабные атаки. Она также даёт время, необходимое для обнаружения события и активации другого пути. Несколько каналов снижают риск того, что изолированная перегрузка отключит весь сервис. Однако пропускная способность становится недостаточной, когда она не доступна в нужном месте или не может быть задействована безопасным действием маршрутизации.
Высокая агрегированная пропускная способность в магистральной сети не обязательно защищает более узкий канал площадки. Мощная инфраструктура смягчения бесполезна, если маршруты нельзя на неё перенести. Глобальный провайдер не поможет, если префиксы клиента не авторизованы или обратный канал не может нести легитимный трафик. Несколько пирингов не создают настоящего разнообразия, если они используют одно здание, одно волокно или один предел фильтрации.
Опубликованные GitHub 126,9 млн пакетов в секунду напоминают, что пропускная способность — лишь одно измерение. [1] Маленькие пакеты могут оказывать сильное давление на таблицы, очереди, прерывания или операции фильтрации даже до насыщения номинальной пропускной способности канала. Ответственное заявление о мощности должно уточнять измеряемый ресурс, точку измерения и длительность пика.
Место измерения также важно. Объём, наблюдаемый на границе провайдера, не обязательно равен объёму, достигающему источника. Сумма, рассчитанная по нескольким площадкам, не описывает давление на каждый канал. Очень короткий пик и нагрузка, поддерживаемая несколько минут, создают разные проблемы. Значения GitHub полезны и атрибутированы, но они не позволяют вывести точный предел каждого устройства.
Таким образом, устойчивость не заключается в обещании бесконечной мощности. Она состоит в знании прямых ограничений, обнаружении их приближения, наличии проверенного резервного пути и сохранении критических функций во время переключения. Самая большая цифра привлекает внимание; непрерывность зависит от того, как ресурсы связаны, управляются и наблюдаются.
Результат, который нужно доказать, — доставка легитимного трафика
Смягчение DDoS не является успешным только потому, что большой объём пакетов был отброшен. Оно также должно позволить легитимным пользователям достичь сервиса. Фильтрация даёт два неразделимых результата: сократить нежелательный трафик и сохранить достаточный объём валидного трафика, чтобы приложение работало.
Методы фильтрации могут опираться на форму пакетов, протоколы, порты, интенсивность, известное поведение или прикладной контекст. Каждый из них может давать ложные срабатывания. Правило, нацеленное именно на memcached-ответы, может соответствовать наблюдаемому вектору. Очень широкое блокирование UDP может нарушить другие сервисы. Ограничение интенсивности может защитить источник, но наказать пользователей за общим адресом.
GitHub заявил, что списки контроля, применённые на границе Akamai, способствовали восстановлению. [1] Отчёт не детализирует эти правила и не измеряет долю ложных срабатываний. Он позволяет приписать общий результат пути смягчения, но не утверждать, что каждый легитимный запрос успешно прошёл во всех регионах.
Доставка также зависит от пути между провайдером и инфраструктурой клиента. Частный канал или туннель с недостаточной пропускной способностью может стать новым узким местом. Незащищённый путь к источнику может позволить обойти смягчение. Разные пути туда и обратно могут нарушить работу устройств с отслеживанием состояния. Эти риски нужно тестировать до инцидента, даже если конкретная архитектура остаётся конфиденциальной.
Доказательство восстановления должно сочетать несколько наблюдений: видимость маршрутов из независимых сетей, активность фильтрации у провайдера, приемлемые уровни нагрузки на интерфейсах источника, успешность транзакций приложений, задержку, ошибки и доступность из нескольких регионов. Первый зелёный сигнал недостаточен, поскольку атакующий может сменить вектор или запустить вторую волну.
В случае GitHub мониторинг транзитного трафика и кодов ответов балансировщиков нагрузки использовался для объявления восстановления в 17:30. [1] Последующий пик 400 Гбит/с, не воспроизведший первоначального перерыва, даёт дополнительное наблюдение. Он не решает всех будущих рисков, но показывает, что операционное состояние изменилось измеримым образом.
Распределение ответственности по реальному контролю
Первая сфера контроля принадлежала GitHub. Компания управляла мониторингом на границе, прямой пропускной способностью, транзитными и пиринговыми отношениями, а также полномочиями изменять анонсы AS36459. Она должна была распознать деградацию, принять решение о переключении, проверить новые маршруты и измерить возврат сервиса. Её публичный отчёт документирует значительную часть этой цепочки, оставляя пороги и детали политики закрытыми.
Вторая сфера принадлежала Akamai. Провайдер должен был принять запланированные анонсы, иметь достаточную мощность, применить релевантную фильтрацию и вернуть сохранённый трафик. Восстановление, описанное GitHub, поддерживает вывод, что этот путь работал во время инцидента. Оно не раскрывает ни точные внутренние методы, ни договорные условия, ни все региональные результаты.
Третья сфера касалась программного обеспечения. Разработчики memcached могли снизить опасные конфигурации по умолчанию и опубликовать чёткие предупреждения. Отключение UDP по умолчанию начиная с версии 1.5.6 является конкретным снижением риска. [7] Это не означает, что разработчики отвечали за каждую существующую установку, и не доказывает, что все старые серверы были исправлены.
Четвёртая сфера относилась к операторам экземпляров. Они контролировали интерфейс прослушивания, включение UDP, правила межсетевого экрана, обновления и доступность из ненадёжных сетей. Кэшу, предназначенному для внутренних приложений, обычно не нужно было отвечать произвольным хостам в интернете. Инвентаризация этой открытости и её устранение находились в зоне локального контроля.
Хостинг-провайдеры занимали промежуточное положение. Они могли обнаруживать некоторые открытые сервисы, информировать клиентов, поддерживать контакты для сообщений о нарушениях и вмешиваться, когда их инфраструктура причиняла явный вред, с учётом договоров и применимого права. Эта возможность не оправдывает молчаливое блокирование всех UDP-сервисов. Она скорее требует явной политики, достаточного наблюдения и соразмерного реагирования.
Пятая сфера — сети доступа и клиентские границы. Эти сети могли проверять, что пакет, покидающий клиента, использует разрешённый исходный адрес. Их ответственность отличалась от ответственности оператора отражателя. Сеть могла предотвратить любую исходящую подделку, не закрывая открытый memcached-сервер в другом месте. Наоборот, хостинг-провайдер мог защитить все свои кэши, оставаясь неспособным предотвратить подделку из другой сети.
Транзитные провайдеры и точки обмена трафиком переносили трафик и информацию о доступности согласно своим политикам. Они не могли автоматически определять намерение каждого пакета. Тем не менее они должны были иметь практики маршрутизации, мощности, контакты и процедуры эскалации, совместимые с непрерывностью их клиентов.
Организатор атаки контролировал выбор цели и генерацию запросов, но публичное досье не позволяет его идентифицировать. Оно также не даёт окончательного списка владельцев отражателей или исходных сетей. Анализ операционной ответственности может описать доступные меры контроля, не выдумывая личность, намерение, установленную халатность или юридический вывод.
Такая карта предотвращает бинарный вывод. GitHub мог подготовить эффективное переключение, хотя экосистема оставалась уязвимой для подделки. Memcached мог принять более безопасные настройки, хотя старые версии оставались публичными. Akamai мог фильтровать наблюдаемый вектор, не гарантируя, что любая будущая атака будет поглощена. Прогресс в одной сфере заслуживает признания без объявления всей цепочки решённой.
Автоматизировать переключение, не скрывая полномочия
Интерес GitHub к более автоматизированной активации отвечает реальному ограничению: между 17:21 и 17:26 прошло пять минут до запуска команды переключения. [1] Для глобальной платформы такая задержка может означать значительное число сбоев и сильное давление на команды. Предварительно авторизованное действие может быть быстрее, чем серия звонков, ручных проверок и импровизированных изменений.
Однако скорость не гарантирует безопасности. Ложное срабатывание может направить легитимный трафик на излишне дорогой или менее производительный путь. Неполный список префиксов может отключить часть сервиса. Недоступная сессия у провайдера может получить анонсы, которые не может обслужить. Ошибка в системе управления может превратить локальный инцидент в глобальную потерю доступности.
Осторожная конструкция разделяет обнаружение, рекомендацию и действие. Обнаружение собирает несколько сигналов. Политика может рекомендовать переключение, когда пропускная способность, тип трафика и прикладные индикаторы сходятся. Автоматическое действие может быть ограничено заранее одобренными префиксами, соседями и условиями. Новые или неоднозначные ситуации могут оставаться на подтверждении человека.
Защита маршрутизации должна быть явной. Список префиксов должен быть актуальным. Сессии и авторизации провайдера должны тестироваться. Фильтры и лимиты префиксов должны сдерживать ошибки. Анонсы должны наблюдаться извне, поскольку состояние локального маршрутизатора не гарантирует, что ожидаемый путь выбран где-то ещё.
Автоматизация должна предусматривать выход. Слишком ранний отзыв маршрутов смягчения может подвергнуть сервис новой волне. Бессрочное сохранение может увеличить задержку, стоимость или зависимость. Политика возврата должна определять период стабильного наблюдения, постепенный отзыв, критерии успеха и возможность немедленного возврата на защищённый путь.
Человеческие полномочия не исчезают. Атаки адаптивны: протокол, размер пакетов, назначение и ритм могут меняться после применения правила. Операторы должны иметь возможность менять стратегию. Однако такое вмешательство должно использовать протестированные, ограниченные и регистрируемые команды, а не зависеть от импровизации, которую невозможно восстановить постфактум.
Быстрая, но непрозрачная система может сократить длительность перерыва, ослабляя ответственность. Ответственная система должна позволять сказать, какой сигнал запустил действие, какой маршрут изменился, какой провайдер принял трафик, какие индикаторы подтвердили фильтрацию и почему возврат к нормальному пути был разрешён.
Отчёт об инциденте сам по себе является мерой контроля
Публикация GitHub полезна, потому что даёт больше, чем общее заверение. Она содержит время в UTC, интенсивность в битах и пакетах, номер автономной системы, характер команды маршрутизации, имя провайдера и индикаторы, использованные для объявления восстановления. [1] Другие операторы могут сопоставить эти элементы со своими возможностями.
Ответственная прозрачность имеет пределы. Раскрытие в реальном времени точных правил фильтрации может помочь противнику их обойти. Публикация детальной топологии, внутренних идентификаторов или договорных условий может создать новые риски. Частные коммуникации и данные клиентов должны оставаться защищёнными. Ответственность не требует полного раскрытия инфраструктуры.
Однако она требует достаточной точности, чтобы связать результат с контролем. Формула «атака была смягчена» не позволяет узнать, когда она была обнаружена, какое действие изменилось и как проверялся возврат сервиса. Ограниченный отчёт может описать вектор, измеренный масштаб, окно воздействия, основное изменение сети, сигналы восстановления и корректирующие работы.
Наблюдение должно быть отделено от вывода. GitHub измерил свой трафик и описал свои решения. Cloudflare проанализировал потенциал усиления memcached. CISA включила memcached в число UDP-протоколов, пригодных для отражения. CAIDA измеряет возможность отправки подделанных источников. Вместе эти элементы объясняют механизм, но ни один из них в отдельности не даёт полной атрибуции инцидента. [1][3][6][14]
Такое разделение защищает и качество решений. Сервер, отвечающий на подделанный запрос, может быть неправильно настроен, устарел, скомпрометирован или намеренно публичен; ответ не раскрывает автоматически намерение его владельца. Сеть, видимая в данных о путях, может быть лишь транзитом. IP-адрес без исторического контекста недостаточен для определения того, кто контролировал систему в точный момент атаки.
Тем не менее отчёты могут ускорить коллективную защиту. Операторы могут искать соответствующий порт, пересматривать значения по умолчанию, тестировать проверку источников, готовить переключение маршрутов и улучшать сигналы тревоги. Их полезность возрастает, когда авторы чётко различают измеренные факты, технические выводы и неизвестное.
Минимальное досье для будущих объёмных инцидентов
Оператор должен прежде всего сохранять синхронизированную хронологию: первый аномальный сигнал, оповещение, решение, команда, внешняя видимость изменения маршрута, начало фильтрации, первое улучшение работы приложения, объявленное восстановление и возврат к нормальному пути. Несогласованные часы могут сделать невозможным отнесение задержки к обнаружению, авторизации, сходимости или провайдеру.
Досье должно уточнять наблюдаемые параметры нагрузки: биты в секунду, пакеты в секунду, протоколы, порты, назначения, длительность пиков и места измерений. Оно должно различать трафик, видимый на границе, и трафик, достигающий источника после фильтрации. Без этого различия одно и то же число может быть ошибочно приписано нескольким компонентам.
Элементы маршрутизации должны включать перемещённые префиксы, использованных соседей, время анонсов и отзывов, результаты, наблюдаемые из внешних точек, и любые исключения. Не обязательно делать все эти детали публичными. Однако они должны существовать, чтобы организация могла объяснить, была ли задержка вызвана её командой, распространением или отсутствием авторизации.
Элементы смягчения должны описывать классифицированный вектор, отброшенный объём, достигнутые лимиты, известные ложные срабатывания и качество возвращённого трафика. Прикладные индикаторы должны дополнять сетевые счётчики: доля успешных запросов, задержка, ошибки, региональная доступность и работа критических зависимостей.
Со стороны отражателей соответствующие организации должны сохранять состояние сервиса, использованную версию, интерфейс прослушивания, правила межсетевого экрана, доступные журналы, дату закрытия и процедуру уведомления. Цель не в публикации обвинительного списка, а в проверке того, что открытость действительно была снижена.
Со стороны исходных сетей релевантные доказательства включают разрешённые префиксы на каждом доступе, политику проверки, исключения, результаты тестов и изменения, внесённые после сообщения. Общее заявление о соответствии не заменяет ограниченную во времени проверку.
Наконец, досье должно связывать каждое действие с полномочиями. Кто мог перемещать маршруты? Кто мог запросить вмешательство провайдера? Кто мог изменить фильтр или отключить сервис? Кто объявил о восстановлении? Такая прослеживаемость нужна не только для поиска виновного; она позволяет сократить задержки и неясности при следующем инциденте.
Чего публичные материалы не доказывают
Публичные источники не позволяют идентифицировать организатора атаки или его мотив. GitHub не предоставил окончательной атрибуции в своём отчёте. Тот факт, что механизм совместим с другими известными кампаниями, недостаточен для установления личности в этом досье.
Они также не дают полного списка отражателей, их владельцев или сетей, из которых отправлялись подделанные запросы. Они не доказывают, что какая-либо названная автономная система знала о вкладе своей инфраструктуры в атаку. Общие измерения подделки нельзя применять задним числом без технического и временного соответствия.
Отчёт не раскрывает частную BGP-политику GitHub, использованные сообщества, архитектуру возврата, коммерческие пороги, обязательства по мощности или детальные правила Akamai. Он позволяет анализировать передачу операционной ответственности, но не реконструировать проприетарную конфигурацию.
Пик 1,35 Тбит/с не доказывает, что каждый канал или каждое устройство обработало этот объём. Точка измерения и агрегация имеют значение. Аналогично, 126,9 млн пакетов в секунду не показывают, какой компонент стал первым ограничением. Недоступность и последующее восстановление демонстрируют воздействие и изменение результата, не выявляя всех внутренних узких мест. [1]
Не предоставлено достоверной суммы потерь клиентов или договорного ущерба. Недоступность платформы разработки может нарушить работу многих организаций, но потенциальная важность этих зависимостей не позволяет выдумывать цифру. Доступные факты также не дают оснований для вывода о халатности или юридической ответственности.
Последующий пик 400 Гбит/с не доказывает, что GitHub был окончательно защищён. Он лишь показывает, что другой трафик, возникший в другом операционном состоянии, не воспроизвёл первый результат. Векторы, возможности и зависимости меняются.
Эти ограничения не ослабляют анализ; они делают его более прочным. Они переносят фокус на то, что можно доказать: время обнаружения, полномочия маршрутизации, передачу на смягчение, роль фильтрации, открытость протокола, проверку источников и доказательства восстановления.
Доказуемая непрерывность как операционная норма
Ни одна сеть не может гарантировать, что любая атака пройдёт без последствий. Противник может агрегировать больше ресурсов, сменить протокол, нацелиться на зависимость или перейти от объёмного потока к истощению прикладной функции. Требование идеальной защиты создало бы невозможный стандарт и поощряло бы расплывчатые заявления.
Более полезное требование — доказуемая непрерывность в определённых условиях. Оператор должен знать пределы своих прямых путей, время, необходимое для активации смягчения, допущения о сходимости, пропускную способность обратного канала и критические прикладные зонды. Он должен тестировать переключение до чрезвычайной ситуации и фиксировать наблюдаемые отклонения.
Та же логика применима к экосистеме источников. Сети доступа должны иметь возможность проверять, могут ли их клиенты отправлять подделанные адреса. Хостинг-провайдеры должны уметь выявлять сервисы высокого риска и связываться с ответственными лицами. Программные проекты должны выбирать осторожные значения по умолчанию и делать доступность сети явной.
Эта норма признаёт компромиссы. Слишком строгая фильтрация может сломать легитимную асимметричную топологию. Агрессивное правило DDoS может исключить реальных пользователей. Переключение может увеличить задержку или зависимость. Отключение протокола может повлиять на существующее приложение. Ответственная эксплуатация не отрицает этих издержек: она их документирует и выбирает ограниченные меры контроля.
Именно здесь ответственность отличается от обвинения. Обвинение ищет единственное имя после ущерба. Операционная ответственность спрашивает, кто контролировал решение, какие доказательства были доступны, какие ограничения применялись, как наблюдалось действие и что изменилось после. Несколько организаций могут нести ответственность за разные меры контроля, не имея одинаковой доли в самой атаке.
Случай GitHub делает эту структуру наглядной. Открытость memcached обеспечила усиление. Подделка перенаправила ответы. Мониторинг обнаружил поток. Полномочия BGP переместили доступность. Akamai отфильтровал трафик. Прикладные измерения установили восстановление. Каждый шаг — отдельная мера контроля, которую могут протестировать другие операторы.
Заключение
Memcached-атака на GitHub запомнилась не только пиком 1,35 Тбит/с. Она показала, как сетевые полномочия должны перемещаться под давлением. GitHub обнаружил аномалию, отозвал обычные анонсы AS36459, анонсировал свои префиксы через Akamai и зафиксировал восстановление после сходимости и фильтрации. [1]
Механизм параллельно выявил распределённый сбой. Публичные сервисы memcached выдавали усиленные ответы. Подделанные исходные адреса направляли их жертве. Несколько сетей переносили трафик. GitHub и его провайдер должны были сохранить доступность, отбрасывая поток.
Ни одна отдельная мера контроля не объясняет результат. Больше транзита не закрывает отражатели. Отзыв BGP не классифицирует пакеты. Антиспуфинг не настраивает серверы и не даёт мощности смягчения. Более безопасное значение memcached не исправляет каждую старую установку. Мощный провайдер не может действовать, если передача маршрутов не подготовлена и не проверяема.
Релевантная норма — цепочка доказательств: знать, когда был обнаружен ущерб, кто мог перемещать маршруты, как контролировался путь смягчения, какие сигналы доказали восстановление и какие условия, способствовавшие атаке, были затем снижены. GitHub сделал значительную часть этой цепочки наблюдаемой, не претендуя на решение всех неизвестных.
Устойчивость сети становится достоверной, когда организации, обладающие конкретными полномочиями, могут продемонстрировать, как измерялся трафик, как менялись полномочия, как сохранялось легитимное использование и как снижалась вероятность повторения.
Источники
- https://github.blog/news-insights/company-news/ddos-incident-report/
- https://github.blog/news-insights/the-library/denial-of-service-attacks/
- https://blog.cloudflare.com/memcrashed-major-amplification-attacks-from-port-11211/
- https://blog.cloudflare.com/the-root-cause-of-large-ddos-ip-spoofing/
- https://blog.cloudflare.com/the-rise-of-multivector-amplifications/
- https://www.cisa.gov/ncas/alerts/ta14-017a
- https://docs.memcached.org/advisories/ddos/
- https://github.com/memcached/memcached/wiki/ConfiguringServer
- https://datatracker.ietf.org/doc/rfc2827/
- https://datatracker.ietf.org/doc/rfc3704/
- https://datatracker.ietf.org/doc/rfc4948/
- https://www.akamai.com/site/en/documents/brochure/memcached-reflection-attacks-launch-a-new-era-for-ddos-brochure.pdf
- https://www.akamai.com/site/en/documents/state-of-the-internet/soti-summer-2018-attack-spotlight.pdf
- https://www.caida.org/projects/spoofer/
- https://docs.manrs.org/docs/network-guide/anti-spoofing/
- https://www.cloudflare.com/learning/ddos/memcached-ddos-attack/
- https://www.cloudflare.com/learning/ddos/famous-ddos-attacks/
- https://www.ietf.org/archive/id/draft-qin-savnet-incentive-00.html
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
