Отказ от ответственности : я не аналитик / эксперт по безопасности, ваша проблема просто вызвала у меня интерес;)
Предупреждение : Хотя я и разделяю первоначальный вывод о том, что сам код, вероятно, безвреден, базовая технология наверняка может быть (ab) использована также для злонамеренных целей, поэтому, пожалуйста, будьте осторожны, исследуя это самостоятельно .
Анализ
Вы уже нашли соответствующее доказательство самостоятельно - ища дальше, я обнаружил еще одну dropbin drop , которая более читабельна, так что я использую это для объяснения (хотя на первый взгляд другой позволил бы это а также после форматирования).
Фрагмент содержит фрагменты JavaScript со следующими основными функциями:
Строка 13 инициализирует переменную _GPL
всеми видами элементов для последующего использования, например, различные константы, вспомогательные функции, совместимость с браузером и фактические данные, например:
Строка 20 определяет пустое значение 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 , легко продемонстрировать, почему это можно использовать для сомнительной непрозрачной рекламы, например, для всех знаков доверия и печатей в несмотря на их нижний колонтитул.
Как все закончилось в ваших логах?
Другая цитата дает более полное представление о функциональности и о том, как она могла привести к проблеме, с которой вы столкнулись:
Yontoo [...] является
надстройка браузера, которая создает виртуальные слои, которые можно редактировать в
создать видимость внесения изменений в основной
Веб-сайт. [...]
Если вы видите необходимость в приложении или инструменте на веб-сайте, то вы
свободны создавать!
Итак, кто-то, по-видимому, посетил ваш сайт и создал для него некоторые пользовательские правила домена с помощью клиента Yontoo (если это действительно разрешено для конечных пользователей) или одного из доступных приложений (использовался фрагмент например, для анализа ссылается на приложение Drop Down Deals в строке 379), которое инициировало создание d15gt9gwxw5wu0.cloudfront.net/js/_MY_WEB_APP_DOMAIN_/r.js
для хранения этих правил для повторного использования при следующем посещении сайта по очереди.
Из-за некоторого недостатка безопасности (см. Заключение ниже) этот URL или соответствующий фрагмент JavaScript должен быть внедрен в код JavaScript вашего приложения (например, с помощью Межсайтовый скриптинг (XSS) действительно ) и вызвал ошибку записи журнала в определенный момент по очереди.
Заключение
Как уже упоминалось заранее, я разделяю первоначальный вывод о том, что сам код, вероятно, безвреден, хотя основную технологию, безусловно, можно использовать (ab) для злонамеренных намерений, поскольку она сама по себе является насмешкой над клиентским JavaScript, т. е. пользователь разрешает коду сторонней службы взаимодействовать с сайтами (и особенно данными), которые он использует и которым доверяет каждый день - ваш случай является очевидным свидетельством того, что что-то пошло не так уже в этом отношении.
Я не исследовал архитектуру безопасности (если таковая имеется) в Yontoo, но также не смог найти какую-либо информацию по этой важной теме на их веб-сайте (например, в разделе Support ), что в значительной степени неприемлемо для такой технологии, как эта ИМХО, несмотря на все знаки доверия и печати в нижнем колонтитуле.
С другой стороны, пользователи устанавливают сторонние скрипты, например, из 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'])
}