如何在Ubuntu16.04上使用Lynis执行安全审计

来自菜鸟教程
跳转至:导航、​搜索

介绍

Lynis 是一个基于主机的开源安全审计应用程序,可以评估 Linux 和其他类 UNIX 操作系统的安全配置文件和状态。

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

Lynis 不会自动执行任何系统强化。 但它会提供建议,向您展示如何自己加强系统。 因此,如果您对 Linux 系统安全有基本的了解,将会很有帮助。 您还应该熟悉在您计划审核的计算机上运行的服务,例如 Web 服务器、数据库和 Lynis 可能默认扫描的其他服务。 这将帮助您确定可以安全忽略的结果。

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


先决条件

要完成本文,您需要:

第 1 步 — 在您的服务器上安装 Lynis

有几种方法可以安装 Lynis。 您可以从源代码编译它,下载二进制文件并将其复制到系统上的适当位置,或者您可以使用包管理器安装它。 使用包管理器是安装 Lynis 并保持更新的最简单方法,这就是我们将使用的方法。

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

Lynis 的软件存储库使用 HTTPS 协议,因此我们需要确保安装了对包管理器的 HTTPS 支持。 使用以下命令进行检查:

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

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

OutputStatus: install ok installed

如果输出显示未安装,请使用 sudo apt-get install apt-transport-https 安装

现在安装了唯一的依赖项,我们将安装 Lynis。 要开始该过程,请添加存储库的密钥:

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

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

OutputExecuting: /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 命令及其子命令。 接下来让我们看看如何使用Lynis。

第 2 步 – 执行审核

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

lynis show commands

您将看到以下输出:

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

使用配置文件可以进行 Lynis 审计,这些配置文件类似于具有控制 Lynis 如何进行审计的设置的配置文件。 查看默认配置文件的设置:

lynis show settings

您将看到如下输出:

Output# 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 update info

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

Output == 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,它会生成以下单行输出:

Outputstatus=up-to-date

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

要运行系统审计,请使用 lynis audit system 命令。 您可以在特权和非特权 (pentest) 模式下运行 Lynis。 在后一种模式下,会跳过一些需要 root 权限的测试。 因此,您应该使用 sudo 在特权模式下运行审计。 执行此命令以执行您的第一次审核:

sudo lynis audit system

身份验证后,Lynis 将运行其测试并将结果流式传输到您的屏幕。 Lynis 审核通常需要一分钟或更短的时间。

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

审核完成后,您将查看结果、警告和建议,然后实施任何相关建议。

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

Lynis 审计输出的第一个重要部分纯粹是信息性的。 它会告诉您每个测试的结果,并按类别分组。 信息采用关键字的形式,如 NONEWEAKDONEFOUNDNOT_FOUND、[ X130X]OK 和 WARNING

Output[+] 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 类别下找到两个测试:

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

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

虽然这是您可以跳过的测试的完美示例,但其他测试并不那么明显。 以这个部分结果部分为例:

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

此输出表明 inetd 未激活,但在 Ubuntu 16.04 服务器上这是预期的,因为 Ubuntu 将 inetd 替换为 systemd。 知道这一点后,您可以将该测试标记为 Lynis 不应该在您的服务器上进行审计的测试。

当您查看每个测试结果时,您会得出一个很好的多余测试列表。 有了该列表,您就可以自定义 Lynis 以在未来的审计中忽略它们。 您将在第 5 步中学习如何完成这项工作。

在接下来的部分中,我们将介绍 Lynis 审计输出的不同部分,以便您更好地了解如何使用 Lynis 正确审计您的系统。 我们先来看看如何处理 Lynis 发出的警告。

第 3 步 - 修复 Lynis 审计警告

Lynis 审计输出并不总是带有警告部分,但是当它出现时,您将在阅读本部分后知道如何解决提出的问题。

警告列在结果部分之后。 每个警告都以警告文本本身开头,在括号中的同一行上生成警告的测试。 下一行将包含建议的解决方案(如果存在)。 最后一行是一个安全控制 URL,您可以在其中找到有关警告的一些指导。 不幸的是,该 URL 并不总是提供解释,因此您可能需要做一些进一步的研究。

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

OutputWarnings (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。

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

当对任何警告或任何测试结果有疑问时,您可以通过向 Lynis 查询测试 ID 来获取有关测试的更多信息。 完成此操作的命令采用以下形式:

sudo lynis show details test-id

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

sudo lynis show details KRNL-5830

该特定测试的输出如下。 这让您了解 Lynis 为其执行的每个测试所经历的过程。 从这个输出中,Lynis 甚至给出了引起警告的项目的具体信息:

Output2017-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 ===---------------------------------------------------------------===

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

sudo lynis show details PKGS-7392

输出为我们提供了有关需要更新的软件包的更多信息:

Output2017-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 ===---------------------------------------------------------------===

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

修复导致警告的项目后,您应该再次运行审核。 尽管可能会出现新的警告,但后续审计应该没有相同的警告。 在这种情况下,请重复此步骤中显示的过程并修复警告。

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

第 4 步 — 实施 Lynis 审计建议

在警告部分之后,您会看到一系列建议,如果实施,可以使您的服务器不易受到攻击和恶意软件的攻击。 在此步骤中,您将学习如何在对测试 Ubuntu 16.04 服务器进行审计后实施 Lynis 生成的一些建议。 执行此操作的过程与上一节中的步骤相同。

特定建议以建议本身开头,然后是测试 ID。 然后,根据测试,下一行将准确告诉您在受影响服务的配置文件中要进行哪些更改。 最后一行是一个安全控制 URL,您可以在其中找到有关该主题的更多信息。

例如,这里是来自 Lynis 审计的部分建议部分,显示了与 SSH 服务有关的建议:

OutputSuggestions (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 给出的有关 SSH 的任何建议有任何疑问,请使用 man sshd_config 查找指令。 该信息也 可在线获得

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

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

其他建议要求您在服务器上安装其他软件。 以这个为例:

Output* 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/

建议安装 rkhunterchkrootkit 或 OSSEC 以满足强化测试 (HRDN-7230)。 OSSEC 是一个基于主机的入侵检测系统,可以生成和发送警报。 这是一个非常好的安全应用程序,可以帮助 Lynis 执行的一些测试。 您可以在这些 DigitalOcean 教程 中了解有关此工具 的更多信息。 但是,单独安装 OSSEC 不会导致此特定测试通过。 安装 chkrootkit 终于让它通过了。 这是另一种情况,有时您需要进行超出 Lynis 建议的额外研究。

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

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

安全控制 URL 中给出的建议并没有提到上一个建议中提到的 OSSEC 程序,但安装它就足以通过后续审计的测试。 那是因为 OSSEC 是一个非常好的文件完整性监控工具。

您可以忽略一些不适用于您的建议。 这是一个例子:

Output* 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/

从历史上看,/home/tmp/var/usr 等核心 Linux 文件系统安装在单独的分区上,以最大限度地减少对整个服务器的影响。他们用完了磁盘空间。 这不是您经常看到的东西,尤其是在云服务器上。 这些文件系统现在只是作为目录安装在同一个根分区上。 但是,如果您在这样的系统上执行 Lynis 审计,您会得到一些建议,如前面的输出中所示。 除非您能够实施这些建议,否则您可能希望忽略它们并配置 Lynis,以便不会在未来的审计中执行导致它们生成的测试。

使用 Lynis 执行安全审计不仅仅涉及修复警告和实施建议; 它还涉及识别多余的测试。 在下一步中,您将学习如何自定义默认配置文件以忽略此类测试。

第 5 步 – 自定义 Lynis 安全审计

在本节中,您将学习如何自定义 Lynis,以便它只运行您的服务器所需的那些测试。 控制审计运行方式的配置文件在 /etc/lynis 目录中扩展名为 .prf 的文件中定义。 默认配置文件被恰当地命名为 default.prf。 您不直接编辑该默认配置文件。 相反,您可以将所需的任何更改添加到与配置文件定义位于同一目录中的 custom.prf 文件中。

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

sudo nano /etc/lynis/custom.prf

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

  • FILE-6310:用于检查分区的分离。
  • HTTP-6622:用于测试 Nginx Web 服务器安装。
  • HTTP-6702:用于检查 Apache Web 服务器安装。 这个测试和上面的 Nginx 测试都是默认执行的。 所以如果你安装了 Nginx 而不是 Apache,你会想要跳过 Apache 测试。
  • PRNT-2307PRNT-2308:用于检查打印服务器。
  • TOOL-5002:用于检查 Puppet 和 Salt 等自动化工具。 如果您的服务器上不需要此类工具,则可以跳过此测试。
  • SSH-7408:tcpkeepalive:可以将多个 Lynis 测试分组在一个测试 ID 下。 如果您希望跳过该测试 id 中的测试,这就是指定它的方法。

要忽略一个测试,你可以通过 skip-test 指令传递你希望忽略的测试 ID,每行一个。 将以下代码添加到您的文件中:

/etc/lynis/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 将跳过与您在自定义配置文件中配置的测试 ID 匹配的测试。 审计输出的结果部分和建议部分将省略测试。

/etc/lynis/custom.prf 文件还允许您修改配置文件中的任何设置。 为此,将设置从 /etc/lynis/default.prf 复制到 /etc/lynis/custom.prf 并在那里修改。 您很少需要修改这些设置,因此请集中精力寻找可以跳过的测试。

接下来,我们来看看Lynis所说的硬化指数

第 6 步 – 解释硬化指数

在每个 Lynis 审计输出的下部,就在建议部分的下方,您会发现如下所示的部分:

OutputLynis security scan details:

  Hardening index : 64 [############        ]
  Tests performed : 206
  Plugins enabled : 0

此输出告诉您执行了多少测试,以及 强化指数 ,这是 Lynis 提供的一个数字,可让您了解服务器的安全性。 这个号码是 Lynis 独有的。 强化指数将根据您修复的警告和您实施的建议而改变。 此输出显示系统的硬化指数为 64,来自新的 Ubuntu 16.04 服务器上的第一次 Lynis 审计。

在修复警告并实施大部分建议后,新的审计给出了以下输出。 可以看到硬化指数略高:

OutputLynis security scan details:

 Hardening index : 86 [#################   ]
 Tests performed : 205
 Plugins enabled : 0

加固指数并不是对服务器安全程度的准确评估,而只是基于 Lynis 执行的测试对服务器安全配置(或加固)的衡量标准。 如您所见,指数越高越好。 Lynis 安全审计的目标不仅仅是获得高强化指数,而是修复它产生的警告和建议。

结论

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

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

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