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

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

    ВКонтакте проделывает огромную работу предоставляя своим пользователям новейшие технологии. Отдельная благодарность Сергею Паранько, директору по медийной экосистеме ВКонтакте, который ответил на наш запрос, сообщив, что данная проблема будет исправлена.
    Qrator Labs 168,07
    Знаем всё о доступности в интернете
    Поделиться публикацией
    Комментарии 16
    • 0
      Но для страниц, генерируемых на каждый запрос, подобная ситуация может быть болезненна.

      Кого надо благодарить за отдачу по AMP страниц, которые еще надо генерить?
      • 0
        приложение делает до 5000 запросов с данным юзерагентом, что само по себе является классическим примером DDoS-атаки

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

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

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

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

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

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

          • 0
            Здравствуй, новая волна платных мобильных подписок, которые никто сам не подключал.
            • +3
              А почему эта статья в хабе «Javascript», если тут ни слова про него?
              • +1
                Скрипты те самые в AMP используются.
                • 0
                  Совсем не JavaScript. Вот абсолютно. ИБ, может.
                  • 0
                    То есть то, что здесь написано, неверно? www.ampproject.org/ru/learn/about-how
                    Я сам не сварщик, верю тому, что пишут на официальных сайтах.
                    • 0
                      Сейчас очень много технологий использует JS, но в данной статье речь идет об ошибке в коде (не указано на какоп ЯП) клиентского приложения.
                      Это то же самое, что писать отзыв о чайнике, который сгорел при пожаре во всей квартире.
                      • 0
                        Пусть это будет предостережение всем включающим данный, конкретный, чайник.
                • 0

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

                  • 0
                    «Блог компании XYZ-Помойка-LLC», привыкайте, тут таких XYZ много.
                    • +1
                      Справедливости ради, блог Qrator'а один из немногих адекватных.

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

                Самое читаемое