Как мы отреагировали на DDoS-атаки на прошлой неделе

Артур Хейс, 17 марта 2020 г.

В прошлую пятницу, 13 марта, платформа BitMEX подверглась двум распределенным атакам на отказ в обслуживании (DDoS-атаки) в 02:16 UTC и 12:56 UTC. Эти атаки задерживали или препятствовали отправке запросов на платформу BitMEX и с нее, что привело к прямым сбоям в работе для наших пользователей. После этих инцидентов мы работали круглосуточно, чтобы собрать факты и проанализировать причины сбоев.

На данный момент я хотел бы поделиться некоторыми дополнительными деталями и ответить на вопросы наших пользователей, касающиеся прекращения работы сервиса, объяснить, что же произошло, и выделить шаги, которые мы предпринимаем для повышения безопасности нашей платформы.

Вот краткое описание того, что произошло, и как мы отреагировали на DDoS-атаки на прошлой неделе.

  1. В 02:16 UTC ботнет начал DDoS-атаку на платформу BitMEX. Вскоре после этого мы обнаружили, что этот ботнет был ответственен за аналогичную, но безуспешную атаку месяцем ранее, 15 февраля. Основываясь на наших журналах доступа, мы поняли и полагаем, что злоумышленники определили свою цель ещё в феврале, а затем подождали, пока их атака окажет наибольшее влияние на рынок.
  2. В прошлую пятницу, в пиковый момент волатильности рынка, ботнет обрушился на платформу с помощью специально созданного запроса к функции Trollbox, предложив оптимизатору запросов базы данных выполнить крайне неэффективный план запросов. Подробности смотрите ниже.
  3. Наша служба безопасности обнаружила, что загрузка CPU базы данных достигла 100%, при этом ожидание ввода-вывода CPU составило 99,6% (состояние ожидания). В тот момент мы неверно определили это как сбой диска, посчитав, что произошел аппаратный сбой в нашем облачном провайдере. В случае сбоя объемов EBS часто можно увидеть схожие характеристики производительности.
  4. DDoS-атака заставила замедлить обработку сообщений на уровне API, задержав их попадание в наш торговый движок. После того, как DDoS-атака была обнаружена и остановлена, API смог без промедления начать отправлять сообщения торговому движку.
  5. 10 часов спустя мы зафиксировали такую ​​же атаку в 12:56 UTC. В обоих случаях наши системы фильтрации трафика смогли обнаружить проблему и заблокировать трафик, но трафик создал значительную внутреннюю очередь. Изучив первый инцидент, мы очистили очередь вручную, чтобы возобновить работу системы.
  6. Обновления в режиме реального времени были опубликованы на https://status.bitmex.com, также на сайте были сделаны соответствующие объявления, чтобы оповестить об инциденте.
  7. В рамках проведенного нами анализа причин сбоя, команда BitMEX идентифицировала 156 торговых счетов, для которых стоп-ордера по ETHUSD с триггером “Last Price” (Последняя цена) сработали очевидно некорректно, что было вызвано непреднамеренной поздней обработкой рыночных ордеров во время первого сбоя в 02:16 UTC. Для каждого стопа, ошибочно сработавшего в этот период, BitMEX рассчитала дельту к опубликованной индексной цене и возместила убытки пользователям. Всего было возвращено 40.297 XBT.

В безопасности ли мой счет и личные финансовые данные?

Безопасность и надежное хранение пользовательских данных – наш высший приоритет. Спешим заверить вас, что угрозы для личных данных нет, потому что DDoS-атака не является взломом. Это распределенная попытка замедлить работу системы, перегружая ее запросами. Пользовательские данные находятся в безопасности.

Почему вы подозреваете, что эти атаки связаны?
Наша команда безопасности проанализировала схемы трафика обеих атак и выявила существенные сходства между ними. Мы считаем, что у атак 13 марта и 15 февраля – один и тот же организатор. Мы продолжаем отслеживать ситуацию на предмет повторения подобных действий, также мы предприняли меры по упреждающему блокированию возможного эффекта от таких действий в будущем.

Почему Trollbox был уязвим для DDoS-атаки?
Trollbox (чат) – это одна из первых функций, которые мы написали для BitMEX, и с тех пор она стала известным элементом сайта. Именно здесь мы провели много времени, разговаривая с нашими клиентами в первые годы работы платформы, беседуя обо всем: о новых продуктах, отзывах, улучшениях пользовательского интерфейса и просто о всякой чепухе.

И все же в прошлую пятницу именно это стало вектором атаки. Вот техническое объяснение: чат доступен на 7 языках, каждый с простым идентификатором канала от 1 до 7. Первый – английский, а два последних – испанский и французский. Мы работаем над переводом всего сайта на эти два языка, но эти версии еще находятся в очереди на разработку.

Метод /chat позволяет запрашивать последние 100 строк по идентификатору канала. Для этого существует индекс, но оптимизатор запросов редко использует его из-за своей низкой мощности. Учитывая размер таблицы (около 50 миллионов строк), на самом деле быстрее выполнить обратное последовательное сканирование, а затем выполнить фильтрацию. Оптимизатор запросов имеет возможность различать и создавать различные планы запросов на основе идентификатора канала, но для этого ему необходима актуальная статистика. Он получает эту статистику через ANALYZE (или VACUUM ANALYZE), который в этой среде выполнялся недостаточно часто.
Поэтому оптимизатор запросов придерживался своей процедуры и выполнял обратное последовательное сканирование для всех языков, пока не нашел 100 возвращаемых строк. В случае с испанским языком прошло много времени с тех пор, как кто-то общался в чате. Как долго? Оптимизатор отсканировал 849 748 строк, прежде чем нашел достаточно, чтобы соответствовать критерию:

Это затратное последовательное сканирование быстро распределяло и освобождало большие объемы памяти, занимало диск и быстро перегружало систему системными вызовами (syscalls). Во время атаки база данных тратила только 0,6% времени на обслуживание запросов, а остальные 99,4% на ожидание ввода-вывода. Это привело к тому, что все запросы, а не только запросы к чату, обрабатывались чрезвычайно медленно.

Как атака на хранилище чата влияет на торговлю?
BitMEX управляет платформой, на которой данные хранятся раздельно: данные, относящиеся к пользователям (адреса электронной почты, действия, чаты, события входа в систему и т.д.), отделены от торговых данных (позиции, исполнения, маржа и т.д.). Но чаты относятся к пользователям, так же как и токены доступа и ключи API. Это означает, что истощение ресурсов вызвало серьезные проблемы на уровне аутентификации и контроля доступа, который стоит перед торговым движком. Торговый движок работал нормально, рыночные данные не были затронуты, равно как и депозиты и выводы. Но в эти периоды стало практически невозможно связаться с торговым движком, что привело к серьезному нарушению в работе сервиса.

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

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

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

Некоторые трейдеры обвиняют BitMEX в намеренном отключении – что вы можете сказать?
Мы работаем на честной и эффективной платформе. Простой в исполнении торговых операций ухудшает работу для всех клиентов и снижает наш авторитет на рынке. Фабриковать отключение было бы против наших интересов. Тем не менее, очевидно, что сообщество хочет знать больше о том, как ликвидации взаимодействуют со страховым фондом, особенно при таком очень сложном сценарии. Мы поделимся более подробной информацией об этом очень скоро.

В ближайшие дни мы разместим на сайте серию публикаций о том, что пошло не так и какие шаги мы предпринимаем. Помимо моих комментариев, вы услышите также комментарии со стороны других руководителей нашего бизнеса.

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

Благодарю за внимание, 

Артур Хейс
Соучредитель и генеральный директор