PHP-шеллы или как обезопасить свой сайт (Часть 2)

PHP-шеллы или как обезопасить свой сайт (Часть 2)

Часть 1 - Введение, что такое шеллы, пример поиска шеллов
Часть 2 - Практика, поиск шеллов, паттерны
Часть 3 - Поиск уязвимостей на сайте, рекомендации

Всем привет, сегодня хотелось бы заняться практикой и привести несколько примеров того, как найти вредоносный код на сайте.

Для чего заливают php-шеллы?

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

1. Заработок с помощью продажи ссылок.

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

PHP-шеллы или как обезопасить свой сайт
Сколько можно заработать на ссылках

2. Иной способ заработка.

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

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

Как понять, что сайт взломан?

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

  • 1. На сайте появляются ссылки на сторонние ресурсы
  • 2. Пользователей сайта переправляют на другой ресурс (так же стоит проверить мобильную версию сайта)
  • 3. Поисковые системы не пускают на ресурс, сообщают о потенциальной угрозе

Пока на ум больше ничего не приходит, если есть идеи, пишите в комментарии 🙂

Давайте перейдем к практике

Если вам не хочется особо вникать в суть, предлагаю воспользоваться готовыми решениями, например, AI-Bolit. Скрипт ай-болит успешно ищет вирусы, шеллы, редиректы в .htaccess, коды ссылочных бирж и т.д, к тому же он прост в использовании. Мне кажется, это самый простой способ проверить свой сайт (Скачать AI-Bolit можно тут). А после проверки рекомендую добавить свой ресурс в Яндекс.ВебМастер, чтобы отслеживать состояние сайта

PHP-шеллы или как обезопасить свой сайт

Если готовые решения вам не подходят, то предлагаю использовать утилиты командной строки unix: grep, egrep, find ...

Для начала делаем бекап сайта и БД, скачиваем себе архив на локальный компьютер. Если вы пользователь windows, то скачиваем cygwin. Это UNIX-подобная среда, которая нам очень поможет.

Поиск PHP-шеллов

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

Ищем следующии функции и анализируем файлы:

  • eval
  • assert
  • array_map
  • preg_replace
  • preg_replace_callback
  • base64
  • base64_decode
  • passthru
  • shell_exec
  • phpinfo
  • edoced_46esab
  • chmod

Если я что-то забыл, прошу дополнить этот список

Открываем терминал (windows пользователи cygwin) и выполняем следующие команды:

Важно понимать, что поиск будет производиться по всем файлам. Нужно быть аккуратным, в вывод могут попасть "чистые" файлы CMS. Записываем те файлы, которые мы нашли. По логам смотрим ip, который впервые обратился к шеллу. Смотрим, к каким адресам обращался данный ip, чтобы понять, как был залит шелл. Если логи не ведутся, идем дальше.

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

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

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

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