Zabbix作为安全扫描程序

你好 我们都知道并喜欢针对漏洞评估过程的产品,例如NessusQualysMax Patrol和其他各种OpenVAS 。 他们解决的主要任务之一是提供对版本漏洞的控制。


这是一个比较简单的过程,可以将已安装的软件版本与“不包含已知漏洞”范围进行比较。 好了,然后负责信息安全的人员以及开发人员和管理员一起决定今天可以承担哪些风险和需要修补的风险。


解决此问题的工具有很多,但从我们的角度来看,它们都有一个共同的问题-它们需要单独进行麻烦的部署,并在基础结构中生成具有root帐户的另一种工具。 但是毕竟,不需要诸如收集有关已安装的根软件包的信息之类的简单操作! 通常,在基础架构中,已经部署了具有合并数据,协作和服务器上命令远程执行功能的系统。 因此,我们决定创建一个工具,只需单击几下即可在我们的环境中部署Linux漏洞监视系统,而对生产的更改最少。


大多数食品系统中部署了什么? 当然是监视。 经常是Zabbix 。 因此,让我们开始并系好它!


一方面Zabbix


一切都很简单:在没有我们的情况下,已经完成了分布式代理系统,用于可视化的仪表板,多用户访问系统以及根据指定条件执行操作。 我们不需要重新发明轮子,而是从头开始。


Zabbix具有足够的权利来接收有关软件包的信息,以及将其放置在何处。 仍然需要将它们组合在一起并发送给Vulners API进行分析。 然后处理获得的有关漏洞的知识。


但是,让我们首先简要介绍一下Zabbix可以做什么以及我们需要做什么。


Zabbix代理已安装在服务器上,并允许:


  • 获取广泛的操作系统指标
  • 运行脚本和程序并获得执行结果;
  • 在独立于Zabbix代理进程的单独进程(分支)中执行任何命令;
  • 一次使用多台Zabbix服务器;
  • 在防火墙后面工作,启动与服务器的连接,反之亦然,等待传入连接。

Zabbix服务器接收监视指标作为输入,并将其写入数据库并进行进一步处理。


通过分析获得的数据并基于相当灵活的逻辑,他可以执行各种操作:

  • 在各种渠道(邮件,短信,即时通讯程序等)上发送警报;
  • 通过SSH或IPMI连接到服务器并在服务器上执行各种命令;
  • 或者,使用与服务器的Zabbix代理连接在服务器上执行各种纠正命令;

Web界面是用PHP编写的,将允许您显示Zabbix收集的度量,图形,有关问题的触发警报以及监视系统执行的命令和操作。


Zabbix管理也可以通过Web界面进行。


Zabbix API是基于Web的API,并且是Web界面的一部分。 它使用JSON-RPC协议。


  • 允许您接收,创建,配置和删除监视系统中的任何对象。
  • 使用API​​,您可以轻松地将监视系统与各种外部系统集成在一起。

但是,Zabbix对漏洞一无所知! 但是Vulners知道他们:)


在脆弱者的另一方面



我们试图将它们彼此集成在一起,这就是结果。


Zabbix威胁控制


这是一个用Python编写的开源Zabbix 插件 ,它可以:


  • 在Zabbix Web界面中显示有关基础结构中发现的漏洞的信息。
  • 根据CVSS标准显示每个漏洞的威胁级别。
  • 并且它提供了易于应用的方法来消除发现的漏洞。

CVSS是评估漏洞严重性的开放式行业标准。 实际上-10分制。


使用此技术,可以将在不同系统中发现的,具有不同属性的漏洞带到一个分母,从而简化了检测到的问题的优先级。

我们在Zabbix Moscow Meetup上讨论了这个插件。 对于那些不喜欢阅读但喜欢看的人,有一个视频报告。

整合漏洞信息


Zabbix中插件的结果如下:


仪表板
这是Zabbix中的仪表板。 在其上从左到右显示以下信息:


  • 服务器的CVSS分数分布。 饼形图显示了这种关系-我们拥有多少个具有严重漏洞的服务器,有多少个非严重漏洞拥有或根本没有已知漏洞。
  • 整个基础架构的CVSS分数中位数。 它以图形的形式显示,可让您观察其变化的动态。
  • 易受攻击的软件包的列表,其中列出了该漏洞对基础结构的影响的索引。
  • 易受攻击的服务器的完整列表,每个服务器均具有威胁级别。
  • 已在基础架构中“找到”的安全公告列表。

下面更详细地介绍最有趣的部分:


有关易受攻击的服务器的信息:


主持人


该面板显示漏洞级别高于严重级别的所有服务器的列表。 在插件设置中指定了可接受的最低临界级别,此后服务器开始显示为易受攻击。


以下信息可用于每个服务器:


  1. 实际上是易受攻击的服务器的名称。
  2. CVSS服务器最高分数。 将显示为此服务器找到的所有漏洞中最高的分数。
  3. 消除此服务器上所有检测到的漏洞的命令。 完成后,我们将获得一台服务器,在该服务器上没有已知的版本漏洞。

数据通过CVSS排序从最大到最小显示。 这使您可以将最需要关注的服务器始终放在列表的最前面。


以下面板显示了易受攻击的软件包:


配套


对于我们基础架构中的每个易受攻击的软件包,这里都有一个简短的摘要:


  1. 易受攻击的程序包的名称。
  2. 软件包的漏洞版本
  3. 安装该漏洞版本的服务器的数量。
  4. 此软件包版本的CVSS分数。
  5. 此漏洞对基础架构的影响的索引。
  6. 在其上检测到软件包的易受攻击版本的所有服务器的列表。
  7. 链接到安全公告。 使您可以阅读并了解此漏洞在我们所处的环境中的重要性。
  8. 团队修复了此软件包中的漏洞。

数据按影响指数从最大到最小排序。


影响指数是受影响的服务器数乘以CVSS漏洞分数。 通常,分数不太高的漏洞在基础架构中更为普遍,因此潜在的危险更大。


选择漏洞管理策略


但是,您不能仅仅获取所有服务器上的所有软件包并将其升级到最新版本,从而消除了现有漏洞。


在包含多台服务器的任何基础架构中,都有许多限制:一种软件对另一种版本的依赖,功能受损的风险等等。


因此,总有一个选择-我们可以轻松更新哪些软件包。 哪些方案需要单独的工作计划以实施补偿措施。 通过我们可以接受的风险。


插件中建议的方法使您可以选择消除适合您的漏洞的策略:


  • 整个基础架构中的一个漏洞:如果特定漏洞对您而言至关重要,则插件可为您提供有关此漏洞在您的基础架构中的位置以及如何在整个基础架构中立即进行修复的信息。
  • 特定服务器上的所有漏洞:例如,如果您需要位于DMZ或公司外围的完全安全的服务器,则使用该插件可获得有关如何消除在其上发现的所有漏洞的信息。

修复发现的漏洞


但是,仅仅知道我们拥有哪些漏洞并确定如何以及可以解决哪些漏洞是不够的。 也有必要这样做!


Puppet或Ansible等系统广泛用于集中式配置管理和软件更新。 您可以使用fix命令修复该漏洞,并使用此类系统集中执行它。


如果您的基础架构不使用此类系统,则Zabbix威胁控制可让您直接从Zabbix Web界面消除漏洞。



为此,该插件使用标准的Zabbix功能:事件确认和远程命令执行:


  1. 授权用户通过Web界面确认问题后,应立即予以解决;
  2. 启动远程命令,该命令在目标服务器或服务器列表上执行,该命令用于修复漏洞。

如何运作



  1. Zabbix服务器通过zabbix代理接收有关基础结构中所有服务器的软件包和操作系统的信息。
  2. 该插件(使用Zabbix API)接收先前由Zabbix服务器编译的OS报告。 该插件不会直接从服务器接收任何信息。 并且在此阶段不需要直接与他们联系。
  3. 处理完从Zabbix收到的信息后,该插件会将其传递给Vulners。 他从中收到一份发现的漏洞列表,它们的严重性以及消除这些漏洞的方法。
  4. 该插件处理接收到的数据,对其进行汇总以生成统计信息,并生成数据包以传输到Zabbix。
  5. 该插件以所需的监视系统格式推送Zabbix数据。 他使用zabbix-sender实用程序执行此操作。 之后,您已经可以监视与发现的漏洞有关的所有信息,这些信息显示在前面显示的仪表板上。
  6. 确认问题后,将执行远程命令,该命令将传递给插件:
    • 发起人的名字
    • 修复漏洞修复团队
    • 服务器清单
  7. 收到所有此Zabbix威胁控制后:
    • 检查更正命令是否由需要的人启动。 从不需要的人那里-他不接受命令:)
    • 在必要数量的服务器上执行传送给它的命令。

默认情况下,该插件使用zabbix-get实用程序将修复命令发送到易受攻击的服务器,并使用nowait参数访问目标服务器上的Zabbix代理。 这种连接方法允许更新程序包的过程在后台运行,而无需依赖zabbix代理程序的过程。 也可以通过简单的SSH连接在目标服务器上执行命令。 在插件的配置文件中,选择了执行修订命令的方式作为选项。


由于工作-没有易受攻击的服务器,您的睡眠和心情很好:)


安装方式


我们讨论了Zabbix威胁控制是什么,为什么需要它以及它如何工作。 现在,我们将告诉您如何安装和配置它!


依存关系


要工作,该插件不需要任何超自然的东西。 在设置计划的Zabbix服务器上,必须满足以下条件:


  • zabbix v3.4,用于使用自定义仪表板(它们仅在此版本中出现)。
  • 需要zabbix-sender才能将漏洞数据发送到监视系统。
  • zabbix-get将修复漏洞的修复命令发送到服务器。
  • 带有模块的python v3pyzabbix,jpath,请求运行主插件脚本。

在所有需要扫描漏洞的服务器上 ,仅:


  • zabbix-agent,用于收集数据和运行脚本。
  • python v2运行脚本来收集操作系统报告。

从软件包安装插件


首先,将存储库与软件包连接:


RPM分配


  rpm -Uhv https://repo.vulners.com/redhat/vulners-repo.rpm 

DEB分布


  wget https://repo.vulners.com/debian/vulners-repo.deb dpkg -i vulners-repo.deb 

之后,在Zabbix服务器上,我们安装提供插件的所有逻辑的主软件包以及在OS上报告的软件包:


RPM分配


  yum install zabbix-threat-control-main zabbix-threat-control-host 

DEB分布


  apt-get update && apt-get install zabbix-threat-control-main zabbix-threat-control-host 

在需要扫描漏洞的所有其他服务器上,我们安装了一个生成操作系统报告的软件包:


RPM分配


  yum install zabbix-threat-control-host 

DEB分布


  apt-get update && apt-get install zabbix-threat-control-host 

从源安装


如果您更喜欢从源代码安装,那么这也非常简单:


在Zabbix服务器上,我们安装了提供脚本的所有逻辑的主要脚本以及在OS上报告的脚本:


  git clone https://github.com/vulnersCom/zabbix-threat-control.git # main mkdir -p /opt/monitoring/zabbix-threat-control cp zabbix-threat-control/ztc* /opt/monitoring/zabbix-threat-control/ chown -R zabbix:zabbix /opt/monitoring/zabbix-threat-control chmod 640 /opt/monitoring/zabbix-threat-control/ztc_config.py touch /var/log/zabbix-threat-control.log chown zabbix:zabbix /var/log/zabbix-threat-control.log chmod 664 /var/log/zabbix-threat-control.log # host cp -R zabbix-threat-control/os-report /opt/monitoring/ chown -R zabbix:zabbix /opt/monitoring/os-report 

在需要扫描漏洞的所有其他服务器上,我们仅安装在OS上报告的脚本:


  git clone https://github.com/vulnersCom/zabbix-threat-control.git # host mkdir -p /opt/monitoring/ cp -R zabbix-threat-control/os-report /opt/monitoring/ chown -R zabbix:zabbix /opt/monitoring/os-report 

客制化


安装后,必须配置插件并为它的运行准备一个监视系统。 以下是所有必要操作的分步说明。


配置需要扫描的服务器


您必须启用Zabbix代理才能执行远程命令。 为此,在需要扫描的所有服务器上,如下所示更改zabbix-agent配置文件中的参数:


 EnableRemoteCommands=1 LogRemoteCommands=1 

/etc/zabbix/zabbix_agentd.conf代理程序配置文件通常位于以下位置: /etc/zabbix/zabbix_agentd.conf


如果要使用功能通过Zabbix Threat Control消除发现的漏洞,则需要允许zabbix用户更新软件包(但不能安装或卸载它们)。


为此, /etc/sudoers下行添加到/etc/sudoers文件中:

对于RPM发行版,该行如下所示:


 zabbix ALL=(ALL) NOPASSWD: /usr/bin/yum -y update * 

对于DEB发行版,有些不同:


 zabbix ALL=(ALL) NOPASSWD: /usr/bin/apt-get --assume-yes install --only-upgrade * 

连接到Vulners


要使用Vulners API,您需要一个api密钥。 要获得它:


  • 注册vulners.com
  • 在您的帐户中,转到“ KEYS API”标签
  • 在“范围”区域中选择“扫描”,然后按“生成新密钥”。

您将获得一个如下所示的api密钥:RGB9YPJG7CFAXP35PMDVYFFJPGZ9ZIRO1VGO9K9269B0K86K6XQQQR32O6007NUK



现在,您需要将Vulners api密钥添加到插件配置文件/opt/monitoring/zabbix-threat-control/ztc_config.py


一个例子:


 vuln_api_key = 'RGB9YPJG7CFAXP35PMDVYFFJPGZ9ZIRO1VGO9K9269B0K86K6XQQQR32O6007NUK' 

连接到Zabbix


为了使插件能够连接到Zabbix,您需要在配置文件中指定以下数据: /opt/monitoring/zabbix-threat-control/ztc_config.py


  • 使用Zabbix-API的Zabbix Web界面地址;
  • 用户名和密码,我们将使用该用户名和密码连接到Zabbix API。

Zabbix服务器域名和使用zabbix-sender实用程序发送数据的端口。

一个例子:


 zbx_pass = 'yourpassword' zbx_user = 'yourlogin' zbx_url = 'https://zabbixfront.yourdomain.com' zbx_server_fqdn = 'zabbixserver.yourdomain.com' zbx_server_port = '10051' 

准备Zabbix


您必须在Zabbix中创建提供插件的对象。 为此,请运行脚本/opt/monitoring/zabbix-threat-control/ztc_create.py 。 该脚本将验证插件配置正确,并使用API​​在Zabbix中创建:


  1. 向其中添加显示漏洞的主机的主机组
  2. 从所有服务器收集OS报告的模板
  3. 用于按软件包,服务器,公告和常规统计信息显示漏洞的主机
  4. 用于执行远程漏洞修复命令的操作。
  5. 仪表板可轻松显示所有这些信息。


在Zabbix中创建所有对象后,脚本将显示:


  • 链接到Zabbix中创建的仪表板,该仪表板上将显示漏洞。
  • 基础架构扫描漏洞的时间将启动。

在Zabbix中创建所有必需的对象之后,您需要转到Zabbix Web界面,并将脚本刚创建的“ Vulners OS-Report”模板与所有需要扫描漏洞的服务器链接。



之后,仍然需要等待插件在安装期间指定的时间启动。


扫描!


每天通过脚本指定的时间通过“ Vulners-Statistics”主机上的“ Service Item ...”自动ztc.py主数据处理脚本( ztc.py )。


通过更改此数据元素中的“计划间隔”,可以将插件的开始时间更改为任何方便的时间。 在这种情况下,还需要在“ Vulners OS-Report”模板的三个数据元素中调整统计信息收集时间-模板中的指标应比“ Vulners-Statistics”主机上的主要“ Service Item ...”指标提前10 ... 15分钟。


处理所有漏洞数据的时间取决于基础架构中的服务器数量以及在其上安装的软件包的数量。 处理1000台服务器大约花费30分钟。


计划


这只是Zabbix威胁控制插件的第一个版本。 我们将继续开发它。


计划:

  • 在CVE基础结构中找到的仪表板上添加信息。
  • 拒绝在代理上安装任何脚本,并使用Zabbix代理中内置的数据元素密钥收集有关操作系统和软件包的所有必要信息。

而且由于它是开源的-请加入我们! 拉请求欢迎:)

Source: https://habr.com/ru/post/zh-CN416137/


All Articles