Linux

Как узнать, взломан ли мой Linux-сервер?

Каковы признаки того, что сервер Linux был взломан? Существуют ли инструменты, которые могут генерировать и отправлять по электронной почте отчет об аудите по расписанию?

Ответ 1

  1. Храните где-нибудь нетронутую копию критических системных файлов (таких как ls, ps, netstat, md5sum) с их md5sum и регулярно сравнивайте их с рабочими версиями. Руткиты всегда изменяют эти файлы. Используйте эти копии, если вы подозреваете, что оригиналы были взломаны.

  2. aide или tripwire сообщат вам о любых измененных файлах при условии, что их базы данных не были взломаны.

  3. Настройте syslog для отправки журналов на удаленный сервер, где они не могут быть изменены злоумышленником. Следите за этими удаленными лог-файлами на предмет подозрительной активности

  4. регулярно читайте свои журналы используйте logwatch или logcheck для синтеза важной информации.

  5. Знайте свои серверы. Знайте, какие виды деятельности и журналы являются нормальными.

Ответ 2

Некоторые вещи, которые я использовал в прошлом:

  1. Высокая нагрузка на систему, которая должна простаивать.

  2. Странные сегфолты, например, от стандартных утилит типа ls (это может произойти со сломанными корневыми наборами).

  3. Скрытые каталоги в / или /var/ (большинство скриптов слишком просты или корректны, чтобы замести следы).

  4. netstat показывает открытые порты, которых там не должно быть.

  5. Демоны в списке процессов, которые вы обычно используете в разных вариантах (например, bind, но вы всегда используете djbdns).

Ответ 3

Существует метод проверки взломанных серверов с помощью kill -.

По сути, когда вы выполняете команду «kill -0 $PID», вы посылаете сигнал nop на идентификатор процесса $PID. Если процесс запущен, команда kill завершится нормально (FWIW, поскольку вы передаете сигнал nop kill, с процессом ничего не произойдет). Если процесс не запущен, команда kill завершится неудачно (статус выхода меньше нуля).

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

a) Эта проверка не является исчерпывающей, поскольку хорошо закодированные/интеллектуальные руткиты гарантируют, что ядро ответит: «Процесс не существует», делая эту проверку излишней. 

b) В любом случае, когда на взломанном сервере запущен «хакерский» процесс, его PID обычно не отображается в /proc.

Поэтому метод заключается в том, чтобы вызвать kill -0 для всех доступных процессов в системе (все от 1 -> /proc/sys/kernel/pid_max) и посмотреть, есть ли процессы, которые запущены, но не отображаются в /proc.

Если некоторые процессы запущены, но не отображаются в /proc, вероятно, у вас есть проблема, как бы вы на нее ни посмотрели.

Вот сценарий bash, который реализует все это — https://gist.github.com/1032229. Сохраните его в каком-нибудь файле и выполните, если вы найдете процесс, о котором не сообщается в proc. У вас появится зацепка, чтобы начать анализировать проблему.

Ответ 4

Я просто хотел бы добавить к этому следующее:

Проверьте историю bash: если она пуста и вы не сняли настройки или не очистили их, есть большая вероятность, что кто-то взломал ваш сервер.

Системные файлы часто изменяются — проверьте дату изменения. Однако злоумышленники часто подделывают дату изменения.

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

Примите к сведению следующее, чтобы предотвратить взлом вашего сервера:

  1. Измените порт ssh.

  2. Предотвратите возможность входа root.

  3. Разрешите вход только определенным пользователям.

  4. Предотвратите вход по паролю.

  5. Используйте ключи ssh, предпочтительно защищенные паролем.

  6. По возможности занесите все ip в черный список и внесите нужные ip в белый список.

  7. Установите и настройте fail2ban.

  8. Используйте tripwire для обнаружения вторжений.

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

По возможности держите свой сервер на vpn и разрешайте ssh только через vpn ip. Обеспечьте безопасность вашего vpn.

Стоит учесть, что, как только они проникнут на один сервер, они проверят вашу историю bash и найдут другие серверы, к которым вы подключались по ssh с этого сервера. Затем они попытаются подключиться к этим серверам. Таким образом, если вас взломали грубой силой из-за плохого пароля, вполне возможно, что они смогут подключиться к другим серверам и скомпрометировать и их. 

Схожие статьи

Linux

Можно ли полностью отключить свопинг для веб-сервера Linux?

Linux

Как предотвратить изменение пароля root в Linux?

Linux

Как запустить процесс Node.js в фоновом режиме и запретить его завершение

Что такое сетевой сканер Ubuntu, как его правильно настроить
Linux

Что такое сетевой сканер Ubuntu, как его правильно настроить