Программирование, радиоэлектроника,
саморазвитие и частичка из моей жизни здесь...

Как удалить вирус, троян или вредоносный код со своего сайта

trojan horseИз заголовка должно быть все понятно - мы будем заниматься поисками вредоносного кода на сайте под управлением CMS(Content Management System) разработанной на языке программирования PHP. Таких CMS достаточно много и они очень популярны, например: Wordpress, Joomla, DataLifeEngine, InstantCMS, E107, PhpBB и т.п. Сайт может работать также на самописном движке, в общем не важно, так как принципы внедрения зловредов в код PHP везде очень похожи.

Принципы поиска и чистки вредоносного кода, что я приведу ниже, можно использовать практически на любом сайте, работающем на любом движке, который написан не только на языке PHP но и на других скриптовых языках.

Данный мануал скорее всего для тех вебмастеров, которые знают хотя-бы азы PHP, поскольку нужно будет проводить небольшой анализ кода и суметь понять какая часть нужна для сайта, а какая подозрительна и представляет угрозу.

Ну что ж, к делу...

Содержание:

  1. Поиск и правка вредоносного кода на локальной копии сайта
  2. Полезные рекомендации
  3. В завершение

Поиск и правка вредоносного кода на локальной копии сайта

Первым делом нам нужно сделать полную резервную копию нашего сайта на локальный компьютер. Это необходимо, поскольку нужно будет производить поиск в файлах по их содержимому, а по FTP или SFTP это осуществить сложно и очень дорого по временным затратам.

Заходим на свой хостинг в панель управления и запускаем менеджер файлов, упаковываем все скрипты сайта в архив и скачиваем себе на компьютер по FTP или тот же файловый менеджер. Хочу заметить что скачивать все файлы сайта (пользовательские фото, видео, мультимедиа контент) не обязательно, главным образом нас интересуют скрипты и настройки. Если сайт большой то мультимедиа контента может быть достаточно таки много, он нам будет лишним и отнимет только ценное время и ресурсы, скорее всего в картинках и видео у вас на сайте нет ничего что может навредить сайту, поскольку веб-сервер не обработает скрипт написанный на PHP и переименованный в jpg или mp4.

В случае если у вас VPS то можно достаточно быстро упаковать сайт в архив при помощи консольного архиватора 7z, вот пример простой упаковки директории с сайтом на ОС Ubuntu Linux:

# apt-get install p7zip-full
# 7z a site_com_backup.zip /var/www/data/site_com/* /var/www/data/site_com/.htaccess
  • /var/www/data/site_com/ - Путь к директории с сайтом.
  • а - параметр что указывает архиватору произвести упаковку файлов (Add).
  • /var/www/data/site_com/* - указываем: нужно паковать все что есть в директории.
  • /var/www/data/site_com/.htaccess - дополнительно указываем что файл .htaccess тоже паковать (по умолчанию такие файлы исключаются)

В случае с VPS архив достаточно надежно и безопасно качать по протоколу SFTP (SSH 22 порт) используя программу WinSCP (Windows Secured Copy) - программа бесплатна и может работать в портабельном режиме. Свежую версию всегда можно скачать на официальном сайте - https://winscp.net

Для работы нам понадобится Total Commander, скорее всего у вас он уже установлен, поскольку без него в вебмастерских делах как без рук. Если у вас нет этого коммандера то его нужно установить, можно скачать с официального сайта программы - http://www.ghisler.com/download.htm

Теперь, когда у нас есть архив с сайтом, нужно его распаковать в любую удобную временную директорию, например в с:/TEMP. Распаковать можно используя Тотал Коммандер или любой из распространенных архиваторов (7Zip, WinRAR, WinZIP), также Windows по умолчанию поддерживает работу с сжатыми папками ZIP.

Заходим Тотал Коммандером в директорию с распакованными файлами и начинаем вызываем окно поиска файлов комбинацией клавиш ALT+F7 (поиск).

Там где "Искать файлы" ставим звездочку * для поиска по всех файлах или *.php  - для поиска только по скриптах, ставим галочку возле поля "С текстом" и ниже галочку "Регулярные выражения".

тотал коммандер

В поле "С текстом" пишем строку-регулярное выражение для поиска, она состоит из списка фрагментов кода, который будем искать

http:|href=|display|base64|eval\(|chr\(

Когда все заполнено нажимаем "Начать поиск" и дожидаемся завершения операции, длительность зависит от мощности процессора вашего компьютера, а также от скорости работы с файлами вашего жесткого диска (достаточно быстро ищет если у вас SSD).

С помощью регулярного выражения (Wiki: регулярные выражения) мы производим поиск в скриптах движка, которые могут содержать вредоносный код.

Вот что мы ищем:

  • http:  - так чаще всего начинаются ссылки, кроме того так могут начинаться и внутрисайтовые (полезные) ссылки, нужно будет просмотреть внимательно.
  •  href=  - то же самое что и http: .
  • display - поиск CSS кода для скрытых блоков, в которые часто прячут ссылочки в шаблонах и скриптах, как пример: <a href="злосайт.ком" style="display:none">сайт</a> в данном случае ссылка индексируется но на сайте не отображается никогда.
  • base64 - классика жанра, наиболее распространенный способ шифрования PHP кода с разным вредоносным функционалом - от простановки ссылки до трояна или бекдора. Данная функция из языка PHP также используется в мирных, полезных целях, например в скриптах для отправки почты и т.п., поэтому нужно будет провести беглый анализ найденных фрагментов кода.
  • eval( - функция выполнения PHP кода переданного в строке как аргумент. Часто используют в комплексе с base64. Кроме того данная функция часто используется в мирных целях, для инициализации переменных в движке и т.п.
  • chr( - функция вывода символа с указанным кодом, такими функциями можно зашифровать любой кусок кода, поэтому если встретится большое количество таких вызовов функции собранных вместе в одном скрипте то это вполне может быть обфусцированный(искаженный, шифрованный) скрипт.

Внимание: возможно вы еще встречали хитрые и необычные маскировки кода с использованием других сравнительно редких функций PHP - отпишитесь в комментариях, будет полезно мне и тем кто будет читать эту статью!

По завершению поиска если файлы найдены то они будут отображены с полными абсолютными путями, жмем кнопочку "Файлы на панель" чтобы вывести все эти файлы в панели Total Commander.

Для дальнейшей работы нам понадобится очень удобный и функциональный редактор кода Notepad++. Программа бесплатна, скачать ее можно на сайте - notepad-plus-plus.org/ , скачиваем, устанавливаем и запускаем!

Теперь просматриваем файлы, преимущественно с расширением *.php и по очереди открываем их в Notepad++, хотя...зачем по очереди? - можно ведь сразу открыть все! Для этого правой клавишей мышки выделяем нужные файлы и зажав левую клавишу мыши на одном из выделенных перетаскиваем в окно открытого редактора Notepad++ - и вот оно чудо: все файлы открыты для редактирования. ))

Далее нажатием комбинации клавиш CTRL+F вызываем окно поиска. Во вкладке Find в поле "Find what" вводим строку-регулярное выражения, по которому мы производили поиск файлов:

http:|href=|display|base64|eval\(|chr\(

В группе "Search mode" выбираем "Regular expression" и нажимаем кнопку "Find all in all Opened Documents". После этого в нижней части редактора появится окно со списком файлов и найденных фрагментов кода для каждого из них.

Заранее хочу вас предупредить что найденных файлов может быть достаточно много, все зависит от движка и его структуры, поэтому можно ограничиться поиском наиболее опасных функций:

base64|eval\(

тотал коммандер поиск

Производим просмотр кода и в случае обнаружения странного куска клацаем дважды на нем чтобы открыть данный файл для правки в основном окне редактора.

По ходу обнаружения и правок вредоносных участков кода вам нужно записывать в блокнот полные пути и имена файлов в которых были сделаны изменения (это нам пригодится при обновлении живого сайта). Чтобы долго не возиться, полный путь к файлу можно скопировать выбрав его вкладку в редакторе, клацнув на ней правой клавой мышки и выбрать пункт "Full FIle Path to Clipboard", теперь идем в блокнот и нажимаем CTRL+V.

notepad++

После всех правок файлов изменения в них нужно сохранить - для этого нажимаем комбинацию клавиш CTRL+SHIFT+S.

Итак у нас есть копия сайта с уже произведенными правками, а также в блокноте список файлов (и путей к ним), в которых были сделаны изменения. Не разумно было-бы заливать обратно весь сайт, поэтому вам нужно отыскать файлы из блокнота и просто обновить их на хостинге вашего сайта.

Из своего опыта могу сказать что таких файлов, в случае наличия заразы на вашем сайте, будет не так уж много - всего 1-5 в лучшем случае, так что обновление скриптов на хостинге займет минимум времени.

Полезные рекомендации

К дополнения ко всему сказанному выше советую вам внимательно просмотреть корневой (в верхнем уровне директорий) файл .htaccess. В последнее время участились случаи наличия в нем разных редиректов на всякие сайты (при заходе используя мобильные устройства) в следствии взлома или получения доступа через бэкдор (Вики: Бэкдор).

Данная методика не является панацеей от всех бед, сложность скриптов и хитрость кулхацкеров растет с большой скоростью, поэтому позволю себе дать вам еще несколько советов если ваш сайт часто ломают:

  • Не покупайте сайтов у незнакомых источников, которым вы не можете доверять хотя бы на 80%, такой сайт в случае наличия в нем бекдора или трояна и размещенный на шаровом хостинге рядом с другими вашими сайтами может заразить их всех. Перед установкой купленного сайта рекомендую произвести поиск вредоносного кода описанным выше методом, а также произвести осмотр того что вам упаковали в качестве файликов.
  • Ваш хостер, сам не подозревая того, может иметь "дыры", которые позволяют пользователям с других аккаунтов используя нехитрые особенности скриптов читать (а иногда даже и писать...бывает и такое) произвольные файлы на сайтах вашего аккаунта зная относительные или полные пути к ним(их вычислить не так уж сложно, например php при достаточно высоком уровне отображения ошибок  в случае возникновения ошибки может раскрыть полные пути к файлам в информационном сообщении). Используйте сертифицированные или же проверенные временем хостинги, про отзывы и рейтинги можно почитать на http://hosting101.ru/ или других подобных сайтах, в дополнение поищите отзывы о вашем хостинге на форумах, блогах.
  • Ваш хостер может оказаться "грязным", в котором работает отчасти "гнилой" персонал. Такой хостер может продавать другим умышленно сделанные дыры на вашем сайте, поэтому вы можете себе долго попарить мозГ прежде чем поймете в чем вся суть проблем.
  • Самый, пожалуй, надежный вариант это - свой VPS или выделенный сервер, там вы сам себе Бог и сами все решаете и держите под контролем. Достаточно неплохой хостинг FastVPS.ru - VPS от 2.9Э, работал с ними несколько лет, сервера очень быстрые, главное все хорошо настроить - в этом плане вам также помогут, если нет необходимых навыков.

В завершение

Ну вот пожалуй и все о чем хотел поделиться в данной статье. Желаю вам удачи в борьбе с нечистью на вашем пострадавшем сайте и пусть она обходит ваши проекты 100500й дорогой!

Если статья оказалась полезной - помочь проекту можно тут: 👍 ПОМОЩЬ, 🎁 DONATE
Комментарии к публикации (2):
Tommot #1Tommot
20 Июнь 2016 17:05

Сам попал так что уже немогу выкарабкаться несколько месяцев. Сайты заражаются файлами с расширением JS с компа или бука по очереди. Чистит на устройствах sophos, на сайтах antiVirus http://prntscr.com/biokan -видит, но не могу зачистить. Как только зачищу поставлю новые пароли на базу и через 24 часа и снова эта беда.

0
ph0en1x #2ph0en1x
20 Июнь 2016 23:38

Здравствуйте.
Похоже на то, что у вас на одном или нескольких сайтах (если они на одном аккаунте или сервере) присутствуют скрипты (PHP) с уязвимостью и черными ходами (back-doors), также может быть неправильно настроен веб-сервер. Этим и пользуются взломщики для внедрения различной заразы на сайты, для заработка и кражи трафика.
Данная проблема очень актуальна, сейчас во всем мире доля зараженных и уязвимых сайтов постоянно растет. Причин тому может быть очень много, приведу несколько наиболее значимых:

  • Использование старой CMS, а также плагинов и модулей которые давно не обновляются (не поддерживаются);
  • Использование "ломанных" скриптов и CMS, в которых часто прячут тайные ходы для удаленного управления;
  • Использование устаревшего программного обеспечения на WEB-сервере;
  • Неправильная настройка WEB-сервера, что привело к проблемам безопасности;
  • Безответственный хостинг-провайдер, который не следит за обновлениями безопасности;
  • Наличие вредоносного ПО на компьютере и ОС администратора сайта (таким образом утекают пароли и другая информация);
  • Недобросовестные или безответственные работники, которые обслуживают сайт и могут даже продавать доступ к нему в ДаркНете;
  • и т.д. и т.п.

Тем не менее, ситуация не безнадежна если подойти ответственно и с разумом!
Недавно у моего знакомого была подобная проблема - массово ломали сайты один за другим, которые размещались как на одном, так и на разных серверах.

Приведу некоторые важные рекомендации:

  1. Первым делом (это очень важно) - полная переустановка ОС на вашем рабочем компьютере с которого вы производите работы над сайтами. Для работы в ОС установите все необходимое "не ломанное" программное обеспечение, лучше всего свободное (Firefox, Thunderbird, WinSCP, Filezilla, KeePass и другие ). После этого следует смена ВСЕХ паролей на входы в админки сайтов, для доступа к панелям администрирования (phpMyAdmin, ISPManager, CPanel) и для подключения к Базам Данных (MySQL, PostgreSQL и другие что используются). Если вы используете Linux - это будет двойной плюс к прочности и надежности!
  2. С этого момента не доверяйте доступа к сайтам тем людям в которых вы не можете быть уверенны, кому нужно - доверяйте но старайтесь проверять! На компьютерах других людей также может плодиться разная зараза...;
  3. Старайтесь не администрировать свои сайты из под мобильных устройств (смартфоны, планшеты), такие девайсы очень подвержены заражению (даже в PlayStore, PlayMarket находят зараженные приложения которые успели себе установить десятки тысяч человек), также с них не сложно похитить вашу различную ценную информацию. Обнаружить и очистить мобильное устройство от заразы очень часто бывает намного тяжелее чем сделать тоже самое с ПК;
  4. Сделайте резервные копии всех ваших сайтов, это может пригодиться в случае поломки или некорректного обновления. Настройте (или делайте вручную) периодическое резервное копирование всех сайтов на локальный компьютер или же удаленный сервер, шифруйте архивы с резервными копиями (Zip, 7-Zip, Rar);
  5. Скачайте на компьютер и распакуйте все резервные копии своих сайтов, проверьте все распакованные файлы несколькими разными антивирусами;
  6. Посмотрите вручную наиболее важные папки на наличие подозрительных файлов и скриптов (uploads, include, tmp, backups и другие), также не помешает заглянуть в ".htaccess" - там часто любят прятать мобильные редиректы и другую нечисть;
  7. Обновите вашу CMS (Wordpress/DLE/Joomla) до самой последней версии, также освежите все нужные плагины, а ненужные - удалить %#@й и почистить мусор после них (что и куда ложат плагины можно посмотреть в установочном пакете и документации к каждому из них скачав их отдельно)!
  8. Добавить сайт в Google Webmaster + Yandex Webmaster, там можно проверить сайт на наличие инфекции и получить отчет, который может быть полезен при лечении сайта + другие полезности.

 

Если есть возможность то арендуйте вирутальный приватный сервер на Linux (VPS), это поможет держать полный контроль над тем что творится с вашими сайтами (об этом я упоминал в статье).

Настройте сервер так чтобы на нем не было ничего лишнего. Из основного:

  • сложный пароль на SSH (20+ символы+буквы+цифры),
  • настроить автоустановку UnattendedUpgrades,
  • установить fail2ban для блокировки брутформса SSH,
  • FTP - отключить, использовать SFTP (FTP по SSH),
  • настроить файрвол IPTABLES на блокировку всего кроме разрешенного,
  • установить парольный доступ на директорию для доступа к phpMyAdmin и Webmail,
  • отключить идентификацию сервисов (Apache: ServerTokens=Prod, ServerSignature=Off. PHP: expose_php=Off),
  • установить и настроить периодический запуск RKHunter.

Эти базовые (немножко параноидальные) рекомендации помогут избавиться от множества проблем, сберечь нервы, время и здоровье вебмастера-администратора сайтов. Пусть вы и ваши сайты будут здоровы!

+1