Каковы признаки того, что сервер Linux был взломан? Существуют ли инструменты, которые могут генерировать и отправлять по электронной почте отчет об аудите по расписанию?
Ответ 1
-
Храните где-нибудь нетронутую копию критических системных файлов (таких как ls, ps, netstat, md5sum) с их md5sum и регулярно сравнивайте их с рабочими версиями. Руткиты всегда изменяют эти файлы. Используйте эти копии, если вы подозреваете, что оригиналы были взломаны.
-
aide или tripwire сообщат вам о любых измененных файлах при условии, что их базы данных не были взломаны.
-
Настройте syslog для отправки журналов на удаленный сервер, где они не могут быть изменены злоумышленником. Следите за этими удаленными лог-файлами на предмет подозрительной активности
-
регулярно читайте свои журналы — используйте logwatch или logcheck для синтеза важной информации.
-
Знайте свои серверы. Знайте, какие виды деятельности и журналы являются нормальными.
Ответ 2
Некоторые вещи, которые я использовал в прошлом:
-
Высокая нагрузка на систему, которая должна простаивать.
-
Странные сегфолты, например, от стандартных утилит типа ls (это может произойти со сломанными корневыми наборами).
-
Скрытые каталоги в / или /var/ (большинство скриптов слишком просты или корректны, чтобы замести следы).
-
netstat показывает открытые порты, которых там не должно быть.
-
Демоны в списке процессов, которые вы обычно используете в разных вариантах (например, 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 для блокировки неизвестных портов.
Примите к сведению следующее, чтобы предотвратить взлом вашего сервера:
-
Измените порт ssh.
-
Предотвратите возможность входа root.
-
Разрешите вход только определенным пользователям.
-
Предотвратите вход по паролю.
-
Используйте ключи ssh, предпочтительно защищенные паролем.
-
По возможности занесите все ip в черный список и внесите нужные ip в белый список.
-
Установите и настройте fail2ban.
-
Используйте tripwire для обнаружения вторжений.
Отслеживайте количество пользователей, вошедших в систему, с помощью Nagios или zabbix. Даже если вы будете получать уведомления при каждом входе, по крайней мере, вы будете в курсе событий вашего сервера.
По возможности держите свой сервер на vpn и разрешайте ssh только через vpn ip. Обеспечьте безопасность вашего vpn.
Стоит учесть, что, как только они проникнут на один сервер, они проверят вашу историю bash и найдут другие серверы, к которым вы подключались по ssh с этого сервера. Затем они попытаются подключиться к этим серверам. Таким образом, если вас взломали грубой силой из-за плохого пароля, вполне возможно, что они смогут подключиться к другим серверам и скомпрометировать и их.