lynis插件编写:从入门到放弃

例如name的取值可为:companyname, custom-tests, iso27001, personal

敕令:

cp custom_plugin.template plugin_custom-tests_phase2

第四步:设置设置设备摆设摆设插件

改动文件标题

对此文件的第一次调剂便是改动标题

lynis是一款采纳shell脚本编写,适用于Linux,macOS和基于UNIX的系统的安然检察对象,信托小伙伴们在网上搜索lynis会有很多先容lynis若何应用的文章,然则关于lynis插件编写的文章却很少,本文就来评论争论下lynis的插件编写

lynis的应用也很是简单方便,一样平常来说我们应用以下的敕令就可以了:

cd lynis; ./lynis audit system

除了应用lynis默认的规则来加固linux之外,lynis还供给了插件的功能,经由过程自己编写插件,我们可以把lynis改装成一款linux提权信息的网络器,或者将其改装成恶意法度榜样的检测对象,本文我们将先先容编写lynis插件的语法,然后基于lynis编写一个linux提权信息网络插件,盼望经由过程这个案例可以启迪小伙伴们开拓出更杰出的插件

插件先容

脚本说话

Lynis采纳shell脚本编写的,这是一种多功能脚本说话,可在在Linux或基于UNIX的操作系统的所有系统上运行

Lynis履行步骤

我们先看看lynis完备的运行周期如下:

[Initialization] → [OS detection] → [Detection of binaries] → [Plugins phase 1] → [Built-in tests] → [Custom tests] → [Plugins phase 2] → [Report]

可以发明,在lynis中有两个阶段可以去运行插件,它们分手是Plugins phase 1,Plugins phase 2

lynis SDK

lynis同时也供给lynis SDK的开拓要领及下载

开拓步骤

第一步:找到插件目录

第一步是就懂得Lynis的安装位置,分外是您的插件存储的目录当运行Lynis时,插件目录就会显示在屏幕上,并存储在日志文件中(平日为/var/log/lynis.log),以是我们可以经由过程下面的敕令来查看插件的目录文章:

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

第二步:抉择加载插件的阶段

第一阶段

在第一阶段运行的插件将在内置测试之前履行此阶段异常得当仅网络数据的测试这有可能是获取已安装的软件包列表或系统上运行的进程

第二阶段

插件的第二阶段发生在正常测试停止时这是你盼望阐发先前发明的信息,处置惩罚它并可选择在屏幕上显示的时刻

提示:假如您是第一次创建插件,请应用第二阶段这样你就可以使所有测试数据可用的同时向屏幕输出,由于它在审计周期着末阶段履行

第三步:创建插件文件

在plugins目录,将customplugin.template文件复制到plugin [name] _phase [number]文件中

Plugin Name and Phase

[name]的值应调换为插件的独一名称仅应用小写字符,数字和(可选)短划线( – )来链接两个单词 [number]用以定义插件阶段,即1或2这些细节用于插件的部分阐明,用于验证插件的精确款式

#########################################################################

#

#* DO NOT REMOVE *

#—————————————————–

# PLUGIN_AUTHOR=Mr Auditor

# PLUGIN_CATEGORY=Custom

# PLUGIN_DESC=This are my custom tests

# PLUGIN_NAME=custom-tests

# PLUGIN_REQUIRED_TESTS=

#—————————————————–

#########################################################################

PLUGIN_AUTHOR: 作者字段定义谁认真创建和更新此文件

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

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

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

PLUGIN_REQUIRED_TESTS: 描述在履行该插件之前应该已经履行的依附检测平日可以跳过

Tips:

反省是否精确定义了PLUGIN_NAME字段

保留#符号,只变动每行的值

第五步:创建插件

每个插件都包孕一个或多个零丁的检测单元它们标有独一的ID,以便精确的记录和存储测试结果出于同样的缘故原由,您创建的所有测试都应以“CUST-”开首,然后是四个数字(例如CUST-0010)

检测单元应用通用的shell脚本说话创建为了简化操作,lynis预先实现了几个函数(include / functions)示例包括向屏幕,日志文件或申报文件添加文本它还包括用于反省权限的检测等

根基的函数:

Display: 向屏幕输出、打印

LogText: 向log文件中输出

Register: 测试单元行列步队履行

Report: 向report中输出

检测流程:

设置可选的先决前提;

注册检测(注册功能)然后Lynis将反省是否必要履行或跳过;

反省注册功能的状态(if [ ${SKIPTEST} -eq 0 ]; then);

运行检测代码5、关闭检测(fi)

可以在include/tests_custom.template文件中看到测试和函数的一些示例另一个很好的资本是Lynis中的老例检测,也可以在include目录中找到

第六步:运行lynis

在运行lynis之后,插件会被载入

常见问题

假如,插件没有被激活,请按反省以下的项目:

在profile(.prf)中是否被开启;

插件名和插件代码中是否同等;

插件文件是否有权限

日志文件(/var/log/lynis.log)中也将记录轻忽该插件的缘故原由

linux提权信息网络插件

若何运行插件

虽然在上面的章节中我们先容了在运行lynis后,插件会被载入,然则这样的话会在运行我们的插件的同时运行lynis自带的插件和很多其他的信息网络脚本,以是lynis供给了一种零丁运行插件的选项–tests

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

[1] [2] [3] [4]下一页

这里的id便是编写插件时自定义的环球无双的值

确认网络什么信息

今朝该插件已经完成网络的信息有:

判断/etc/passwd中是否有hash的password,假如有提掏出来后续可以应用hashcat等破解(插件id:PASS-0001,plugin_check_passwd_shadow_phase2);

判断/etc/shadow文件root之外的用户是否有权限读取,假如有提掏出来后续可以应用hashcat等破解(插件id:PASS-0002,plugin_check_passwd_shadow_phase2);

判断/etc/passwd文件root之外的用户是否有写入的权限,可以直接改动密码(插件id:PASS-0003,plugin_check_passwd_shadow_phase2);

检测当前用户可以履行并且可被用以提权的法度榜样(插件id:PWN-0001,plugin_check_pwnable_binary_phase2);

发明暗藏文件(插件id:HIDDEN-0001,plugin_check_hidden_file_phase2);

发明suid文件,经典提权(插件id:SUID-0001,plugin_check_suid_file_phase2);

检测是否有docker用户组并列出此中的用户(插件id:GROUP-0001,plugin_check_docker_group_phase2)

今朝网络的信息照样对照少的,后续会慢慢的添加

实战Lin.security

首先,简单先容下插件的内容,定义反省/etc/passwd文件中是否有密文的函数:

check_password_hashes() {

# define some constant

IFS_OLD=$IFS

IFS=$’\n’

ENCRYPTEDPASS=’x’

#start

LogText “Test:obtain /etc/passwd file content”

passwd_content=$(${AWKBINARY} ‘{print $0}’ /etc/passwd)

for each_passwd in ${passwd_content};

do

IFS=’:’

passwd_split_colon=($each_passwd)

if [ “${passwd_split_colon[1]}” != “$ENCRYPTEDPASS” ];then

IFS=$’\n’

Report “sensetive_passwd_hashes[]=$each_passwd”

fi

done

IFS=$IFS_OLD

}

然后在注册代码块里调用该函数在插件加载时运行:

#################################################################################

#

# Test: PASS-0001

# Description : We show some lines on the screen

# Register our first custom test

# We consider it to be a lightweight test (no heavy IO, or long searches), no network connection needed

Register –test-no PASS-0001 –weight L –network NO –description “A test for check if there is password hashess stored in /etc/passwd”

if [ ${SKIPTEST} -eq 0 ]; then

# The Display function makes it easy to show something on screen, with colors.

# –indentdefines amount of spaces

# –texttext to be displayed on screen

# –resulttext at end of line

# –colorcolor of result text

Display –indent 2 –text “- Checking if there is a password hashes on /etc/passwd file” –result OK –color GREEN

check_password_hashes;

fi

#

运行敕令:

./lynis audit system –tests PASS-0001

查看网络结果的申报:

cat /var/log/lynis-report.dat | grep sensetive_passwd_hashes

Lin.security是一款提权演习的虚拟机,经由过程模拟真实破绽,将赞助您完善本地权限提升技能,技巧和对象集

经由过程bob/secret登入到Lin.security中,ifconfig查看虚拟机的ip:

bob@linsecurity:~/lynis-master/plugins$ ifconfig

docker0: flags=4099mtu 1500

inet 172.17.0.1netmask 255.255.0.0broadcast 172.17.255.255

ether 02:42:8a:eb:21:07txqueuelen 0(Ethernet)

RX packets 0bytes 0 (0.0 B)

RX errors 0dropped 0overruns 0frame 0

TX packets 0bytes 0 (0.0 B)

TX errors 0dropped 0 overruns 0carrier 0collisions 0

enp0s3: flags=4163mtu 1500

inet 192.168.137.196netmask 255.255.255.0broadcast 192.168.137.255

inet6 fe80::a00:27ff:fed8:9fd6prefixlen 64scopeid 0x20

ether 08:00:27:d8:9f:d6txqueuelen 1000(Ethernet)

RX packets 180bytes 18259 (18.2 KB)

上一页[1] [2] [3] [4]下一页

RX errors 0dropped 0overruns 0frame 0

TX packets 753bytes 69400 (69.4 KB)

TX errors 0dropped 0 overruns 0carrier 0collisions 0

lo: flags=73mtu 65536

inet 127.0.0.1netmask 255.0.0.0

inet6 ::1prefixlen 128scopeid 0x10

looptxqueuelen 1000(Local Loopback)

RX packets 373bytes 27495 (27.4 KB)

RX errors 0dropped 0overruns 0frame 0

TX packets 373bytes 27495 (27.4 KB)

TX errors 0dropped 0 overruns 0carrier 0collisions 0

将插件拷贝进虚拟机plugins目录下:

scp plugin_check_* bob@192.168.137.196:/home/bob/lynis-master/plugins/

bob@192.168.137.196’s password:

plugin_check_docker_group_phase2100% 3858899.2KB/s00:00

plugin_check_hidden_file_phase2100% 36283.7MB/s00:00

plugin_check_passwd_shadow_phase2100% 50106.4MB/s00:00

plugin_check_pwnable_binary_phase2100% 49706.5MB/s00:00

plugin_check_suid_file_phase2100% 35783.7MB/s00:00

记得将default.prf也拷贝进去,覆盖原本的设置设置设备摆设摆设:

scp default.prf bob@192.168.137.196:/home/bob/lynis-master/

bob@192.168.137.196’s password:

default.prf100%20KB6.7MB/s00:00

运行lynis:

bob@linsecurity:~/lynis-master$ bash lynis audit system

查看插件网络到的信息:

cat /tmp/lynis-report.dat | grep -E ‘suid_file|pwnable_programs|sensetive_passwd_hashes|hidden_file|docker_group’

plugin_enabled_phase2[]=check_hidden_file||

hidden_file[]=/snap/core/4917/etc/.pwd.lock

hidden_file[]=/snap/core/4917/etc/cron.d/.placeholder

hidden_file[]=/snap/core/4917/etc/cron.daily/.placeholder

hidden_file[]=/snap/core/4917/etc/cron.hourly/.placeholder

hidden_file[]=/snap/core/4917/etc/cron.monthly/.placeholder

hidden_file[]=/snap/core/4917/etc/cron.weekly/.placeholder

hidden_file[]=/snap/core/4917/etc/init.d/.depend.boot

hidden_file[]=/snap/core/4917/etc/init.d/.depend.start

hidden_file[]=/snap/core/4917/etc/init.d/.depend.stop

hidden_file[]=/snap/core/4917/etc/skel/.bash_logout

hidden_file[]=/snap/core/4917/etc/skel/.bashrc

hidden_file[]=/snap/core/4917/etc/skel/.profile

hidden_file[]=/snap/core/4917/var/lib/apparmor/profiles/.apparmor.md5sums

hidden_file[]=/snap/core/4486/etc/.pwd.lock

hidden_file[]=/snap/core/4486/etc/cron.d/.placeholder

hidden_file[]=/snap/core/4486/etc/cron.daily/.placeholder

hidden_file[]=/snap/core/4486/etc/cron.hourly/.placeholder

hidden_file[]=/snap/core/4486/etc/cron.monthly/.placeholder

hidden_file[]=/snap/core/4486/etc/cron.weekly/.placeholder

hidden_file[]=/snap/core/4486/etc/init.d/.depend.boot

hidden_file[]=/snap/core/4486/etc/init.d/.depend.start

hidden_file[]=/snap/core/4486/etc/init.d/.depend.stop

hidden_file[]=/snap/core/4486/etc/skel/.bash_logout

hidden_file[]=/snap/core/4486/etc/skel/.bashrc

hidden_file[]=/snap/core/4486/etc/skel/.profile

hidden_file[]=/snap/core/4486/var/lib/apparmor/profiles/.apparmor.md5sums

hidden_file[]=/snap/core/5328/etc/.pwd.lock

hidden_file[]=/snap/core/5328/etc/cron.d/.placeholder

我们可以聚焦于最简便的pwnable_program部分:

pwnable_programs[]=/bin/ash (For more details, visit:https://gtfobins.github.io/gtfobins/ash)

pwnable_programs[]=/usr/bin/awk (For more details, visit:https://gtfobins.github.io/gtfobins/awk)

pwnable_programs[]=/bin/bash (For more details, visit:https://gtfobins.github.io/gtfobins/bash)

pwnable_programs[]=/bin/csh (For more details, visit:https://gtfobins.github.io/gtfobins/csh)

pwnable_programs[]=/usr/bin/curl (For more details, visit:https://gtfobins.github.io/gtfobins/curl)

上一页[1] [2] [3] [4]下一页

pwnable_programs[]=/bin/dash (For more details, visit:https://gtfobins.github.io/gtfobins/dash)

pwnable_programs[]=/bin/ed (For more details, visit:https://gtfobins.github.io/gtfobins/ed)

pwnable_programs[]=/usr/bin/env (For more details, visit:https://gtfobins.github.io/gtfobins/env)

pwnable_programs[]=/usr/bin/expect (For more details, visit:https://gtfobins.github.io/gtfobins/expect)

pwnable_programs[]=/usr/bin/find (For more details, visit:https://gtfobins.github.io/gtfobins/find)

pwnable_programs[]=/usr/bin/ftp (For more details, visit:https://gtfobins.github.io/gtfobins/ftp)

pwnable_programs[]=/usr/bin/less (For more details, visit:https://gtfobins.github.io/gtfobins/less)

pwnable_programs[]=/usr/bin/man (For more details, visit:https://gtfobins.github.io/gtfobins/man)

pwnable_programs[]=/bin/more (For more details, visit:https://gtfobins.github.io/gtfobins/more)

pwnable_programs[]=/usr/bin/scp (For more details, visit:https://gtfobins.github.io/gtfobins/scp)

pwnable_programs[]=/usr/bin/socat (For more details, visit:https://gtfobins.github.io/gtfobins/socat)

pwnable_programs[]=/usr/bin/ssh (For more details, visit:https://gtfobins.github.io/gtfobins/ssh)

pwnable_programs[]=/usr/bin/vi (For more details, visit:https://gtfobins.github.io/gtfobins/vi)

pwnable_programs[]=/usr/bin/zsh (For more details, visit:https://gtfobins.github.io/gtfobins/zsh)

pwnable_programs[]=/usr/bin/pico (For more details, visit:https://gtfobins.github.io/gtfobins/pico)

pwnable_programs[]=/usr/bin/perl (For more details, visit:https://gtfobins.github.io/gtfobins/perl)

pwnable_programs[]=/usr/bin/tclsh (For more details, visit:https://gtfobins.github.io/gtfobins/tclsh)

pwnable_programs[]=/usr/bin/git (For more details, visit:https://gtfobins.github.io/gtfobins/git)

pwnable_programs[]=/usr/bin/scp (For more details, visit:https://gtfobins.github.io/gtfobins/scp)

造访链接https://gtfobins.github.io/gtfobins/awk/,用以下敕令提权:

bob@linsecurity:~/lynis-master$ sudo awk ‘BEGIN {system(“/bin/sh”)}’

# id

uid=0(root) gid=0(root) groups=0(root)

当然,可以应用插件发明的其他信息进行提权

结语

本文总结了一下lynis的插件编写的历程,借助lynis我们可以开拓出各类用途的lynis插件包括但不局限于进击溯源,提权信息网络等等,盼望可以给小伙伴以启迪开拓出更多前进事情效率的插件

完备的代码:https://github.com/nancheal/lynis-plugins,迎接点star~

上一页[1] [2] [3] [4]

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包