大魏说:

本文实验较长,要展示的是两个场景:

  1.  红帽insights是一个saas服务,可以主动发现rhel中的问题,然后报出来,并给出修复建议,即命令行。我们可以粘贴给出的命令行,手工修复,再次检查,没有这个报错了。

  2. insights检查出的问题,可以自动在ansible中生成修复的playbook,我们只需要登录到ansible tower,使用生成的playbook创建temoplate,然后执行即可,问题会被自动修复。


本实验的目的是向您介绍Red Hat Insights的主动安全功能。在本实验中,我们将关注Red Hat Insights的特定安全功能。


Red Hat Insights旨在通过提供预测性分析来主动评估Red Hat系统的安全性,性能和稳定性。红帽insights帮助您从被动式系统管理转变为主动式系统管理,提供可行的情报,并提高基础架构风险和最新安全威胁的可见性。Red Hat Insights的运营分析使您能够预防停机并避免交火,同时更快地响应新风险。


Red Hat Insights建议针对检测到风险的单个系统量身定制。这样,您可以确定Red Hat Insights识别的操作已经过验证,并且对于每种检测到的风险都有经过验证的解决方案,从而减少了第三方安全扫描程序识别出的关键风险中可能出现的误报。红帽insights基于红帽不断发展的威胁源,提供对基础架构中安全风险的预测分析。


通过对Red Hat Insights元数据和基于超过15年的企业客户支持的精选知识进行分析,Red Hat能够识别出严重的安全漏洞,统计上频繁出现的风险以及已知的错误配置。我们通过Red Hat Insights报告和警报将这些知识扩展到我们的客户,从而可以预测受监视系统上将发生的情况,发生的原因以及如何在出现问题之前解决问题。


红帽insights功能已集成到红帽客户门户,红帽卫星,红帽CloudForms和红帽Ansible塔中。 Red Hat Insights的建议是人类可读的,在大多数情况下,只需将其复制并粘贴到终端中即可解决问题。您还可以使用Red Hat Insights生成的Ansible剧本或Red Hat Ansible Tower集成自动修复基础架构中的主机。


实验5.1配置Red Hat Insights客户端

Red Hat Insights客户端具有一个配置文件(insights-client.conf),可以根据需要对其进行修改。在此练习中,我们将同时配置ic1.summit.example.com和ic4.summit.example.com客户端。


请注意,Ansible星系中还有一个Red Hat Insights客户端Ansible角色,它将安装,配置系统并将其注册到Red Hat Insights服务。在本练习中,我们将不会使用Ansible角色,但作为参考,您可以在此处在Ansible Galaxy中找到此角色。


练习5.1.1更新主机ic1.summit.example.com,以排除文件无法被Red Hat Insights访问并在该主机上运行Red Hat Insights集合

如果还没有,请从台式机系统以实验室用户的身份登录到实验室主机,并用实验室的GUID代替GUID。然后,成为工作站主机上的root。



查看默认配置文件。

[root@workstation-8721 ~]#  ssh ic1.summit.example.com

Warning: Permanently added 'ic1.summit.example.com' (ECDSA) to the list of known hosts.

Last login: Mon Apr 22 08:34:41 2019 from workstation-repl.rhpds.opentlc.com

[root@ic1 ~]#  cd /etc/insights-client/

[root@ic1 insights-client]# cat insights-client.conf

[insights-client]

# Example options in this file are the defaults


# Change log level, valid options DEBUG, INFO, WARNING, ERROR, CRITICAL. Default DEBUG

#loglevel=DEBUG


# Log each line executed

#trace=False


# Attempt to auto configure with Satellite server

#auto_config=True


# Change authentication method, valid options BASIC, CERT. Default BASIC

#authmethod=BASIC


# username to use when authmethod is BASIC

#username=

# password to use when authmethod is BASIC

#password=


#base_url=cert-api.access.redhat.com:443/r/insights


# URL for your proxy.  Example: http://user:pass@192.168.100.50:8080

#proxy=


# Automatically update the dynamic configuration

#auto_update=True


# Obfuscate IP addresses

#obfuscate=False


# Obfuscate hostname

#obfuscate_hostname=False


# Disallow Insights from creating cron job

#no_schedule=False


# Display name for registration

#display_name=



现在创建一个remove.conf文件。在此文件中,我们告诉Red Hat Insights不要访问以下文件:/ etc / hosts和/etc/resolv.conf。我们还告诉Red Hat Insights不要访问netstat命令。您可以使用关键字和模式从Red Hat Insights隐藏信息。我们已经注释掉了文本,使您可以隐藏以下关键字和模式:密码和超级秘密关键字。让我们创建remove.conf文件,然后使用vi文本编辑器将下面的文本添加到该文件中。

[root@ic1 insights-client]# cat remove.conf

[remove]

files=/etc/hosts,/etc/resolve.conf

commands=netstat

#patterns=password,username

#keywords=super$ecret,ultra$ecret


现在,让我们将文件权限更改为0600。请注意,0660文件权限将在remove.conf上起作用,并且应该继承正确的selinux类型。

[root@ic1 insights-client]# chmod 0660 remove.conf


现在,让我们从命令行在ic1客户端上运行Red Hat Insights集合。

[root@ic1 insights-client]# insights-client

WARNING: Excluding data from files

Starting to collect Insights data for ic1.summit.example.com

WARNING: Skipping command /bin/netstat -neopa

WARNING: Skipping file /etc/hosts

Uploading Insights data.

Successfully uploaded report from ic1.summit.example.com to account 6057187.


请注意,--help选项提供了大量选项,可根据您的环境定制Red Hat Insights的执行。通过执行以下命令来看看。

[root@ic1 insights-client]# insights-client --help

usage: insights-client [-h] [--test-connection] [--compliance] [--verbose]

                       [--net-debug] [--conf CONF] [--disable-schedule]

                       [--group GROUP] [--silent] [--support] [--version]

                       [--offline] [--status] [--force-reregister]

                       [--keep-archive] [--to-stdout] [--enable-schedule]

                       [--no-upload] [--display-name DISPLAY_NAME]

                       [--validate] [--logging-file LOGGING_FILE]

                       [--retry RETRIES] [--unregister] [--register] [--quiet]


optional arguments:

  -h, --help            show this help message and exit

  --test-connection     Test connectivity to Red Hat

  --compliance          Scan the system using openscap and upload the report

  --conf CONF, -c CONF  Pass a custom config file

  --disable-schedule    Disable automatic scheduling

  --group GROUP         Group to add this system to during registration

  --silent              Display no messages to stdout

  --version             Display version

  --offline             offline mode for OSP use

  --to-stdout           print archive to stdout; sets --quiet and --no-upload

  --enable-schedule     Enable automatic scheduling for collection to run

  --display-name DISPLAY_NAME

                        Set a display name for this system.

  --validate            Validate remove.conf

  --logging-file LOGGING_FILE

                        Path to log file location

  --retry RETRIES       Number of times to retry uploading. 180 seconds

                        between tries

  --unregister          Unregister system from the Red Hat Insights Service

  --register            Register system to the Red Hat Insights Service

  --quiet               Only display error messages to stdout


Debug options:

  --verbose             DEBUG output to stdout

  --net-debug           Log the HTTP method and URL every time a network call

                        is made.

  --support             Create a support logfile for Red Hat Insights

  --status              Check this machine's registration status with Red Hat

                        Insights

  --force-reregister    Forcefully reregister this machine to Red Hat. Use

                        only as directed.

  --keep-archive        Do not delete archive after upload

  --no-upload           Do not upload the archive

练习5.1.2安装Red Hat Insights客户端并将主机ic4.summit.example.com注册到Red Hat Insights

如果还没有,请从台式机系统以实验室用户的身份登录到实验室主机,并用实验室的GUID代替GUID。然后,成为工作站主机上的root。


在ic4.summit.example.com主机上安装Red Hat Insights客户端。请注意,在ic1.summit.example.com主机上已经预安装了Red Hat Insights客户端。


在旧版本中,该软件包称为redhat-access-insights。由于python版本较旧,因此您需要删除python-chardet软件包。

[root@ic4 ~]# yum -y remove python-chardet
[root@ic4 ~]# yum install -y insights-client

现在,使用--display-name参数将此主机注册到Red Hat Insights。此参数允许您将显示的主机名设置为Red Hat Insights中系统默认值以外的其他值。如果您希望混淆分析中使用的主机名,这将很有用。请注意,主机名必须正确解析才能使Ansible剧本和Red Hat Ansible Tower管理能够进行自动修复。结果,显示名称应该与有效的主机名匹配,即使它不是可公开访问的DNS名称。

[root@ic4 ~]#  insights-client --display-name=ic4.summit.example.com --register

Traceback (most recent call last):

  File "/usr/bin/insights-client-run", line 9, in <module>

    load_entry_point('insights-client==3.0.3', 'console_scripts', 'insights-client-run')()

  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point

    return get_distribution(dist).load_entry_point(group, name)

  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point

    return ep.load()

  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load

    entry = __import__(self.module_name, globals(),globals(), ['__name__'])

  File "/usr/lib/python2.7/site-packages/insights_client/run.py", line 7, in <module>

    from insights.client.phase import v1 as client

  File "/var/lib/insights/newest.egg/insights/__init__.py", line 27, in <module>

  File "/var/lib/insights/newest.egg/insights/core/__init__.py", line 13, in <module>

  File "/var/lib/insights/newest.egg/insights/parsr/__init__.py", line 192, in <module>

  File "/usr/lib/python2.7/site-packages/six.py", line 631, in with_metaclass

    return meta("NewBase", bases, {})

  File "/var/lib/insights/newest.egg/insights/parsr/__init__.py", line 188, in __init__

AttributeError: type object 'NewBase' has no attribute 'process'

This host has already been registered.

Automatic scheduling for Insights has been enabled.

Traceback (most recent call last):

  File "/usr/bin/insights-client-run", line 9, in <module>

    load_entry_point('insights-client==3.0.3', 'console_scripts', 'insights-client-run')()

  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point

    return get_distribution(dist).load_entry_point(group, name)

  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point

    return ep.load()

  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load

    entry = __import__(self.module_name, globals(),globals(), ['__name__'])

  File "/usr/lib/python2.7/site-packages/insights_client/run.py", line 7, in <module>

    from insights.client.phase import v1 as client

  File "/var/lib/insights/newest.egg/insights/__init__.py", line 27, in <module>

  File "/var/lib/insights/newest.egg/insights/core/__init__.py", line 13, in <module>

  File "/var/lib/insights/newest.egg/insights/parsr/__init__.py", line 192, in <module>

  File "/usr/lib/python2.7/site-packages/six.py", line 631, in with_metaclass

    return meta("NewBase", bases, {})

  File "/var/lib/insights/newest.egg/insights/parsr/__init__.py", line 188, in __init__

AttributeError: type object 'NewBase' has no attribute 'process'

Starting to collect Insights data for ic4.summit.example.com

Uploading Insights data.

Successfully uploaded report from 41d3c62e-5c18-42ad-a1ff-65f7c37cc315 to account 6057187.


注意:如果您在Insights-client --register期间看到回溯消息,则需要执行yum -y删除python-chardet并再次执行yum -y安装Insights-client。



实验5.2手动修复有效载荷注入安全性问题

现在我们的ic1.summit.example.com和ic4.summit.example.com主机均已配置并注册了Red Hat Insights,现在让我们解决Red Hat Insights向我们报告的一些安全问题。


在此实验练习中,我们将通过ic1.summit.example.com客户端上的有效负载注入(CVE-2016-5696)手动修复易受中间人攻击的特定内核。


在Red Hat Satellite服务器(https://sat64-GUID.rhpds.opentlc.com)上,以admin作为用户名


导航到“insights”→“概述”,您可以在其中查看所有注册的系统,操作摘要(按优先级突出显示)以及Red Hat的最新更新。

实现真正意义上的RHEL主动合规:安全合规系列3_java

实现真正意义上的RHEL主动合规:安全合规系列3_java_02

接下来,单击“ Insights”→“ Inventory”以查看所有已注册到Red Hat Insights的客户端。在我们的例子中,客户端是:ic1.summit.example.com和ic4.summit.example.com。注意,在此视图中,您还可以看到Red Hat Insights在客户端上发现的问题数量。

实现真正意义上的RHEL主动合规:安全合规系列3_java_03

单击ic1.summit.example.com系统。单击系统名称时,您将看到影响它的问题列表。

实现真正意义上的RHEL主动合规:安全合规系列3_java_04

实现真正意义上的RHEL主动合规:安全合规系列3_java_05

实现真正意义上的RHEL主动合规:安全合规系列3_java_06

实现真正意义上的RHEL主动合规:安全合规系列3_java_07

实现真正意义上的RHEL主动合规:安全合规系列3_java_08

实现真正意义上的RHEL主动合规:安全合规系列3_java_09

实现真正意义上的RHEL主动合规:安全合规系列3_java_10

请注意,您的系统显示有多个安全漏洞。

注意

列出的安全问题之一是Meltdown and Spectre漏洞。这是安全性问题,表明内核容易受到现代微处理器(CVE-2017-573 / Spectre,CVE-2017-5754 / Meltdown)中的边通道攻击的影响。为了节省时间,我们不会在本练习中解决此特定的安全问题,因为Meltdown和Spectre的修复程序需要内核升级,而这需要重新启动系统。

注意

我们的目标是在不导致停机的情况下解决有效载荷注入问题,并确保它不再显示为Red Hat Insights中的漏洞。具体而言,此有效负载注入问题使内核容易受到有效负载注入的中间人的攻击。在Linux内核处理网络挑战ack RFC 5961的过程中发现一个漏洞,攻击者可以在该漏洞中确定共享计数器。此缺陷使位于不同子网上的攻击者可以注入或接管服务器与客户端之间的TCP连接,而无需使用传统的中间人(MITM)攻击。

使用浏览器的搜索功能搜索有效载荷注入。

实现真正意义上的RHEL主动合规:安全合规系列3_java_11

阅读该漏洞的描述表明,sysctl变量设置为允许被利用的级别。 我们希望通过更改sysctl变量并使它在重新启动后永久存在来进行主动缓解。 在这种情况下,我们不想更新内核或重启,因为我们不想停机。



接下来,重新加载内核配置。

[root@workstation-8721 ~]# ssh ic1.summit.example.com

Warning: Permanently added 'ic1.summit.example.com' (ECDSA) to the list of known hosts.

Last login: Tue Oct 15 22:17:24 2019 from workstation-8721.rhpds.opentlc.com

[root@ic1 ~]#  echo "net.ipv4.tcp_challenge_ack_limit = 2147483647" >> /etc/sysctl.conf

[root@ic1 ~]# sysctl -p

net.ipv4.tcp_challenge_ack_limit = 100

vm.legacy_va_layout = 0

net.ipv4.tcp_challenge_ack_limit = 2147483647

[root@ic1 ~]#


应用主动缓解后,我们希望系统报告任何更改。 以root用户身份在ic1.summit.example.com上运行以下命令:

[root@ic1 ~]#  insights-client

WARNING: Excluding data from files

Starting to collect Insights data for ic1.summit.example.com

WARNING: Skipping command /bin/netstat -neopa

WARNING: Skipping file /etc/hosts

Uploading Insights data.

Successfully uploaded report from ic1.summit.example.com to account 6057187.

[root@ic1 ~]#

等待此步骤完成,然后再进行下一步。


在Red Hat Satellite UI中,单击“insights”→“库存”。

单击您的客户端系统ic1.summit.example.com。 您会注意到动作数量减少了。


使用浏览器的搜索功能搜索有效载荷注入。 您将注意到,由于修复了该漏洞,不再列出此有效负载注入问题(之前19个,现在18个)。

实现真正意义上的RHEL主动合规:安全合规系列3_java_12

搜索actions,已经没有payload injection的报错。


实验5.3使用Red Hat Ansible Automation自动修复有效载荷注入安全性问题

Red Hat Insights向我们提供的Ansible Playbook也可以使某些问题自动化。 Red Hat Insights报告的每个问题的左上角都有蓝色的Ansible徽标(如果有Ansible剧本可用)。 如果没有可用的Ansible剧本,则Ansible徽标为灰色。


对于本实验练习的这一部分,我们将使用Ansible剧本以自动化的方式自动修复有效载荷注入漏洞,而不是像在上一练习中那样手动进行修复。 我们将在ic4.summit.exmaple.com客户端系统上执行这些步骤。


首先,我们需要创建一个计划,其中将使用Red Hat Insights提供的Ansible Playbook解决Red Hat Insights发现的问题。 为了做到这一点,在您的Red Hat Satellite UI中,单击Insights→Planner。

实现真正意义上的RHEL主动合规:安全合规系列3_java_13

 Create a plan.

实现真正意义上的RHEL主动合规:安全合规系列3_java_14

实现真正意义上的RHEL主动合规:安全合规系列3_java_15

如您所见,有两种方法可以解决此问题:第一种选择是通过更新内核。 第二个选项是将所需的更改应用于/etc/sysctl.conf文件,添加缓解配置,然后重新加载内核配置。 红帽insights为我们提供了选择所需分辨率的机会。 在此实验练习中,我们希望防止此问题引起的计划外停机

实现真正意义上的RHEL主动合规:安全合规系列3_java_16

保存计划后,将显示计划器屏幕,您可以在其中查看新创建的计划以及解决的问题和受影响的系统。


现在,我们已经制定了解决ic4.summit.exampl.com的有效负载漏洞的计划,我们需要将Red Hat Insights信息与Red Hat Ansible Tower同步。


用admin 登录! 通过https://tower-GUID.rhpds.opentlc.com访问Red Hat Ansible Tower,将GUID替换为实验室的GUID。


从左侧的主菜单中单击模板。 找到“insights facts”作业模板,然后单击“火箭飞船”以运行此作业。 该作业模板将扫描来自主机的Ansible事实,并收集必要的主机信息,以显示Red Hat Ansible Tower中这些主机的Red Hat Insights数据。

实现真正意义上的RHEL主动合规:安全合规系列3_java_17

实现真正意义上的RHEL主动合规:安全合规系列3_java_18

导航到库存,然后单击“insights库存”。

实现真正意义上的RHEL主动合规:安全合规系列3_java_19

实现真正意义上的RHEL主动合规:安全合规系列3_java_20

在HOSTS页面上向下滚动至ic4.summit.example.com。 单击此主机的“insights”选项(字母i)。 在这里,您可以查看与此主机相关的所有风险和漏洞。 这是您在上一步中扫描的insights数据。

实现真正意义上的RHEL主动合规:安全合规系列3_java_21

实现真正意义上的RHEL主动合规:安全合规系列3_java_22

从左侧的主菜单导航至“项目”,然后找到“ Insights Planner Sync”项目。 然后,单击同步按钮。 这会将Red Hat Insights信息与Red Hat Ansible Tower同步。

实现真正意义上的RHEL主动合规:安全合规系列3_java_23

同步应该成功完成。 现在,您可以使用Red Hat Ansible Tower进行修复了。


注意

Red Hat Ansible Tower还可以识别托管主机上的Red Hat Insights问题。 以上所有项目和计划都可以通过API或计划运行与Red Hat Ansible Tower自动同步和更新。

实现真正意义上的RHEL主动合规:安全合规系列3_java_24

导航至模板,然后单击+,然后选择作业模板下拉菜单。 我们将创建一个作业模板来运行我们创建的计划之一。 您应该已经使用此实验中的唯一GUID创建了计划。


对于模板的名称,请使用:GUID有效负载修复程序。 作业类型应为“运行”。 对于“库存”,选择“insights库存”。 对于“项目”,选择“ Insights Planner Sync”。 在“剧本”下拉列表中,选择在Insights Planner中使用唯一的GUID创建的剧本。 对于凭据,请选择“ Insights Fix All Machine Credentials”。 最后的任务是单击OPTIONS下的Enable Privilege Escalation,然后单击Save。

实现真正意义上的RHEL主动合规:安全合规系列3_java_25

实现真正意义上的RHEL主动合规:安全合规系列3_java_26

实现真正意义上的RHEL主动合规:安全合规系列3_java_27

实现真正意义上的RHEL主动合规:安全合规系列3_java_28

最后,导航至“insights”→“计划器”。 请注意,在计划下,每个计划列出了已解决的操作数。

实现真正意义上的RHEL主动合规:安全合规系列3_java_29


[root@tower _63__insights_planner_sync]# cat  'GUID Payload Remediation-41818.yml'

---

# Red Hat Insights has recommended one or more actions for you, a system administrator, to review and if you

# deem appropriate, deploy on your systems running Red Hat software. Based on the analysis, we have automatically

# generated an Ansible Playbook for you. Please review and test the recommended actions and the Playbook as

# they may contain configuration changes, updates, reboots and/or other changes to your systems. Red Hat is not

# responsible for any adverse outcomes related to these recommendations or Playbooks.

#

# Addresses maintenance plan 41818 (GUID Payload Remediation)

# https://access.redhat.com/insights/planner/41818

# Generated by Red Hat Insights on Wed, 16 Oct 2019 03:59:15 GMT


# Kernel vulnerable to man-in-the-middle via payload injection (CVE-2016-5696)

# Identifier: (CVE_2016_5696_kernel|KERNEL_CVE_2016_5696_URGENT,105,mitigate)

# Version: c988b9061f0c3720900ae391d72a59a89bf57294

- name: Set sysctl ipv4 challenge ack limit

  hosts: "ic4"

  become: true

  tasks:

    - name: "set the sysctl net.ipv4.tcp_challenge_ack_limit = 2147483647"

      sysctl:

        name: net.ipv4.tcp_challenge_ack_limit

        value: 2147483647

        sysctl_set: true



- name: run insights

  hosts: "ic4"

  become: True

  gather_facts: False

  tasks:

    - name: run insights

      command: redhat-access-insights

      changed_when: false[root@tower _63__insights_planner_sync]# ping ic4


在ansible tower中创建一个scm为insights为insights的项目:

实现真正意义上的RHEL主动合规:安全合规系列3_java_30

实现真正意义上的RHEL主动合规:安全合规系列3_java_31