Политики паролей и обнаружение атак в Linux

CompTIABeginner
Практиковаться сейчас

Введение

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

Помимо установления политики, вы убедитесь, что эти строгие требования к паролям применяются к новым учетным записям пользователей. Затем лаборатория переходит от проактивных мер безопасности к реактивному обнаружению, обучая вас мониторингу системных журналов аутентификации. Анализируя эти журналы, вы сможете выявлять подозрительные действия, такие как многократные неудачные попытки входа в систему, которые могут указывать на атаку методом перебора (brute-force attack) или другие попытки несанкционированного доступа.

Настройка локальной политики паролей Linux: Сложность и Срок действия

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

Сначала рассмотрим сложность пароля. В современных системах на базе Debian, таких как Ubuntu, качество пароля управляется модулем pam_pwquality. Его конфигурация хранится в файле /etc/security/pwquality.conf.

Начнем с изучения настроек по умолчанию. Используйте команду cat для просмотра содержимого конфигурационного файла. Мы будем использовать grep для фильтрации закомментированных строк и пустых строк, чтобы сделать вывод более чистым.

grep -vE '^#|^$' /etc/security/pwquality.conf

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

sudo nano /etc/security/pwquality.conf

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

minlen = 10
dcredit = -1
ucredit = -1
lcredit = -1

Разберем эти опции:

  • minlen = 10: Устанавливает минимально допустимую длину пароля в 10 символов.
  • dcredit = -1: Требует как минимум одну цифру. Отрицательное число означает "как минимум одна".
  • ucredit = -1: Требует как минимум один заглавный символ.
  • lcredit = -1: Требует как минимум один строчный символ.

После добавления этих строк сохраните файл и выйдите из nano, нажав Ctrl+X, затем Y и Enter.

Теперь перейдем к настройке срока действия пароля (password aging). Эти настройки определяют максимальный и минимальный срок действия пароля. Значения по умолчанию для новых учетных записей пользователей хранятся в /etc/login.defs.

Используйте grep для поиска соответствующих настроек в этом файле.

grep -E 'PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE' /etc/login.defs

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

##       PASS_MAX_DAYS   Maximum number of days a password may be used.
PASS_MAX_DAYS   99999
##       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
PASS_MIN_DAYS   0
##       PASS_WARN_AGE   Number of days warning is given before a password expires.
PASS_WARN_AGE   7

Давайте установим политику истечения срока действия в 9000 дней. Откройте файл с помощью sudo nano.

sudo nano /etc/login.defs

Найдите строку PASS_MAX_DAYS и измените ее значение с 99999 на 9000. Вы также можете установить PASS_MIN_DAYS в 7, чтобы предотвратить слишком частое изменение пароля пользователями.

##       PASS_MAX_DAYS   Maximum number of days a password may be used.
PASS_MAX_DAYS   9000
##       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
PASS_MIN_DAYS   7
##       PASS_WARN_AGE   Number of days warning is given before a password expires.
PASS_WARN_AGE   14

Сохраните файл и выйдите из nano. Эти настройки в /etc/login.defs применяются к пользователям, созданным после этого изменения. Чтобы применить политику к существующему пользователю, например, нашему пользователю labex, мы используем команду chage.

Сначала проверьте текущую информацию о сроке действия для пользователя labex.

sudo chage -l labex

Вывод покажет, что срок действия пароля никогда не истекает.

Last password change                                    : Jul 22, 2023
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

Теперь используйте chage с флагом -M, чтобы установить максимальное количество дней в 9000 для пользователя labex.

sudo chage -M 9000 labex

Проверьте изменение, снова проверив информацию о сроке действия пользователя.

sudo chage -l labex

Теперь вы увидите, что дата Password expires была обновлена, и максимальное количество дней установлено в 9000, что успешно применяет политику срока действия.

Last password change                                    : Jul 22, 2023
Password expires                                        : Jan 01, 2048
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 9000
Number of days of warning before password expires       : 7

Теперь вы успешно настроили как политику сложности пароля, так и политику срока его действия в вашей системе Linux.

Применение строгих паролей для новых учетных записей пользователей

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

Мы будем использовать команду adduser, которая представляет собой удобный интерактивный скрипт для создания пользователей в системах на базе Debian. Давайте создадим нового пользователя с именем testuser.

sudo adduser testuser

Система немедленно предложит вам установить пароль для нового пользователя. Здесь и будет проверена наша политика.

Сначала давайте попробуем установить простой, слабый пароль, нарушающий нашу политику. Когда система запросит новый пароль, введите password и нажмите Enter.

Adding user `testuser' ...
Adding new group `testuser' (1001) ...
Adding new user `testuser' (1001) with home directory `/home/testuser' ...
Copying files from `/etc/skel' ...
New password:

Поскольку password нарушает наши правила (он слишком короткий и не содержит заглавных букв или цифр), система отклонит его. Посмотрим, какую причину она укажет.

BAD PASSWORD: The password contains less than 1 digits

Система отклоняет его, указывая на отсутствие цифр. Он нарушает несколько политик, но это первая, о которой он сообщает.

Система снова запросит пароль. Теперь давайте попробуем использовать пароль, который соответствует требованию по длине, но все еще нарушает правила сложности. Введите 12345 и нажмите Enter.

BAD PASSWORD: The password contains less than 1 uppercase letters
New password:

Советы: Если вы случайно создали пользователя, вы можете использовать sudo deluser testuser, чтобы удалить пользователя и повторить попытку.

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

New password:
Retype new password:
passwd: password updated successfully

Успех! Система приняла надежный пароль. Теперь она запросит дополнительную информацию о пользователе. Вы можете просто нажимать Enter на каждый запрос, чтобы принять значения по умолчанию.

Changing the user information for testuser
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y

Пользователь testuser теперь создан. Вы можете убедиться, что пользователь существует, используя команду id.

id testuser

Это покажет идентификатор пользователя, идентификатор группы и членство в группах.

uid=1001(testuser) gid=1001(testuser) groups=1001(testuser)

Далее давайте подтвердим, что политика срока действия пароля, которую мы установили в /etc/login.defs, была автоматически применена к этому новому пользователю. Используйте команду chage, чтобы просмотреть информацию о сроке действия для testuser.

sudo chage -l testuser

Вывод покажет, что Maximum number of days between password change (Максимальное количество дней между сменой пароля) установлено равным 9000, точно так, как мы настроили.

Last password change                                    : Jul 22, 2023
Password expires                                        : Jan 01, 2048
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 7
Maximum number of days between password change          : 9000
Number of days of warning before password expires       : 14

Наконец, чтобы поддерживать нашу систему в чистоте, давайте удалим тестового пользователя. Команда deluser удалит учетную запись пользователя.

sudo deluser testuser

Система подтвердит, что пользователь удален.

Removing user `testuser' ...
Warning: group `testuser' has no more members.
Done.

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

Мониторинг журналов аутентификации на предмет неудачных попыток входа

На этом шаге вы научитесь отслеживать системные журналы аутентификации для обнаружения потенциальных угроз безопасности, таких как атаки методом перебора (brute-force). Ключевой частью администрирования системы является регулярный просмотр журналов на предмет подозрительной активности. Неудачные попытки входа являются критическим индикатором попыток несанкционированного доступа. Вы смоделируете неудачный вход, а затем используете стандартные команды Linux для поиска и анализа соответствующих записей в журнале.

В системах на базе Debian, таких как Ubuntu, события аутентификации (как успешные, так и неудачные) обычно записываются в файл /var/log/auth.log. Для чтения этого файла требуются права администратора.

Сначала давайте сгенерируем неудачную попытку входа. Мы можем безопасно сделать это, используя команду su (substitute user), чтобы попытаться переключиться на нашу собственную учетную запись пользователя, labex, но намеренно предоставив неверный пароль.

su labex

Система запросит у вас пароль. Введите любой неверный пароль, например wrongpassword, и нажмите Enter.

Password:
su: Authentication failure

Сделаем это еще раз, чтобы создать закономерность неудач.

su labex

Снова введите неверный пароль. Теперь, когда мы сгенерировали некоторые данные журнала, давайте изучим файл журнала аутентификации. Мы будем использовать команду tail с sudo для просмотра последних строк файла /var/log/auth.log, где записываются самые новые события.

sudo tail /var/log/auth.log

Вы увидите несколько новых строк, связанных с вашими неудачными попытками su. Вывод будет выглядеть примерно так, показывая временную метку, процесс (su) и сообщение о сбое.

Jul 22 16:45:01 labex-vm su[12345]: pam_unix(su:auth): authentication failure; logname=labex uid=1000 euid=0 tty=/dev/pts/0 ruser=labex rhost=  user=labex
Jul 22 16:45:01 labex-vm su[12345]: FAILED SU (to labex) labex on /dev/pts/0
Jul 22 16:45:15 labex-vm su[12346]: pam_unix(su:auth): authentication failure; logname=labex uid=1000 euid=0 tty=/dev/pts/0 ruser=labex rhost=  user=labex
Jul 22 16:45:15 labex-vm su[12346]: FAILED SU (to labex) labex on /dev/pts/0

Ручной поиск по журналам может быть трудоемким. Более эффективный метод — использовать grep для фильтрации по определенным ключевым словам. Давайте найдем все строки, содержащие "authentication failure".

sudo grep "authentication failure" /var/log/auth.log

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

Теперь давайте создадим простой скрипт оболочки для автоматизации этого процесса мониторинга. Этот скрипт будет проверять журнал на наличие сбоев и сообщать сводку. В вашем каталоге ~/project создайте новый файл с именем log_monitor.sh с помощью nano.

nano log_monitor.sh

Введите следующий скрипт Bash в редактор. Этот скрипт использует grep с флагом -c для подсчета количества неудачных попыток входа и затем выводит сообщение о состоянии.

#!/bin/bash

LOG_FILE="/var/log/auth.log"
FAILURE_COUNT=$(sudo grep -c "authentication failure" $LOG_FILE)

echo "--- Authentication Log Monitor ---"
if [ "$FAILURE_COUNT" -gt 0 ]; then
  echo "WARNING: Found $FAILURE_COUNT failed login attempts."
else
  echo "OK: No failed login attempts found."
fi
echo "--------------------------------"

Сохраните файл и выйдите из nano, нажав Ctrl+X, затем Y и Enter.

Затем сделайте ваш новый скрипт исполняемым с помощью команды chmod.

chmod +x log_monitor.sh

Наконец, запустите ваш скрипт мониторинга, чтобы увидеть результат.

./log_monitor.sh

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

--- Authentication Log Monitor ---
WARNING: Found 2 failed login attempts.
--------------------------------

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

Резюме

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

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