Сервер взломан: Экстренное реагирование и восстановление
Шаги экстренного реагирования при взломе сервера: обнаружение, изоляция, криминалистический анализ и очистка.
Содержание
Введение
Обнаружение взлома сервера — стрессовая ситуация, но следуя правильным шагам, вы можете минимизировать ущерб и восстановить систему. В этом руководстве мы подробно рассмотрим весь процесс от обнаружения взлома до очистки и усиления безопасности.
Признаки взлома
Типичные признаки компрометации сервера:
- Неизвестные процессы или сервисы
- Аномальное использование CPU/RAM (майнинг криптовалют)
- Созданы неизвестные учётные записи
- Неизвестные ключи в SSH authorized_keys
- Неизвестные задачи в crontab
- Изменённые системные файлы
- Аномальный исходящий сетевой трафик
- Дефейс сайта или перенаправления
- Рассылка спама
Шаг 1: Не паникуйте и документируйте
# Сохранить текущее состояние
date > /tmp/incident_$(date +%Y%m%d_%H%M%S).log
who >> /tmp/incident_*.log
w >> /tmp/incident_*.log
last -20 >> /tmp/incident_*.log
ps auxf >> /tmp/incident_*.log
netstat -tlnp >> /tmp/incident_*.log
ss -tlnp >> /tmp/incident_*.log
Не выключайте и не перезагружайте сервер немедленно! Криминалистические улики могут быть утеряны.
Шаг 2: Изоляция
Сетевая изоляция
# Заблокировать все исходящие соединения (кроме SSH)
sudo iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A OUTPUT -j DROP
Завершение активных сессий
# Проверить активные SSH-сессии
who
w
# Завершить подозрительные сессии
sudo pkill -u подозрительный_пользователь
Шаг 3: Криминалистический анализ
Проверка учётных записей
# Список всех пользователей
cat /etc/passwd | grep -v nologin | grep -v false
# Проверка пользователей с UID 0 (права root)
awk -F: '($3 == 0) {print}' /etc/passwd
# Недавно созданные пользователи
ls -lt /home/
# Пользователи с правами sudo
grep -v '^#' /etc/sudoers
ls -la /etc/sudoers.d/
# Проверка SSH authorized_keys
for user_home in /home/*; do
if [ -f "$user_home/.ssh/authorized_keys" ]; then
echo "=== $user_home ==="
cat "$user_home/.ssh/authorized_keys"
fi
done
cat /root/.ssh/authorized_keys
Анализ процессов
# Все запущенные процессы в виде дерева
ps auxf
# Поиск подозрительных процессов
ps aux | grep -E '(mine|xmr|crypto|kinsing|kdevtmpfsi)'
# Процессы с высоким использованием CPU
top -b -n 1 | head -20
# Проверка скрытых процессов
ls -la /proc/*/exe 2>/dev/null | grep deleted
# Проверка путей файлов процессов
ls -la /proc/[0-9]*/exe 2>/dev/null | grep -v '/usr\|/bin\|/sbin\|/lib'
Проверка crontab
# Crontab root
crontab -l
# Crontab всех пользователей
for user in $(cut -f1 -d: /etc/passwd); do
crontab -l -u $user 2>/dev/null | grep -v '^#'
done
# Системные cron-директории
ls -la /etc/cron.d/
ls -la /etc/cron.daily/
ls -la /etc/cron.hourly/
cat /etc/crontab
# Таймеры systemd
systemctl list-timers --all
Анализ сетевых соединений
# Проверка активных соединений
ss -tanp
netstat -tanp
# Исходящие соединения
ss -tanp | grep ESTABLISHED | grep -v '127.0.0.1'
# Прослушиваемые порты
ss -tlnp
# Соединения с подозрительными IP
netstat -an | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
Анализ файловой системы
# Файлы, изменённые за последние 24 часа
find / -mtime -1 -type f -not -path '/proc/*' -not -path '/sys/*' 2>/dev/null
# Файлы, созданные за последние 7 дней
find / -ctime -7 -type f -not -path '/proc/*' -not -path '/sys/*' 2>/dev/null
# Проверка SUID/SGID файлов
find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null
# Подозрительные файлы в /tmp
ls -la /tmp/
ls -la /var/tmp/
ls -la /dev/shm/
Анализ логов
# Попытки входа по SSH
grep 'Failed password' /var/log/auth.log | tail -50
grep 'Accepted' /var/log/auth.log | tail -50
# Успешные SSH-входы
last -20
lastlog
# Системные логи
journalctl --since "24 hours ago" | grep -i -E '(error|warning|fail|denied)'
Шаг 4: Очистка
Остановка вредоносных процессов
# Завершить подозрительные процессы
sudo kill -9 <PID>
# Найти и завершить процессы майнеров
sudo pkill -9 -f 'xmr\|mine\|crypto\|kinsing'
# Отключить подозрительные сервисы
sudo systemctl stop подозрительный_сервис
sudo systemctl disable подозрительный_сервис
Удаление вредоносных пользователей
# Заблокировать подозрительного пользователя
sudo usermod -L подозрительный_пользователь
# Удалить пользователя
sudo userdel -r подозрительный_пользователь
# Сменить пароль root
sudo passwd root
Очистка SSH-ключей
# Проверить и очистить все файлы authorized_keys
find / -name authorized_keys -exec cat {} \;
# Оставить только свой ключ
echo "ssh-rsa ВАШ_КЛЮЧ" > /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
Шаг 5: Усиление безопасности
Безопасность SSH
# /etc/ssh/sshd_config
Port 2222
PermitRootLogin prohibit-password
PasswordAuthentication no
MaxAuthTries 3
AllowUsers имя_пользователя
sudo systemctl restart sshd
Установка Fail2ban
sudo apt install fail2ban -y
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600
findtime = 600
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Обновление системы
sudo apt update && sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo apt install unattended-upgrades -y
Шаг 6: Восстановление из резервной копии
Если очистка недостаточна, может потребоваться чистая установка:
# 1. Резервное копирование важных данных
tar -czf /tmp/backup_data.tar.gz /var/www/ /home/
# 2. Переустановка ОС через панель REXE
# my.rexe.tr > Услуги > Переустановка ОС
# 3. Усиление безопасности после чистой установки
# 4. Восстановление только файлов данных (НЕ конфигурационных файлов)
При восстановлении из резервной копии НЕ восстанавливайте конфигурационные файлы! Злоумышленник мог добавить в них бэкдоры.
Заключение
При инцидентах взлома сервера критически важна быстрая и систематическая реакция. Последовательно выполняйте шаги: документирование, изоляция, криминалистический анализ, очистка и усиление безопасности. Для предотвращения подобных инцидентов в будущем проводите регулярные аудиты безопасности и применяйте строгий контроль доступа.
Связанные статьи
Проблема SSH-подключения: не могу подключиться к серверу
Руководство по решению проблем SSH-подключения: правила файрвола Path.net, Default Block, создание правила фильтрации для SSH-порта и шаги по устранению неполадок.
Проблема RDP-подключения: не могу подключиться к Windows Server
Руководство по решению проблем RDP-подключения: правила файрвола Path.net, Default Block, создание правила фильтрации для порта RDP и шаги по устранению неполадок.
Как провести MTR-тест и отправить результаты в поддержку
Руководство по сетевому тестированию с помощью WinMTR и Linux MTR, создание правила фильтрации ICMP и отправка результатов в службу поддержки. Диагностика потери пакетов.