Подписка на обновления  RSS  Письмо редактору
Популярно
Защита от шеллов и вирусов
18:21, 09 февраля 2017

Защита от шеллов и вирусов


Защита сайта от шеллов

Оглавление

Введение…………………………………………………………………………………………………………………………………… 1

Основные источники проникновения:……………………………………………………………………………………….. 2

Брутфорс……………………………………………………………………………………………………………………………….. 3

Дыры в движках, шаблонах и плагинах…………………………………………………………………………………. 9

Небезопасные настройки сервера и хостинга…………………………………………………………………………. 9

Халявный и нулленый софт…………………………………………………………………………………………………. 10

Как происходит внедрение шелла через админку сайта…………………………………………………………….. 11

Обнаружение шелла…………………………………………………………………………………………………………………. 12

Профилактические мероприятия………………………………………………………………………………………………. 19

 

Введение

В контексте данного руководства термин шелл-хантинг будем понимать как охота на шеллы. Но перед этим разберемся, что такое шелл.

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

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

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

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

Основные источники проникновения:

  1. Брутфорс — подбор паролей. По признакам CMS определяется типовой урл входа в административную часть сайта и задалбывается перебором логинов и паролей. Кроме этого могут подбирать пароль ftp доступа.
  2. Дырявые движки\плагины содержат уязвимости, позволяющие загрузить на сайт какой-либо исполняемый файл.
  3. Небезопасные настройки сервера позволяют залив шелл на один сайт, получить доступ не только ко всем сайтам на этом аккаунте, но и к остальным аккаунтам на этом сервере.
  4. Халявный и нулленый софт. Для этого ищется в интернете или покупается популярный плагин или шаблон и в него встраивается код шелла. Затем софт распространяется на варезниках, давая таким образом автору доступ ко всем сайтам, на которых его установят.

Разберемся с каждым способом отдельно.

Брутфорс.

Для всех сайтов на вордпресс вход в админку осуществляется по адресу ваш_домен/wp-login.php Поэтому можно сканировать и старые домены из выдачи, и свежезарегистрированные  у регистраторов на наличие различных признаков того, что это например вордпресс, а можно простым перебором обращаться ко всем доменам по урлу  wp-login.php — и где есть ответ, где эта страница существует — значит вордпресс. Или иной урл, типичный для джумлы, друпала, дле и т. д.

Исходя из совпадений набирается база доменов, к которым начинается непрерывное обращение с различными вариантами логинов: admin, administrator, editor, user, site, имя домена и т. п. и перебор паролей: 1111, 123123, 123456, qwerty, pass, password и т.д. В зависимости от возможностей скриптов, размера базы паролей и его многопоточности, может происходить до сотен обращений в минуту. К тому же скрипт может быть запущен одновременно на нескольких серверах, или ваш домен попадет в несколько баз и вас несколько человек будут пытаться одновременно сбрутить, что показывает потенциальный масштаб и размах долбежа и создаваемой нагрузки.

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

zashita-sayta

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

Важно! Не удалите вместе с этим и все записи, которые сделаны как админ, переназначьте их на нового пользователя.

Аналогичные действия проделайте и в любой другой CMS.

Кроме этого сделайте для себя правилом при каждой настройке нового сайта делать следующее:

  1. логин — все что угодно, кроме admin или administrator
  2. пароль — все что угодно, кроме пароля который уже где-то использовали
  3. префикс базы данных — все что угодно, кроме стандартного wp_ Есть плагины, которые позволяют сменить префикс базы данных на уже работающем сайте, они будут приведены ниже.

Если переживаете, что не сможете запомнить хитрые пароли ко всем своим аккаунтам, то воспользуйтесь LastPass или аналогом — это плагин ко всем броузерам, позволяющий запоминать пароли и автоматически подставлять их при посещении сайтов (это гораздо безопаснее, чем хранить пароли в броузере). Вам останется только придумать один сложный главный пароль, который закрывает доступ к вашей учетной записи ластпасс и ко всем паролям к сайтам.

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

Теперь простым перебором в админку вашего сайта не попасть. Но остается вопрос нагрузки, т. к. каждое обращение к админке пусть незначительно, но грузит ваш хостинг. А представьте, если вас долбить будут тысячи раз в день. И долбить будет несколько искателей шеллов одновременно (в чьи базы вы попадете). Или сегодня один, а завтра другой?

Для этого нужно использовать плагин  Limit Login Attemps или аналоги, которые ограничивают количество неверных попыток авторизаций. Если с какого-то айпи будет сделано больше чем допустимое количество ошибок, обычно 2-3, то для этого айпи доступ к админке будет закрыт.

zashita-sayta1

Как видно по скриншоту — плагин уже выполнил 437 блокировок, закрыв доступ для 385 айпишников (т. к. понятно, что c домашнего айпи никто не будет долбить ваш сайт, а попытки будут с прокси или дедиков).

Ну и настройки я поставил самые суровые — разрешена только 1 попытка авторизации, при ошибке — блок на 9999 минут. Если еще одна ошибка, то блок на 9999 часов.

Смена логин\пасса и блок на подбор паролей на 90% решает потенциальную угрозу взлома, дальше идут уже тонкие настройки.

Чтобы уменьшить вероятность брутфорса используют различные плагины и настройки для WordPress, для скрытия признаков того, что это вордпресс, типа Hide My WP или WP Guaven FP. Кроме этого плагины типа Better WP Security также меняют стандартные папки и урлы входа в админку, префикс базы данных и многое другое.

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

Следует учитывать, что софт по добыче шеллов попадает в самые разные руки и уровень грамотности у их владельцев может быть на уровне первого класса, и сплошь и рядом возникают ситуации, когда криво настроенным софтом сайт долбят одновременно по нескольким урлам — типовая админка вордпресса, админка форума phpbb и т. п., при том что ваш сайт — на джумле.

Поэтому эффективным завершающим действием по защите сайта будет создание фильтров и редиректов в корневом htaccess файле.

Фильтрация заключается в указании разрешенных на доступ к админке айпишников, с запретом на доступ всех остальных. Если у вас статический айпишник или динамический, но с известным диапазоном, то стоит использовать этот способ.

Настройки

В зависимости от настроек хостинга возможны 2 варианта настроек для htacctess запрещающие доступ к wp-login посторонним айпи (если не сработал первый вариант синтаксиса,  нужно попробовать второй).

<Files wp-login.php>

SetEnvIf Remote_Addr «^1.2.3.4|^128.128» addr

Order Deny,Allow

Deny from all

Allow from env=addr

</Files> или

<Files wp-login.php>

Order Deny,Allow

Deny from all

Allow from 1.2.3.4

Allow from 128.128

</Files>

где 1.2.3.4 ваш статический айпи, а 128.128  первые цифры динамического айпи. Узнать свой айпи можно на 2ip

Для запрета доступа к wp-config.php используется более простая конструкция, которая также дописывается в htaccess, запрещая доступ к файлу абсолютно всем.

<files wp-config.php>

Order Allow,Deny

Deny from All

</files>

Чтобы закрыть для всех посторонних доступ к папке wp-admin, внутрь этой папки кладется файл .htaccess с следующим содержимым

SetEnvIf Remote_Addr «^1.2.3.4|^128.128» addr

Order Deny,Allow

Deny from all

Allow from env=addr

или

Order Deny,Allow

Deny from all

Allow from 1.2.3.4

Allow from 128.128

Таким образом, извне никто не сможет попасть в админку сайта, даже зная логин и пароль.

Способ для маленьких

Также есть очень простой, но эффективный способ для самых маленьких — удалить или переименовать файл wp-login.php в например wp-login.txt , если вы не планируете в ближайшее время заходить в админку сайта. И при попытке авторизироваться — естественно будет ошибка недоступности авторизации. А потом можно переименовать обратно файл, когда нужно будет зайти.

Редиректы в htaccess используются еще и для перенаправления запросов к несуществующим страницам, и если вдруг ваш сайт долбят по урлам типа

/forums/core/install/upgrade.php

/engine/engine.php /admin/login.php

/bitrix/admin/ и т. п.

которых у вас нет и не было, то это также нужно прекратить. Увидеть эти урлы можно по журналам хостинга —  в логах ошибок доступа или статистики по ошибке http 404 (несуществующие страницы).

Перенаправление(блокировка) выполняется таким образом в htaccess

RewriteCond %{REQUEST_URI} ^/forums/core/install/upgrade.php$ [OR]

RewriteCond %{REQUEST_URI} ^/engine/engine.php$ [OR]

RewriteCond %{REQUEST_URI} ^/admin/login.php$ [OR]

RewriteCond %{REQUEST_URI} ^/bitrix/admin/(.*)$

RewriteRule ^(.*) — [F,L] где

^ означает начало урла

$ конец урла (.*) любой текст

т. е. первые три правила будут блокировать конкретно эти указанные урлы, а правило /bitrix/admin/(.*) будет блокировать любой урл, начинающийся с /bitrix/admin/

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

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

zashita-ot-shelov

Единственным слабым местом остается подбор пароля к FTP и взлом всего сервера сразу у хостера. С первым можно побороться использованием заковыристых паролей, со вторым — используйте нормальных хостеров 🙂

Кстати! У некоторых хостеров есть возможность в панели запретить доступ по ftp для всех адресов, кроме вашего. Или как минимум просмотреть логи авторизаций, чтобы увидеть возможные попытки подбора пароля. Или просто отключать ftp доступ к аккаунту.

Полезняшка! Если на сайте нет раздачи файлов, то в список блокировки в htaccess стоит добавить фильтры типа

RewriteCond %{REQUEST_URI} ^(.*).zip$ [OR]

RewriteCond %{REQUEST_URI} ^(.*).rar$ [OR]

RewriteCond %{REQUEST_URI} ^(.*).gz$

RewriteRule ^(.*) — [F,L]

запрещающих попытки перебором названий скачать бекапы или архивы из корня сайта или папки uploads, в которых обычно лежат файлы с копиями сайтов.

Взрослый метод блокировки доступа к админке:

Если в ближайшее время не планируется заход на сайт, а заблокировать посторонним доступ хочется, то вместо переименовывания файла авторизации нужно заблокировать его в htaccess. Также этот способ можно применять для клиентских сайтов, когда все сделано-настроено-установлено и чтобы больше на сайт никто шаловливых ручек не совал.

Для Вордпресс

RewriteCond %{REQUEST_URI} ^/wp-login.php$

RewriteRule ^(.*) — [F,L]

Для Джумла

RewriteCond %{REQUEST_URI} ^/administrator$

RewriteRule ^(.*) — [F,L]

Для Друпал

RewriteCond %{REQUEST_URI} ^/admin$ [OR]

RewriteCond %{REQUEST_URI} ^/user$ RewriteRule ^(.*) — [F,L] и т. п.

Теперь в админку попасть не сможет никто.

Дыры в движках, шаблонах и плагинах.

Основную угрозу представляют различные обработчики загрузки файлов, редакторы или ресайзеры изображений. Т.е. вместо полезного и нужного, будет загружено неразрешенное и опасное. И даже если ограничить тип загрузки одними картинками, т.е. сделать проверку, чтобы файл был с расширением .jpg или .png, то ничто не мешает подменить тип файла и php скрипт загрузить как картинку.

Одни из самых популярных по взлому- timthumb, ресайзеры картинок, генераторы превьюшек. А вместо картинок подгружали шеллы. Поэтому для обеспечения безопасности — используйте самые свежие версии плагинов и шаблонов, обновляйте и делайте регулярные бекапы сайта. И отключайте и удаляйте все неиспользуемые шаблоны и плагины.

Пример очередного обновления плагина Contact Forms, позволяющего загружать файлы на сайт:

zashita-ot-shelov1

*Проверка расширений файлов во время загрузки была усилена.

Небезопасные настройки сервера и хостинга

Некорректные настройки сервера или недостаточно защищенные движки дают возможность делать различные XSS атаки, SQL-инъекции и т. п., позволяющие внедрить в базу данных или сайт вредный код.

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

Для взломщиков это удобно — стоит поломать один админский доступ к серверу и сразу же получить доступ ко всем клиентским аккаунтам на нем. Или через один клиентский аккаунт попасть во все остальные. Поэтому будь у вас хоть супер-пупер пароль и хитрые настройки сайта, к вам влезут и напакостят через соседей.

Не следует экономить на хорошем хостинге.

Халявный и нулленый софт

На различных варезниках пачками распространяются шаблоны и плагины. И заработка на скачке файлов с депозитов\летитбитов маловато, поэтому в сами файлы зашиваются шеллы и прочие пакости. И без четкого понимания, что там вписано и зачем — настоятельно не рекомендуется их использовать. Фактически своими руками вы впускаете на свой сервер постороннего человека, отдавая ему доступ ко всему ценному.

Если не знаете — что это за плагин и что в нем внутри, ни в коем случае не используйте. Или как минимум проверяйте архив антивирусом и визуально просматривайте файлы на подозрительный код.

Иначе впустите в свой дом непрошенных гостей.

Как происходит внедрение шелла через админку сайта

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

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

Вот так берется любой файл шаблона и в него вписывается код

zashita-ot-shelov2

Чтобы закрыть эту уязвимость, в файл wp-config.php добавьте define(‘DISALLOW_FILE_MODS’, true);

Это полностью отключает возможность загружать и редактировать файлы в админке Вордпресс. Поэтому даже если кто-то и попал в админку сайта, загрузить посторонние скрипты не сможет.

Обнаружение шелла

Теперь собственно к обнаружению и диагностированию шеллов. Как выше было написано — шеллы вставляют для получения доступа, а доступ нужен для монетизации. Т.е. если при переходе на ваш сайт из поиска происходит посторонний редирект, загружаются ифреймы, появились ссылки или посторонняя реклама и т. п., то добро пожаловать в клуб пострадавших.

Чистка шаблона и движка или восстановление из бекапа не поможет! Т.к.

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

Чтобы защититься, нужно: удалить файлы шелла (как их искать я расскажу ниже), переустановить движок, обновить плагины, удалить ненужные плагины и неиспользуемые шаблоны, проверить и почистить рабочий шаблон. Также сменить логин\пасс админки сайта, фтп и админки хостинга.

А в некоторых случаях — еще и поменять хостера, если взлом происходит через соседние аккаунты.

Если же никаких внешних проявлений нет, то обнаружить шелл можно только случайно.

Базовый способ обнаружения: если шелл залили в папку шаблона, то он может быть обнаружен с помощью плагинов

TAC (wordpress.org/plugins/tac/) или Antivirus (wordpress.org/plugins/antivirus/)

Еще раз подчеркиваю — эти плагины анализируют только содержимое папок шаблонов, не более.

Тревога бьется, если обнаруживаются последовательности зашифрованного php кода (отчет TAC)

zashita-ot-shelov3

или используются ряд подозрительных функций, типа eval или base64_decode (отчет Antivirus)

zashita-ot-shelov4

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

Метод первый — Айболит  revisium.com/ai/

Скрипт AI-Bolit умеет искать вирусы, вредоносные и хакерские скрипты на хостинге: шеллы по сигнатурам, шеллы на основе несложной эвристики — все то, что обычные антивирусы найти не могут

  • работает со всеми cms без исключения, включая joomla, wordpress, drupal, dle, bitrix
  • искать редиректы в .htaccess на вредоносные сайты
  • искать код sape/trustlink/linkfeed в .php файлах
  • определять дорвеи
  • показывать директории, открытые на запись
  • искать пустые ссылки (невидимые ссылки) в шаблонах

Скачиваете архив с скриптом, копируете на сайт, настраиваете по инструкции (устанавливаете пароль доступа) и запускаете.

И наблюдаете картину типа такой:

zashita-sayta2

Скрипт ищет вхождения известных ему сигнатур шеллов, а также типичные строки кода, свойственные для взлома или зашифрованного кода.

Как видно, скрипты nanda.php, 404.php, weather-us.php содержат переменные авторизации и зашифрованный код, а Nda.php — это страница с радостным сообщением, что  этот сайт взломан.

Кроме этого видно предупреждение о наличии зашифрованного кода в timthumb.php

Не всегда зашифрованный код является зловредным, в некоторых случаях он используется для защиты плагинов от взлома или для скрытия авторского кода от копирования. Но первые 4 файла — 100% признак того, что сайт взломан.

Для демонстрации в вложении есть 5 файлов:

nda.php – подобные файлы заливают вместо индексного файла, чтобы похвастаться о взломе shell.php – зашифрованный шелл S4MP4H exec.php – пример exec скрипта

wso.php  и wso2.php  — два зашифрованных варианта WSO шелла На время просмотра или копирования этих файлов на хостинг отключите антивирус, т. к. он может блокировать доступ к этим файлам.

Кстати! Если не блокирует, то надо его срочно поменять на нормальный.

Скопируйте эти файлы себе на сайт, чтобы посмотреть как они работают и что делают.

Посмотрим, что нам показывает по ссылке nda.php

zashita-sayta3

Пичалька, глумятся над нами. Идем далее.

Заходим в админку шелла shell.php и осматриваемся (пароль skladchik ).

Таким образом вы видите и можете делать все, что сможет увидеть и сделать с вашим сайтом взломщик.

zashita-sayta4

Тут можно получить кучу информации о версии софта, разрешенных\ запрещенных функциях и т. п.

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

Explore – проводник, полазить, посмотреть содержимое файлов, внести нужные правки.

Upload – загрузить свои файлы.

Mysql – доступ к базе данных. Т.е. посмотреть через проводник в файле wpconfig.php имя пользователя и его пароль — и можно полазить в базе, импортировать свои посты, удалить аккаунт админа и добавить свой собственный.

Jumping – показывает доступные аккаунты на этом сервере

zashita-sayta5

Т.е. мы можем под шумок полазить по остальным аккаунтам и сайтам на этом сервере, что-то украсть, что-то испортить 🙂

Что это означает? Означает, что нужно бегом бежать с этого хостинга, т. к.

даже если вы по 5 раз будете в день менять пароли, через соседние аккаунты к вам проберутся.

Т.е. вы представляете размер трагедии и того, что могут вытворить с вашим сайтом?

Скрипт exec.php, будучи залитый к вам позволяет выполнить любые действия или запустить любую программу через команду exec

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

Поэтому оптимальным и оптовым способом является поиск шеллов в резервных копиях сайтов. Т.е. плагинами или через админку хостинга делаете полную копию файлов всех своих сайтов на аккаунте и скачиваете на компьютер. А затем распаковывайте его.

В процессе распаковки каждый файл будет проверен файловым антивирусом и, как проверено на опыте, Dr. Web или ESET обнаруживают сигнатуры шеллов внутри php файлов.

И в результате получаете предупреждение

zashita-sayta6

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

Профилактические мероприятия

Для постоянного и регулярного мониторинга сайтов отлично подойдут сервисы для вебмастеров Google и Яндекс.

Добавьте свой сайт в панель вебмастеров гугл https://www.google.com/webmasters/

И в случае взлома сайта и размещения на нем дорвея вы достаточно оперативно получите такое уведомление:

zashita-sayta7

Точно такую же процедуру пройдите в панели вебмастеров Яндекс  http://  webmaster.yandex.ru /

И пример сообщения, которое можете получить в случае взлома:

zashita-sayta8

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

google

СЕО 2017-2018

Об авторе: umnik


Добавить комментарий

You have to agree to the comment policy.

© 2018 Саморазвитие — курсы, видео уроки, SEO, обучение.
Дизайн и поддержка: GoodwinPress.ru