哪个更安全?白名单还是黑名单?Agent端对监控指标黑白名单的支持

“实际上,agent端指标的白名单和黑名单也是Zabbix培训中的一个重要主题。”

——Kaspars Mednis , 全球培训师负责人,Zabbix SIA

本文整理自Kaspars 在2020Zabbix中国峰会的演讲,ppt获取链接见文末。更多演讲视频可关注官方Bilibili账号主页(ID:Zabbix中国)。

目录
一 为什么需要agent端指标的白名单和黑名单
二 如何保障安全性
三 关于通配符
四 关于功能注释
五 哪个更安全?白名单还是黑名单?

为什么需要agent端指标的白名单和黑名单

首先,第一个问题是为什么?我们为什么需要agent端指标的白名单和黑名单?

实际上,我们都知道,Zabbix agent主要的功能就是采集监控,但也可以从配置文件、日志文件、密码文件或任何其他敏感数据源收集到一些敏感信息。正如大家现在所看到的一个简单示例,通过Zabbix get功能,我们可以对密码文件的内容实现读取。我想现在大家心中都会认为这也太不安全了,对吧?这属于敏感信息。

除此之外,另一个问题是system run[]命令,system run[]命令是非常有用、非常强大的命令,它实际上允许你直接在被监视的主机上从Zabbix前端执行任何命令,这也意味着你可以收集很多有用的信息,但这里的关键词是“任何命令”。实际上,有些人可能会使用这些命令执行一些有害代码。正如大家现在所看到的,在第一个示例中,用户将尝试从Web下载一些恶意代码,然后将尝试执行,以期获得根权限或其他权限。或者,在另外一个示例中,用户想要删除一些活动痕迹,试图删除一些日志文件。这些只是几个例子,都可以从前端执行。

我是从命令行使用Zabbix get,因为这样可以更容易的测试。但需要指出的是,如果从前端执行也可以实现同样的效果。当然,通常Zabbix agent是以非特权帐户运行的,这就意味着并不是所有这些命令都会成功。但是如果在windows上运行Zabbix,那么Zabbix的运行位置是windows的本地系统。实际上,在这里,几乎可以运行所有的命令。

如何保障安全性

这就引出了下一个问题,我们如何防止这种情况发生?

  1. Enable Remote Commands参数
    在Zabbix5.0发布之前,我们在Zabbix agent配置文件中设置了一个选项,称为Enable Remote Commands。如果您将此参数设置为零,则远程命令就会被禁用。因此,有两个选择,要么启用远程命令,要么完全禁用它们。但是,我们并不能完全阻止任何其他项的Key,这些也有潜在的危险,比如文件内容或其他一些Key。
  2. 参数“Allow key”和“Deny key”
    而Zabbix 5.0的发布,则给了我们更多的选择,我们在Zabbix5中添加了两个新的agent参数“Allow key”和“Deny key”。通过这些agent参数,您可以指定模式,而这些模式实际上是一个通配符表达式。这个模式指定可以在Key名称和参数中。通过使用“Allow key”和“Deny key”,借助通配符,实际上可以创建白名单或黑名单。并且Zabbix agent能够支持无限数量的这样的规则。

:在这里规则是按照指定的顺序自上而下的执行。一旦监控项的Key与任何Allow或Deny规则匹配,则该项将被允许或拒绝。在此之后,规则检查将停止。

因此,如果您对监控项的Key有两个规则(如一个允许规则和一个拒绝规则),则先出现的规则将生效。另一个将会被忽略。通过这张PPT,我们可以清楚地看到其工作流程。
在这里插入图片描述


假设你为某个Deny key定义了一些拒绝规则,而Zabbix只是检查所有规则。所以第一个Allow key与您的模式不匹配,所以Zabbix将转到下一个。

接下来是将会匹配的Deny key。这意味着您的关键字被拒绝,处理停止,反之亦然。如果您设置有Allow key,第一个规则不匹配,但是下一个规则匹配这个Allow key,那么这个项关键字就会被允许。即使下面有一些拒绝规则,这些规则也会被忽略。因此,在创建顺序时一定要非常小心。

例如,假设我们有一个监控项Key,试图执行一个命令[cat /proc/stat],这实际上是一个安全命令,只是从系统中收集一些统计数据,并且你允许它执行。所以你已经定义了,比方说,你定义了三个规则,一个允许规则system run[free] 一个允许规则system run[cat /proc/stat], 以及拒绝规则system run[*],将如何处理?

首先,Zabbix将检查第一个模式,很明显,[cat /proc/stat]不会匹配[free]。如果模式不匹配,则Zabbix将检查第二个模式,该参数实际上是匹配的,Key将被允许。

是的,该Deny Key将被完全忽略。但是作为示例,如果你有任何其他命令,在Allow key中没有指定。那么这些命令将被拒绝。是的,正如我说的那样,这是由于顺序问题产生的一个典型错误。在绿色框中您可以看到正确的顺序,您已经允许了一些操作,可能是使用/var/log/myapp/*或/var/log/mydb/*文件指定了一些通配符,这是可以的。

而在底部,您已经拒绝了对任何其他文件的任何其他操作,是的,所以这意味着agent只能访问位于/var/log/myapp/或/var/log/mydb/中的文件。而底部您可以看到错误的顺序,因此您正在尝试允许一些运行命令,如ipcs -l或free。但是在一开始,您有一个拒绝Deny Key system run[]运行,通配符被拒绝,实际上这会拒绝任何system run[]命令,您所有的Allow key规则都不会有任何效果。所以一定要记住,它们从上到下处理和执行的。

关于通配符

让我们来讨论一下通配符,我将向大家介绍一些一般通配符规则,Zabbix使用的是通配符,它能够匹配特定位置上的任意数量的字符,既可以在关键字名称中使用,也可以在参数中使用。稍后我会提到这个。

首先,如果参数在ALLOW KEY或DENY KEY中指定,则必须用方括号括起来。如system.run[只带左方括号,或vfs.file.txt]只带右括号,这都是不完整的,都会被认为是错误的句法规则。如果您的Zabbix agent有这样的参数,它就会崩溃,也不会启动。像vfs.file后跟圆点,后跟任意选项,后跟任意参数是正确的句法规则。

模式示例,这里要特别注意,尽管很简单,因为这些只是通配符,但它们确实有点棘手,因为所有vfs.file通配符和参数中的通配符将匹配以vfs.file开头的任何Key和任何参数。大家可以看到,它们将匹配vfs.file.contents[/etc/passwd],但它不会匹配vfs.file.contents。大家可能觉得这没必要大惊小怪,因为没有任何参数的vfs.file内容Key是没用的,是这样吗?但是看看最后一个,看看system.,它将匹配任何不带参数的system开头的key。因此它将匹配system.cpu.load,因此使用这种语法,您可以允许或拒绝system.cpu.load,但它不会与system.run.[]命令匹配
system.run[]命令需要使用语法system.[],只有这样system.run[]命令才会被拒绝。

因此,我强烈建议,当您在创建这样的规则时,查看文档和监控项Key,它们可能有参数,也可能没有参数,创建您的规则,最好进行一定的测试。否则,您可能会得到一些不愿看到的结果,比如您会认为system.通配符是安全的,但实际上这与任何system.run[*]的通配符都不匹配。

下面是一个小示例,您正在拒绝vfs.file.*,如果您试图获取vfs.file内容,就不会起作用。但是,如果您指定一些内容,如您所见,您将获得这些内容。所以这个例子实际上是一个很糟糕的例子。是的,这是配置错误。你认为你拒绝了vfs.file.*监控项Key,但实际上您只是拒绝了没有参数的vfs.file监控项Key,这是无用的。要使其按预期工作,您需要指定方括号和另一个通配符作为参数,只有这样,这些内容才不会被其他人查看。

再举一个例子,比方说你在拒绝system.cpu.load[*],比方说你的组织系统的system.cpu.load是秘密。并且您已经拒绝了system.cpu.load,并且您已经测试了system.cpu.load,平均数据不会被报告。但是如果有人在没有任何参数的情况下执行命令,这实际上是允许的。那么这个人就会拿到结果。是的,因此在此场景中,您还需要阻止带参数和不带参数的命令,您需要指定两行。其中,一行就是上面所说的,另一行是system.cpu.load。否则将授予访问权限。
在这里插入图片描述

关于功能注释

我来向大家介绍一些关于这个功能注释的内容。

首先,关于配置,您可能知道,对于自动注册,我们拥有特定的参数,如主机名项、主机元数据项或主机接口项,您还可以在其中指定项关键字。因此,那些Allow或Deny key不会影响这些参数。您可以拒绝某些系统运行命令,但您仍然可以在主机名项中使用它,它依旧可以起作用。接下来,如果客户端配置中不允许使用特定的监控项关键字,则会发生以下情况。

首先,该项将被报告为不受支持的,因此Zabbix不会告诉您该项被拒绝,而只是像任何其他不受支持的监控项一样不受支持。这样就不会给攻击者任何线索。是的,也许有人会攻击你的系统,但他到头来依旧会毫无头绪。它被拒绝了或者只是文件不见了什么的。客户端日志中不会锁定任何内容。是的,所以被拒绝的命令只是静默地删除,没有任何日志条目。即使您将日志级别提高到级别5,我们也可以说仍然没有条目。

正如大家所看到的这样,Zabbix agent支持包含文件。是的,您可以包含在include参数中指定的多个配置文件,不过要非常小心。因为不应该假定包含文件的特定顺序,这意味着包含文件只是以随机顺序包含。

如果您有Allow key或Deny key列表,那么重要的一件事就是记住它们的顺序。如果您不知道包含规则的包含文件的顺序,那么您实际上就无法控制这些规则的执行。所以记住顺序十分重要。

命令行实用程序,所以您当然可以尝试项关键字,也可以从命令行尝试,但是如果它们被拒绝,您实际上都会得到相同的结果。Zabbix agent将只报告不支持的关键字,Zabbix get将显示不支持的未知指标。

如果您尝试使用Zabbix agent打印所有命令,使用-p选项打印(-print (-p)),但是,它也不会显示这些命令,因此它们完全隐藏起来,就像从未存在过一样。
“哪个更安全?白名单还是黑名单?”

最后,我需要向大家提问以下问题,那就是“哪个更安全?白名单还是黑名单?”

假设您有Deny Key,它拒绝了vsf.file.contents[/etc/passwd],您看不到通配符,在这里,所有内容都是以纯文本指定,只需阻止对/etc/passwd 的访问,您就可以从前端从Zabbix get测试此项关键字。是的,大家可以看到,它确实被屏蔽了。所以没有办法获取/etc/passwd ,但真的完全没有办法获取到/etc/passwd 吗?如果您足够聪明,你可以写这个。假设使用Unix 路径并在目录中来回移动,您可以指定这实际上是某个文件,这是/tmp,然后返回,然后转到/etc/zabbix,然后返回,然后转到passwd,然后您将获得文件内容。

因此,这意味着即使您指定了一些拒绝规则,它们也可能不会被破坏,但是可能有一些解决方法可以绕过它们。因此,在这种情况下,白名单会更安全。是的,你可以阻止任何文件内容,只允许几个文件的内容,这当然会更安全。不过我个人不知道如何绕过这个问题,但对于大家而言,任何皆有可能,不是吗?

最后感谢大家的参与和倾听。这是一个简短的关于Zabbix5.0的白名单黑名单的演示。谢谢大家!

PPT网盘链接: https://pan.baidu.com/s/1ZgQjzDc4sEUBKiAKSnmFSg 提取码: 97ys

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/42111.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx配置IP白名单

分析nginx访问日志,有哪些IP访问过nginx。 命令参考:awk {print $1} logs/access.log | sort | uniq -c | sort -nr -k1 输出的效果案例: 1053 192.168.3.15 893 192.168.3.10 818 192.168.0.8 1、添加IP白名单文件 在nginx目录的 conf …

Linux如何给服务器增加白名单

1、查看系统白名单配置: iptables -L -n 2、增加白名单(19.40.145.140 是需要增加的服务器IP): iptables -I INPUT -s 19.40.145.140/32 -p tcp -j ACCEPT 注:-I(I是i的大写) 3、查看防火墙状…

任正非:小公司,不要有太多方法论,把豆腐磨好就有人买

推荐阅读:16 款 ChatGPT 工具,太炸裂了! 不同性格、不同特长、不同偏好的人能否凝聚在组织目标和愿景的旗帜下,靠的就是管理者的宽容。 来源 | 新商业思想库 作者 | 任正非 “烧不死的鸟是凤凰,从泥坑里爬出来的才是圣…

电商商城小程序项目完整源码(微信小程序)

微信公众号:创享日记 发送:简商城 获取完整源码(导入微信开发者工具即可) 【ChatGPT】前些天发现了一个巨牛的人工智能学习电子书,通俗易懂,风趣幽默,无广告,忍不住分享一下给大家。…

死磕数据库系列(二十):MySQL 数据库 DDL、DML、DQL、DCL 语言理论与实践(sql 8.0 版)...

点关注公众号,回复“1024”获取2TB学习资源! 今天,民工哥带大家一起来学习一下 MySQL 数据库的 DDL、DML、DQL、DCL 这几种语言的理论知识与实践。如有帮助,请点在看、转发支持一波!!! DDL&…

安卓app汉化教程

有时候有些软件都是English的,尽管对英语略懂,但是都是看着别扭(我基本都看不懂。)如果每次都点翻译的话又是一个很繁琐的事情。所以我们来一次app汉化的教程 首先我们需要一个文件管理器,但是手机自带的基本没有修改权…

常用24位颜色表转换成16位颜色值,让16位lcd使用

如果需要直接屏幕任意颜色转换成16位颜色值请下载转换程序,不用注册,就可使用 https://download.csdn.net/download/rachenjian/12968346 16位颜色表 #define N_Coloe_B16LightPink 0xFDB8 //24位0xFFB6C1 浅粉红 #define N_Coloe_B16Pink …

Qt 5.12--color

Qt 5.12--color 1 简介2 颜色代码2.1 16进制2.2 RGB数值 3 常用4 查找网站5 css color6 其他参考 1 简介 颜色是UI的基础,具体表示可以是十六进制颜色码,英文名,RGB数值。 2 颜色代码 2.1 16进制 详见RGB颜色查询对照表 常用如下 2.2 R…

【Python】用tkinter做一个采色器

from tkinter import * colors #FFB6C1 LightPink 浅粉红 #FFC0CB Pink 粉红 #DC143C Crimson 深红/猩红 #FFF0F5 LavenderBlush 淡紫红 #DB7093 PaleVioletRed 弱紫罗兰红 #FF69B4 HotPink 热情的粉红 #FF1493 DeepPink 深粉红 #C71585 MediumVioletRed 中紫罗兰红 #DA70D6 O…

使用簇绒图形设计原理提高您的可视化技能

Every now and then, we encounter graphs and charts that fail to represent the spirit of the underlying data. This may be hard to believe, given the advancement of understanding of statistics and technology, however, “junky-charts” often find their place …

python3使用tkinter做界面之颜色

from tkinter import * colors #FFB6C1 LightPink 浅粉红 #FFC0CB Pink 粉红 #DC143C Crimson 深红/猩红 #FFF0F5 LavenderBlush 淡紫红 #DB7093 PaleVioletRed 弱紫罗兰红 #FF69B4 HotPink 热情的粉红 #FF1493 DeepPink 深粉红 #C71585 MediumVioletRed 中紫罗兰红 #DA70D6 O…

[数据分析与可视化] 科技论文配色心得

本文是制作论文中科学图形的一些建议,可帮助您的论文受众尽可能轻松地理解您的数据。您的图形应该引人注目,易于理解,应该避免扭曲数据(除非您真的想这样做),并且对色盲的人来说是安全的。请记住&#xff0…

c语言查体,c语言的概述

今天萌小编又和大家见面了,想必大家看完之前我第一篇写的概览对c语言有了一些初步的了解,那么现在我们继续前行,探讨c语言的奥秘。 好,现在我们来看看一个c语言的编程,来直观的感受c语言,让大家能够学的轻松…

Markdown高级(使用教程)持续整理

Tyopra官网:https://www.typora.io/ Markdown语法演示 [TOC] 生成目录文章目录 标题一级标题二级标题三级标题四级标题五级标题六级标题 分割线引用列表无序列表有序列表 图片位置及大小使用html标签实现表格的单元格合并a) 横向合并单元格b) 纵向合并单元格c)…

python使用tkinter做界面之颜色

python使用tkinter做界面之颜色 from tkinter import * colors #FFB6C1 LightPink 浅粉红 #FFC0CB Pink 粉红 #DC143C Crimson 深红/猩红 #FFF0F5 LavenderBlush 淡紫红 #DB7093 PaleVioletRed 弱紫罗兰红 #FF69B4 HotPink 热情的粉红 #FF1493 DeepPink 深粉红 #C71585 Medium…

用python实现祝福弹窗_python实现弹窗祝福效果

前言 猪年除夕之夜在亲人群抢红包心血来潮,想用python做比较好玩的新年祝福给亲人们乐呵乐呵。奈何初学Python,底子比较薄,通过查阅相关博客,在一位网友的基础代码之下添加改进,使得弹出窗口多样化一些。写此博客&…

Python之Tkinter使用详解

文章目录 Python之Tkinter使用详解一、基本概念1. 设置GUI界面属性1.1 标题 / 透明度 / 去边框 / 置顶1.2 绑定窗口移动事件 2. 设置执行后的GUI窗口位置2.1 配置窗口在x轴和y轴的位置2.2 配置窗口的高度、宽度和居中显示 3. 16个核心窗口部件4. grid参数使用方法5. 控件颜色对…

xp上能用mysql_在XP上搭建PHP+MySQL平台

前段时间用Z-Blog建了个这个幼峰说事的博,闲的无聊想玩玩WordPress,所以就在本机XP的OS上搭建了个PHPMySQL的平台试玩了下下WordPress。其实百度一下就可以找到很多关于在XP的IIS下搭建PHP的方法,之后还要找找MySQL的配置。弄这弄那的也弄了老…

Markdown使用方法

#目录 : ###一 . Markdown语法 ###二 . 常用LeTeX表达式 ###三 . 颜色设置及代码 一 . M a r k d o w n 语法 一 . Markdown语法 一.Markdown语法1 #一级标题一个# ##二级标题两个# #… ######以此类推最多6级标题6个# 无序列表每行前面一个 -无序列表每行前面一个 - 有序列表…

抓取Amazon产品评论的神器

最近有个网站要准备上线的一些评论数据需要导入Amazon评论到Magento,但是Magento好像没有这样的功能很是闹心,Amazon屏蔽爬虫的功夫也是杠杠的当然也懒得写那玩意,看样子只能依靠万能的Chrome插件了。 插件叫Instant Data Scraper下载地址&a…