Как читать отчеты Lynis для повышения безопасности Linux

Когда я прочитал статью Гаурава Камате «Проанализируйте свою безопасность Linux с помощью Lynis» , я вспомнил, как я работал системным администратором в Министерстве труда США. Одна из моих обязанностей заключалась в том, чтобы наши серверы Unix были усилены. Каждый квартал приходил независимый проверяющий, чтобы проверять состояние безопасности наших серверов. Каждый раз в день, когда должен был прибыть верификатор, я запускал Security Readiness Review (SRR), инструмент сканирования, который использовал большой набор скриптов для выявления и сообщения о любых результатах безопасности. SRR был с открытым исходным кодом, поэтому я мог просматривать все исходные скрипты и их функции. Это позволило мне изучить код, определить, что конкретно было не так, и быстро исправить каждую обнаруженную проблему.

Что такое Lynis?

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

 

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

Как читать отчеты Lynis

Поскольку в статье Гаурава рассказывается об установке и использовании Lynis, в этой статье я покажу несколько примеров того, как вы можете читать и использовать его отчеты.

Для начала проведем аудит:

lynis audit system --quick

После его завершения полный отчет отобразится на вашем экране. Внизу в разделе « Предложения » перечислены все элементы, которые, возможно, необходимо будет отсортировать, чтобы повысить надежность системы, а также ИДЕНТИФИКАТОР ТЕСТА для каждого.

Чтобы укрепить систему и уменьшить размер списка, начните искать каждый элемент. Описание в разделе « Предложения » может содержать все, что вам нужно, чтобы знать, какие действия следует предпринять. Если это не так, вы можете использовать show detailsкоманду:

lynis show details TEST-ID

Например, одно из предложений моей системы:

locateНе удалось найти необходимую базу данных . Запустите updatedbили, locate.updatedbчтобы создать этот файл. [FILE-6410]

Похоже, мне просто нужно запустить команду updatedb, но если я хочу быть уверенным, я могу использовать опцию Lynis show details:

# lynis show details FILE-6410
2020-06-16 20:54:33 Performing test ID FILE-6410 (Checking Locate database)
2020-06-16 20:54:33 Test: Checking locate database
2020-06-16 20:54:33 Result: file /var/lib/mlocate/mlocate.db not found
2020-06-16 20:54:33 Result: file /var/lib/locate/locatedb not found
2020-06-16 20:54:33 Result: file /var/lib/locatedb not found
2020-06-16 20:54:33 Result: file /var/lib/slocate/slocate.db not found
2020-06-16 20:54:33 Result: file /var/cache/locate/locatedb not found
2020-06-16 20:54:33 Result: file /var/db/locate.database not found
2020-06-16 20:54:33 Result: database not found
2020-06-16 20:54:33 Suggestion: The database required for 'locate' could not be found. Run 'updatedb' or 'locate.updatedb' to create this file. [test:FILE-6410] [details:-] [solution:-]
2020-06-16 20:54:33 ====

Эти сведения указывают на то, что Lynis не удалось найти различные файлы. Этот случай очень ясен. Я могу запустить updatedbкоманду и перепроверить этот тест:

# updatedb
# lynis --tests FILE-6410

Кроме того, повторная проверка деталей показывает, какой файл удовлетворяет тесту:

# lynis show details FILE-6410
2020-06-16 21:38:40 Performing test ID FILE-6410 (Checking Locate database)
2020-06-16 21:38:40 Test: Checking locate database
2020-06-16 21:38:40 Result: locate database found (/var/lib/mlocate/mlocate.db)
2020-06-16 21:38:40 Result: file /var/lib/locate/locatedb not found
2020-06-16 21:38:40 Result: file /var/lib/locatedb not found
2020-06-16 21:38:40 Result: file /var/lib/slocate/slocate.db not found
2020-06-16 21:38:40 Result: file /var/cache/locate/locatedb not found
2020-06-16 21:38:40 Result: file /var/db/locate.database not found
2020-06-16 21:38:40 ====

Нырять глубже

Многие предложения Lynis не так просты, как это. Если вы не уверены, к чему относится вывод или предложение, может быть сложно понять, как решить проблему. Предположим, вы запускаете Lynis на новом сервере Linux, и есть несколько элементов, относящихся к демону защищенной оболочки (SSH), один из которых относится к MaxAuthTriesнастройке:

* Consider hardening SSH configuration [SSH-7408]
    - Details  : MaxAuthTries (6 --> 3)
      https://cisofy.com/lynis/controls/SSH-7408/

Чтобы решить эту проблему, вам необходимо знать расположение файлов конфигурации SSH. Опытный администратор Linux может уже знать, где их найти, но если вы этого не сделаете, есть способ узнать, где Lynis их нашел.

Найдите тестовые скрипты Lynis

Lynis поддерживает множество операционных систем; поэтому место установки может отличаться. В системе Red Hat Enterprise Linux или Fedora Linux используйте rpmдля поиска тестовых файлов:

rpm -ql lynis

В нем перечислены все тестовые файлы и указано их расположение в lynis/includeкаталоге. Найдите в этом каталоге TEST-ID, о котором вы хотите знать (в данном случае SSH-7408):

# grep SSH-7408 /usr/share/lynis/include/*
/usr/share/lynis/include/tests_ssh:    # Test        : SSH-7408

Найдите проблемы с SSH

Файл с именем tests_sshсодержит TEST-ID, и именно здесь вы можете найти функции сканирования, связанные с SSH. Взгляните на этот файл, чтобы увидеть различные функции, вызываемые сканером Lynis. Первый раздел определяет список каталогов в переменной с именем SSH_DAEMON_CONFIG_LOCS. Следующие несколько разделов отвечают за проверку статуса демона SSH, поиск его файла конфигурации и определение его версии. Я нашел код, который ищет файл конфигурации в разделе Test SSH-7404, описанном как «Определение местоположения файла конфигурации демона SSH». Этот код содержит forцикл, который ищет в элементах списка файл с именем sshd_config. Я могу использовать эту логику для собственного поиска:

# find /etc /etc/ssh /usr/local/etc/ssh /opt/csw/etc/ssh -name sshd_config
/etc/ssh/sshd_config
/etc/ssh/sshd_config
find: ‘/usr/local/etc/ssh’: No such file or directory
find: ‘/opt/csw/etc/ssh’: No such file or directory

Дальнейшее изучение этого файла обнаруживает код, связанный с поиском SSH-7408. Этот тест охватывает MaxAuthTriesи несколько других настроек. Теперь я могу найти переменную в файле конфигурации SSH:

# grep MaxAuthTries /etc/ssh/sshd_config
#MaxAuthTries 6

Lynis также сообщил о находке, относящейся к легальным баннерам, отображаемым при входе в систему. В моей домашней настольной системе (где я не ожидаю, что многие другие люди войдут в систему) я не удосужился изменить issueфайлы по умолчанию . Корпоративная или правительственная система, вероятно, должна включать юридический баннер, предупреждающий пользователей о том, что их логины и действия могут быть записаны и отслежены. Lynis сообщает об этом с помощью тестов BANN-7126 и BANN-7130:

* Add a legal banner to /etc/issue, to warn unauthorized users [BANN-7126]
      https://cisofy.com/lynis/controls/BANN-7126/

* Add legal banner to /etc/issue.net, to warn unauthorized users [BANN-7130]
      https://cisofy.com/lynis/controls/BANN-7130/

В моей системе с Fedora 32 Workstation не так уж много:

# cat /etc/issue /etc/issue.net
\S
Kernel \r on an \m (\l)

\S
Kernel \r on an \m (\l)

Я мог бы добавить что-то вроде «Не допускать» или «Ничего не ломать», но описание теста не дает достаточно информации для решения проблемы, поэтому я еще раз взглянул на сценарии Lynis. Я заметил, что в includeкаталоге есть файл с именем tests_banners; это казалось хорошим местом для поиска. С некоторой помощью grepя увидел соответствующие тесты:

# grep -E 'BANN-7126|BANN-7130' /usr/share/lynis/include/tests_banners
    # Test        : BANN-7126
    Register --test-no BANN-7126 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check issue banner file contents"
    # Test        : BANN-7130
    Register --test-no BANN-7130 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check issue.net banner file contents"

Изучив связанный код в файле для теста, я обнаружил, что оба этих теста повторяют некоторые предопределенные юридические термины с forциклом:

for ITEM in ${LEGAL_BANNER_STRINGS}do

Эти юридические термины хранятся в переменной, LEGAL_BANNER_STRINGSопределенной в верхней части файла. Прокрутка назад к началу показывает полный список:

LEGAL_BANNER_STRINGS="audit access authori condition connect consent continu criminal enforce evidence forbidden intrusion law legal legislat log monitor owner penal policy policies privacy private prohibited record restricted secure subject system terms warning"

Мои первоначальные предложения («держись подальше» и «ничего не ломай») не удовлетворили бы тест, потому что они не содержат слов из этого списка.

Это баннерное сообщение содержит несколько обязательных слов, поэтому оно удовлетворяет этому тесту и не позволяет Lynis сообщить об этом:

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

Обратите внимание, что это сообщение должно быть добавлено к обоим /etc/issueи /etc/issue.net.

Делаем это повторяемым

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

sed -i '/MaxAuthTries/s/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config

echo "Legal Banner" | tee -a /etc/issue /etc/issue.net

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

Укрепите свою систему

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