среда, 14 февраля 2018 г.

Сервер взломан, что делать?

Чаще всего взлом сервера происходит по нескольким причинам:
1. Уязвимости в используемом программном обеспечении
2. Неправильно настроенные конфигурации сервера
3. Слишком слабые пароли пользователей на сервере
4. Человеческий фактор (передача доступов третьему лицу, кража ключей, личные мотивы уволенных сотрудников)

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

Итак, Ваш сервер взломан, что делать?

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

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

Например в случае запуска вредоносного скрипта или бинарного файла, нужно просмотреть список работающих процессов в данный момент можно командой ps auwfx.
Если в списке процессов видим какой-то неизвестный процесс или процесс с высокой нагрузкой (об этом может свидетельствовать высокие показатели Load Average), то необходимо его изучить. В этом может помочь команда lsof -p PID, она пока покажет список файлов используемых процессом. Также можно запустить strace -p PID и посмотреть что именно делает процесс в данный момент.

С помощью программы iftop можно посмотреть трафик на сервере в реальном времени, это поможет обнаружить процессы, которые могут осуществлять исходящие DDoS-атаки. Если такие процессы существуют, то можно воспользоваться утилитой tcpdump для просмотра трафика и адресов куда он направляется, открытые сетевые соединения можно просмотреть командой lsof -i или netstat -tulpan.

После того как были просмотрены все текущие процессы и трафик на сервере необходимо отключить зараженные сервисы и с помощью команды kill -9 PID убить вредоносные процессы.

Для того, чтобы узнать не установил ли злоумышленник на сервер свое программное обеспечение в Debian или Ubuntu существует утилита debsums, которая позволяет проверить MD5 хэши установленных пакетов в системе, а также конфигурационных файлов. В RedHat и подобных дистрибутивах можно воспользоваться командой rpm -qaV. Также в некоторых случаях может помочь программа rkhunter.
В случае, если злоумышленник установил на сервер свое программное обеспечение, или заменил ПО из доверенных репозиториев своим, эти утилиты могут помочь их обнаружить.

Также необходимо посмотреть логи входа на сервер, это могут быть логи SSH, FTP, почтовые логи и прочие. Не стоит забывать про файлы с историей bash команд, некоторые злоумышленники могут забыть почистить за собой файлы логов.
Стоит обратить внимание на файлы в каталоге /var/log: messages, secure, audit.log, yum.log, apt.log, lastlog, auth.log, syslog.
Если по логам видно как злоумышленник проник на сервер, например по SSH, то необходимо проверить содержимое файла /root/.ssh/authorized_keys, сменить пароли пользователей и желательно заново выпустить ключи.

В случае неверной настройки почтового сервера, злоумышленник может рассылать спам, как правило такие сервера быстро попадают в черные списки и такие письма скапливаются в почтовой очереди на сервере, проверить почтовую очередь можно командой mailq или exim -bpc для Exim, postqueue -p для Postfix.

В некоторых ситуациях злоумышленник может запускать вредоносные задания не сразу, поэтому необходимо проверить все задания планировщика cron, возможно вредоносные процессы запускаются в случайное время. Также необходимо найти все файлы, которые изменялись в последнее время с помощью утилиты find с параметром -mtime.

Необходимо обновить программное обеспечение на сервере (в идеале за этим нужно следить всегда), возможно злоумышленник воспользовался уязвимостью в ПО.
Также отключить, а лучше удалить неиспользуемые сервисы на сервере, тем самым уменьшив риск его взлома. Например если вы не используете на своем сервере Samba, то его стоит отключить.

Стоит проверить все сервисы в автозагрузке с помощью команд:
systemd:
systemctl list-unit-files | grep enabled
systemv:
service --status-all | grep +
upstart:
initctl list | awk '{print $1}' | xargs initctl show-config

Важно также корректно настроить брандмауэр и сервисы, чтобы доступ в интернет имели только те порты, которые для этого нужны. Например если кроме локального сервера никто не использует MySQL, то не стоит открывать порт 3306 в интернет.

Так как наиболее частые взломы происходят в системах управления сайтами (CMS), то необходимо обновиться до последней версии, в том числе темы и плагины к ней.

После того как выяснены причины и устранены последствия взлома необходимо позаботиться о мониторинге подобных инцидентов, рассмотреть использование механизмов SELinux или AppArmor, chroot или механизмов основанных на namespaces (Docker, LXC, systemd-nspawn). Подобные механизмы позволяют избежать доступа злоумышленника ко всему серверу в случае взлома одного из сервисов.

В поиске зараженных файлов сайта могут помочь антивирусы maldet, clamav, ai-bolit. Они определяют вирусные файлы на основе сигнатурного анализа и позволяют эффективно обнаруживать большинство зараженных файлов. Периодическое сканирование системы на предмет новых заражений позволит вовремя замечать взлом и отправлять подозрительные файлы в карантин.

В поиске уязвимостей на сервере может помочь утилита nikto, который позволяет проводить проверки по протоколам HTTP, HTTPS, поддерживается сканирование портов, обход IDS, прокси-сервера и SSL.

Комментариев нет: