В новой версии «ВКонтакте» для 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 страницы закэшированы.
ВКонтакте проделывает огромную работу предоставляя своим пользователям новейшие технологии. Отдельная благодарность Сергею Паранько, директору по медийной экосистеме ВКонтакте, который ответил на наш запрос, сообщив, что данная проблема будет исправлена.
Комментарии (16)
CRivlaldo
23.01.2018 12:37приложение делает до 5000 запросов с данным юзерагентом, что само по себе является классическим примером DDoS-атаки
Не совсем понял. Это с одного девайса?Dreyk
23.01.2018 13:34нет, имеется в виду, что запросы на страницы идут не тогда, когда юзер кликает, а когда просто скроллит мимо. куча юзеров — куча запросов
SlavniyTeo
23.01.2018 16:13Когда страница поддерживающая AMP появляется в ленте пользователя iOS-приложения ВКонтакте, в некоторых случаях приложение делает до 5000 запросов
А по тексту выходит, что 5000 запросов от одного пользователя
nikolayv81
23.01.2018 21:23Так и есть, замечательная технология в поддержку новых тарифов операторов с увеличенным объёмом трафика
Fragster
23.01.2018 12:55Здравствуй, новая волна платных мобильных подписок, которые никто сам не подключал.
inoyakaigor
23.01.2018 13:42+2А почему эта статья в хабе «Javascript», если тут ни слова про него?
Shapelez Автор
23.01.2018 16:19Скрипты те самые в AMP используются.
artalar
23.01.2018 18:53Совсем не JavaScript. Вот абсолютно. ИБ, может.
Shapelez Автор
23.01.2018 20:13То есть то, что здесь написано, неверно? www.ampproject.org/ru/learn/about-how
Я сам не сварщик, верю тому, что пишут на официальных сайтах.artalar
23.01.2018 21:21Сейчас очень много технологий использует JS, но в данной статье речь идет об ошибке в коде (не указано на какоп ЯП) клиентского приложения.
Это то же самое, что писать отзыв о чайнике, который сгорел при пожаре во всей квартире.Shapelez Автор
23.01.2018 21:39Пусть это будет предостережение всем включающим данный, конкретный, чайник.
UksusoFF
23.01.2018 20:04+1А почему эта статья вообще на хабре если технических деталей нет вообще?
sshmakov
Кого надо благодарить за отдачу по AMP страниц, которые еще надо генерить?