审计工具lynis介绍

jopen 10年前

1.介绍

       lynis 是一款开源的unix-based平台的审计工具。可以帮助审计员扫描unix系统以及可用的软件。程序主要探测,系统上安装的程序包,配置上的错误,以及安全问题和系统信息。

官方地址http://www.rootkit.nl/projects/lynis.html

程序完全用shell 脚本编写,下载之后就可直接运行,需要root权限,并读写目录/var/log/ and /tmp。 执行./lynis –c 可开始扫描任务。程序会运行多个子脚本来进行不同类型的审计检测,最后把结果输出到report文件中。

2.使用说明

       通过 –profile 可以指定扫描使用的配置,默认使用的是程序目录下的default.prf文件,用户可以复制此文件后自己编辑自己的任务配置文件。

       其中可以配置任务相关的参数例如:ssl证书的搜寻目录       ssl:certificates:/etc/ssl /var/www: 。 略过某个检查项,

config:test_skip_always:AAAA-1234 BBBB-5678 CCCC-9012: 。

       lynis通过循环运行include目录下的各个脚本来执行不同类型的扫描任务,把初步结果输出到屏幕上,每运行一个脚本都需要人工干预是否继续。

       程序会把每一项的检查结果实时输出到屏幕,给出ok或warning的提示。更加详细的信息可以参照日志文件。

3.代码学习

1.主函数初始化工作

主程序运行后,会初始化一些 常用的变量

审计工具lynis介绍

审计工具lynis介绍

然后 会判断扫描脚本目录include和用户自定义插件目录plugin是否存在.

审计工具lynis介绍

调用include下的consts,和functions脚本进行常用变量的设置和函数声明。

审计工具lynis介绍

调用trap 命令 拦截INT信号,maid函数做程序结束的清除工作。

审计工具lynis介绍

使用umask 保证生成的文件的权限的安全。

审计工具lynis介绍

. ${INCLUDEDIR}/parameters

调用include 下面的parameters脚本进行命令行参数的读取。

审计工具lynis介绍

shift命令: 移动参数位置,丢弃第一个参数。

同时还用到了:

case $变量 in

比配字符)

语句;

;;

*)

;;

调用function脚本里的checkupdate函数进行版本检测

审计工具lynis介绍

使用了dig命令查询dns服务,将最新的版本号放在dns服务的描述里面。

调用 id –u 保证程序以userid为0的超级用户权限运行。

审计工具lynis介绍

在/var/run 目录下面创建pid文件, 并且之前判断文件是否存在保证程序实例的唯一。

2.检测系统的功能脚本

1. 系统类型检测

调用uname 获取系统类型名。如果是linux 则调用uname –r 获取内核版本。如果是ubuntu 使用命令

grep "^DISTRIB_ID=" /etc/lsb-release | cut -d '=' –f2 获取系统名字。 f2 代表=分割后的第二个参数。

2.检测系统的二进制可执行文件

在/bin /sbin /usr/bin 等路劲下查找常见的程序。


确定常见程序是否存在和其安装的目录

3.最后循环执行include目录下的以test开头的检测脚本

审计工具lynis介绍

为了去除if语句 分支过多带来的代码杂乱,在每个程序逻辑前调用Register 函数检查随后的程序逻辑是否需要执行。

例如程序逻辑的检查编号是否在屏蔽列表中,系统类型是否满足,等。

审计工具lynis介绍

脚本tests_accounting 检测不同系统下auditd审计工具的开启状态。

脚本tests_authentication 检测用户信息和认证。检测超级用户的个数,调用chkgrp进行检查

   从passwd中检索出系统的所有用户和用户id : awk -F: '($3 > 500) && ($3 != 65534) || ($3 == 0) { print $1","$3 }' /etc/passwd

   从/etc/group中检测是否存在重复的用户组 cat /etc/group | grep -v '^#' | grep -v '^$' | awk -F: '{ print $3 }' | sort | uniq –d     

   调用pwck检测密码文件的数据完整性: /usr/sbin/pwck -q –r

脚本tests_banner 检测含有系统banner的文件是否存在,如/etc/issue 中保存了系统的版本信息。

脚本tests_boot_services 检测系统启动时运行的脚本,首先是grub boot loader文件/boot/grub/grub.conf 和grub.cfg, ubuntu 的话可以检测 /etc/rc2.d文件,检测文件/etc/init.d,/etc/rc /etc/rc.local /etc/rc.d/rc.sysinit

脚本tests_crypto 检测过期的ssl证书

脚本tests_database : 首先检测是否有mysql进程存在,检测mysql 数据库是否设置密码${MYSQLCLIENTBINARY} -u root --password= --silent --batch --execute="" 

脚本test_file_integrity 检测是否安装文件完整性检测工具,例如tripwire

脚本tests_file_permission 检测root/.ssh 文件的权限设置

脚本tests_filesystem :检测/tmp 目录和/home 目录是否挂载在一个挂载点, 检测文件系统类型(ext2,3,4),

脚本tests_firewall : 检测iptable的开启状态和规则设置</span>