Lynis

Lynis

1.工具简介

  Lynis是一款开源的安全性扫描工具,用于评估和提高Linux和Unix系统的安全性。它可以检查系统配置、软件包管理、用户权限、文件完整性等方面的安全问题,并提供建议和解决方案来加强系统的安全性。Lynis还可以扫描网络服务和应用程序,以发现潜在的漏洞和安全风险。

  其主要提供功能如:法规遵从测试、自动审计、漏洞检测、渗透测试以及提供改善建议等,通过Lynis的功能,可以进行许多法规遵循的自动化测试。官网上提到了可以用于PCI-DSS、HIPPA、ISO27001等。相比人工逐个进行检测,使用Lynis可以节省相当可观的时间

  参考链接:

1
2
3
https://blog.csdn.net/stone_fall/article/details/105932665
https://ithelp.ithome.com.tw/articles/10217009
https://www.lxlinux.net/4492.html

2.工具安装

  首先查找压缩包并进行相关的解压:

1
2
3
wget https://downloads.cisofy.com/lynis/lynis-3.0.0.tar.gz
tar xvf l ynis-3.0.0.tar.gz
cd lynis

3.安全扫描

  运行lynis显示帮助信息。具有管理员权限的用户可以运行该脚本,所有日志和输出将保存在/var/log/lynis.log文件中

1
./lynis

  与大多数linux的系统命令类似,lynis也提供了man手册进行查询和了解

1
./lynis –man

  

  通过man我们可以了解到,lynis提供了本地安全扫描,直接使用audit system参数进行扫描系统即可:

1
2
3
./lynis audit system
# 或者是
./lynis audit system --wait

  两条执行命令的区别在于—wait,使用该命令后,想要用户自行启动回车键进行一节一节的播放

  根据提示,通过按下enter键进行继续操作,或使用ctrl+c进行停止操作,除了对于系统的全面检测以外,也提供了针对于单个或指定多个的内容进行探测和安全扫描:

1
./lynis --tests-from-group "firewalls"
1
./lynis --tests-from-group "kernel firewalls"

4.安全日志

  使用lynis扫描过后,所有的扫描结果都将存放在/var/log/lynis.log之中

1
cat /var/log/lynis.log

  如图所示日志内容解读:给出Lynis版本为3.0.0,构建日期为2020年06月18日。的信息;之后检查了文件夹/home/lfs/lynis/include/profiles的权限,表明权限正常。然后读取了配置文件/home/lfs/lynis/default.prf并创建了临时文件/tmp/lynis.uLkMCw6rEc。最后根据配置文件,启用了以下插件:’authentication’、’compliance’、’configuration’、’control-panels’、’crypto’、’dns’和’docker’等内容

  通过grep的配合我们也能够通过日志查找出我们想要的日志内容比如

1
2
grep Warning /var/log/lynis.log
grep Suggestion /var/log/lynis.log

  利用grep指令,筛选出warning与suggestion的相关结果,前者指的是被lynis认为警告的项目,后者则提供建议,可以作为如何修正问题的参考。而除了对于筛选关键词外,我们也可以指定项目编号进行查看,首先查看有什么项目编号:

1
./lynis show tests
1
./lynis show details PHP-2376

5.插件扩展

  对于lynis而言,作为一款使用Shell脚本进行编写的安全工具,运行与Linux与基于UNIX的系统之中,因此除了使用lynis默认的规则进行Linux加固外,其也提供了提高适用性的插件功能。

  lynis的插件主要是具有收集数据的功能,基于这种功能,展开任何预定义或者测试都能够进行很好的兼容和实现,另外就是将数据仅存储在报告文件中,由第三方工具进行相关的分析,比如将lynis改装成linux提权信息的收集器又或者是恶意程序的检测工具内容。

  • 插件执行位置

  lynis 的每次执行都是一个完善的步骤周期

  首先介绍下lynis 的周期流程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1)初始化阶段,
lynis加载必要的配置文件与资源并准备进行后续的操作

2)操作系统检测
检验当前系统的系统类型与版本信息,以便于后续不同的操作系统执行相应的测试与分析

3)二进制文件检测
扫描系统中的二进制文件,从而定位哪些文件可能存在安全风险与配置问题

4)插件阶段1
在此阶段,lynis会加载并执行第一批插件,这些插件可以对系统进行更深入的分析和测试,以发现潜在的安全漏洞,完成插件一后

5)内置测试
lynis会执行一系列的包括文件权限、用户账户设置、网络配置等方面的内置内容测试,以确保系统的安全性

6)自定义测试
在这个阶段使用者能够根据现实的情况对出内置测试以外的内容进行自定义内容测试

7)插件阶段2
在此阶段,lynis会加载并执行第二批插件,这些插件通常与特定的应用程序或服务相关,以进一步评估系统的安全性

8)生成报告
经过前面的全部阶段,lynis会生成一个详细的报告,其中包含系统中发现的问题、建议的修复措施和改进建议。

  这就是lynis 的一般运行周期流程可以看到对于插件的执行位置而言,只有两个时刻是能够进行运行的,分别是Plugins phase 1与Plugins phase 2,以下分别称呼为阶段1与阶段2

  • SDK开发套件

  lynis软件的sdk开发套件是为了能够测试软件质量以及让使用者能够使用开始自定义测试和插件而开发其安装教程也比较简单

  首先克隆sdk项目:

1
git clone https://github.com/CISOfy/lynis-sdk

  在sdk中的文件内容并不多,lynis-devkit 用于对 Lynis 源执行各种测试的工具,Documentation/ 该目录将存放最重要的开发文档。include/ 和 unit-tests/ 与 lynis-devkit 是相关的组件

  进入SDK目录运行开发包内容:

1
2
cd lynis-sdk
./lynis-devkit

  这将检查Lynis 树是否存在并显示基本详细信息和帮助。使用此套件,我们可以执行质量检查,并测试一切是否按预期工作。官方也鼓励所有开发人员和贡献者使用此工具包,特别是在创建拉取请求之前。

  • 开发流程

  首先第一步寻找到lynis的安装位置,尤其是需要定位到插件的内容存储在哪个目录之中,当我们运行ynis时,插件目录会显示在终端界面汇总,同时会存储到日志文件里面:

1
grep -i plugin /var/log/lynis.log

  日志的内容在前文就有讲解,这里不作过多的阐述,接下来我们需要决定加载插件的阶段,前文的lynis运行流程中提到了插件有两个阶段,阶段1以及阶段2,不同阶段所对应的作用和效果大有不同。

  在阶段1中,运行的插件将在内置测试之前执行,这个阶段非常适合仅收集数据的测试。这有可能是获取已安装的软件包列表或系统上运行的程序;在阶段2中,运行的插件将在正常测试之后执行,这是使用者希望分析闲钱发现的信息,并处理和选择性的在终端界面中进行展示。有了两者区别的掌握,接下里我们需要创建插件文件,这里以plugins目录中自带的customplugin.template作为示范

  在plugins目录,将customplugin.template文件复制到plugin [name] _phase [number]文件中,[name]的值应替换为插件的唯一名称。仅使用小写字符,数字和(可选)短划线( - )来链接两个单词。 [number]用以定义插件阶段,即1或2,例如:

1
cp custom_plugin.template plugin_custom-tests_phase2

  对于文件的第一个调整就是修改标题内容,该部分用于插件的说明,能够用与验证插件的正确格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PLUGIN_AUTHOR: 
作者字段定义谁负责创建和更新此文件。

PLUGIN_CATEGORY:
这个字段描述了此插件所属的测试类型(例如,network)。可以使用“custom”。

PLUGIN_DESC:
描述字段,带有可选的解释,说明为什么创建此插件及其目标。

PLUGIN_NAME:
应该和你用作文件名的名称相同。

PLUGIN_REQUIRED_TESTS:
描述在执行该插件之前应该已经执行的依赖检测。通常可以跳过。

  这里需要注意检查是否正确的定义了LUGIN_NAME字段。这里我们添加后,我们需要创建插件,每一个插件都包含一个或多个单独的检测单元。它们标有唯一的ID,以便正确的记录和存储测试结果。出于同样的原因,您创建的所有测试都应以“CUST-”开头,然后是四个数字(例如CUST-0010),最后运行lynis后没插件就会载入了。(这一部分的最后载入部分并没有很清楚的弄懂,后续会进行补充,可参考的资料很少)

  在运行lynis后,插件会被载入,但是这样的话会在运行我们的插件的同时运行lynis自带的插件和很多其他的信息收集脚本,所以lynis提供了一种单独运行插件的选项—tests

1
./lynis audit system --tests CUST-id1,CUST-id2

  具体参考官网链接:

1
https://cisofy.com/documentation/lynis/plugins/development/#create-plugin-file

6.编写shell脚本

  为了较好的安全性质,能够定期的运行lynis,这里尝试编写了一个简单的sh脚本,使用–cronjob 选项运行,lynis 以自动、非交互式扫描模式进行启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vim /etc/cron.daily/lynis-1.sh

#! /bin/sh
AUDITOR="root"
DATE=$(date +%Y%m%d)
HOST=$(hostname)
LOG_DIR="/var/log/lynis"
REPORT="$LOG_DIR/report-${HOST}.${DATE}"
DATA="$LOG_DIR/report-data-${HOST}.${DATE}.txt"

cd /home/lfs/lynis
./lynis audit system --auditor "${AUDITOR}" --cronjob > ${REPORT}

cat /etc/cron.daily/lynis-1.sh
sudo chmod 755 /etc/cron.daily/lynis-1.sh

  接下来尝试运行并检验

1
2
3
./lynis-1.sh
ll /var/log/lynis/
cat /var/log/lynis/report-localhost.localdomain.20230814

Lynis
https://one-null-pointer.github.io/2023/08/14/Linux运维——Lynis/
Author
liaoyue
Posted on
August 14, 2023
传送口