javascript

Не фича, но баг

  • среда, 24 января 2018 г. в 03:14:52
https://habrahabr.ru/company/qrator/blog/347322/
  • Сетевые технологии
  • Разработка под iOS
  • JavaScript
  • Блог компании Qrator Labs


22 декабря 2017 года — ВКонтакте выкатила интересный апгрейд собственного iOS-приложения. Вот цитата новостного агентства, касающаяся конкретных изменений:
В новой версии «ВКонтакте» для iOS и Android появилась поддержка Accelerated Mobile Pages (AMP) — мобильного стандарта, который позволяет быстро загружать внешние статьи. Теперь страницы всех сайтов, которые настроили AMP, открываются прямо внутри приложения.
(официальная новость)

Технология AMP, разработку которой инициировал Google, призвана ускорять работу вебсайтов на всех устройствах и платформах. Это современный подход к оптимизации HTML и CSS, позволяющий ускорять загрузку на устройствах с помощью preconnect API и асинхронного выполнения Javascript.

AMP пытается предзагрузить содержимое поддерживаемой страницы с помощью платформы, на которой вы видите ссылку — социальной сети или мессенджера. Когда вы просто скроллите апдейты, страницы AMP загружаются в фоновом режиме, когда вы нажимаете на ссылку, страница открывается на мобильном устройстве почти мгновенно.

У AMP есть страница с детальным описанием, кучей мануалов и инструкций, однако, разработчикам iOS-приложения ВКонтакте удалось построить гаубицу из, по сути, детского конструктора (базовая реализация AMP) и зарядить ее боевыми снарядами (баг iOS-приложения).

Мы не знаем точно, что произошло во ВКонтакте при внедрении AMP в iOS-приложение. В Android-версии приложения этой проблемы нет.

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

То что мы нашли нас впечатлило. Одна из крупнейших социальных сетей, доступная на 80 языках, с более чем 400 миллионами аккаунтов фактически осуществляла DDoS на некоторые ресурсы, в основном новостные агентства и те компании, которые агрессивно экспортируют новости в ленту Вконтакте. Из-за банальной ошибки в отдельно взятой реализации AMP для iOS.

К счастью, ВКонтакте использует или новый, или редко используемый юзерагент для предзагрузки страниц:

VK/74 CFNetwork/<cfn version> Darwin/<ios version>

Часть нашей анонимизированной статистики выглядит так.

Крупное новостное агентство с несколькими серверами:

  • до 20% суммарного времени ответа ушло на эти запросы от 2% (от всех уникальных) IP с этим приложением
  • до 16% всех запросов от приложения
  • 50-66% всех запросов от 8-15% всех IP, 65-77% общего времени ответа
  • до 25% всех запросов
  • до 18% всех запросов

Ритейлер:

  • 91-98% от всех запросов с 15-31% (от всех уникальных) IP с этим юзерагентом, до 33% времени на обработку этих запросов

Медиа компания:

  • 13-46% от всех запросов от 1-5% IP

Новостное агентство:

  • до 12% от всех запросов

Что происходит на этих серверах?
Когда страница поддерживающая AMP появляется в ленте пользователя iOS-приложения ВКонтакте, в некоторых случаях приложение делает до 5000 запросов с данным юзерагентом, что само по себе является классическим примером DDoS-атаки. Так как в мире множество пользователей, а технологии типа AMP и других “instant view” быстро распространяются и внедряются множеством самых разнообразных ресурсов (eBay), количество подобных ссылок будет лишь расти.

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

Что более важно — не существует нормального способа, кроме как перестать публиковать AMP-совместимые ссылки в социальной сети. ВКонтакте (с представителем которой мы связались перед публикацией) исправит данный баг, но никто не запрещает атакующему или просто проходящему мимо найти данной возможности более интересное применение. До выпуска апдейта iOS-приложения ВКонтакте убедитесь, что отдаваемые вами с поддержкой AMP страницы закэшированы.

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