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 страницы закэшированы.

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

Комментарии (16)


  1. sshmakov
    23.01.2018 12:21

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

    Кого надо благодарить за отдачу по AMP страниц, которые еще надо генерить?


  1. CRivlaldo
    23.01.2018 12:37

    приложение делает до 5000 запросов с данным юзерагентом, что само по себе является классическим примером DDoS-атаки

    Не совсем понял. Это с одного девайса?


    1. Dreyk
      23.01.2018 13:34

      нет, имеется в виду, что запросы на страницы идут не тогда, когда юзер кликает, а когда просто скроллит мимо. куча юзеров — куча запросов


      1. SlavniyTeo
        23.01.2018 16:13

        Когда страница поддерживающая AMP появляется в ленте пользователя iOS-приложения ВКонтакте, в некоторых случаях приложение делает до 5000 запросов

        А по тексту выходит, что 5000 запросов от одного пользователя


        1. Shapelez Автор
          23.01.2018 16:19

          Так и есть — с каждого устройства.


    1. nikolayv81
      23.01.2018 21:23

      Так и есть, замечательная технология в поддержку новых тарифов операторов с увеличенным объёмом трафика


  1. Fragster
    23.01.2018 12:55

    Здравствуй, новая волна платных мобильных подписок, которые никто сам не подключал.


  1. inoyakaigor
    23.01.2018 13:42
    +2

    А почему эта статья в хабе «Javascript», если тут ни слова про него?


    1. Shapelez Автор
      23.01.2018 16:19

      Скрипты те самые в AMP используются.


      1. artalar
        23.01.2018 18:53

        Совсем не JavaScript. Вот абсолютно. ИБ, может.


        1. Shapelez Автор
          23.01.2018 20:13

          То есть то, что здесь написано, неверно? www.ampproject.org/ru/learn/about-how
          Я сам не сварщик, верю тому, что пишут на официальных сайтах.


          1. artalar
            23.01.2018 21:21

            Сейчас очень много технологий использует JS, но в данной статье речь идет об ошибке в коде (не указано на какоп ЯП) клиентского приложения.
            Это то же самое, что писать отзыв о чайнике, который сгорел при пожаре во всей квартире.


            1. Shapelez Автор
              23.01.2018 21:39

              Пусть это будет предостережение всем включающим данный, конкретный, чайник.


    1. UksusoFF
      23.01.2018 20:04
      +1

      А почему эта статья вообще на хабре если технических деталей нет вообще?


      1. ExplosiveZ
        23.01.2018 22:08

        «Блог компании XYZ-Помойка-LLC», привыкайте, тут таких XYZ много.


        1. devpreview
          24.01.2018 08:52

          Справедливости ради, блог Qrator'а один из немногих адекватных.