14.3. Надзор: профилактика, обнаружение, сдерживание
Мониторинг является неотъемлемой частью любой политики в области безопасности по нескольким причинам. В частности, цель обеспечения безопасности, как правило, не ограничивается гарантиями конфиденциальности данных, но также включает обеспечение доступности услуг. Поэтому необходимо проверять, что всё работает так, как ожидалось, и своевременно обнаруживать любое девиантное поведение или изменение качества оказываемых услуг. Мониторинговая деятельность может помочь обнаружить попытки вторжения и обеспечить быструю реакцию, прежде чем они приведут к серьёзным последствиям. В этом разделе рассматриваются некоторые инструменты, которые могут быть использованы для мониторинга нескольких аспектов системы Debian. Таким образом, он завершает
Раздел 12.4, «Мониторинг».
14.3.1. Журналы мониторинга с logcheck
Программа logcheck
отслеживает файлы журналов каждый час по умолчанию. Он отправляет нестандартные сообщения в файлах журналов на электронную почту администратору для дальнейшего анализа.
The list of monitored files is stored in /etc/logcheck/logcheck.logfiles
and /etc/logcheck/logcheck.logfiles.d/
; the default values work fine with systemd and rsyslog if their configuration files have not been completely overhauled.
logcheck
может работать в одном из трёх более или менее подробных режимов: paranoid, server и workstation. Первый - очень многословный, и, вероятно, его следует ограничить конкретными серверами, такими как брандмауэры. Второй (по умолчанию) режим рекомендуется для большинства серверов. Последний предназначен для рабочих станций (отфильтровывает больше сообщений).
Во всех трёх случаях logcheck
, вероятно, следует подгонять, чтобы исключить некоторые дополнительные сообщения (в зависимости от установленных сервисов), если администратор действительно не хочет получать ежечасовые партии длинных неинтересных электронных писем. Поскольку механизм выбора сообщений довольно сложен, изучение /usr/share/doc/logcheck-database/README.logcheck-database.gz
необходимо если его сложно читать.
Прилагаемые правила могут быть разделены на несколько типов:
те, которые квалифицируют сообщение как попытку взлома (хранятся в файле каталога /etc/logcheck/cracking.d/
);
отменяющие такую квалификацию(/etc/logcheck/cracking.ignore.d/
);
классифицирующие сообщение как предупреждение о безопасности (/etc/logcheck/violations.d/
);
отменяющие эту классификацию (/etc/logcheck/violations.ignore.d/
);
наконец, те, которые относятся к оставшимся сообщениям (рассматриваемым как системные события).
Системное событие всегда сигнализируется, если в одном из каталогов /etc/logcheck/ignore.d.{paranoid,server,workstation}/
не указано, что событие должно быть проигнорировано. Конечно, единственными каталогами, которые принимаются во внимание, являются те, которые соответствуют уровням многословия, равным или превышающим выбранный режим работы.
14.3.2. Деятельность мониторинга
14.3.2.1. В реальном времени
top
- это интерактивный инструмент, который отображает список текущих процессов. Сортировка по умолчанию основана на текущем количестве использования процессора и может быть получена с ключом P. Другие способы сортировки включают в себя сортировку по занятой памяти (M ключ), по общему времени процессора (T ключ) и по идентификатору процесса (N ключ). Ключ k позволяет убить процесс, введя идентификатор процесса. Ключ r позволяет изменить приоритет процесса renice.
Когда система кажется перегруженной, top
- отличный инструмент, чтобы увидеть, какие процессы конкурируют за время процессора или потребляют слишком много памяти. Например, часто интересно проверить, соответствуют ли процессы, потребляющие ресурсы, реальным сервисам, которые предоставляет машина. Неизвестный процесс, запущенный как пользователь www-data, должен быть выделен и подвергнут исследованию, поскольку это, вероятно, пример программного обеспечения, установленного и выполненного в системе через уязвимость в веб-приложении.
top
- это очень гибкий инструмент, и его страница руководства дает подробную информацию о том, как настроить его отображение и адаптировать его к личным потребностям и привычкам.
The gnome-system-monitor
graphical tool is similar to top
and it provides roughly the same features. Alternatives are atop
and htop
, which provide similar functionality, but differ in usability features, like the scrolling ability.
Processor load, memory usage, network traffic and free disk space are information that are constantly varying. Keeping a history of their evolution is often useful in determining exactly how the computer is used.
There are many dedicated tools for this task. The sysstat package, for example, collects and displays system performance statistics locally. The data can then be visualized with the sar
command. Most tools, though, can fetch data via SNMP (Simple Network Management Protocol) in order to centralize this information. An added benefit is that this allows fetching data from network elements that may not be general-purpose computers, such as dedicated network routers or switches.
Эта книга касается Munin в некоторой степени (см.
Раздел 12.4.1, «Настройка Munin») как части
Глава 12: «Углублённое администрирование». Debian также предоставляет аналогичный инструмент,
cacti. Его развертывание немного сложнее, поскольку оно основано исключительно на SNMP. Несмотря на наличие веб-интерфейса, понимание концепций, связанных с конфигурацией, всё ещё требует определённых усилий. Чтение HTML-документации (
/usr/share/doc/cacti/html/Table-of-Contents.html
) должно считаться предварительным условием.
14.3.3. Избегайте вторжений
Атакующие пытаются получить доступ к серверам, угадывая пароли, поэтому всегда должны использоваться надёжные пароли. Даже тогда вы также должны установить меры против атак грубой силы. Атака грубой силы - это попытка войти в несанкционированную систему программного обеспечения, выполняя несколько попыток входа в систему за короткий промежуток времени.
Лучший способ остановить атаку грубой силы - ограничить количество попыток входа, идущих из того же происхождения (same origin), обычно временным запретом IP-адреса.
Fail2Ban is an intrusion prevention software suite that can be configured to monitor any service that writes login attempts to a log file or the system journal. It can be found in the package fail2ban.
Fail2Ban настроен с помощью простого протокола fail2ban-client
, который также читает файлы конфигурации и выдает соответствующие команды конфигурации на сервер fail2ban-server
. Он имеет четыре типа файлов конфигурации, все они хранятся в /etc/fail2ban/
:
fail2ban.conf
and fail2ban.d/*.conf
. Global configuration (such as logging).
filter.d/*.conf
. Фильтры, указывающие, как обнаруживать ошибки аутентификации. Пакет Debian уже содержит фильтры для многих программ.
action.d/*.conf
. Действия, определяющие команды по запрету (banning) и разрешению (unbanning) IP-адресов.
jail.conf
and jail.d/*.conf
. It is where jails, the combinations of filters and actions, are defined.
Давайте посмотрим на конфигурацию sshd
в /etc/fail2ban/jail.conf
, чтобы лучше понять, как работает Fail2Ban...
[...]
[DEFAULT]
[...]
bantime = 1h
[...]
findtime = 10m
[...]
maxretry = 5
[...]
[sshd]
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Fail2Ban will check for failed login attempts for sshd
using Python regular expressions defined in /etc/fail2ban/filter.d/sshd.conf
against the log file of sshd
, which is defined in the variable sshd_log
in the file /etc/fail2ban/paths-common.conf
. If Fail2Ban detects five failed login attempts within 10 minutes, it will ban the IP address where those attempts originated for 1 hour.
The default backend
used now is systemd
. The old log files, like auth.log
are only available if rsyslog has been installed and enabled.
Чтобы включить, отключить или настроить “jails“, основной файл конфигурации /etc/fail2ban/jail.conf
не должен быть изменён. Вместо этого это должно быть сделано в /etc/fail2ban/jail.d/defaults-debian.conf
или в файлах в одном каталоге.
If docker containers are involved, the rules injected into iptables
by fail2ban
to block traffic from specific IPs must be applied to the right chain by chain = DOCKER-USER
. Otherwise, the ban will not work.
Fail2Ban - это очень простой и эффективный способ защиты от наиболее распространенных атак грубой силы, но он не может защитить от распределённых атак грубой силы, когда злоумышленник использует большое количество машин, рассеянных по Интернету.
A good way to provide extra protection against distributed brute force attacks is to artificially increase the login time after each failed attempt. It is also possible to increase the block time with each ban for the same IP.
14.3.4. Обнаружение изменений
Как только система установлена и настроена, и за исключением обновлений безопасности, для большинства файлов и каталогов, как правило, нет причин для разработки, за исключением данных. Поэтому интересно убедиться, что файлы на самом деле не меняются: поэтому любые неожиданные изменения стоит исследовать. В этом разделе представлены несколько инструментов, способных отслеживать файлы и предупреждать администратора, когда происходят неожиданные изменения (или просто перечислять такие изменения).
14.3.4.1. Аудит пакетов с dpkg --verify
dpkg --verify
(or dpkg -V
) is an interesting tool since it allows finding what installed files have been modified (potentially by an attacker), but this should be taken with a grain of salt. To do its job it relies on checksums stored in dpkg's own database which is stored on the hard disk (they can be found in /var/lib/dpkg/info/package.md5sums
); a thorough attacker will therefore update these files so they contain the new checksums for the subverted files. The same is true for debsums
.
Запуск dpkg -V
проверит все установленные пакеты и распечатает строку для каждого файла с неудачным тестом. Формат вывода такой же, как и в rpm -V
, где каждый символ обозначает тест на некоторые конкретные метаданные. К сожалению, dpkg
не хранит мета-данные, необходимые для большинства тестов, и, таким образом, выведет для них вопросы. В настоящее время только тест контрольных сумм может дать «5» на третьем символе (когда он не работает).
#
dpkg -V
??5?????? c /etc/logcheck/logcheck.logfiles.d/syslog.logfiles
??5?????? c /etc/logrotate.d/apt
??5?????? /lib/systemd/system/ssh.service
??5?????? c /etc/systemd/journald.conf
??5?????? c /etc/lvm/lvm.conf
В приведённом выше образце dpkg сообщает об изменении в файле сервиса SSH, который администратор сделал для упакованного файла вместо использования соответствующего /etc/systemd/system/ssh.service.d/override.conf
переопределения (который будет храниться ниже /etc
, как и любое изменение конфигурации. В нём также перечислены несколько файлов конфигурации (отмеченных буквой "с" в втором поле), которые были законно изменены.
14.3.4.2. Аудит пакетов: debsums
и его лимиты
debsums
является предком dpkg -V
и, таким образом, в основном устарел. Он страдает от тех же ограничений, что и dpkg. К счастью, некоторые ограничения могут быть отработаны (где dpkg не предлагает аналогичные обходы).
Поскольку данным на диске нельзя доверять, debsums
предлагает делать свои проверки на основе файлов .deb
вместо того, чтобы полагаться на базу данных dpkg. Чтобы загрузить доверенные .deb
файлы всех установленных пакетов, мы можем полагаться на аутентифицированные загрузки APT. Эта операция может быть медленной и утомительной, и поэтому её не следует рассматривать как проактивный метод, который следует использовать на регулярной основе.
#
apt-get --reinstall -d install `grep-status -e 'Status: install ok installed' -n -s Package`
[ ... ]
#
debsums -p /var/cache/apt/archives --generate=all
Обратите внимание, что этот пример использует команду grep-status
из пакета dctrl-tools, который не установлен по умолчанию.
debsums
может часто запускаться как cronjob настройка CRON_CHECK
в /etc/default/debsums
. Чтобы игнорировать некоторые файлы за пределами каталога /etc
, которые были изменены намеренно или которые, как ожидается, изменятся (например, /usr/share/misc/pci.ids
), вы можете добавить их к /etc/debsums-ignore
.
14.3.4.3. Мониторинг файлов: AIDE
Инструмент AIDE (Advanced Intrusion Detection Environment ) позволяет проверять целостность файла и обнаруживать любые изменения по сравнению с ранее записанным образом действующей системы. Этот образ хранится как база данных (/var/lib/aide/aide.db
), содержащая соответствующую информацию по всем файлам системы (отпечатки файлов, разрешения, метки времени и так далее). Эта база данных впервые инициализируется командой aideinit
; она затем используется ежедневно (по сценарию /etc/cron.daily/aide
), чтобы проверить, что ничего не изменилось. При обнаружении изменений AIDE записывает их в лог-файлах (/var/log/aide/*.log
) и отправляет их администратору по электронной почте.
Многие опции в /etc/default/aide
могут быть использованы для настройки поведения пакета aide. Собственная конфигурация AIDE хранится в /etc/aide/aide.conf
и /etc/aide/aide.conf.d/
(на самом деле эти файлы используются только update-aide.conf
для создания /var/lib/aide/aide.conf.autogenerated
. Например, содержимое файлов журнала меняется регулярно, и такие изменения могут быть проигнорированы до тех пор, пока разрешения этих файлов остаются прежними, но как содержимое, так и разрешения исполняемых программ должны быть постоянными. Хотя и не очень сложный, синтаксис конфигурации не полностью интуитивен, поэтому рекомендуется читать aide.conf(5).
Новая версия базы данных генерируется ежедневно в /var/lib/aide/aide.db.new
; если все зарегистрированные изменения были законными, их можно использовать для замены исходной базы данных.
14.3.5. Обнаружение вторжений (IDS/NIDS)
suricata
(in the Debian package of the same name) is a NIDS — a
Network Intrusion Detection System. Its function is to listen to the network and try to detect infiltration attempts and/or hostile acts (including denial of service attacks). All these events are logged in multiple files in
/var/log/suricata
. There are third party tools (Kibana/logstash) to better browse all the data collected. The tool can be considered the successor of
snort
, which has been removed from Debian.
Настройка suricata включает в себя просмотр и редактирование /etc/suricata/suricata.yaml
, очень длинного, потому что каждый параметр обильно прокомментирован. Минимальная конфигурация требует описания диапазона адресов, которые охватывает локальная сеть (HOME_NET
parameter). На практике это - все потенциальные цели атаки. Для получения максимальной отдачи прочитайте файл полностью и адаптируйте к ситуации.
On top of this, you should also edit to define the network interface
. You might also want to set LISTENMODE=pcap
in /etc/default/suricata
because the default LISTENMODE=nfqueue
requires further configuration to work properly (the netfilter firewall must be configured to pass packets to some user-space queue handled by suricata via the NFQUEUE
target).
Чтобы обнаружить неверное поведение, suricata
нужен набор правил мониторинга: вы можете найти такие правила в snort-rules-default пакете. snort
- это исторический предшественник в экосистеме IDS и suricata
может переиспользовать его правила.
В качестве альтернативы, oinkmaster
(в одноимённом пакете) можно использовать для загрузки наборов правил Snort из внешних источников.
Unfortunately, the mentioned packages are not part of the current Debian
Bookworm release. But they can still be retrieved via the Debian package search or from the Debian snapshot archive.