Чистка сайтов

Немного теории

Как и зачем взламывают сайты

Существуют две основных причины взлома сайтов: уязвимость в коде сайта и слабый пароль к административной панели. Такой способ, как подбор пароля к ftp, широко распространённый лет 10-15 назад, сейчас уже не встречается.  Взломать можно только сайт, имеющий исполняемый код, то есть созданный на основе CMS. Статический сайт, состоящий только из html-страниц, взломать нельзя. Но, как бы ни заманчиво было отказаться от исполняемого кода, невозможно отказаться от тех возможностей, которые предоставляет CMS.

Целью взломщиков является получение доступа к площадке для использования её для совершения различных противоправных действий: размещения кода, заражающего компьютеры и, чаще всего, мобильные телефоны посетителей, рассылки спама с помощью скриптов, установки ПО для совершения DDoS-атак или перебора паролей и т.д.  Отдельно стоят чисто вандальные взломы, совершаемые подростками с целью самоутверждения. Вероятность адресного взлома, нацеленного на какой-то конкретный сайт, кране мала, таким взломам подвергаются только сайты государственных органов, банков и публичных персон.  Для того, чтобы нанести ущерб конкурентам, сайт не взламывают, а атакуют: DDoS-атака проще, дешевле и гарантированно выведет сайт их строя.  Самый безопасный случай взлома — вандальный: такой взлом видно сразу и сайт легко восстановить из резервной копии. Самые опасные — взлом с целью рассылки спама и перебора паролей: в этом случае, если взломщик достаточно осторожен, владелец сайта может месяцами не замечать взлом, а когда заметит, чистой резервной копии может уже не существовать.

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

 

Как мы чистим сайты

Если взлом произошёл, главная задача — удалить с сайта посторонний вредоносный код и попытаться установить способ взлома. Удалить вредоносный код полностью и дочиста можно всегда, установить же причину взлома можно не всегда: если сайт после взлома восстанавливался из резервной копии или не сохранились журналы доступа к серверу за период от момента взлома до момента начала чистки, достоверно установить причину взлома становится невозможно.

Автоматическая чистка сайтов различными скриптами, к сожалению, не даёт гарантий обнаружения всего вредоносного кода.  Автоматический скрипт не должен своей работой уничтожать сайт, а значит, какую-то часть вредоносного кода скрипт обязательно пропустит. Например, вредоносным может быть любой вызов фукнции php eval(), но эта же функция широко используется в коде сайтов и её использование необходимо. Оценить же вредоносность конкретного вызова этой функции может только специалист, который внимательно изучит параметры вызова этой функции, место расположения вызова в скрипте, функционал скрипта и многие другие факторы. В автоматическом режиме такой анализ пока что невозможен. Каждая конструкция, вызывающая хотя бы малейшее подозрение, должа быть внимательно проверена.

Проверка и очистка сайта осуществляется нами в два этапа.

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

На втором этапе вручную анализируется весь подозрительный код. Оценивается сам код, его расположение в файле и многие другие особенности. Для анализа используется опыт, знание устройства многих CMS, знание «в лицо» многих видов вредоносного кода, владение языком php. Только комплексная оценка каждого подозрительного фрагмента позволяет однозначно отнести его либо к вредоносному коду, либо к коду самой CMS.

Для установления причины взлома необходимо знание времени изменения файла с вредоносным кодом с целью определить момент размещения вредоносного кода.  Установить это время не всегда возможно. Поле mtime для файла, которое мы обычно видим как время последнего изменения,  легко фальсифицируется, поэтому надежнее использовать время ctime, то есть время создания файла (точнее — inode, содержащей запись об этом файле), его фальсифицировать невозможно,  но, например, в случае перезаписи файла из резервной копии, ctime меняется на момент перезаписи. Далее, получив время появления вредоносного кода, по журналам доступа к сайту мы определяем, каким образом были сделаны эти изменения, причём найти место расположения уязвимости возможно только пройдя часто весьма длинную цепочку последовательных действий злоумышленников. Если же цепочка выйдет за пределы периода, для которого мы располагаем журналами, то найти причину взлома становится невозможно. Единственное, что остаётся в таком случае — ждать следующего взлома. По результатам выявления причины взлома мы предоставляем владельцу сайта рекомендации по мерам безопасности и, по мере возможности, производим работы по защите сайта.