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

Содержание

Признаки взлома сервера

1. Рассылка спама с VPS в случае получения доступа к нему злоумышленником.

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

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

4. Значительное повышение расхода трафика на сервере.

5. Аномальная сетевая активность.

6. Перебои в работе VPS.

Возможные причины взлома сервера

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

Среди программного обеспечения уязвимостью обладают устаревшие версии CMS, Apache, PHP, MySQL и т.д. Также сервер потенциально подвержен взлому в случае некорректной конфигурации установленного на нем программного обеспечения.

Опасность для сайтов представляют инъекции, такие как:

  • SQL-инъекция — направление ложного запроса к базе данных, благодаря которому атакующий получает доступ к содержимому таблиц БД, где хранятся данные доступа к административной панели сайта, FTP-аккаунтам, почтовым аккаунтам и пр.
  • PHP-инъекция — представляет наибольшую угрозу для сайтов и веб-приложений за счет выполнения постороннего PHP-кода на стороне сервера. К потенциально опасным функциям PHP относятся:
eval(),
preg_replace() (с модификатором «e»),
require_once(),
include_once(),
include(),
require(),
create_function()
  • Local File Include (LFI) — исполнение локальных файлов на стороне сервера.
  • XSS (Cross Site Scripting) — вид атаки, целью которой является кража деталей доступа пользователей сайта к его административной панели.

Определение последствий и степени взлома, обнаружение уязвимостей

1. Прежде всего, проверьте свой сайт на предмет наличия вирусов. Это можно сделать при помощи специальных онлайн-ресурсов, например: sitecheck.sucuri.net.

2. Проверьте файлы, которые изменялись в течение последних 10 дней. Для этого подключитесь к своему VPS по протоколу SSH и выполните команду:

find /home/user/data/www/site.com/ -type f -mtime -10

Где, site.com — имя домена вашего сайта.

3. Сделайте проверку почтовой очереди на наличие спама. Это делается с помощью команды

mailq

Если на VPS установлен почтовый сервер Exim, то у вас есть возможность просмотреть заголовки сообщений в очереди с помощью команды

exim –Mvh

Просмотр тела сообщения можно выполнить командой

exim –Mvb

В тексте результата выполнения команды ищите строку X-PHP-Script. Так вы увидите, какой именно скрипт выполняет рассылку сообщений.

В случае использования другого почтового сервера, информацию о рассылке сообщений необходимо проверять в логах (/var/log/maillog).

4. Дополнительно проверьте свой сайт на вирусы с помощью специального скрипта AI-bolit, инструкцию о работе с которым вы найдете здесь revisium.com/ai/

Изучите результаты сканирования, обязательно сохраните резервные копии файлов.

5. Просмотрите, какие файлы находятся во временных и директориях загрузки. Для этого во время SSH-подключения выполните команды:

find /home/user/data/www/site.com/ -type d \( -iname '*upload*' -o -iname '*tmp*' \)
file /home/user/data/www/site.com/uploads/* | grep -i php

Где site.com — имя вашего домена.

Если среди результатов поиска будут обнаружены PHP-скрипты, то они с высокой долей вероятности содержат в себе вредоносный код, поскольку во временных директориях их хранение недопустимо.

6. Проверьте, нет ли в файле .htaccess редиректов командой

find /home/user/data/www/site.com/ -type f -iname '*htaccess' -exec grep -i rewrite {} \;

7. Сделайте проверку VPS на наличие шеллов (shell — специальный программный код, благодаря которому хакер получает доступ к файловой системе взломанного сервера):

egrep -ril “base64_decode|auth_pass|shell_exec” /home/user/site.com

Дополнительно поищите функцию eval во файлах с расширением .php:

find /dir/to/find/ -type f -iname "*.php" -exec grep -Him1 'eval' {} \;

И среди файлов с правами доступа 777:

find /dir/to/find/ -perm 2 -type f -iname "*.php" -exec grep -Him1 'eval' {} \;

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

find /dir/to/find/ -type f -iname "*.php" -mtime -7

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

8. Проверьте, актуальна ли версия установленной на виртуальном сервере CMS.

Для Joomla: просмотрите файл changelog.txt, расположенный в корне сайта.

Для WordPress: поищите информацию о версии CMS в файле wp-includes/version.php.

Для DLE: файл engine/data/config.php — строка version_id, upgrade/index.php — строка $dle_version или engine/ajax/updates.php.

Для Drupal: файл changelog.txt в корневом каталоге сайта или файл /modules/system/system.info. Также версию этой CMS можно увидеть в административной панели.

Для 1C-Битрикс: необходимую информацию вы можете найти в файле /bitrix/admin/update_system.php либо /bitrix/modules/main/classes/general/version.php

9. Проверьте какие права доступа установлены для файлов и папок. Использование прав 777 крайне не рекомендуется из соображений безопасности. Каждая папка должна принадлежать определенному пользователю либо группе пользователей. В случае использования mpm_prefork в качестве владельца может быть установлен apache (www, www-data).

Для того, чтобы обнаружить все файлы/папки с правами доступа 777, выполните команду

find ./ -perm 0777

Менять права доступа к файлу/папке можно при помощи команды, которая имеет следующий формат:

chmod [права] имя-файла

Например, если вы хотите установить права 644 для файла index.php, находящегося в директории /home/user/data/www/site.com/, то необходимо выполнить команду

chmod 644 /home/user/data/www/site.com/index.php

10. Выясните, когда на VPS были загружены шеллы командой

stat shell.php

11. В логах поищите историю обращений к скриптам шеллов:

grep shell.php /var/www/httpd-logs/site.com.access.log

Среди найденных результатов обратите внимание на IP-адреса, с которых обращались к скрипту. Это поможет найти уязвимость в модулях и скриптах используемой CMS.

12. Просмотрите какие настроены задания cron для root-а и остальных пользователей:

egrep -ri ‘wget|sh|fetch|curl’ /var/spool/cron

13. Проверьте записи о попытках доступа к VPS в логах. Нас интересуют записи о событиях auth, authpriv в конфигурационных файлах syslog.conf, rsyslog.conf. Информацию об успешных попытках авторизации можно проверить командами:

grep -i accept /var/log/secure
egrep -i "accept|success" /var/log/secure
grep -i accept /var/log/auth.log

Если у вас настроен FTP сервер, то нужно дополнительно проверить записи в файле xferlog:

awk ‘($12~/i/){print}’ /var/log/xferlog

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

14. Изучите запущенные на VPS процессы, просмотрев результат вывода команд top и ps. Подозрения у вас должны вызвать процессы с ошибками в названии или если названия этих процессов сложно прочесть.

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

ls /proc/PID/cwd

Где PID — идентификатор процесса.

Когда искомый файл будет найден, просмотрите его атрибуты командой

stat shell

Найти дополнительную информацию об этом файле вы можете с помощью команды

strings shell

15. Сделайте проверку сервера на наличие сторонних сетевых соединений, просмотрите номера портов, через которые они были установлены:

netstat -tuplnw | awk '{print $4,$NF}' | sort | uniq

16. Обязательно проверьте свой VPS на наличие уязвимого или устаревшего программного обеспечения.

Если у вас на сервере установлена CentOS:

Для проверки измененных файлов выполните команду

rpm -qVa | awk '$2!="c" {print $0}'

Пример вывода команды:

.M……./
.M……./boot
…….T. /lib/modules/2.6.32-504.16.2.el6.x86_64/modules.softde

Для анализа результатов вывода руководствуйтесь следующими данными:

Первый столбец

S — отличия в размере файла;
M — найдены отличия в правах, заданных по умолчанию;
5 — отличия хэша MD5;
D — найдены различия major/minor номеров устройства;
L — обнаружение отличий пути до символьной ссылки;
U — другой владелец;
G — другая группа;
T — другое значение mtime.

Второй столбец

c — конфигурационный файл;
d — файл документации;
g — файл, не включенный в пакет;
l — лицензионный файл;
r — файл README.

Ищите файлы, для которых отличается содержимое MD5. Вам нужно проверить бинарные значения этих пакетов по типу (file) и времени (stat):

stat /usr/sbin/sshd && file /usr/sbin/sshd

Для Debian значения MD5 можно проверить с помощью утилиты debsums. Эта задача реализуется с помощью следующих команд:

apt-get install debsums
debsums –c

Очистка сервера от вредоносного ПО и нежелательных файлов, повышение мер безопасности

1. Сделайте обновление версии CMS сайта, если она устарела. При этом число подключаемых к ней модулей должно быть минимальным.

2. Обновите версию установленной на сервере операционной системы на актуальную.

Для CentOS используйте команду

yum update

Для Debian/Ubuntu:

apt-get update

3. Установите рекомендуемые настройки PHP, отредактировав php.ini:

</pre>expose_php=Off — для отключения в заголовках информации о php; sql.safe_mode=On — для активации SQL safe-mode; post_max_size=8M — для установления ограничения на размер передаваемых на сервер данных.</pre>

Кроме этого настоятельно рекомендуется включить в disable_functions следующие функции:

exec, system, passthru, proc_open, shell_exec.

Для доменов нужно включить open_basedir. Дополнительно проверяйте настройки локальных php.ini.

4. Поищите неиспользуемые сервисы и отключите их.

Для CentOS это делается командами:

chkconfig –list
chkconfig --del service_name

Где service_name — название сервиса, который необходимо отключить.

Для Debian:

sysv-rc-conf
sysv-rc-conf off service_name

5. Проанализируйте обнаруженные во время проверки, описанной в предыдущем разделе, вредоносные файлы и скрипты. Если они содержат в себе код @preg_replace («\x40\50\x2e\53\x29\100\x69\145»,”\x65\166\x61\154\x28\142\x61\163\x65\66\x34, то его можно удалить командой

sed -i 's/@preg.*34//g' infected.js

6. В обязательном порядке измените root-пароль, пароль для входа в контрольную панель и админку CMS на более сложный.

Рекомендуемая длина пароля не должна составлять менее 10 символов. Необходимо использовать как строчные, так и заглавные символы латинского алфавита, цифры и специальные символы (\, /, %, *, (, ), ?, @, #, $, :, ~).

7. Проверьте, установлена ли security-update. Выполните ее установку, если требуется.

Для CentOS:

yum install yum-security
yum list-security
yum --security update

Для Debian’:

echo ‘deb http://security.debian.org wheezy/updates main contrib non-free’ >> /etc/apt/sources.list
grep security /etc/apt/sources.list > /etc/apt/secsrc.list
apt-get -s -o Dir::Etc::sourcelist="secsrc.list" -o Dir::Etc::sourceparts="-" upgrade
apt-get -o Dir::Etc::sourcelist="secsrc.list" -o Dir::Etc::sourceparts="-" upgrade

Или откройте для редактирования файл /etc/apt/sources.list и добавьте в него такую строку

deb http://security.debian.org/ jessie/updates main contrib non-free

Затем сделайте обновление системы командой

apt-get update && apt-get upgrade

8. Настройте фаервол, например, можно настроить CSF.

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

Если у вас возникли вопросы или требуется наша помощь в борьбе с последствиями взлома VPS — смело обращайтесь в нашу службу поддержки!