Деколи виникають вкрай неприємні ситуації, коли ви витратили досить багато часу на створення свого сайту, його перенесення та налагодження на VPS, і раптом одного разу виявили, що сервер зламаний. Від цього, на жаль, ніхто повністю не застрахований, а причини злому бувають різні. У цій статті ми розберемося, як визначити факт злому сервера, встановити його можливі причини та як запобігти подібній проблемі в майбутньому.

Зміст

  1. Ознаки злому сервера
  2. Можливі причини злому сервера
  3. Визначення наслідків та ступеня злому, виявлення вразливостей
  4. Очищення сервера від шкідливого програмного забезпечення та небажаних файлів, підвищення заходів безпеки

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

  1. Розсилка спаму з VPS у разі отримання доступу до нього зловмисником.
  2. Deface сайту — зміна або повне спотворення виду головної сторінки сайту, що розміщується на віртуальному сервері. Наприклад, замість звичної головної сторінки інтернет-магазину з’являється реклама сторонніх товарів або сторінка, яка не має нічого спільного з основною тематикою вашого сайту (попередження, загроза або жарт). Додатково доступ до інших сторінок сайту може бути заблокований або оригінальний контент видаляється повністю.
  3. Наявність редиректів на сторонні ресурси, коли під час переходу по домену вашого сайту у браузері відкривається вміст стороннього сайту, який може перебувати іншому сервері.
  4. Значне підвищення витрат трафіку на сервері.
  5. Аномальна мережна активність.
  6. Перебої у роботі VPS.

Можливі причини злому сервера

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

Серед програмного забезпечення вразливість мають застарілі версії 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 від service_name

5. Проаналізуйте виявлені під час перевірки, описані в попередньому розділі, шкідливі файли та скрипти. Якщо вони містять у собі код @preg_replace («x4050x2e53x29100x69145»,”x65166x61154x28142x61163x6566 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 — сміливо звертайтесь до нашої служби підтримки!