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

介绍

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

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

Lynis不会自动执行任何系统强化命令。但它会提供帮助,指导您如何自己加强系统。因此,您需要具备Linux系统安全性的基础知识,还应该熟悉计算机上计划运行审计的服务,例如Web服务器,数据库以及Lynis默认扫描的其他服务。

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

准备

第一步,服务器上安装Lynis

有几种方法可以安装Lynis。您可以从源代码编译它,将二进制文件下载并复制到系统上的正确位置,也可以使用软件包管理器进行安装。使用包管理器是安装Lynis并保持更新的简易方法,因此这是我们将使用的方法。

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

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

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

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

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命令及其子命令。我们来看看如何使用Lynis。

第二步,执行审计

安装完成后,您现在可以使用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 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命令。您可以在特权和非特权(pentest)模式下运行Lynis。在后一种模式中,会跳过一些需要root权限的测试。因此,您应该使用特权模式运行审核sudo。执行此命令以执行第一次审计:

$   sudo lynis audit system

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

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

审核完成后,您将查看结果,注意事项和建议,然后实施任何相关建议。

让我们看看在用于编写本教程的机器上执行的Lynis审计的结果。您在审核中看到的结果可能会有所不同,但您仍应该能够遵循Lynis审计输出的第一个重要部分纯粹是信息性的。它会告诉您每个测试的结果,按类别分组。信息采用关键字的形式,如NONEWEAKDONEFOUNDNOT_FOUNDOKWARNING

[+] 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 ]

除非您运行基于云的打印服务器,否则不需要每次都让Lynis运行该测试。

虽然这是一个你可以跳过的测试的典型例子,但其他的就并不那么明显。以此例子的结果部分为例,例如:

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

这个输出说inetd没有活动,但是在Ubuntu 16.04服务器上是预料之中的,因为Ubuntu用systemd替换了inetd。知道这一点,您就可以将该测试标记为Lynis不需要在您的服务器上进行审计的一部分。

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

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

第三步,修复Lynis审核警告

当Lynis审计输出带有警告部分时,您需要知道如何解决引发的问题。

警告列在结果部分之后。每个警告都以警告文本开头。下一行将包含建议的解决方案(如果存在)。最后一行是安全控制URL,您可以在其中找到有关警告的一些指导。

以下输出来自在本文使用的服务器上执行的Lynis审核的警告部分。让我们逐步完成每个警告并查看如何解决或修复它:

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版本,因此结果可能不完整。如果我们在运行结果之前执行了基本版本检查,就可以避免这种情况,这个修复很简单:更新Lynis。

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

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

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

对于第三个警告,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 ===---------------------------------------------------------------===

解决方案是更新PKGS-7392资源包数据库并更新系统。

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

既然您已经知道如何阅读和修复Lynis生成的警告,那么让我们看看如何实现Lynis提供的建议。

第四步,实施Lynis审计建议

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

具体建议从建议本身开始,然后是测试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提供的有关SSH的任何建议有任何疑问,请查看指令man sshd_config

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

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

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

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

建议安装 rkhunter,chkrootkit或OSSEC以满足强化测试(HRDN-7230)。OSSEC是一个基于主机的入侵检测系统,可以生成和发送警报。这是一个非常好的安全应用程序,可以帮助Lynis执行一些测试。但是,单独安装OSSEC不会导致此特定测试通过。chkrootkit最后安装让它通过。这是另一种情况,你有时需要进行Lynis建议之外的研究。

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

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

安全控制URL中给出的建议未提及上一个建议中提到的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,以便在将来的审核中不会执行导致它们生成的测试。

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

第五步,自定义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所谓的强化指数。

第六步,解释强化指数

在每个Lynis审计输出的下半部分,在建议部分的下方,您将找到如下所示的部分:

Lynis security scan details:

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

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

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

Lynis security scan details:

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

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

结论

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

有关Lynis的更多信息,请参阅官方文档中的Lynis入门。Lynis是一个开源项目,所以如果您对贡献感兴趣,请访问该项目的GitHub页面


参考文献:《How to Perform Security Audits With Lynis on Ubuntu 16.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Felix的技术分享

《一个操作系统的实现》笔记(2)--保护模式

41080
来自专栏coding

django2实战2.创建博客应用创建应用文章表的字段设计激活应用开启后台将post模型注册到后台自定义文章显示字段增加可选操作

上篇创建了一个项目,项目相当于站点,应用即是独立的功能模块。比如:淘宝是一个完整的网站,即是一个项目。而淘宝下的聚划算属于一个应用

18230
来自专栏互联网杂技

SpringBoot ( 十二 ) :SpringBoot 如何测试打包部署

有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发、调试...

10620
来自专栏张善友的专栏

实现WebSocket和WAMP协议的开源库WampSharp

Websocket Application Messaging Protocol 协议:https://github.com/wamp-proto/wamp-p...

23970

如何在Ubuntu 16.04上安装和配置Redmine

Redmine是一个用于项目管理的Web应用程序,它允许用户灵活地管理项目,同时提供强大的追踪工具和众多的插件库。这个免费的开源解决方案是付费项目管理工具的替代...

16320
来自专栏张善友的专栏

实现WebSocket和WAMP协议的开源库WampSharp

22550
来自专栏AILearning

Apache Zeppelin 中 JDBC通用 解释器

概述 JDBC解释器允许您无缝地创建到任何数据源的JDBC连接。 在运行每个语句后,将立即应用插入,更新和升级。 到目前为止,已经通过以下测试: ...

37570
来自专栏Android机动车

Android BLE 快速上手指南

本文旨在提供一个方便没接触过Android上低功耗蓝牙(Bluetooth Low Energy)的同学快速上手使用的简易教程,因此对其中的一些细节不做过分深入...

20920
来自专栏沃趣科技

ASM 翻译系列第三十六弹:ACFS磁盘组的重平衡操作

原作者:Bane Radulovic 译者: 魏兴华 审核: 魏兴华 DBGeeK社区联合出品 原文链接:http://asmsupportguy....

383110
来自专栏别先生

一脸懵逼学习Nginx及其安装,Tomcat的安装

1:Nginx的相关概念知识:   1.1:反向代理:     反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然...

275100

扫码关注云+社区

领取腾讯云代金券