Lynis: проверь безопасность и здоровье своей системы

Чтобы эффективно нападать, нужно быть уверенным за свой тыл. Если ты не уверенн в системе с которой совершm аудиты...

Lynis: проверь безопасность и здоровье своей системы

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

Lynis – это проверенный в бою инструмент безопасности для систем, работающих под управлением Linux, macOS или Unix. Он проверяет работоспособность ваших систем, качество настроек и соответствие требованиям безопасности. Проект с открытым исходным кодом под лицензией GPL разрабатывается с 2007 года. Это взрослый проект.

Не скроем, мы в CyberSec тоже используем Lynis:

Lynis работает почти на всез *nix-совместимых OS от MacOS до OpenBSD и Solaris.

При необходимости, Lynis можно запустить на Raspberry Pi, что очень удобно для полевых тестов.

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

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

Аудит системы будет выполнятся по следующим шагам:

Для получения информацию о системе, общем состоянии программного обеспечения, сети и служб, работающих на вашем компьютере, достаточно выполнить несколько простых команд. Но что теперь делать с полученной информацией? Как в ней разобраться? Ведь объём данных, которые вам нужно проанализировать, огромен. Lynis поможет.

Устанавливаем Lynis:

apt install lynis

Однако, если версия утилиты в вашем репозитории не самая последняя, лучше установить Lynix с GitHub (я использую систему Red Hat Linux, но аналогичные команды работают в любом дистрибутиве Linux):

$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.8 (Maipo)
$
$ uname  -r
3.10.0-1127.el7.x86_64
$
$ git clone https://github.com/CISOfy/lynis.git
Cloning into 'lynis'...
remote: Enumerating objects: 30, done.
remote: Counting objects: 100% (30/30), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 12566 (delta 15), reused 8 (delta 0), pack-reused 12536
Receiving objects: 100% (12566/12566), 6.36 MiB | 911.00 KiB/s, done.
Resolving deltas: 100% (9264/9264), done.
$

Как только вы клонируете хранилище, зайдите в него и посмотрите, что вам доступно, найдите файл с именем lynis. На самом деле это shell-скрипт, так что вы можете открыть его и почитать, что он делает. Фактически, Lynis в основном и реализован с использованием скриптов:

$ cd lynis/
$ ls
CHANGELOG.md        CONTRIBUTING.md  db           developer.prf  FAQ             include  LICENSE  lynis.8  README     SECURITY.md
CODE_OF_CONDUCT.md  CONTRIBUTORS.md  default.prf  extras         HAPPY_USERS.md  INSTALL  lynis    plugins  README.md
$
$ file lynis
lynis: POSIX shell script, ASCII text executable, with very long lines
$ 

Запускаем Lynis

Начнём знакомство с Lynis, запустив справку с помощью флага -h:

$ ./lynis -h

Так вы можете ознакомиться с основными командами утилиты. Например, давайте узнаем её версию:

$ ./lynis show version
3.0.0
$

Чтобы получить полный список команд Lynis, введите:

$ ./lynis show commands

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

$

Запускаем аудит Linux-системы

Всё начинается со следующей команды:

$ ./lynis audit system

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

Вот здесь Lynis хранит логи:

  Files:
  - Test and debug information      : /var/log/lynis.log
  - Report data                     : /var/log/lynis-report.dat

Вы можете проверить, были ли на самом деле созданы все необходимые файлы:

$ ls -l /var/log/lynis.log
-rw-r-----. 1 root root 341489 Apr 30 05:52 /var/log/lynis.log
$
$ ls -l /var/log/lynis-report.dat
-rw-r-----. 1 root root 638 Apr 30 05:55 /var/log/lynis-report.dat
$ 

Изучаем отчёты

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

[+] Initializing program
------------------------------------
  - Detecting OS...                                           [ DONE ]
  - Checking profiles...                                      [ DONE ]

  ---------------------------------------------------
  Program version:           3.0.0
  Operating system:          Linux
  Operating system name:     Red Hat Enterprise Linux Server 7.8 (Maipo)
  Operating system version:  7.8
  Kernel version:            3.10.0
  Hardware platform:         x86_64
  Hostname:                  example
  ---------------------------------------------------
<<snip>>

[+] System Tools
------------------------------------
  - Scanning available tools...
  - Checking system binaries...

[+] Plugins (phase 1)
------------------------------------
 Note: plugins have more extensive tests and may take several minutes to complete
 
  - Plugin: pam
    [..]
  - Plugin: systemd
    [................]


Отчёт делится на различные разделы, и каждый раздел начинается с [+]. Некоторые из разделов можно увидеть ниже

[+] Boot and services
[+] Kernel
[+] Memory and Processes
[+] Users, Groups and Authentication
[+] Shells
[+] File systems
[+] USB Devices
[+] Storage
[+] NFS
[+] Name services
[+] Ports and packages
[+] Networking
[+] Printers and Spools
[+] Software: e-mail and messaging
[+] Software: firewalls
[+] Software: webserver
[+] SSH Support
[+] SNMP Support
[+] Databases
[+] LDAP Services
[+] PHP
[+] Squid Support
[+] Logging and files
[+] Insecure services
[+] Banners and identification
[+] Scheduled tasks
[+] Accounting
[+] Time and Synchronization
[+] Cryptography
[+] Virtualization
[+] Containers
[+] Security frameworks
[+] Software: file integrity
[+] Software: System tooling
[+] Software: Malware
[+] File Permissions
[+] Home directories
[+] Kernel Hardening
[+] Hardening
[+] Custom tests

Для большей наглядности Lynis использует условные обозначения в виде цветов:

В моём случае большинство проблем (красных меток) было найдено в разделе Kernel Hardening. Ядро имеет различные настраиваемые параметры, которые определяют его работу, и некоторые из этих параметров отвечают за безопасность. Дистрибутив может не устанавливать их по умолчанию по разным причинам, но вы должны изучить каждый из них и посмотреть, нужно ли вам менять его значение в зависимости от ваших требований к безопасности:

[+] Kernel Hardening
------------------------------------
  - Comparing sysctl key pairs with scan profile
    - fs.protected_hardlinks (exp: 1)                         [ OK ]
    - fs.protected_symlinks (exp: 1)                          [ OK ]
    - fs.suid_dumpable (exp: 0)                               [ OK ]
    - kernel.core_uses_pid (exp: 1)                           [ OK ]
    - kernel.ctrl-alt-del (exp: 0)                            [ OK ]
    - kernel.dmesg_restrict (exp: 1)                          [ DIFFERENT ]
    - kernel.kptr_restrict (exp: 2)                           [ DIFFERENT ]
    - kernel.randomize_va_space (exp: 2)                      [ OK ]
    - kernel.sysrq (exp: 0)                                   [ DIFFERENT ]
    - kernel.yama.ptrace_scope (exp: 1 2 3)                   [ DIFFERENT ]
    - net.ipv4.conf.all.accept_redirects (exp: 0)             [ DIFFERENT ]
    - net.ipv4.conf.all.accept_source_route (exp: 0)          [ OK ]
    - net.ipv4.conf.all.bootp_relay (exp: 0)                  [ OK ]
    - net.ipv4.conf.all.forwarding (exp: 0)                   [ OK ]
    - net.ipv4.conf.all.log_martians (exp: 1)                 [ DIFFERENT ]
    - net.ipv4.conf.all.mc_forwarding (exp: 0)                [ OK ]
    - net.ipv4.conf.all.proxy_arp (exp: 0)                    [ OK ]
    - net.ipv4.conf.all.rp_filter (exp: 1)                    [ OK ]
    - net.ipv4.conf.all.send_redirects (exp: 0)               [ DIFFERENT ]
    - net.ipv4.conf.default.accept_redirects (exp: 0)         [ DIFFERENT ]
    - net.ipv4.conf.default.accept_source_route (exp: 0)      [ OK ]
    - net.ipv4.conf.default.log_martians (exp: 1)             [ DIFFERENT ]
    - net.ipv4.icmp_echo_ignore_broadcasts (exp: 1)           [ OK ]
    - net.ipv4.icmp_ignore_bogus_error_responses (exp: 1)     [ OK ]
    - net.ipv4.tcp_syncookies (exp: 1)                        [ OK ]
    - net.ipv4.tcp_timestamps (exp: 0 1)                      [ OK ]
    - net.ipv6.conf.all.accept_redirects (exp: 0)             [ DIFFERENT ]
    - net.ipv6.conf.all.accept_source_route (exp: 0)          [ OK ]
    - net.ipv6.conf.default.accept_redirects (exp: 0)         [ DIFFERENT ]
    - net.ipv6.conf.default.accept_source_route (exp: 0)      [ OK ]

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

[+] SSH Support
------------------------------------
  - Checking running SSH daemon                               [ FOUND ]
    - Searching SSH configuration                             [ FOUND ]
    - OpenSSH option: AllowTcpForwarding                      [ SUGGESTION ]
    - OpenSSH option: ClientAliveCountMax                     [ SUGGESTION ]
    - OpenSSH option: ClientAliveInterval                     [ OK ]
    - OpenSSH option: Compression                             [ SUGGESTION ]
    - OpenSSH option: FingerprintHash                         [ OK ]
    - OpenSSH option: GatewayPorts                            [ OK ]
    - OpenSSH option: IgnoreRhosts                            [ OK ]
    - OpenSSH option: LoginGraceTime                          [ OK ]
    - OpenSSH option: LogLevel                                [ SUGGESTION ]
    - OpenSSH option: MaxAuthTries                            [ SUGGESTION ]
    - OpenSSH option: MaxSessions                             [ SUGGESTION ]
    - OpenSSH option: PermitRootLogin                         [ SUGGESTION ]
    - OpenSSH option: PermitUserEnvironment                   [ OK ]
    - OpenSSH option: PermitTunnel                            [ OK ]
    - OpenSSH option: Port                                    [ SUGGESTION ]
    - OpenSSH option: PrintLastLog                            [ OK ]
    - OpenSSH option: StrictModes                             [ OK ]
    - OpenSSH option: TCPKeepAlive                            [ SUGGESTION ]
    - OpenSSH option: UseDNS                                  [ SUGGESTION ]
    - OpenSSH option: X11Forwarding                           [ SUGGESTION ]
    - OpenSSH option: AllowAgentForwarding                    [ SUGGESTION ]
    - OpenSSH option: UsePrivilegeSeparation                  [ OK ]
    - OpenSSH option: AllowUsers                              [ NOT FOUND ]
    - OpenSSH option: AllowGroups                             [ NOT FOUND ]

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

[+] Virtualization
------------------------------------

[+] Containers
------------------------------------

Lynis проверяет привилегии некоторых файлов, так как это важно с точки зрения безопасности.

[+] File Permissions
------------------------------------
  - Starting file permissions check
    File: /boot/grub2/grub.cfg                                [ SUGGESTION ]
    File: /etc/cron.deny                                      [ OK ]
    File: /etc/crontab                                        [ SUGGESTION ]
    File: /etc/group                                          [ OK ]
    File: /etc/group-                                         [ OK ]
    File: /etc/hosts.allow                                    [ OK ]
    File: /etc/hosts.deny                                     [ OK ]
    File: /etc/issue                                          [ OK ]
    File: /etc/issue.net                                      [ OK ]
    File: /etc/motd                                           [ OK ]
    File: /etc/passwd                                         [ OK ]
    File: /etc/passwd-                                        [ OK ]
    File: /etc/ssh/sshd_config                                [ OK ]
    Directory: /root/.ssh                                     [ SUGGESTION ]
    Directory: /etc/cron.d                                    [ SUGGESTION ]
    Directory: /etc/cron.daily                                [ SUGGESTION ]
    Directory: /etc/cron.hourly                               [ SUGGESTION ]
    Directory: /etc/cron.weekly                               [ SUGGESTION ]
    Directory: /etc/cron.monthly                              [ SUGGESTION ]

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

Suggestions (47):
  ----------------------------
  * If not required, consider explicit disabling of core dump in /etc/security/limits.conf file [KRNL-5820]
      https://cisofy.com/lynis/controls/KRNL-5820/

  * Check PAM configuration, add rounds if applicable and expire passwords to encrypt with new values [AUTH-9229]
      https://cisofy.com/lynis/controls/AUTH-9229/

Lynis даёт возможность найти дополнительную информацию о каждом предложении по исправлению с помощью команды show details, за которой следует номер теста TEST-ID:

./lynis show details TEST-ID

Например, чтобы узнать дополнительную информацию для теста SSH-7408 я ввожу $ ./lynis show details SSH-7408 и получаю:

$ ./lynis show details SSH-7408
2020-04-30 05:52:23 Performing test ID SSH-7408 (Check SSH specific defined options)
2020-04-30 05:52:23 Test: Checking specific defined options in /tmp/lynis.k8JwazmKc6
2020-04-30 05:52:23 Result: added additional options for OpenSSH < 7.5
2020-04-30 05:52:23 Test: Checking AllowTcpForwarding in /tmp/lynis.k8JwazmKc6
2020-04-30 05:52:23 Result: Option AllowTcpForwarding found
2020-04-30 05:52:23 Result: Option AllowTcpForwarding value is YES
2020-04-30 05:52:23 Result: OpenSSH option AllowTcpForwarding is in a weak configuration state and should be fixed
2020-04-30 05:52:23 Suggestion: Consider hardening SSH configuration [test:SSH-7408] [details:AllowTcpForwarding (set YES to NO)] [solution:-]

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

Очень злой админ
Очень злой админ Автор статьи

Админ сайта. Публикует интересные статьи с других ресурсов, либо их переводы. Если есть настроение, бывает, что пишет и что-то своё.