Аудит безопасности с помощью Lynis в Ubuntu 16.04

Lynis – это открытое приложение для аудита безопасности на основе хоста, которое может оценить профиль безопасности и средства защиты Linux и других UNIX-подобных операционных систем.

Данное руководство поможет установить Lynis и провести аудит безопасности на сервере Ubuntu 16.04. Ознакомившись с результатом, вы сможете убрать тесты, которые не соответствуют потребностям сервера.

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

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

Требования

  • Сервер Ubuntu 16.04.
  • Пользователь с доступом к sudo.
  • Настроенный брандмауэр.

Все необходимые инструкции вы найдёте здесь.

1: Установка Lynis

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

Однако репозиторий Ubuntu 16.04 предоставляет несколько устаревшую версию приложения. Потому вместо стандартного репозитория системы рекомендуется использовать официальный репозиторий Lynis, чтобы загрузить более новую версию приложения.

Репозиторий программного обеспечения Lynis использует протокол HTTPS, поэтому сначала нужно убедиться, что менеджер пакетов поддерживает HTTPS. Используйте для этого следующую команду:

dpkg -s apt-transport-https | grep -i status

Если менеджер поддерживает HTTPS, команда выведет:

Status: install ok installed

В противном случае установите поддержку протокола с помощью команды:

sudo apt-get install apt-transport-https

Теперь можно приступать к установке Lynis. Сначала добавьте ключ репозитория:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C80E383C3DE9F082E01391A0366C67DE91CA5D5F

Если ключ добавлен успешно, вы увидите:

Executing: /tmp/tmp.AnVzwb6Mq8/gpg.1.sh --keyserver
keyserver.ubuntu.com
--recv-keys
C80E383C3DE9F082E01391A0366C67DE91CA5D5F
gpg: requesting key 91CA5D5F from hkp server keyserver.ubuntu.com
gpg: key 91CA5D5F: public key "CISOfy Software (signed software packages) <software@cisofy.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

Добавьте репозиторий Lynis в список доступных репозиториев пакетного менеджера:

sudo add-apt-repository "deb [arch=amd64] https://packages.cisofy.com/community/lynis/deb/ xenial main"

Обновите индекс пакетов:

sudo apt-get update

Установите Lynis:

sudo apt-get install lynis

После этого у вас появится доступ к командам и подкомандам lynis.

2: Проведение аудита безопасности

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

lynis show commands
Commands:
lynis audit
lynis configure
lynis show
lynis update
lynis upload-only

Lynis проводит аудит с помощью профилей; они похожи на конфигурационные файлы, в которых хранятся параметры аудита Lynis. Просмотрите параметры профиля по умолчанию:

lynis show settings
# Colored screen output
colors=1
# Compressed uploads
compressed-uploads=0
# Use non-zero exit code if one or more warnings were found
error-on-warnings=0
...
# Upload server (ip or hostname)
upload-server=[not configured] # Data upload after scanning
upload=no
# Verbose output
verbose=0
# Add --brief to hide descriptions, --configured-only to show configured items only, or --nocolors to remove colors

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

lynis update info

Если вы получили такой вывод, вы используете последнюю версию Lynis

== Lynis ==
Version            : 2.4.8
Status             : Up-to-date
Release date       : 2017-03-29
Update location    : https://cisofy.com/lynis/
2007-2017, CISOfy - https://cisofy.com/lynis/

Также для проверки обновлений можно использовать команду:

lynis update check

Она вернёт одну строку:

status=up-to-date

Если версия требует обновления, используйте диспетчер пакетов.

Для запуска аудита системы используйте команду lynis audit system. Вы можете запустить Lynis в привилегированном и непривилегированном (pentest) режиме. В последнем режиме пропускаются некоторые тесты, требующие привилегий суперпользователя. С помощью sudo вы можете запустить аудит в привилегированном режиме. Выполните эту команду для запуска первой проверки:

sudo lynis audit system

После аутентификации Lynis проведет тесты и выведет результаты на экран. Аудит Lynis обычно занимает около минуты.

Во время аудита приложение Lynis проводит несколько тестов, разделенных на категории. После каждого этапа в стандартный вывод (на экран) выводятся результаты тестов, отладочная информация и предложения по защите системы. Более подробная информация записывается в /var/log/lynis.log, а данные отчета сохраняются в /var/log/lynis-report.dat. Отчеты содержат общую информацию о сервере и самом приложении, поэтому особое внимание лучше уделить лог-файлу. Лог очищается (перезаписывается) при каждой проверке, потому результаты предыдущей проверки не сохраняются.

По завершении проверки вы можете просмотреть результаты, предупреждения и предложения, а затем воспользоваться советами Lynis.

Давайте ознакомимся с результатами аудита Lynis.

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

Первая важная часть вывода аудита Lynis имеет чисто информационный характер. Она сообщает результат каждого теста по категориям в форме ключевых слов: NONE, WEAK, DONE, FOUND, NOT_FOUND, OK и WARNING.

[+] Boot and services
------------------------------------
- Service Manager                                           [ systemd ] - Checking UEFI boot                                        [ DISABLED ] - Checking presence GRUB                                    [ OK ] - Checking presence GRUB2                                   [ FOUND ] - Checking for password protection                        [ WARNING ] ..
[+] File systems
------------------------------------
- Checking mount points
- Checking /home mount point                              [ SUGGESTION ] - Checking /tmp mount point                               [ SUGGESTION ] - Checking /var mount point                               [ OK ] - Query swap partitions (fstab)                             [ NONE ] - Testing swap partitions                                   [ OK ] - Testing /proc mount (hidepid)                             [ SUGGESTION ] - Checking for old files in /tmp                            [ OK ] - Checking /tmp sticky bit                                  [ OK ] - ACL support root file system                              [ ENABLED ] - Mount options of /                                        [ OK ] - Checking Locate database                                  [ FOUND ] - Disable kernel support of some filesystems
- Discovered kernel modules: udf
...
[+] Hardening
------------------------------------
- Installed compiler(s)                                   [ FOUND ] - Installed malware scanner                               [ NOT FOUND ] - Installed malware scanner                               [ NOT FOUND ] ...
[+] Printers and Spools
------------------------------------
- Checking cups daemon                                      [ NOT FOUND ] - Checking lp daemon                                        [ NOT RUNNING ]

Lynis «из коробки» выполняет более 200 тестов, однако далеко не все они необходимы каждой системе. Но как определить, какие тесты необходимы, а какие нет? Здесь вам и пригодятся знания о том, что должно выполняться на сервере. Например, если вы проверите типичный результат аудита Lynis, вы обнаружите два теста в категории Printers and Spools:

[+] Printers and Spools
------------------------------------
- Checking cups daemon                                      [ NOT FOUND ] - Checking lp daemon                                        [ NOT RUNNING ]

Вы действительно используете сервер печати на Ubuntu 16.04? Если нет, вам не нужно проводить этот тест.

К сожалению, другие тесты, которые можно исключить из аудита, не всегда столь очевидны. Для примера можно рассмотреть этот раздел:

[+] Insecure services
------------------------------------
- Checking inetd status                                     [ NOT ACTIVE ]

Этот вывод говорит, что демон inetd неактивен, но на сервере Ubuntu 16.04 это нормально, потому что система Ubuntu использует вместо него systemd. Зная это, вы можете исключить этот тест из аудита Lynis.

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

В следующих разделах подробно рассматриваются различные части и фрагменты результата аудита Lynis.

3: Предупреждения Lynis

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

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

Рассмотрим следующий пример предупреждений:

Warnings (3):
----------------------------
! Version of Lynis is very old and should be updated [LYNIS] https://cisofy.com/controls/LYNIS/
! Reboot of system is most likely needed [KRNL-5830] - Solution : reboot
https://cisofy.com/controls/KRNL-5830/
! Found one or more vulnerable packages. [PKGS-7392] https://cisofy.com/controls/PKGS-7392/

Первое предупреждение сообщает о том, что приложение Lynis необходимо обновить. Это также означает, что аудит проведён с помощью устаревшей версии Lynis, поэтому результаты могут быть неполными. Этого можно было бы избежать, если бы перед запуском аудита была проведена проверка обновлений (как показано в разделе 3). Устранить ошибку очень просто: достаточно обновить Lynis.

Второе предупреждение указывает, что сервер необходимо перезагрузить. Вероятно, это предупреждение возникло потому, что недавно было выполнено системное обновление, связанное с ядром. Чтобы устранить предупреждение, просто перезапустите систему.

Если какое-либо предупреждение или результат тестирования вызывает у вас сомнения, вы можете получить больше информации, запросив id теста Lynis. Эта команда использует следующий формат:

sudo lynis show details test-id

Например, чтобы получить больше информации о втором предупреждении, id которого KRNL-5830, нужно запустить:

sudo lynis show details KRNL-5830

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

2017-03-21 01:50:03 Performing test ID KRNL-5830 (Checking if system is running on the latest installed kernel)
2017-03-21 01:50:04 Test: Checking presence /var/run/reboot-required.pkgs
2017-03-21 01:50:04 Result: file /var/run/reboot-required.pkgs exists
2017-03-21 01:50:04 Result: reboot is needed, related to 5 packages
2017-03-21 01:50:04 Package: 5
2017-03-21 01:50:04 Result: /boot exists, performing more tests from here
2017-03-21 01:50:04 Result: /boot/vmlinuz not on disk, trying to find /boot/vmlinuz*
2017-03-21 01:50:04 Result: using 4.4.0.64 as my kernel version (stripped)
2017-03-21 01:50:04 Result: found /boot/vmlinuz-4.4.0-64-generic
2017-03-21 01:50:04 Result: found /boot/vmlinuz-4.4.0-65-generic
2017-03-21 01:50:04 Result: found /boot/vmlinuz-4.4.0-66-generic
2017-03-21 01:50:04 Action: checking relevant kernels
2017-03-21 01:50:04 Output: 4.4.0.64 4.4.0.65 4.4.0.66
2017-03-21 01:50:04 Result: Found 4.4.0.64 (= our kernel)
2017-03-21 01:50:04 Result: found a kernel (4.4.0.65) later than running one (4.4.0.64)
2017-03-21 01:50:04 Result: Found 4.4.0.65
2017-03-21 01:50:04 Result: found a kernel (4.4.0.66) later than running one (4.4.0.64)
2017-03-21 01:50:04 Result: Found 4.4.0.66
2017-03-21 01:50:04 Warning: Reboot of system is most likely needed [test:KRNL-5830] [details:] [solution:text:reboot] 2017-03-21 01:50:04 Hardening: assigned partial number of hardening points (0 of 5). Currently having 7 points (out of 14)
2017-03-21 01:50:04 Checking permissions of /usr/share/lynis/include/tests_memory_processes
2017-03-21 01:50:04 File permissions are OK
2017-03-21 01:50:04 ===---------------------------------------------------------------===

Третье предупреждение (с id PKGS-7392) сообщает об уязвимых пакетах. Запросите подробности:

sudo lynis show details PKGS-7392

Вывод даёт больше информации о пакетах, которые необходимо обновить:

2017-03-21 01:39:53 Performing test ID PKGS-7392 (Check for Debian/Ubuntu security updates)
2017-03-21 01:39:53 Action: updating repository with apt-get
2017-03-21 01:40:03 Result: apt-get finished
2017-03-21 01:40:03 Test: Checking if /usr/lib/update-notifier/apt-check exists
2017-03-21 01:40:03 Result: found /usr/lib/update-notifier/apt-check
2017-03-21 01:40:03 Test: checking if any of the updates contain security updates
2017-03-21 01:40:04 Result: found 7 security updates via apt-check
2017-03-21 01:40:04 Hardening: assigned partial number of hardening points (0 of 25). Currently having 96 points (out of 149)
2017-03-21 01:40:05 Result: found vulnerable package(s) via apt-get (-security channel)
2017-03-21 01:40:05 Found vulnerable package: libc-bin
2017-03-21 01:40:05 Found vulnerable package: libc-dev-bin
2017-03-21 01:40:05 Found vulnerable package: libc6
2017-03-21 01:40:05 Found vulnerable package: libc6-dev
2017-03-21 01:40:05 Found vulnerable package: libfreetype6
2017-03-21 01:40:05 Found vulnerable package: locales
2017-03-21 01:40:05 Found vulnerable package: multiarch-support
2017-03-21 01:40:05 Warning: Found one or more vulnerable packages. [test:PKGS-7392] [details:-] [solution:-] 2017-03-21 01:40:05 Suggestion: Update your system with apt-get update, apt-get upgrade, apt-get dist-upgrade and/or unattended-upgrades [test:PKGS-7392] [details:-] [solution:-] 2017-03-21 01:40:05 ===---------------------------------------------------------------===

Решением подобной проблемы является обновление базы данных пакетов и обновление системы.

Исправив компоненты, которые вызвали предупреждения, вы должны повторить аудит. Полученный результат не должен содержать таких предупреждений, хотя могут появиться новые предупреждения. В таком случае исправьте новые предупреждения и снова запустите аудит.

4: Рекомендации Lynis по безопасности системы

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

После текста совета идёт ID теста. В зависимости от теста, в следующей строке будут указаны изменения, которые рекомендуется внести в конфигурационный файл уязвимого сервиса. Последняя строка – это URL-адрес, по которому вы можете найти дополнительную информацию по теме.

Рассмотрим такой результат аудита Lynis, содержащий предложения по защите SSH:

Suggestions (36):
----------------------------
* Consider hardening SSH configuration [SSH-7408] - Details  : ClientAliveCountMax (3 --> 2)
https://cisofy.com/controls/SSH-7408/
* Consider hardening SSH configuration [SSH-7408] - Details  : PermitRootLogin (YES --> NO)
https://cisofy.com/controls/SSH-7408/
* Consider hardening SSH configuration [SSH-7408] - Details  : Port (22 --> )
https://cisofy.com/controls/SSH-7408/
* Consider hardening SSH configuration [SSH-7408] - Details  : TCPKeepAlive (YES --> NO)
https://cisofy.com/controls/SSH-7408/
* Consider hardening SSH configuration [SSH-7408] - Details  : UsePrivilegeSeparation (YES --> SANDBOX)
https://cisofy.com/controls/SSH-7408/
...

В зависимости от среды все эти предложения можно реализовать без риска для безопасности. Однако вы должны знать, что означает каждая директива. Поскольку рекомендации относятся к серверу SSH, все изменения нужно внести в конфигурационный файл SSH, /etc/ssh/sshd_config. Если у вас есть какие-либо сомнения в отношении рекомендаций Lynis, откройте мануал директивы с помощью команды man sshd_config. Также можно поискать информацию в Интернете.

К примеру, Lynis предлагает изменить стандартный SSH-порт 22. Если вы хотите внести это изменение, сначала проверьте состояние брандмауэра; если он включен, обязательно добавьте правило для доступа к SSH по новому порту.

Больше информации о предложении Lynis можно получить с помощью id теста и следующей команды:

sudo lynis show details test-id

Иногда Lynis требует установить дополнительное программное обеспечение на сервер. Например:

* Harden the system by installing at least one malware scanner, to perform periodic file system scans [HRDN-7230] - Solution : Install a tool like rkhunter, chkrootkit, OSSEC
https://cisofy.com/controls/HRDN-7230/

Тут Lynis предлагает установить rkhunter, chkrootkit или OSSEC для того, чтобы пройти тест на повышение защиты системы (HRDN-7230). OSSEC – это система обнаружения вторжений, которая может генерировать и отправлять предупреждения. Это очень хорошее приложение, которое поможет улучшить результаты аудита Lynis. Вы можете больше узнать об этом инструменте в Информатории.

Однако просто установить OSSEC недостаточно, чтобы пройти этот тест. Для этого можно установить chkrootkit. Это еще один случай, когда вам придётся самостоятельно проводить дополнительные исследования.

Рассмотрим другой пример; это предложение, которое выдаёт тест целостности файла.

* Install a file integrity tool to monitor changes to critical and sensitive files [FINT-4350] https://cisofy.com/controls/FINT-4350/

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

Вы можете игнорировать некоторые предложения. Вот пример:

* To decrease the impact of a full /home file system, place /home on a separated partition [FILE-6310] https://cisofy.com/controls/FILE-6310/
* To decrease the impact of a full /tmp file system, place /tmp on a separated partition [FILE-6310] https://cisofy.com/controls/FILE-6310/

Основные файловые системы Linux (/home, /tmp, /var и /usr) монтировались в отдельный раздел, чтобы минимизировать воздействие на сервер, если у них заканчивается свободное дисковое пространство. Но сегодня этот подход редко используется, особенно на облачных серверах. Теперь эти файловые системы просто монтируются как каталог в корневом разделе. Но если вы выполняете аудит Lynis в такой системе, вы получите пару предложений по оптимизации файловых систем (как показано выше). Эти рекомендации можно проигнорировать и просто исключить из аудита Lynis тест, вызвавший их.

5: Пользовательская настройка аудита Lynis

Этот раздел научит вас создавать пользовательские списки тестов аудита Lynis и исключать ненужные тесты.

Профили, которые управляют аудитом, определяются в файлах с расширением .prf в каталоге /etc/lynis. Профиль по умолчанию называется default.prf. Не редактируйте этот профиль по умолчанию напрямую. Любые изменения, которые вы хотите внести в аудит, добавляются в файл custom.prf в том же каталоге.

Создайте файл /etc/lynis/custom.prf:

sudo nano /etc/lynis/custom.prf

В этом файле можно определить список тестов, которые нужно исключить из аудита Lynis. Например:

  • FILE-6310: проверка разделов.
  • HTTP-6622: тест установки Nginx.
  • HTTP-6702: тест установки Apache. Этот и предыдущий тест выполняются по умолчанию. Если вы используете Nginx, отключите тест Apache (и наоборот).
  • PRNT-2307 и PRNT-2308: тесты принт-сервера.
  • TOOL-5002: тест инструментов автоматизации (типа Puppet и Salt). Если вы не пользуетесь такими инструментами, исключите этот тест.

Чтобы исключить тест, используйте директиву skip-test и укажите ID теста. Добавьте в файл custom.prf такие строки:

# Lines starting with "#" are comments
# Skip a test (one per line)
# This will ignore separation of partitions test
skip-test=FILE-6310
# Is Nginx installed?
skip-test=HTTP-6622
# Is Apache installed?
skip-test=HTTP-6702
# Skip checking print-related services
skip-test=PRNT-2307
skip-test=PRNT-2308
# If a test id includes more than one test use this form to ignore a particular test
skip-test=SSH-7408:tcpkeepalive

Сохраните и закройте файл.

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

Также файл /etc/lynis/custom.prf позволяет переопределять параметры стандартного профиля. Для этого нужно скопировать параметр из /etc/lynis/default.prf в /etc/lynis/custom.prf и присвоить ему новое значение. Однако такая необходимость возникает очень редко.

6: Индекс безопасности системы

В конце каждого вывода аудита Lynis (чуть ниже раздела предложений) вы найдете раздел, который выглядит следующим образом:

Lynis security scan details:
Hardening index : 64 [############        ] Tests performed : 206
Plugins enabled : 0

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

После исправления ошибок и внедрения рекомендованных обновлений индекс значительно вырос:

Lynis security scan details:
Hardening index : 86 [#################   ] Tests performed : 205
Plugins enabled : 0

Индекс безопасности – не точная оценка защиты сервера, а всего лишь показатель того, насколько хорошо настроен сервер согласно результатам тестов Lynis. Чем выше индекс, тем лучше.

Заключение

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

Аудит займет немного больше времени и сил, но безопасность машины стоит усилий.

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

Tags: ,

Добавить комментарий