Подтвердить что ты не робот

Почему сценарии загрузки Cloudfront в моем веб-приложении? (Я его не использую)

Я управляю защищенным веб-приложением PHP/MySQL с широким использованием jQuery. Сегодня в наших журналах приложений появилась странная ошибка:

JS Error: Error loading script:
https://d15gt9gwxw5wu0.cloudfront.net/js/_MY_WEB_APP_DOMAIN_/r.js

Мы не используем Amazon Cloudfront CDN в нашем приложении. Когда я перехожу к URL-адресу, который не загружается, это единственное содержимое:

if(typeof _GPL.ri=='function'&&!_GPL.isIE6){_GPL.ri('_GPL_r')}_GPL.rl=true;

Строка пользовательского пользовательского агента:

Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1

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

Кто-нибудь знает, что здесь происходит? Это какая-то атака XSS?

** Обновить **

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

Кроме того, я нашел этот pastebin с похожим кодом, который, по-видимому, является своего рода рекламой script. Опять же, не очень полезно.

** Обновление 2 **

Больше контекста: Webapp использует несколько сторонних плагинов jQuery, но не имеет сторонних аналитиков. Все сценарии размещаются на нашем собственном сервере, а аудит всего нашего кода не дает совпадений для "облачного".

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

Что меня интересует, это какая-то атака. Если это так, я хочу знать, как подключить отверстие, которое оно пытается использовать, если оно уже не подключено.

4b9b3361

Ответ 1

Отказ от ответственности. Я не эксперт по безопасности/эксперт, ваша проблема просто вызвала мой интерес;)

Предупреждение. Хотя я разделяю первоначальный вывод о том, что сам код, вероятно, безвреден, базовая технология, безусловно, может быть (ab) использована для злонамеренных намерений, поэтому, пожалуйста, позаботьтесь, исследуя это сами.

Анализ

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

В фрагменте представлены фрагменты JavaScript со следующими основными функциями:

  • Строка 13 инициализирует переменную _GPL всеми видами элементов для последующего использования, например. различные константы, вспомогательные функции, материалы совместимости с браузером и фактические полезные нагрузки, например:

    • Line20 определяет пустую строку basdeCDN, строка 21 определяет fCDN, которая, оказывается, является тем, о котором идет речь (d15gt9gwxw5wu0.cloudfront.net)

    • строка 261 определяет функцию removeScripts(),, которая в свою очередь использует findScript() из строки 266, дополнительно сопровождаемую insertJS() в строке 277 - их соответствующее намерение очевидно

    • строка 270 определяет функцию loadDomainRules(), которая, по-видимому, является той, которая генерирует URL-адрес, который вы нашли в ваших журналах - см. приложение ниже для фрагмента кода

      • Вычет: Даже без дополнительных доказательств, собранных ниже, имена и функциональные возможности сильно намекают на r.js, являющийся файлом JavaScript, обслуживающим пользовательский JavaScript, специально собранный/сгенерированный для домена под рукой
        < бр /" >
    • строка 100 определяет функцию loadGeo(), которая действительно ссылается на какой-либо рекламный сервер (ads2srv.com) - см. приложение ниже для фрагмента кода

    • строка 368, наконец, определяет функцию i(), которая предоставляет наиболее определенные подсказки относительно вероятного происхождения всего этого, а именно понятие некоторого Yontoo Client и Yontoo API - см. приложение ниже для фрагмента кода

Следствие

Что это значит?

Извлеченные ключи Yontoo Client и Yontoo API легко приводят к Yontoo, платформе приложений, которая позволяет вам контролировать посещаемые вами веб-сайты каждый день, то есть он звучит как коммерческая версия Userscripts.org, см. Что такое приложение Yontoo?:

Yontoo - это надстройка для браузера, которая настраивает и улучшает базовый веб-сайт

Где я могу его использовать?

Yontoo работает на любом сайте в Интернете, хотя функциональность поступает из отдельных приложений под названием Yontoo Apps которые предоставляют определенные функции в зависимости от того, на каком сайте вы находитесь на.

[акцент мой]

Теперь, глядя на текущие списки в App Market, легко демонстрируется, почему это может быть использовано для questionable непрозрачная реклама, например, во всех таблицах доверия и печати в нижнем колонтитуле.

Как это закончилось в ваших журналах?

Другая цитата дает более полное представление о функциях и о том, как это могло бы привести к проблеме, с которой вы столкнулись:

Yontoo [...] - это браузер, который создает виртуальные слои, которые можно редактировать до создать внешний вид, внеся изменения в Веб-сайт. [...] Если вы видите потребность в приложении или инструменте над веб-сайтом, то вы могут создавать!

Итак, кто-то, по-видимому, посетил ваш сайт и создал для него некоторые пользовательские правила домена с помощью клиента Yontoo (если он фактически разрешает это для конечных пользователей) или один из доступные приложения (фрагмент, используемый для анализа, ссылается на приложение Drop Down Deals в строке 379), что вызвало создание d15gt9gwxw5wu0.cloudfront.net/js/_MY_WEB_APP_DOMAIN_/r.js для хранения этих правил для повторного использования при следующем посещении сайта по очереди.

Из-за какого-то недостатка в безопасности (см. заключение ниже) этот URL-адрес или соответствующий фрагмент JavaScript должен быть введен в код JavaScript вашего приложения (например, с помощью Межсайтовый скриптинг (XSS)действительно) и вызвал ошибку входа в журнал в какой-то момент.

Заключение

Как уже упоминалось выше, я разделяю первоначальный вывод о том, что сам код, вероятно, безвреден, хотя базовая технология, безусловно, может быть (ab) использована для злонамеренных намерений, а также из-за самой природы насмешек над клиентским JavaScript, т.е. пользователь позволяет коду из сторонней службы взаимодействовать с сайтами (и особенно данными), которые он использует и доверяет каждый день, - ваш случай является очевидным доказательством того, что уже произошло в этом отношении.

Я не исследовал архитектуру безопасности (если есть) Yontoo, но не смог найти какую-либо информацию по этой важной теме сразу на своем веб-сайте (например, в Support), что в значительной степени неприемлемо для технологии, такой как IMHO, несмотря на все признаки доверия и печати в нижнем колонтитуле.

С другой стороны, пользователи устанавливают сторонние скрипты, например. Userscripts.org все время, конечно, не для тонкой настройки пользовательского опыта на Stack Exchange;)

Пожалуйста, сделайте свое собственное мнение соответствующим образом.


Приложение

Ниже вы можете найти фрагменты кода, указанные в анализе (я не смог встроить их в списки, не нарушая макет или подсветку синтаксиса):

loadDomainRules()

function () {
    if (location.host != "") {
        var a = location.host.replace(RegExp(/^www\./i), "");
        this.insertJS(this.proto + this.fCDN + "/js/" + a + "/r.js")
    }
    this.loaded_domain_rules = true
}

loadGeo()

function () {
    var cid = this.items.e6a00.get("geo.cid");
    var updatetime = this.items.e6a00.get("geo.updatetime");
    if (!cid || (cid && updatetime && (Math.floor((new Date()).getTime() / 1000) - parseInt(updatetime)) >= 259200)) {
        this.insertJS(((this.proto == 'https://') ? 'https://s.' : 'http://') + 'ads2srv.com/tb/gc.php?json&cb=_GPL.setGeoAndGo')
    } else {
        this.vars.cid = this.items.e6a00.get("geo.cid");
        this.vars.rid = this.items.e6a00.get("geo.rid");
        this.vars.ccid = this.items.e6a00.get("geo.ccid");
        this.vars.ip = this.items.e6a00.get("geo.ip");
        this.loadCC();
        this.loadDomainRules()
    }
}

я()

function () {
    if (typeof YontooClient != 'undefined') YontooClient = {};
    if (typeof yontooAPI != 'undefined') yontooAPI = {};
    if (typeof DealPlyConfig != 'undefined') {
        DealPlyConfig.getBaseUrl = function () {
            return "https://d3lvr7yuk4uaui.cloudfront.net/items/blank.js?"
        };
        DealPlyConfig.getCrownUrl = function () {
            return "https://d3lvr7yuk4uaui.cloudfront.net/items/blank.js?"
        }
    }
    this.rm(this.ri, ['dropdowndeals', 'Y2LeftFixedCurtain', 'gbdho', 'bdca', 'dealply-toast-1', 'pricegong_offers_iframe', 'SF_VISUAL_SEARCH', 'batAdRight', 'batAdBottom', 'batAdMiddle_0', 'batAdMiddleExt1_0', 'batAdRight2', 'invisiblehand-iframe', 'scTopOfPageRefinementLinks', 'sf_coupon_obj']);
    this.rm(this.rc, ['yontoolayerwidget', 'dealply-toast', 'imb-ad']);
    this.rm(this.ric, [
            ['productbox', 'g'],
            ['related-searches', 'related-searches-bing']
        ]);
    this.rm(this.rtn, ['MIVA_AdLink', 'itxtrst', 'kLink', 'FAAdLink', 'IL_AD', 'skimwords-link'])
}

Ответ 2

Я нашел iFrame также на моем веб-сайте drupal 7. Он был загружен в сайт, включив модуль sharaholic.