Лечение сайта от вирусов
Доброго времени друзья! Недавно ко мне обратился мой постоянный клиент с проблемой возникшей на его сайта, который без видимых на то причин стал медленно работать. Лишь на один запрос к главной странице, сервер висел до 30 секунд. После изучения проблемы стало понятно, что мы имеем дело с обширным заражением сайта вирусом, множество PHP скриптов были повреждены или содержали вредоносный код. Ранее, мне уже многократно приходилось сталкиваться с подобного-рода проблемами, в том числе и на своих сайтах. Поэтому процесс поиска, лечения с устранением последствий, прошел достаточно быстро, можно сказать — по отработанной схеме. Мне уже не раз приходилось писать подобные отчеты о проделанной работе для своих клиентов, в этот раз я решил оформить его в виде статьи и поделиться с вами. Далее обо всем подробнее.
О вирусе
C котором пришлось иметь дело в этот раз
В составе: PHP Shell — файл менеджер с обширным функционалом управления на стороне сайта, также его функционал позволяет выполнять различные серверный команды, с использованием PHP команды exec(). Mailer — отправка E-mail сообщений, Redirect — использование сайта как прослойку для редиректа на другие ресурсы. Разумеется весь код обфусцирован, минифицирован и зашифрован, поэтому для его анализа придется прогнать код(несколько раз, т.к. используется многослойная шифрование кода) через деобфускатор и дешевратор. К счастью, все методы шифрования вируса сводятся в применению таких функций как Bese64, собственной реализации XOR(применение ключа через побитовое исключающее, шифрование побитовым сдвигом).
Сам же PHP код и функционал скриптов не так интересен, как правило там практически всегда можно найти то, что доступно публично, устаревшие шеллы и прочие утилиты. Каких-либо уникальных разработок в нем нет, что в какой-то мере свидетельствует об уровне компетенций его «хозяина». Часто такие решения и их описание распространяются на тематических «темных» форумах, где любой желающий(школьник) может использовать их просто следуя инструкции. Ориентированы они чаще всего на устаревшие версии CMS, неактуальные плагины, библиотеки кода и т.д., которые применяются в работе сайта.
В составе такие файлы как: wp-load.php, с содержанием вредоносного кода и части кода от CMS WordPress, что говорит о том, что вредоносный код ориентирован на работу с движком WordPress(мимикрирует, маскируется под оригинальные файлы).
Характер распространения — автоматический. О чем свидетельствует моментальное воспроизведение файлов вредоносного кода после его удаления, отсутствие попыток замаскировать его под CMS(Bitrix) на котором работает сайт(вместо этого, маскируется, как написал выше, под Worpress), а также одинаковость в названиях файлов(при повторной записи на хостинг), местах записи кода(часто в одни и те же файлы), характера действий в целом. При управляемой атаке человеком, действия были бы другими, более продуманными и разными.
Самовоспроизведение(восстановление) вируса в системе: Путем запуска непрерывного(перезапускаемого) PHP процесса, который содержит в себе вредоносный код и постоянно перезапускается(каждую секунду) с использованием команды pcntl_exec(), с последующей перезаписью файла содержащего вирус. Таким образом, если удалить файл, то он восстановиться из памяти запущенного PHP процесса.
Характер действий: Добавление вируса в оригинальные файлы CMS. Создание новых файлов содержащих только сам вирус. Запуск непрерывного процесса PHP, чтобы сохраняться в памяти сервера на случай удаление файлов. Перезапись .htaccess, с установкой собственных настроек сервера и прав доступа к каталогам.
Кто за этим стоит?
Очень интересно, кто же за всем этим стоит, кто пишет эти вирусы и кто их распространяет. Как ни странно, как правило автор вируса и его распространить разные люди, если автор еще имеет хоть какую-то квалификацию в стане разработчиков программного обеспечения, то вот распространитель, как правило представляет собой просто пользователя, который в свою очередь хорошо изучил как работать с уже готовым софтом, но увы не более того. «Хакерский софт» это как правило набор утилит в купе со скриптами эксплуатирующими уязвимости в популярных CMS, которые(как софт, так и информацию об уязвимостях) можно найти на специализированных форумах, каталогах, блогах посвященных сетевой безопасности. Такие «пользователи», которых кстати реальные хакеры(Hacker), называют крякеры(Cracker), объединяются в «хакерские» команды(если это так можно назвать, хотя они себя именно так и называют), где каждый выполняет какую-то отведенную для него роль. Вот пример саморекламы(в чем скромности им не занимать) таких нескольких объединений(все скриншоты сделаны с сайта моего клиента):
О их саморекламе. Одной из целей хакерских атак, является самолюбование с последующим вымогательством некой денежной суммы, как правило любой, начиная с пары тысяч евро и заканчивая хотя-бы мятой десяткой, на сколько удастся развести. В качестве саморекламы, на сайт жертвы загружается некая презентация, с красивыми картинками, музыкой и конечно же контактными данными. Все это сопровождается надписями: «You hacked by Ideosec team», или что-то подобное. В расчете на то, что жертва с перепугу или от безысходности свяжется с ними и попросит помилования, за вознаграждение.
Возможно среди них есть и те, кто реально достоин называться — хакером, может быть в их командах есть толковые разработчики, но пока те с кем мне удалось пообщаться, написав на емаил указанный на страницах их саморекламы, оставили жалкое впечатление — после того когда они узнавали что их вирус(шелл) был безжалостно удален, а на сайте подлатаны все «дыры», что в свою очередь означает, что с жертвы денег не получить, кто-то переходил на угрозы повторить атаку, а кто-то просто клянчил(попрошайничал) прося перевести на их счет хоть какую-то сумму денег, мол якобы на жизнь: «Bro,sent me small amount money for tonigth».
Последствия
Остается надеется, что информация из базы данных не была похищена, т.к. уровень вредоносного кода относительно слабый, а сам код работал в автоматическом режиме, используя уязвимости в коде скриптов сайта.
- Повреждение PHP файлов сайта, что приводит к выходу из строя всего сайта(на стороне посетителя это может выглядеть как просто белый экран, пустая веб-страницы или вывод ошибки интерпретатора PHP);
- Повреждение файлов, перезапись файла настроек веб-сервера .htaccess, из-за чего перестает работать маршрутизация mod-rewrite, перестают открываться разделы на сайте, нет доступа к админпанели и т.д.
2.1 Множественное создание файлов .htaccess во всех доступных вирусу каталогах.
С содержимым(само по себе оно безвредное, но эти настройки закрывают доступ к папке из вне, видимо так он защищался от чего-то.):
Последствия: например при отправке Ajax запроса к серверу, на скрипт компонента CMS, можно получить такой результат в качестве ответа:
- Добавление вируса в код оригинальных PHP файлов, с последующим его выполнением, при каждом обращении к оригинальному файлу, что приводит к снижению скорости работы сайта;
- Добавление вируса в память сервера в виде перезапускаемого(вечного) PHP процесса. Снижение скорости работы сервера (вообще любая деятельность вируса, съедает ресурсы сервера);
- Возможные санкции от поисковых систем(Яндекс, Google) с меткой — вирусный;
- Возможное ухудшение поведенческих факторов(влияния пользователей на метрики) сайта, в силу того, что например: пользователи будут уходить с сайта, жаловаться и т.д.;
- При недоступности страниц, выпадение их из индекса поисковых систем;
- Удаление важных файлов без возможности их восстановления(полная потеря);
- Повреждение базы данных;
- Рассылка емаил спама от имени сервера(сайта), возможные санкции по IP от систем анти спама;
- Кража данных доступа, к прочим сторонним сервисам, API и т.д., хранящихся в PHP файлах конфигурации;
- Утечка информации из базы данных (пользователей, прочей информации).
Лечение
Каждый случай уникален, соответственно и методики лечения требуется каждый раз свои
Все найденные файлы с вредоносным кодом я сохранил в отдельную директорию для последующего изучения.
- Перезапуск процесса httpd(apache, nginx), остановка всех связных процессов на сервере, для удаления из памяти всех ранее запущенных процессов PHP (удаление вируса из памяти);
- Удаление полностью, файлов содержащих вредоносный код в ручном режиме, если это файлы НЕ относящиеся к файлам сайта (без первого пункта, этот шаг бесполезен, т.к. вирус восстановится из памяти);
- Удаление только вредоносного кода из файлов, если эти файлы относящиеся к файлам сайта CMS, удалять их нельзя. тут требуется деликатная работа с кодом и навык веб-разработчика;
- Прогон всех файлов сайта через ImunifyAV (антивирус для серверных скриптов, PHP), в автоматическом режиме, с последующим ручным удалением(редактированием). Надо отметить, что на данные скрипты PHP ругается даже встроенный Windows антивирус(Защитник);
4.1 Уместно будет прогнать сайт утилитой типа Ai-Bolit Scanner, но данное решение уже не поддерживается, также оно требует немалых ресурсов сервера т.к. работает на том же PHP, подойдет не всем, но иногда результат стоит того;
- Восстановление файлов, перезаписанных вредоносным кодом(в случаях когда удален оригинальный код) на оригиналы;
- Установка прав CHMOD на все файлы 0644, на директории 0755, CHOWN;
- Смена всех паролей: FTP, SSH, MySQL, панель хостинга;
- Изучение всех основных разделов сайта, используемых ими библиотек, а также служебных файлов(созданных разработчиками сайта), на предмет явных уязвимостей;
- Удаление всех служебных(вспомогательных) PHP скриптов из корня сайта, оставленных разработчиками, которые позволяли получать всю информацию о сервере любому желающему, например разработчики часто оставляют скрипты выводящих распечатку команды phpinfo();
- Ручной поиск по всем файлам сайта с использованием фрагментов, в качестве искомой строки, ранее найденных файлов текста кода вируса, с их(найденных файлов) последующим удалением. Например тот же .htaccess созданный вирусом, был размножен более чем по 40 тысячам папок, что разумеется нарушало работу сайта!
Также в поиске можно использовать другие схожие параметры файлов: дата/время создания, размер, название.
Возможные способы проникновения вредоносного кода на сайт
В описываемом мною случае, вероятнее всего вирус проник на сайт через уязвимость в коде скриптов, описанном ниже в п.2
- SSH/FTP. Пароли чаще всего крадутся с компьютера пользователя, будь то самого владельца сайта или разработчика. Любой ПК может быть заражен вирусом, который хранит передаваемые или сохраняемые(в том числе в файл-менеджерах) данные доступа. Также распространен метод подбора пароля(Брутфорс) путем перебора;
- Размещение на сайте устаревших PHP(и прочих) скриптов, публичных модулей CMS, плагинов и т.д. Зачастую их код доступен всем желающим, на предмет изучения в них уязвимостей, это дает возможность злоумышленнику найти уязвимость и воспользоваться ею, выполнив SQL-инъекцию например. Более того, все найденные ранее уязвимости, как правило публикуются в специальных каталогах, с полным описанием как ими воспользоваться. Каталоги доступны всем желающим, без ограничений. Как правило разработчики быстро устраняют уязвимости и выпускают новые версии программного обеспечение(если повезет конечно). Но, если вы вовремя не обновитесь, велик шанс что уязвимостью воспользуются;
- Размещение на сервере устаревшего программного обеспечения уровня операционной системы. Аналогично предыдущему пункту, но в данном случае речь о пакетах ПО для Linux/Windows;
- Атаки типа XSS, Mitm, CSRV.
Рекомендации
Как и в случае с лечением, рекомендации для каждого случая уникальны, но есть и ряд универсальных советов, не пренебрегайте ими
- Периодически менять пароли.
— Админпанель, раз месяц;
— SSH/FTP раз в месяц или после каждой работы стороннего разработчика;
— MySQL раз в 3-6 месяцев;
— Сторонние сервисы, API, раз в 3-6 месяцев. - Обновлять CMS, модули и плагины. Если на сайте есть сторонний код, не входящий в состав CMS, а просто размещенный на хостинге, также обновлять его библиотеки в ручном режиме. Ставить задачу разработчику проверять наличие обновлений сторонних библиотек хотя бы раз в пол года — год;
- Удалять все неиспользуемые скрипты, библиотеки, размещенные на сайте;
- Не допускать наличие на сайте служебных файлов, которые оставляют разработчики, в ходе проведения своих работ, например файлы типа: 1.php с содержимым в виде одной строки <? phpinfo(), что позволяет любому желающему зайти по адресу данного скрипта и узнать всю информацию о PHP и сервере;
- Разделить права доступа к сайтам(если на сервере, хостинге несколько сайтов) example1.ru и example2.ru по SSH/FTP. Для каждого сайта свой доступ;
- На сервере создать двух независимых пользователей, с ограниченным доступом к каталогам двух разных сайтов, один к example1.ru второй к example2.ru, и назначить разные права владельцев CHOWN на директории и файлы обоих сайтов. Чтобы в случае заражение первого сайта, вирус не мог при наличии привилегий добраться до второго;
- Периодический бекап файлов и БД. Так как общий объем всего бекапа может составлять не один ГБ делать полный бекап хотя бы раз в месяц, и частичный раз в неделю;
- Установка на сервер ImunifyAV Free (бесплатную версию), для работы в автоматическом режиме и анализом отчета раз в неделю-две;
- (для продвинутых) В перспективе, мониторинг всех php скриптов на сайте по их хешу(хеш файла по MD5, например), чтобы в случае их изменения(или появления новых файлов) система сигнализировала об этом администратору;
- Полное сканирование ПК всех пользователей, кто имеет доступ к SSH/FTP сайта, бесплатными утилитами типа Dr.Web CureIt и Malwarebytes Free;
- Ручной поиск по всем файлам с использование масок по содержимому, дате и времени, размеру, именам файлов.
Оставшиеся риски
К сожалению 100% гарантии, что это не повториться дать невозможно
Так как каждый PHP скрипт и библиотеку(каких на сайте тысячи) изучить и вычислить в них вероятную уязвимость невозможно, остается риск того, что вирус может вновь попытаться проникнуть на сайт используя такую уязвимость. Всегда существует вероятность, что в каком-то PHP файле, есть уязвимость. Но, можно провести хотя бы пакетный анализ, то есть не изучать в отдельности каждый скрипт, а изучить пакеты и библиотеки кода на предмет их актуальности(версии) и произвести их обновление до последних версий. При этом важно помнить о предварительных бекапах и о том, что после такого обновления система может перестать работать, в случае отсутствия обратной совместимости версий у обновляемых библиотек.
Заключение
Вирусные атаки с проникновением на сайт происходят очень часто, к сожаления в большинстве случаев причинами является то, что владелец сайта не уделяет должного внимания рекомендациям по безопасности(таким как я описал выше), более того, в подавляющем большинстве случаев владелец сайта даже не подозревает, что его сайт заражен вирусом. Такое положение дел может сохраняться годами, тем временем злоумышленник, как пиявка, будет высасывать все возможные ресурсы из сайта: рассылка спама, размещение рекламы или ссылок, кража данных, перенаправление трафика, а иногда даже майнинг на мощностях сервера или еще круче на стороне пользователей(посетителей вашего сайта) прямо в браузере используя JS(почему бы и нет?).
Я же, всегда рад оказать вам помощь в поиске и лечении(избавлении) сайта от вредоносного кода, а также в устранении последствий его работы, в том числе, применив все свои навыки веб-разработчика…
Обращайтесь!
Похожие записи
Оставить комментарий
Full Stack
Senior, Architect
предложить оффер
- jQuery: как получить значение атрибута?
- PHP работа с изображением, класс SimpleImage
- Интеграция с API ОСАГО сайта sravni.ru
- Комментарии на PHP, Ajax, mySQL
- PHP: Категории бесконечного уровня вложенности.
- Nginx редирект на другой сервис с сохранением URL спросил (а) Сергей
- Исполнитель пропал, почему такое случается и понять с кем работать? спросил (а) Артем
- Можно ли WordPress считать универсальным движком? спросил (а) Андрей
- Что такое самописный скрипт или CMS? спросил (а) Антон
- Как при поиске в linux используя grep, добавить исключения? спросил (а) Алексей
- Консольный скрипт(JavaScript) для автоматических заказов на OZON к записи
- Консольный скрипт(JavaScript) для автоматических заказов на OZON к записи
- Как создать Telegram-бота с авторизацией через сайт к записи
- PHP скрипт: каталог закладок на сайты к записи
- Валидация на PHP к записи
- Сколько зарабатывают в бизнесе на совместных покупках к записи
- Сколько зарабатывают в бизнесе на совместных покупках к записи
Archive
- +2024 (25)
- Ноябрь 2024 (10)
- Октябрь 2024 (8)
- Сентябрь 2024 (1)
- Август 2024 (5)
- Май 2024 (1)
- +2023 (27)
- Ноябрь 2023 (1)
- Октябрь 2023 (13)
- Сентябрь 2023 (10)
- Апрель 2023 (1)
- Март 2023 (1)
- Февраль 2023 (1)
- +2022 (21)
- Декабрь 2022 (11)
- Ноябрь 2022 (1)
- Май 2022 (2)
- Апрель 2022 (2)
- Март 2022 (3)
- Февраль 2022 (1)
- Январь 2022 (1)
- +2021 (17)
- Декабрь 2021 (5)
- Ноябрь 2021 (2)
- Июль 2021 (1)
- Июнь 2021 (2)
- Май 2021 (5)
- Апрель 2021 (1)
- Март 2021 (1)
- +2020 (20)
- Декабрь 2020 (6)
- Сентябрь 2020 (2)
- Август 2020 (1)
- Июль 2020 (2)
- Май 2020 (2)
- Апрель 2020 (2)
- Март 2020 (2)
- Февраль 2020 (1)
- Январь 2020 (2)
- +2019 (18)
- Декабрь 2019 (3)
- Ноябрь 2019 (2)
- Октябрь 2019 (2)
- Сентябрь 2019 (1)
- Август 2019 (2)
- Июль 2019 (1)
- Июнь 2019 (1)
- Апрель 2019 (2)
- Март 2019 (1)
- Февраль 2019 (3)
- +2018 (44)
- Декабрь 2018 (4)
- Ноябрь 2018 (7)
- Октябрь 2018 (8)
- Сентябрь 2018 (1)
- Август 2018 (4)
- Июль 2018 (5)
- Май 2018 (3)
- Апрель 2018 (7)
- Март 2018 (1)
- Февраль 2018 (2)
- Январь 2018 (2)
- +2017 (19)
- Декабрь 2017 (2)
- Ноябрь 2017 (1)
- Октябрь 2017 (1)
- Сентябрь 2017 (2)
- Июль 2017 (1)
- Июнь 2017 (1)
- Май 2017 (2)
- Апрель 2017 (3)
- Март 2017 (2)
- Февраль 2017 (1)
- Январь 2017 (3)
- +2016 (36)
- Декабрь 2016 (3)
- Ноябрь 2016 (3)
- Октябрь 2016 (2)
- Сентябрь 2016 (3)
- Август 2016 (7)
- Июнь 2016 (3)
- Май 2016 (3)
- Апрель 2016 (3)
- Февраль 2016 (1)
- Январь 2016 (8)
- +2015 (36)
- Ноябрь 2015 (5)
- Октябрь 2015 (4)
- Сентябрь 2015 (1)
- Август 2015 (8)
- Июнь 2015 (1)
- Май 2015 (4)
- Апрель 2015 (8)
- Март 2015 (3)
- Февраль 2015 (2)
- +2014 (26)
- Ноябрь 2014 (2)
- Октябрь 2014 (5)
- Сентябрь 2014 (6)
- Июль 2014 (1)
- Июнь 2014 (2)
- Май 2014 (3)
- Апрель 2014 (6)
- Февраль 2014 (1)
- +2013 (27)
- Декабрь 2013 (2)
- Ноябрь 2013 (1)
- Октябрь 2013 (1)
- Август 2013 (1)
- Июль 2013 (3)
- Июнь 2013 (10)
- Май 2013 (1)
- Апрель 2013 (2)
- Февраль 2013 (3)
- Январь 2013 (3)
- +2012 (41)
- Декабрь 2012 (2)
- Ноябрь 2012 (3)
- Октябрь 2012 (7)
- Сентябрь 2012 (2)
- Август 2012 (1)
- Июль 2012 (3)
- Июнь 2012 (2)
- Май 2012 (6)
- Апрель 2012 (2)
- Март 2012 (7)
- Февраль 2012 (5)
- Январь 2012 (1)
- +2011 (57)
- Декабрь 2011 (6)
- Ноябрь 2011 (2)
- Октябрь 2011 (3)
- Сентябрь 2011 (5)
- Август 2011 (4)
- Июль 2011 (3)
- Июнь 2011 (3)
- Май 2011 (3)
- Апрель 2011 (4)
- Март 2011 (10)
- Февраль 2011 (5)
- Январь 2011 (9)
- +2010 (43)
- Декабрь 2010 (7)
- Ноябрь 2010 (21)
- Октябрь 2010 (14)
- Сентябрь 2010 (1)
Свежие записи
- Интеграция платежной системы MoonPay на сайт по API 10.11.2024
- Парсер товаров с Taobao 08.11.2024
- Упаковка и минификация кода JavaScript онлайн 07.11.2024
- Как эффективно анализировать логи при DDOS атаке 07.11.2024
- Бот для автоматических заказов на OZON (плагин для Chrome) 07.11.2024