Недавно нам встретился web-зловред (http://www.securelist.com/en/blog/208193624/Who_is_attacking_me), который вместо внедрения iframe, указывающего на фиксированный существующий адрес, генерирует псевдослучайное доменное имя, зависящее от текущей даты. Такой подход не нов – он широко используется ботнетами при генерировании доменного имени командного сервера; однако он не особо типичен для web-зловредов, которые мы видели до сих пор.
После деобфускации видим, что iframe, перенаправляющий пользователя на вредоносный URL-адрес со сгенерированным доменным именем, прикреплен к HTML-файлу. Все URL-адреса состоят из 16 псевдослучайных букв, относятся с домену .ru и выполняют PHP-скрипт на стороне сервера со строкой sid=botnet2 в качестве аргумента:
Каждый день создается новое доменное имя, так что бороться с ними, внося становящиеся активными вредоносные URL-адреса в списки запрещенных, сродни донкихотству. К счастью, если мы знаем алгоритм, мы можем легко прогнозировать доменные имена для любой будущей даты. Этот зловред детектируется продуктами «Лаборатории Касперского» как Trojan-Downloader.JS.Agent.gsv.
Более новая версия той же вредоносной программы оказывается еще более хитроумной: вместо внедрения обфусцированного кода в открытый JS-файл, она шифрует все содержимое зараженного файла, чтобы скрыть вредоносный код вместе с чистым:
Такой вредоносный код обнаружить не так-то просто: к нему не существует специфичной «сигнатуры» (как, например, строка комментария в предыдущем примере). Зараженные файлы будут сильно отличаться друг от друга, поскольку обфусцированная версия зависит от чистого контента. Более того, после того, как весь файл зашифрован, невозможно просто выделить вредоносную часть и удалить ее. Соответственно, не так просто избавиться от вредоносного кода, не повредив при этом веб-сайт. Если под рукой нет чистых, необфусцированных копий зараженных файлов, для извлечения чистого контента придется расшифровать эти файлы, что может оказаться нетривиальной задачей.
Поменяв функцию eval() на функциюalert() и print() и убрав таким образом первый слой обфускации, можем увидеть больше обфусцированного кода:
Второй слой обфускации использует доменное имя для шифрования содержимого файла. Например, если зараженный файл имеет URL-адрес hxxp://www.somesubdomain.example.com/file-to-infect.js,ключом для расшифровки будет строка example.com. Чистая и вредоносная части хранятся в зашифрованном виде в двух независимых переменных:
Чтобы расшифровать этот код, нам нужно знать точное происхождение зараженного файла. После полной деобфускации можем видеть немного улучшенную версию функции, которая генерирует случайные доменные имена, плюс чистый код:
На этот раз основной домен – waw.pl вместо ru, а в качестве аргумента sid – строка «botnet_api2». Название скрипта осталось тем же; судя по нему, автор является поклонником фильма (или романа) ForrestGump. Также автор оставил комментарий (видимо, чтобы будущим исследователям было, чем заняться), из которого мы узнаем, что автор дал зловреду название gootkit. Быстрый поиск в интернете показал, что данное слово уже известно Google в контексте вредоносного ПО – оказывается, так же назывались несколько других зловредов. Тем не менее, сложно сказать, есть ли какая-либо связь между этими зловредами (или людьми, стоящими за ними) и вредоносной программой, описанной выше. Наиболее похожий случай – это обнаруженный в 2010 году Gumblar-подобный троянец, который крадет логины и пароли к учетным записям FTP и заражает HTML/PHP-файлы на сервере кодом, который содержит строки «gootkit».
Вредоносная программа, описываемая в данном блогпосте, уже распознается продуктами «Лаборатории Касперского» как HEUR:Trojan.Script.Generic (в обфусцированной форме) и как HEUR:Trojan.Script.Iframer (после деобфускации).
Скорее всего, этот зловред распространяется, эксплуатируя уязвимость в программе Plesk. Соответственно, мы бы рекомендовали всем web-администраторам и всем провайдерам хостинг-услуг как можно скорее обновить ПО Plesk на своих серверах до новейшей версии, установить все патчи и сменить пароли к учетным записям FTP/SFTP/SSH.
Вредоносные домены, которые мы проверили, разрешались к одному и тому же IP-адресу и были «приостановлены из-за сообщений о злонамеренном использовании». Однако существует вероятность, что правила, установленные на вредоносном сервере, позволяют осуществлять перенаправление на вредоносное ПО только при определенных условиях (например, если запрос исходит из определенных регионов или диапазонов IP-адресов), и что сообщения о злонамеренном использовании фиктивны. Предыдущая версия этого зловреда была известна тем, что перенаправляла пользователей на набор эксплойтов BlackHole.
«RunForestRun», «gootkit» и генерирование случайных доменных имен