Деколи виникають вкрай неприємні ситуації, коли ви витратили досить багато часу на створення свого сайту, його перенесення та налагодження на VPS, і раптом одного разу виявили, що сервер зламаний. Від цього, на жаль, ніхто повністю не застрахований, а причини злому бувають різні. У цій статті ми розберемося, як визначити факт злому сервера, встановити його можливі причини та як запобігти подібній проблемі в майбутньому.
Зміст
- Ознаки злому сервера
- Можливі причини злому сервера
- Визначення наслідків та ступеня злому, виявлення вразливостей
- Очищення сервера від шкідливого програмного забезпечення та небажаних файлів, підвищення заходів безпеки
Ознаки злому сервера
- Розсилка спаму з VPS у разі отримання доступу до нього зловмисником.
- Deface сайту — зміна або повне спотворення виду головної сторінки сайту, що розміщується на віртуальному сервері. Наприклад, замість звичної головної сторінки інтернет-магазину з’являється реклама сторонніх товарів або сторінка, яка не має нічого спільного з основною тематикою вашого сайту (попередження, загроза або жарт). Додатково доступ до інших сторінок сайту може бути заблокований або оригінальний контент видаляється повністю.
- Наявність редиректів на сторонні ресурси, коли під час переходу по домену вашого сайту у браузері відкривається вміст стороннього сайту, який може перебувати іншому сервері.
- Значне підвищення витрат трафіку на сервері.
- Аномальна мережна активність.
- Перебої у роботі 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 — сміливо звертайтесь до нашої служби підтримки!