WordPress – одна из самых популярных систем управления контентом, использующаяся в самых различных целях: от ведения блогов до электронной коммерции. Существует широкий выбор плагинов и тем для WordPress . Случается, что какие-то из этих расширений попадают в руки вебмастеров после того, как некий злоумышленник потрудился над ними.
Ради своей выгоды он мог оставить в них рекламные ссылки или код, с помощью которого он будет управлять вашим сайтом. Многие пользователи WordPress не имеют большого опыта в веб-программировании и не знают, как действовать в такой ситуации.
Для них я сделал обзор девяти наиболее эффективных инструментов для обнаружения вредоносных изменений в коде работающего сайта или устанавливаемых дополнений.
1. Theme Authenticity Checker (TAC)Theme Authenticity Checker (инспектор аутентичности тем, TAC) – WordPress -плагин, который сканирует каждую установленную тему на наличие подозрительных элементов вроде невидимых ссылок или кода, зашифрованного с помощью Base64 .
Обнаружив такие элементы, TAC сообщает о них администратору WordPress , позволяя ему самостоятельно проанализировать и при необходимости исправить исходные файлы тем:
2. Exploit ScannerExploit Scanner сканирует весь исходный код вашего сайта и содержимое базы данных WordPress на наличие сомнительных включений. Так же, как и TAC , этот плагин не предотвращает атаки и не борется с их последствиями в автоматическом режиме.
Он только показывает обнаруженные симптомы заражения администратору сайта. Если вы хотите удалить вредоносный код, придётся это сделать вручную:
3. Sucuri SecuritySucuri – хорошо известное решение в области безопасности WordPress . Плагин Sucuri Security осуществляет мониторинг файлов, загружаемых на WordPress -сайт, ведёт собственный список известных угроз, а также позволяет удалённо просканировать сайт при помощи бесплатного сканера Sucuri SiteCheck Scanner . За абонентскую плату можно дополнительно укрепить защиту сайта, установив мощный сетевой экран Sucuri Website Firewall :
4. Anti-MalwareAnti-Malware – плагин для WordPress, который способен находить и удалять троянские скрипты, бэкдоры и прочий вредоносный код.
Параметры сканирования и удаления могут настраиваться. Этот плагин можно использовать после бесплатной регистрации на gotmls .
Плагин регулярно обращается к сайту производителя, передавая ему статистику обнаружения зловредов и получая обновления. Поэтому если вы не хотите устанавливать на свой сайт плагины, отслеживающие его работу, то вам стоит избегать использования Anti-Malware :
5. WP Antivirus Site ProtectionWP Antivirus Site Protection – это плагин, сканирующий все загружаемые на сайт файлы, в том числе WordPress -темы.
Плагин имеет собственную базу сигнатур, автоматически обновляемую через Сеть. Он умеет удалять угрозы в автоматическом режиме, оповещать администратора сайта по электронной почте и много другое.
Плагин устанавливается и функционирует бесплатно, но имеет несколько платных дополнений , на которые стоит обратить внимание:
6. AntiVirus для WordPressAntiVirus для WordPress – простой в использовании плагин, который способен осуществлять регулярное сканирование вашего сайта и отправлять оповещение о проблемах безопасности по электронной почте. Плагин имеет настраиваемый «белый список » и другие функции:
7. Quterra Web Malware ScannerСканер от Quterra проверяет сайт на наличие уязвимостей, внедрений стороннего кода, вирусов, бэкдоров и т.д. Сканер обладает такими интересными возможностями, как эвристическое сканирование, обнаружение внешних ссылок.
Базовые функции сканера бесплатны, в то время как некоторый дополнительный сервис обойдётся вам в $60 за год:
8. WordfenceЕсли вы ищете комплексное решение проблем безопасности вашего сайта, обратите внимание на Wordfence .
Этот плагин обеспечивает постоянную защиту WordPress от известных типов атак, двухфакторную аутентификацию, поддержку «чёрного списка » IP-адресов компьютеров и сетей, используемых взломщиками и спамерами, сканирование сайта на наличие известных бэкдоров.
Этот плагин бесплатен в своей базовой версии, но имеет и премиум-функционал, за который производитель запрашивает скромную абонентскую плату:
9. WemahuWemahu осуществляет мониторинг изменений в коде вашего сайта и поиск вредоносного кода.
База данных, на основе которой ведётся обнаружение зловредов, пополняется методом краудсорсинга: пользователи сами пополняют её, отправляя результаты сканирования зараженных инсталляций WordPress на сайт автора плагина. Плагин также поддерживает отправку отчётов по электронной почте и другие полезные функции.
Правда жизни такова, что сайт рано или поздно могут взломать. После успешной эксплуатации уязвимости хакер старается закрепиться на сайте, размещая в системных директориях хакерские веб-шеллы, загрузчики и внедряя бэкдоры в код скриптов и базу данных CMS.
Сканеры помогают обнаруживать загруженные веб-шеллы, бэкдоры, фишинговые страницы, спам-рассыльщики и другие типы вредоносных скриптов – все то, что им известно и заранее добавлено в базу сигнатур вредоносного кода. Некоторые сканеры, например, AI-BOLIT, обладают набором эвристических правил, которые позволяют обнаруживать файлы с подозрительным кодом, который часто используется во вредоносных скриптах, или файлы с подозрительными атрибутами, которые могут быть загружены хакерами. Но, к сожалению, даже в случае использования нескольких сканеров на хостинге, возможны ситуации, когда некоторые хакерские скрипты остаются не обнаруженными, что фактически означает, что у злоумышленника остается “черный ход” и он может взломать сайт и получить над ним полный контроль в любой момент.
Современные вредоносные и хакерские скрипты значительно отличаются от тех, что были 4-5 лет назад. Сейчас разработчики вредоносного кода комбинируют обфускацию, шифрование, декомпозицию, внешнюю подгрузку вредоносного кода и используют другие уловки для того, чтобы обманывать антивирусное ПО. Поэтому вероятность пропуска новых “вредоносов” значительно выше, чем раньше.
Что же можно сделать в данном случае для более эффективного обнаружения вирусов на сайте и хакерских скриптов на хостинге? Необходимо использовать комплексный подход: первоначальное автоматизированное сканирование и дальнейший ручной анализ. В этой статье речь пойдет о вариантах обнаружения вредоносного кода без сканеров.
Вначале рассмотрим, что именно следует искать при взломе.
Итак, предположим, что сканерами вы уже проверили файлы на хостинге и дамп базы данных, но они ничего не обнаружили, а вирусный по-прежнему на странице или мобильный редирект продолжает отрабатывать при открытии страниц. Как искать дальше?
Поиск вручнуюВ unix сложно найти более ценную пару команд для поиска файлов и фрагментов, чем find / grep.
find . -name ‘*.ph*’ -mtime -7
найдет все файлы, которые были изменены за последнюю неделю. Иногда хакеры “скручивают” дату изменения у скриптов, чтобы таким образом не обнаружить новые скрипты. Тогда можно поискать файлы php/phtml, у которых менялись атрибуты
find . -name ‘*.ph*’ -сtime -7
Если нужно найти изменения в каком-то временном интервале, можно воспользоваться тем же find
find . -name ‘*.ph*’ -newermt 2015-01-25 ! -newermt 2015-01-30 -ls
Для поиска в файлах незаменим grep. Он может искать рекурсивно по файлам указанный фрагмент
grep -ril ‘stummann.net/steffen/google-analytics/jquery-1.6.5.min.js’ *
При взломе сервера полезно проанализировать файлы, у которых установлен guid/suid флаг
find / -perm -4000 -o -perm -2000
Чтобы определить, какие скрипты запущены в данный момент и грузят CPU хостинга, можно вызвать
lsof +r 1 -p `ps axww | grep httpd | grep -v grep | awk ‘ { if(!str) { str= } else { str=str»,»}}END{print str}’` | grep vhosts | grep php
Используем мозг и руки для анализа файлов на хостингеЛоги веб-сервера, почтового сервиса и FTP можно использовать для обнаружения вредоносных и хакерских скриптов.
Намного проще анализировать взлом и искать вредоносные скрипты на сайте, если заранее позаботить о его безопасности. Процедура контроля целостности (integrity check) помогает своевременно обнаруживать изменения на хостинге и определять факт взлом. Один из самых простых и эффективных способов – положить сайт под систему контроля версий (git, svn, cvs). Если грамотно настроить.gitignore, то процесс контроля за изменениями выглядит как вызов команды git status, а поиск вредоносных скриптов и измененных файлов – git diff.
Также у вас всегда будет резервная копия файлов, до которой можно «откатить» сайт в считанные секунды. Администраторам сервера и продвинутым веб-мастерам можно использовать inotify, tripwire, auditd и другие механизмы для отслеживания обращений к файлам и директориям, и контроля за изменениями в файловой системе.
К сожалению, не всегда есть возможность настроить систему контроля версий или сторонние сервисы на сервере. В случае shared-хостинга не получится установить систему контроля версий и системные сервисы. Но это не беда, есть достаточно много готовых решений для CMS. На сайте можно установить плагин или отдельный скрипт, который будет отслеживать изменения в файлах. В некоторых CMS уже реализован эффективный мониторинг изменений и механизм integrity check (Например, в Битрикс, DLE). В крайнем случае, если на хостинге есть ssh, можно сформировать эталонный слепок файловой системы командой
Акция «2 по цене 1»Акция действует до конца месяца.
При подключении услуги "Сайт под наблюдением" для одного сайта, второй на том же аккаунте подключается бесплатно. Последующие сайты на аккаунте - 1500 руб в месяц за каждый сайт.
Вредоносный JavaScriptМое мнение, состоящее в том, что от внедряемых вредоносных браузерных скриптов (хранимые XSS-атаки) проще и эффективнее защищаться средствами браузеров, было изложено ранее: . Браузерная защита от JavaScript-а, состоящая в добавлении к html-страницам сайта фильтрующего кода, надо полагать, является надежной, тем не менее, наличие такой защиты не отменяет необходимости использовать еще и серверный фильтр. В отношении тех же XSS-атак на сервере можно организовать дополнительную линию обороны. Надо помнить и о возможности внедрения злоумышленником в html-сообщение, отправляемое с сайта, не браузерных, а серверных скриптов (php), в распознавании которых браузер будет не силен.
Атакующий скрипт, хоть браузерный, хоть серверный - это ведь программа, надо думать, что программа всегда будет иметь некоторые символьные отличия от "чистого" html. Попробуем найти такие отличия и использовать их для построения html-фильтра на сервере. Ниже - примеры вредоносного JavaScript.
XSS:Какой-то текст
Какой-то текст
Зашифрованный XSS:Какой-то текст
Браузеры восстанавливают текст из символьных примитивов не только находящийся внутри html-контейнеров (между открывающим и закрывающим тегом), но и внутри самих тегов (между < и >). В http-адресах допускается url-кодирование. Указанное осложняет распознавание вредоносного кода на стороне сервера, так как одна и та же символьная последовательность может быть представлена разными способами.
XSS-черви:"+innerHTML.slice(action= (method="post")+".php",155)))">
alert("xss");with(new XMLHttpRequest)open("POST","post.php"),send("content="+_.outerHTML)
Вышеприведенные XSS-черви - всего лишь несколько из множества присланных на проводимый в январе 2008 года Робертом Хансеном (aka RSnake) конкурс на минимального (самого короткого) вредоносного JavaScript-червя (итоги конкурса ).
Признаки XSS-атакXSS-скрипт - это программа, обращающаяся к объектам DOM (Document Object Model) и их методам.
Иное едва ли будет сколько-нибудь вредоносным. Например, JavaScript-строка
onckick="var a = "xss""
не затрагивает объектную модель документа, поэтому, даже будучи внедренной в html-тег,
такая строка безвредна. Только манипулируя объектами html-документа и их методами,
хакер способен причинить заметный вред сайту. Например, строка
onmousemove="document.getElementsByTagName("body").innerHTML="XSS""
уже заменяет содержимое страницы.
Признак обращения к методам DOM - это круглые скобки, также точки, стоящие слева от знака равенства. Круглые скобки могут использоваться и в html - для задания цвета в формате rgb() , однако, цвет шрифта и фона в html задается, как минимум, еще тремя способами. Поэтому круглыми скобками можно пожертвовать без ущерба для выразительности html-текста. Необходимо принять правилом, что скобки внутри тега (то есть, между < и >) - это очень опасно, если мы получили на сервер сообщение от пользователя, в этом сообщении обнаруживаются скобки внутри тегов, то самое уместное, что мы должны сделать - это заблокировать такое сообщение.
Точка может содержаться в html-тегах: при задании адреса ссылки (тег
);
при задании размера html-элементов (style="height:1.5in; width:2.5in;"
). Но символьных
последовательностей вида
точка буквы равно
в html-тегах быть не может. При наличии указанной последовательности внутри html-тега,
сообщение от пользователя, с большой вероятностью, содержит скрипт и должно быть заблокировано.
Еще один очевидный признак опасности - это символ "+ " внутри тега. В бесскриптовом html такого нет. При обнаружении внутри тегов плюсов - безжалостно блокируем сообщение.
К шифрованию символьными примитивами внутри html-тегов добронамеренный пользователь сайта, добавляющий комментарий посредством визуального редактора, никогда не прибегнет. Никаких выгод в виде дополнительных выразительных средств использование символьных примитивов в тегах не дает, лишь требует дополнительных затрат времени на написание. В большинстве случаев, надо думать, добронамеренный пользователь даже и не знает, что существуют некие символьные примитивы в html. Отсюда правило: амперсанд внутри тега - доказательство атаки на сайт. Соответственно, если видим такое, то блокируем сообщение.
Аналогичное правило следует принять и в отношении символа "% ", который может быть применен в url-кодировании. Однако, проценты используются и в "чистом" html - для задания относительных размеров элементов. Опасными являются комбинации, в которых за знаком "% " непосредственно следуют буква или цифра.
Обезвреживание серверных скриптовВ отличие от JavaScript-интерпретаторов в браузерах, php-интерпретатор на сервере не позволяет вольностей при написании текста программы. Поэтому, для нейтрализации возможного серверного скрипта достаточно сделать сквозную замену в html-сообщении пользователя всех символов, существенных при написании php-программы, их html-примитивами. Замене подлежат, в первую очередь, знаки доллар и подчеркивание, точка, круглая, квадратная и фигурная скобки, знаки плюс и минус, знак обратный слэш.
PHP-фильтр для HTML-сообщений$message - это полученное из визуального редактора на сервер html-сообщение.
// запоминаем длину сообщения $lenmessage = strlen($message); // вырезаем тег комментария $message = preg_replace("//", "", $message); // вырезаем каждый тег, в котором атрибут "src" ссылается на внешний ресурс $message = preg_replace("/]+?src[\w\W]+\/\/[^>]+?>/i", "", $message); // вырезаем каждый тег, в котором есть любой символ кроме: - a-z 0-9 / . : ; " = % # пробел $message = preg_replace("/]+[^->a-z0-9\/\.\:\;\"\=\%\#\s]+[^>]+?>/i", "", $message); // вырезаем каждый тег, в котором есть последовательность ". a-z =" $message = preg_replace("/]+?\.+?\=[^>]+?>/i", "", $message); // вырезаем каждый тег, в котором есть последовательность "% a-z" или "% 0-9" $message = preg_replace("/]+?\%+?[^>]+?>/i", "", $message); // вырезаем каждый тег, в котором есть последовательность "script" или "js:" $message = preg_replace("/]*?script[^>]*?>/i", "", $message); $message = preg_replace("/]*?js:[^>]*?>/i", "", $message); // вырезаем каждый тег, который начинается на символ кроме "a-z" или "/" $message = preg_replace("/]*?>/i", "", $message); // проверка: если сообщение укоротилось, то завершаем программу $lenmessage2 = strlen($message); if ($lenmessage != $lenmessage2) { print "Сообщение не может быть добавлено"; exit; } // совершаем сквозную замену опасных символов соответствующими им примитивами $message = str_replace("$", "$", $message); $message = str_replace("_", "_", $message); $message = str_replace(".", ".", $message); $message = str_replace(chr(92), "\", $message); // \ $message = str_replace("(", "(", $message); $message = str_replace(")", ")", $message); $message = str_replace("[", "[", $message); $message = str_replace("]", "]", $message); $message = str_replace("{", "{", $message); $message = str_replace("}", "}", $message); $message = str_replace("?", "?", $message); // теперь сообщение проверено, скрипты в нем обезврежены
Следует заметить, что фильтр не удаляет парные теги. Допустим, мы получили
Click here!
Фильтр вырежет только
, но парный (закрывающий) тег
останется. Если отдавать сообщения, в которых есть теги без соответствующих
им пар, в браузер, возможна неприятность в виде "перекоса" сайта. Неизвестно ведь, какому
открывающему тегу браузер сопоставит оставшийся без пары закрывающий тег. Поэтому, а также
по соображения безопасности, сообщения, в которых фильтром что-то вырезано, вообще не стоит
отдавать в браузер. Лучше выводить что-то наподобие "Сообщение не может быть добавлено"
и завершать программу.
Предполагается, что сообщение будет записано в файл (не в базу данных).
ОбсуждениеБуду благодарен за критику. Пишите на форум поддержки, в раздел
Необходимо выполнять совместно. Если устранить первоначальную причину взлома (например, уязвимость в расширении CMS), но не удалить все вредоносные файлы, злоумышленник сможет снова получить доступ к сайту, воспользовавшись одним из своих скриптов. Если же удалить все загруженные вредоносные скрипты, но не устранить причину взлома, злоумышленник сможет повторно взломать сайт и снова загрузить на него скрипты.
Выполнять работу по удалению вредоносных скриптов и проводить анализ причин взлома должен специалист с соответствующими знаниями и опытом :
Поэтому если ваш сайт оказался взломан, рекомендуется во избежание повторных взломов не выполнять работу самостоятельно, а обратиться к специалисту, который произведет необходимую диагностику и порекомендует или выполнит необходимые действия для решения проблемы, и который сможет дать гарантию качества полученного результата.
Тем не менее, существует ряд мер, которые в некоторых случаях помогают возобновить безопасную работу сайта без наличия специальных знаний . Ограничением приведенного ниже способа является то, что для возобновления работы сайта требуется наличие его резервной копии, созданной на момент до взлома. Если дата взлома неизвестна, можно попробовать применить этот способ, используя самую раннюю резервную копию из имеющихся. Вторым ограничением, как следствие из первого, является то, что после восстановления сайта будут потеряны данные, добавленные на сайт после создания восстанавливаемой резервной копии (например, новые статьи, изображения или документы). Если требуется восстановить работу сайта, сохранив при этом новые данные, необходимо обратиться к специалисту.
Эти меры не позволяют установить причину взлома сайта , однако каждая из них направлена на устранение одной из потенциальных причин проникновения. Так как точная причина взлома неизвестна, необходимо выполнить их все. Действия расположены в таком порядке, чтобы сначала полностью исключить возможность продолжения деятельности злоумышленника на сайте или аккаунте хостинга в настоящий момент, после чего предупредить проникновение злоумышленника на сайт в будущем.
Приведенные ниже действия предполагают, что на вашем аккаунте хостинга располагается только один сайт . Если на аккаунте располагается несколько сайтов, то они также могли подвергнуться взлому, и сайт мог быть взломан через них. Необходимо либо перенести сайт, с которым проводятся восстановительные работы, на отдельный аккаунт, либо проводить восстановление для всех сайтов, размещенных на аккаунте, одновременно.
Очередность действий важна, поэтому необходимо выполнять их именно в том порядке, в котором они расположены ниже.
Все указанные выше действия необходимо выполнять в соответствии с указанной очередностью, без пропусков и каких-либо изменений. Если действия выполнены неточно, на сайте могут остаться вредоносные скрипты или уязвимости, в результате чего через короткое время он может быть снова взломан злоумышленником . Если по каким-либо причинам выполнить перечисленные выше действия в том виде, в котором они указаны, возможности нет, обратитесь к специалисту для проведения работ по восстановлению сайта после взлома.
Чтобы защитить сайт от повторных взломов в будущем необходимо придерживаться следующих рекомендаций: