Порой возникают крайне неприятные ситуации, когда вы потратили достаточно много времени на создание своего сайта, его перенос и отладку на VPS, и вдруг однажды обнаружили, что сервер взломан. От этого, к сожалению, никто полностью не застрахован, а причины взлома бывают самые разные. В этой статье мы разберемся, как определить факт взлома сервера, установить его возможные причины и как предотвратить подобную проблему в будущем.
Содержание
- 1 Признаки взлома сервера
- 2 Возможные причины взлома сервера
- 3 Определение последствий и степени взлома, обнаружение уязвимостей
- 4 Очистка сервера от вредоносного ПО и нежелательных файлов, повышение мер безопасности
Признаки взлома сервера
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 — смело обращайтесь в нашу службу поддержки!