Когда я прочитал статью Гаурава Камате «Проанализируйте свою безопасность Linux с помощью Lynis» , я вспомнил, как я работал системным администратором в Министерстве труда США. Одна из моих обязанностей заключалась в том, чтобы наши серверы Unix были усилены. Каждый квартал приходил независимый проверяющий, чтобы проверять состояние безопасности наших серверов. Каждый раз в день, когда должен был прибыть верификатор, я запускал Security Readiness Review (SRR), инструмент сканирования, который использовал большой набор скриптов для выявления и сообщения о любых результатах безопасности. SRR был с открытым исходным кодом, поэтому я мог просматривать все исходные скрипты и их функции. Это позволило мне изучить код, определить, что конкретно было не так, и быстро исправить каждую обнаруженную проблему.
Lynis – это инструмент аудита безопасности с открытым исходным кодом, который работает так же, как SRR, сканируя систему Linux и предоставляя подробные отчеты о любых обнаруженных недостатках. Как и SRR, он состоит из большого набора сценариев, и каждый сценарий проверяет конкретный элемент, например требования к минимальному и максимальному сроку действия пароля.
После запуска Lynis вы можете использовать его отчет, чтобы найти сценарий каждого элемента и точно узнать, как Lynis проверял и сообщал о каждой проблеме. Вы также можете использовать тот же код сценария для создания нового кода для автоматизации разрешения.
Поскольку в статье Гаурава рассказывается об установке и использовании Lynis, в этой статье я покажу несколько примеров того, как вы можете читать и использовать его отчеты.
Для начала проведем аудит:
# lynis audit system --quick
После его завершения полный отчет отобразится на вашем экране. Внизу в разделе « Предложения » перечислены все элементы, которые, возможно, необходимо будет отсортировать, чтобы повысить надежность системы, а также ИДЕНТИФИКАТОР ТЕСТА для каждого.
Чтобы укрепить систему и уменьшить размер списка, начните искать каждый элемент. Описание в разделе « Предложения » может содержать все, что вам нужно, чтобы знать, какие действия следует предпринять. Если это не так, вы можете использовать show detailsкоманду:
show details
# lynis show details TEST-ID
Например, одно из предложений моей системы:
locateНе удалось найти необходимую базу данных . Запустите updatedbили, locate.updatedbчтобы создать этот файл. [FILE-6410]
locate
updatedb
locate.updatedb
Похоже, мне просто нужно запустить команду 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настройке:
MaxAuthTries
* Consider hardening SSH configuration [SSH-7408] - Details : MaxAuthTries (6 --> 3) https://cisofy.com/lynis/controls/SSH-7408/
Чтобы решить эту проблему, вам необходимо знать расположение файлов конфигурации SSH. Опытный администратор Linux может уже знать, где их найти, но если вы этого не сделаете, есть способ узнать, где Lynis их нашел.
Lynis поддерживает множество операционных систем; поэтому место установки может отличаться. В системе Red Hat Enterprise Linux или Fedora Linux используйте rpmдля поиска тестовых файлов:
rpm
# rpm -ql lynis
В нем перечислены все тестовые файлы и указано их расположение в lynis/includeкаталоге. Найдите в этом каталоге TEST-ID, о котором вы хотите знать (в данном случае SSH-7408):
lynis/include
# grep SSH-7408 /usr/share/lynis/include/* /usr/share/lynis/include/tests_ssh: # Test : SSH-7408
Файл с именем tests_sshсодержит TEST-ID, и именно здесь вы можете найти функции сканирования, связанные с SSH. Взгляните на этот файл, чтобы увидеть различные функции, вызываемые сканером Lynis. Первый раздел определяет список каталогов в переменной с именем SSH_DAEMON_CONFIG_LOCS. Следующие несколько разделов отвечают за проверку статуса демона SSH, поиск его файла конфигурации и определение его версии. Я нашел код, который ищет файл конфигурации в разделе Test SSH-7404, описанном как «Определение местоположения файла конфигурации демона SSH». Этот код содержит forцикл, который ищет в элементах списка файл с именем sshd_config. Я могу использовать эту логику для собственного поиска:
tests_ssh
SSH_DAEMON_CONFIG_LOCS
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:
issue
* 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я увидел соответствующие тесты:
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
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.
/etc/issue
/etc/issue.net
Вы можете внести эти изменения вручную, но вместо этого можете рассмотреть возможность автоматизации. Например, может быть много настроек, которые необходимо изменить, или вам может потребоваться регулярно делать эти изменения на многих серверах. Создание сценария повышения безопасности – отличный способ упростить этот процесс. Для конфигураций SSH некоторые sedкоманды в вашем сценарии повышения безопасности помогут решить эти проблемы. Или вы можете использовать оператор echo для добавления допустимых баннеров:
sed
sed -i '/MaxAuthTries/s/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config echo "Legal Banner" | tee -a /etc/issue /etc/issue.net
Автоматизация позволяет создавать повторяемый сценарий, который можно сохранять и управлять в рамках вашей инфраструктуры. Вы также можете включить этот сценарий в свою первоначальную подготовку сервера.
Этот тип упражнений может улучшить ваши навыки написания сценариев, как путем отслеживания существующего кода, так и путем написания собственных сценариев. Поскольку это открытый исходный код, Lynis позволяет легко увидеть, как проверяется ваша система и что означают ее отчеты. Конечным результатом будет хорошо зарекомендовавшая себя система, которую вы сможете продемонстрировать в любое время, когда появятся эти аудиторы.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies