如何在 Ubuntu 16.04 上使用 Lynis 执行安全审计

介绍

[Lynis]是一个基于主机的开源安全审核应用程序,可以评估Linux和其他类似UNIX的操作系统的安全配置和姿势。

在本教程中,您将安装Lynis并使用它来执行Ubuntu 16.04服务器的安全审核,然后您将探索样本审核的结果,并配置Lynis来跳过与您的需求无关的测试。

Lynis不会自动执行任何系统硬化,但它会为您提供建议,向您展示如何自行硬化系统。因此,如果您对Linux系统安全有基本知识,这将有助于您熟悉您计划审核的机器上运行的服务,如Web服务器,数据库和其他服务,Lynis可能会默认扫描。

<$>[注意] 注意:执行安全审核需要时间和耐心。在安装Lynis之前,您可能需要花时间阅读整个文章一次,并使用它来审核您的服务器。

前提条件

要完成这篇文章,你需要:

  • 一个 Ubuntu 16.04 服务器,配置了具有 sudo 特权和防火墙的非根用户,如在 [Ubuntu 16.04 初始服务器设置] 教程中所示。

步骤 1 – 在您的服务器上安装 Lynis

有几种方法可以安装Lynis。您可以从源编译,下载并将二进制复制到系统上的适当位置,或者您可以使用包管理器安装它。

然而,在Ubuntu 16.04 上,从存储库中可用的版本不是最新的版本,为了获得最新的功能,我们将从该项目的官方存储库中安装Lynis。

Lynis 的软件存储库使用 HTTPS 协议,因此我们需要确保安装了包管理器的 HTTPS 支持。

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

如果安装,该命令的输出应该是:

1[secondary_label Output]
2Status: install ok installed

如果输出表示它没有安装,请使用sudo apt-get install apt-transport-https来安装。

现在安装了 Lone 依赖,我们将安装 Lynis. 要开始这个过程,请添加存储库的密钥:

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

您将看到以下输出,表示已成功添加密钥:

1[secondary_label Output]
2Executing: /tmp/tmp.AnVzwb6Mq8/gpg.1.sh --keyserver
3keyserver.ubuntu.com
4--recv-keys
5C80E383C3DE9F082E01391A0366C67DE91CA5D5F
6gpg: requesting key 91CA5D5F from hkp server keyserver.ubuntu.com
7gpg: key 91CA5D5F: public key "CISOfy Software (signed software packages) <[email protected]>" imported
8gpg: Total number processed: 1
9gpg:               imported: 1  (RSA: 1)

然后将 Lynis 存储库添加到包管理器可用的列表中:

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

要向系统提供新添加的存储库中的软件包,请更新软件包数据库:

1sudo apt-get update

最后,安装 Lynis:

1sudo apt-get install lynis

安装完成后,您应该可以访问lynis命令及其子命令. 让我们看看下一步如何使用 Lynis。

步骤二:进行审计

安装完成后,您现在可以使用 Lynis 对您的系统进行安全审核,让我们先查看您可以使用 Lynis 执行的操作列表。

1lynis show commands

您将看到以下输出:

1[secondary_label Output]
2
3Commands:
4lynis audit
5lynis configure
6lynis show
7lynis update
8lynis upload-only

Lynis 审计可以使用配置文件进行,这些配置文件具有控制 Lynis 如何执行审计的设置。

1lynis show settings

你会看到输出如下:

 1[secondary_label Output]
 2# Colored screen output
 3colors=1
 4
 5# Compressed uploads
 6compressed-uploads=0
 7
 8# Use non-zero exit code if one or more warnings were found
 9error-on-warnings=0
10
11...
12
13# Upload server (ip or hostname)
14upload-server=[not configured]
15
16# Data upload after scanning
17upload=no
18
19# Verbose output
20verbose=0
21
22# Add --brief to hide descriptions, --configured-only to show configured items only, or --nocolors to remove colors

在进行审计之前,最好先检查是否有新版本,以便获得最新的建议和信息。

1lynis update info

输出应该与以下类似,这表明 Lynis 版本是最新的:

1[secondary_label Output]
2 == Lynis ==
3
4  Version            : 2.4.8
5  Status             : Up-to-date
6  Release date       : 2017-03-29
7  Update location    : https://cisofy.com/lynis/
8
92007-2017, CISOfy - https://cisofy.com/lynis/

或者,您可以输入lynis update check,生成以下一行输出:

1[secondary_label Output]
2status=up-to-date

如果版本需要更新,请使用您的包管理器执行更新。

要对你的系统进行审计,请使用lynis 审计系统命令。你可以在特权模式和非特权模式(pentest)中运行 Lynis。在后一种模式下,一些需要根特权的测试被省略。

1sudo lynis audit system

验证后,Lynis 会运行测试并将结果流到您的屏幕上。

当Lynis进行审计时,它会经过一系列测试,分为类别。每次审计后,测试结果、调试信息和系统硬化建议都被写入标准输出(屏幕)。更详细的信息被登录到/var/log/lynis.log,而报告数据被保存到/var/log/lynis-report.dat。报告数据包含服务器和应用程序本身的一般信息,因此您需要注意的文件是日志文件。

一旦审计完成,您将审查结果、警告和建议,然后执行任何相关建议。

让我们看看用于编写本教程的机器上执行的Lynis审计的结果,您在审计中看到的结果可能不同,但您仍然应该能够跟进。

Lynis审计结果的第一个重要部分纯粹是信息性的,它告诉您每个测试的结果,按类别分组。信息以关键字的形式,如 NONE, WEAK, DONE, FOUND, NOT_FOUND, OKWARNING

 1[secondary_label Output]
 2[+] Boot and services
 3------------------------------------
 4 - Service Manager                                           [ systemd ]
 5 - Checking UEFI boot                                        [ DISABLED ]
 6 - Checking presence GRUB                                    [ OK ]
 7 - Checking presence GRUB2                                   [ FOUND ]
 8   - Checking for password protection                        [ WARNING ]
 9
10..
11
12[+] File systems
13------------------------------------
14 - Checking mount points
15    - Checking /home mount point                              [ SUGGESTION ]
16    - Checking /tmp mount point                               [ SUGGESTION ]
17    - Checking /var mount point                               [ OK ]
18 - Query swap partitions (fstab)                             [ NONE ]
19 - Testing swap partitions                                   [ OK ]
20 - Testing /proc mount (hidepid)                             [ SUGGESTION ]
21 - Checking for old files in /tmp                            [ OK ]
22 - Checking /tmp sticky bit                                  [ OK ]
23 - ACL support root file system                              [ ENABLED ]
24 - Mount options of /                                        [ OK ]
25 - Checking Locate database                                  [ FOUND ]
26 - Disable kernel support of some filesystems
27    - Discovered kernel modules: udf
28
29...
30
31[+] Hardening
32------------------------------------
33 - Installed compiler(s)                                   [ FOUND ]
34 - Installed malware scanner                               [ NOT FOUND ]
35 - Installed malware scanner                               [ NOT FOUND ]
36
37...
38
39[+] Printers and Spools
40------------------------------------
41 - Checking cups daemon                                      [ NOT FOUND ]
42 - Checking lp daemon                                        [ NOT RUNNING ]

虽然Lynis执行了200多项测试,但并非所有这些都对您的服务器是必要的。你如何知道哪些测试是必要的,哪些测试不是必要的?这就是服务器上应该运行或不应该运行什么的知识。

1[secondary_label Output]
2[+] Printers and Spools
3------------------------------------
4 - Checking cups daemon                                      [ NOT FOUND ]
5 - Checking lp daemon                                        [ NOT RUNNING ]

您是否实际上在 Ubuntu 16.04 服务器上运行打印服务器?除非您运行基于云的打印服务器,否则您不需要 Lynis 每次运行该测试。

虽然这是一个可以跳过的测试的完美例子,但其他并不那么明显。

1[secondary_label Output]
2[+] Insecure services
3------------------------------------
4  - Checking inetd status                                     [ NOT ACTIVE ]

这个输出表示inetd不活跃,但在Ubuntu 16.04服务器上预计,因为Ubuntu用systemd取代了inetd

当你审查每个测试结果时,你会找到一个相当好的不必要的测试列表. 有了这个列表,你可以随后定制Lynis,以便在未来的审计中忽略它们。

在接下来的部分中,我们将探讨Lynis审计输出的不同部分,以便您更好地了解如何使用Lynis正确审计您的系统。

步骤 3 – 修复 Lynis 审计警告

Lynis 审计输出并不总是包含警告部分,但当它发生时,您将知道如何修复阅读本节后提到的问题。

警告在结果部分之后列出,每个警告都以警告文本为起点,测试在同一行中生成警告。下一行将包含一个建议的解决方案,如果存在的话。最后一行是安全控制 URL,在那里你可能会找到警告的一些指南。不幸的是,URL并不总是提供解释,所以你可能需要做一些进一步的研究。

下列输出来自本文所使用的服务器上执行的Lynis审计的警告部分,让我们通过每个警告,看看如何解决或修复它:

 1[secondary_label Output]
 2Warnings (3):
 3  ----------------------------
 4! Version of Lynis is very old and should be updated [LYNIS]
 5    https://cisofy.com/controls/LYNIS/
 6
 7! Reboot of system is most likely needed [KRNL-5830]
 8    - Solution : reboot
 9      https://cisofy.com/controls/KRNL-5830/
10
11! Found one or more vulnerable packages. [PKGS-7392]
12      https://cisofy.com/controls/PKGS-7392/

第一個警告說Lynis需要更新,這也意味著這次審查使用了Lynis版本,所以結果可能不完整,如果我們在執行結果之前進行基本版本檢查,可以避免這種情況,正如第3步所示:更新Lynis。

第二个警告表明服务器需要重新启动,这可能是因为最近进行了涉及内核升级的系统更新,这里的解决方案是重新启动系统。

当您对任何警告或任何测试结果存在怀疑时,您可以通过查询 Lynis 来获取有关测试的更多信息。

1sudo lynis show details test-id

因此,对于第二个警告,它具有测试ID KRNL-5830,我们可以运行这个命令:

1sudo lynis show details KRNL-5830

对于该特定测试的输出如下:这为您提供了Lynis在执行每个测试时所经历的过程的见解,从这个输出中,Lynis甚至提供了引起警告的特定信息:

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

对于第三个警告 PKGS-7392,这是关于易受攻击的包,我们会运行这个命令:

1sudo lynis show details PKGS-7392

输出给了我们有关需要更新的包的更多信息:

 1[secondary_label Output]
 22017-03-21 01:39:53 Performing test ID PKGS-7392 (Check for Debian/Ubuntu security updates)
 32017-03-21 01:39:53 Action: updating repository with apt-get
 42017-03-21 01:40:03 Result: apt-get finished
 52017-03-21 01:40:03 Test: Checking if /usr/lib/update-notifier/apt-check exists
 62017-03-21 01:40:03 Result: found /usr/lib/update-notifier/apt-check
 72017-03-21 01:40:03 Test: checking if any of the updates contain security updates
 82017-03-21 01:40:04 Result: found 7 security updates via apt-check
 92017-03-21 01:40:04 Hardening: assigned partial number of hardening points (0 of 25). Currently having 96 points (out of 149)
102017-03-21 01:40:05 Result: found vulnerable package(s) via apt-get (-security channel)
112017-03-21 01:40:05 Found vulnerable package: libc-bin
122017-03-21 01:40:05 Found vulnerable package: libc-dev-bin
132017-03-21 01:40:05 Found vulnerable package: libc6
142017-03-21 01:40:05 Found vulnerable package: libc6-dev
152017-03-21 01:40:05 Found vulnerable package: libfreetype6
162017-03-21 01:40:05 Found vulnerable package: locales
172017-03-21 01:40:05 Found vulnerable package: multiarch-support
182017-03-21 01:40:05 Warning: Found one or more vulnerable packages. [test:PKGS-7392] [details:-] [solution:-]
192017-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:-]
202017-03-21 01:40:05 ===---------------------------------------------------------------===

解决方案是更新包数据库并更新系统。

在修复导致警告的项目后,您应再次运行审计。 后续审计工作应免受相同警告的影响,尽管可能会出现新的警告。

现在你已经知道如何阅读和修复 Lynis 生成的警告,让我们看看如何实施 Lynis 提供的建议。

第4步:实施Lynis审计建议

在警告部分之后,您将看到一系列建议,如果实施,可以使您的服务器更不容易受到攻击和恶意软件的影响。 在此步骤中,您将学习如何在测试Ubuntu 16.04服务器审核后实施Lynis生成的建议。

一个特定的建议从建议本身开始,然后是测试ID。然后,根据测试,下一行会告诉您对受影响服务的配置文件进行具体的更改。

例如,以下是 Lynis 审计的部分建议部分,显示与 SSH 服务相关的建议:

 1[secondary_label Output]
 2Suggestions (36):
 3  ----------------------------
 4  * Consider hardening SSH configuration [SSH-7408]
 5    - Details  : ClientAliveCountMax (3 --> 2)
 6      https://cisofy.com/controls/SSH-7408/
 7
 8  * Consider hardening SSH configuration [SSH-7408]
 9    - Details  : PermitRootLogin (YES --> NO)
10      https://cisofy.com/controls/SSH-7408/  
11
12  * Consider hardening SSH configuration [SSH-7408]
13    - Details  : Port (22 --> )
14      https://cisofy.com/controls/SSH-7408/
15
16  * Consider hardening SSH configuration [SSH-7408]
17    - Details  : TCPKeepAlive (YES --> NO)
18      https://cisofy.com/controls/SSH-7408/
19
20  * Consider hardening SSH configuration [SSH-7408]
21    - Details  : UsePrivilegeSeparation (YES --> SANDBOX)
22      https://cisofy.com/controls/SSH-7408/
23...

根据您的环境,所有这些建议都是安全的实施,但要做出这一决定,您必须知道每个指令的含义。 因为这些指令属于 SSH 服务器,所有更改都必须在 SSH daemons 配置文件中进行,/etc/ssh/sshd_config. 如果您对 Lynis 提供的 SSH 建议有任何疑问,请用 man sshd_config 查看指令。

其中一项建议要求将默认 SSH 端口从22更改,如果您进行这种更改,并且您已配置了防火墙,请确保通过该新端口插入 SSH 访问的规则。

与警告部分一样,您可以通过使用sudo lynis 显示细节测试 ID查询 Lynis 来获取有关建议的更多详细信息。

其他建议要求您在您的服务器上安装额外的软件,例如:

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

建议是安装rkhunter,chkrootkit或OSEC以满足硬化测试(HRDN-7230)。OSEC是一个基于主机的入侵检测系统,可以生成并发送警报。它是一个非常好的安全应用程序,将有助于Lynis进行的一些测试。您可以了解更多关于这个工具(在这些DigitalOcean教程中)(https://andsky.com/tech/tutorials?q=ossec)。然而,单独安装OSEC不会导致这种特定的测试通过。安装chkrootkit最终会通过它。

让我们来看看另一个例子:这是一个文件完整性测试结果显示的建议。

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

安全控制 URL 中的建议没有提到前面的建议中提到的 OSSEC 程序,但安装它足以通过后续审核的测试,这是因为 OSSEC 是一个相当好的文件完整性监控工具。

您可以忽略一些不适用于您的建议,这里有一个例子:

1[secondary_label Output]
2* To decrease the impact of a full /home file system, place /home on a separated partition [FILE-6310]
3      https://cisofy.com/controls/FILE-6310/
4
5  * To decrease the impact of a full /tmp file system, place /tmp on a separated partition [FILE-6310]
6      https://cisofy.com/controls/FILE-6310/

历史上,像/home,/tmp,/var/usr这样的核心Linux文件系统被安装在一个单独的分区上,以最大限度地减少对整个服务器的影响,当它们耗尽了磁盘空间时,这不是你经常看到的,尤其是在云服务器上。这些文件系统现在只是在相同的根分区上安装作为目录。但是,如果你在这样的系统上执行Lynis审核,你会得到一些建议,就像在上一个输出中显示的那样。

使用 Lynis 进行安全审核不仅仅是修复警告和实施建议,还包括识别不必要的测试。

步骤 5 – 定制 Lynis 安全审核

在本节中,您将学习如何定制Lynis,以便它只运行为您的服务器所需的测试。 管理审核的方式的配置文件,在/etc/lynis目录中的.prf扩展文件中定义。 默认配置文件适当名为default.prf。 您不会直接编辑该默认配置文件. 相反,您将所需的任何更改添加到同一个目录中的custom.prf文件中。

使用您的文本编辑器创建一个名为 /etc/lynis/custom.prf的新文件:

1sudo nano /etc/lynis/custom.prf

让我们用这个文件告诉Lynis跳过一些测试. 以下是我们想要跳过的测试:

  • FILE-6310: 用于检查分区分离.
  • HTTP-6622: 用于测试 Nginx Web 服务器安装.
  • HTTP-6310: 用于检查 Apache Web 服务器安装. 此测试和上面的 Nginx 测试是默认执行的. 所以如果你有 Nginx 安装而不是 Apache,你会想跳过 Apache 测试.
    • PRNT-2307** 和 PRNT-2308: 用于检查打印服务器。
  • TOOL-5002**: 用于检查像 Puppet 和 Salt 这样的自动化工具。 如果你不需要在你的服务器上使用此类工具,那么可以跳过这个测试。

要忽略测试,您通过 skip-test指令,您希望忽略的测试ID,每行一个。

 1[label /etc/lynis/custom.prf]
 2# Lines starting with "#" are comments
 3# Skip a test (one per line)
 4
 5# This will ignore separation of partitions test
 6skip-test=FILE-6310
 7
 8# Is Nginx installed?
 9skip-test=HTTP-6622
10
11# Is Apache installed?
12skip-test=HTTP-6702
13
14# Skip checking print-related services
15skip-test=PRNT-2307
16skip-test=PRNT-2308
17
18# If a test id includes more than one test use this form to ignore a particular test
19skip-test=SSH-7408:tcpkeepalive

保存并关闭文件。

下次您进行审计时,Lynis 将跳过与您在自定义配置文件中配置的测试 ID 相匹配的测试。

该文件也允许您修改任何配置文件的设置。 要做到这一点,请将设置从 /etc/lynis/default.prf 复制到 /etc/lynis/custom.prf 并在那里修改。 你很少需要修改这些设置,所以专注于寻找可以跳过的测试。

接下来,让我们看看Lynis称之为 _hardening 索引。

步骤6 – 解释硬化指数

在每个 Lynis 审计输出的底部,就在建议部分下面,你会发现一个看起来如下的一部分:

1[secondary_label Output]
2Lynis security scan details:
3
4  Hardening index : 64 [############        ]
5  Tests performed : 206
6  Plugins enabled : 0

这个输出告诉你有多少测试进行了,加上一个 hardening index,一个数字Lynis提供给你的服务器是多么安全的感觉。这个数字是Lynis独一无二的。硬化指数将与你修复的警告和你实施的建议有关。

修复了警告并实施了大多数建议后,新的审计结果如下:你可以看到硬化指数略高:

1[secondary_label Output]
2Lynis security scan details:
3
4 Hardening index : 86 [#################   ]
5 Tests performed : 205
6 Plugins enabled : 0

硬化指数不是对服务器安全性的准确评估,而只是基于Lynis进行的测试来衡量服务器安全配置(或硬化)有多好。

结论

在本教程中,您安装了Lynis,使用它来执行Ubuntu 16.04服务器的安全审核,探索如何修复它生成的警告和建议,以及如何定制Lynis执行的测试。

它需要一点额外的时间和精力,但它值得投资,以使您的机器更安全,Lynis使这个过程更容易。

有关 Lynis 的更多信息,请参阅官方文档中的 Get Started with Lynis,Lynis 是一个开源项目,所以如果您有兴趣做出贡献,请访问该项目的 GitHub 页面

Published At
Categories with 技术
comments powered by Disqus