使用高级运行时容器安全保护您的 Web 应用程序

427 阅读18分钟

使用高级运行时容器安全保护您的 Web 应用程序

学习使用 NeuVector 为 Kubernetes 或 OpenShift 集群实施容器和 Web 应用程序防火墙

作者:Glen Kosaka (NeuVector)、Shikha MaheshwariBalaji Kadambi 于 2021 年 9 月 30 日发布


概括

在此 Code Pattern 中,您为 Kubernetes 或 Red Hat OpenShift 集群设置云原生容器防火墙,并配置安全策略以检测和防止多种类型的恶意攻击。然后,您测试易受攻击的 Web 应用程序示例以监控和分析生成的警报。

描述

Web 应用程序安全性是任何可在 Internet 上访问的 Web 应用程序的强制性要求。对 Web 应用程序的攻击有多种类型,可能导致敏感和机密信息的丢失、欺诈和拒绝服务。非营利性基金会开放 Web 应用程序安全项目 (OWASP) 发布了对 Web 应用程序的十大攻击。必须实施 Web 应用程序安全以防止此类攻击。

云原生时代,应用部署在基于Kubernetes的容器环境中。容器安全对 Web 应用程序安全同样重要。容器运行时安全可以监控容器内的所有活动以检测威胁,并可以阻止未经授权的网络连接、进程或文件活动。

NeuVector是一种云原生容器防火墙,用于监控和保护生产中的 Kubernetes 容器部署。有了它,您可以检查容器网络流量,了解应用程序如何与其他应用程序通信,并保护和监控您的容器免受网络和应用程序攻击。NeuVector 为深度防御提供企业级安全性。

在此 Code Pattern 中,您将了解如何使用 NeuVector 来防止 Web 应用程序和容器运行时威胁。通过完成代码模式,您将学习如何:

  • 在 Kubernetes 和 Red Hat OpenShift 集群上部署 NeuVector。
  • 在 NeuVector 中配置安全策略以检测和防范以下类型的攻击:跨站请求伪造 (CSRF)、恶意文件上传、跨站脚本 (XSS)、敏感数据暴露、命令注入、SQL 注入、API 服务保护、和容器外壳访问。
  • 测试应用程序的攻击并分析 NeuVector 警报。

**注意:**此 Code Pattern 使用部署在容器内的Damn Vulnerable Web App (DVWA)来探索 NeuVector 的功能。使用此应用程序可以模拟所有不同类型的攻击。

流动

架构流程图

  1. 用户(开发人员)在 NeuVector 中配置安全策略。
  2. 用户(开发人员或黑客)访问 Web 应用程序并触发一些安全攻击。
  3. 用户(管理员或开发人员)在 NeuVector 仪表板上收到安全攻击通知和详细信息。

先决条件

脚步

  1. 在您的集群上部署 NeuVector
  2. 部署示例应用程序
  3. 探索 NeuVector
  4. 创建策略以检测攻击
  5. 将策略应用于 DVWA 应用程序
  6. 触发安全事件并分析警报

1. 在你的集群上部署 NeuVector

创建 NeuVector 容器安全平台的实例。

  • 如果您使用的是 IBM Cloud Kubernetes Service (IKS) 集群,请按照IBM Cloud 目录教程中的在 Kubernetes 上部署 NeuVector 服务中提供的说明进行操作。public IP使用命令记下您的 IKS 群集kubectl get nodes -o wide。您需要此信息来访问部署在集群上的应用程序。

  • 如果您计划使用 OpenShift 集群,则选择位于 OperatorHub Web 控制台界面内的 NeuVector Operator 之一并按照安装说明进行操作

    突出显示 NeuVector Operator 的 OperatorHub 界面的屏幕截图

**注:**此 Code Pattern 的以下步骤使用 IKS 集群通过使用IBM Cloud 目录中NeuVector 服务来部署示例应用程序和 NeuVector 。但是,NeuVector 在 Kubernetes 和 OpenShift 这两个平台上的工作方式与以下步骤中说明的完全相同。

2. 部署示例应用程序

对于此代码模式,我们选择了流行的开源DVWA(该死的易受攻击的 Web 应用程序)示例应用程序作为攻击目标。该应用程序的源代码可从github.com/digininja/D…

将该应用程序部署到 Kubernetes 集群的配置在此代码模式的GitHub 存储库中作为deployment.yaml文件提供。部署配置使用 DockerHub 上可用的容器映像,它使用端口 80,如下所示:

image: vulnerables/web-dvwa
ports:
  - containerPort: 80

展示更多

NodePort服务类型用于暴露所述应用程序作为服务,如下所示:

type: NodePort
  ports:
    - port: 80
      nodePort: 32425

展示更多

**注意:**提供的部署配置使用端口 32425 进行服务。如果此端口不可用或您想使用其他端口,请在文件中修改它deployment.yaml

运行以下命令来部署应用程序:

kubectl apply -f deployment.yaml

展示更多

访问位于 的应用程序http://[public-ip-of-cluster]:32425/,替换public-ip-of-cluster为您在步骤 1 中记下的 IKS 集群的公共 IP 。

要访问该应用程序,请使用默认凭据登录该应用程序admin/password。首次登录应用程序后,您将看到“数据库设置”页面。

数据库设置页面的屏幕截图

单击创建/重置数据库以配置所需的数据库及其应用程序的表。当您再次登录时,您会看到标题为“欢迎使用该死的易受攻击的 Web 应用程序”的页面。

设置数据库后出现的页面的屏幕截图

现在应用程序已启动并运行,让我们探索 NeuVector 并设置一些安全策略。

3. 探索 NeuVector

使用其 webui 链接访问 NeuVector。

**注意:**在继续操作之前,请确保通过提供正确的许可证代码来激活 NeuVector。IBM Cloud 目录教程中在 Kubernetes 上部署 NeuVector 服务的步骤 3.2 中为 IKS 解释了该过程。

使用admin/admin首次你登录或使用您的新密码,如果你已经改变了它。您将被定向到 NeuVector 仪表板,如下面的屏幕截图所示。仪表板根据安全事件、风险、易受攻击的 Pod 等显示不同类型的图表。但如果您是第一次访问该服务,大多数图表可能没有任何数据。

NeuVector 仪表板的屏幕截图

选择Network Activity,您会看到 Pod 正在您的集群中运行,类似于下图。请注意,您可以看到dvwa-app-**pod,它是在上一步中部署的示例应用程序的 pod。

集群中运行的 Pod 的网络活动图

您可以探索更多在此代码模式中使用的其他 NeuVector 函数:

  • Assets > Containers显示更多详细信息,例如其漏洞、统计信息、状态(发现/监控/保护)和扫描状态。建议您打开“自动扫描”以启动所有容器和主机的运行时漏洞扫描,然后在几分钟后返回查看结果。
  • 资产 > 系统组件显示系统组件,例如控制器 pod、扫描仪 pod 和执行器。
  • 策略 > 组使您能够按部署(应用程序)组进行过滤。例如,如果您使用 过滤您的示例应用程序dvwa,当您选择该组时,您可以添加更多规则(进程配置文件/文件访问/网络)、数据丢失防护(DLP)、切换模式(例如监控到保护) 、导出组策略等。
  • 策略 > DLP 传感器允许您添加更多 DLP 传感器,如下一步中所述。定义 DLP 传感器后,您可以将其应用于任何组。
  • 通知 > 安全事件是您根据应用的规则和 DLP 传感器获取所有类型安全警报的地方。还可以根据规则的组和类型过滤安全事件。

观看NeuVector 101网络研讨会,了解 NeuVector 的综合指南。在您探索这些功能之后,您就可以在您的应用程序中使用 NeuVector。按照以下步骤设置您自己的安全策略并进行测试。

4. 创建策略来检测攻击

现在让我们设置一些策略来检测各种类型的攻击。

**注意:**这些 DLP 规则是为演示目的而创建的。当在真实环境中使用时,应该对它们进行微调以减少误报和漏报。通常,这些模式依赖于应用程序,应使用特定应用程序进行测试。

一种跨站请求伪造(CSRF)

CSRF 利用执行敏感操作的 API,例如更改密码或删除帐户。部署的 DVWA 应用程序公开了一个用于更改密码的 API:http://[public-ip-of-cluster]:32425/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change

**注意:**是您之前记下的集群的公共 IP。 public-ip-of-cluster

在经过验证的有效会话中,可以调用此 API 来更改用户的密码。它可以被攻击者利用。

让我们设置一个策略来检测对此 API 的调用。

  • 单击NeuVector 仪表板上的策略 -> DLP 传感器

    DLP 传感器选项在仪表板菜单中策略下的位置的屏幕截图

  • 单击添加

    添加按钮所在位置的屏幕截图

  • 输入传感器的名称,例如sensor.cross.site.request.forgery

  • 输入用于检测的正则表达式模式的名称,例如CSRF.password.change.requested.

  • 输入可以检测攻击的正则表达式模式,例如password_new=.*&password_conf=.*.

    **注意:**传感器的名称和图案可以是您选择的任何名称。

    添加传感器页面的屏幕截图,您可以在其中添加详细信息

  • 单击**+,然后单击添加**。

同样,我们添加其他传感器。

B. 恶意文件上传

DVWA 应用程序提供了上传文件的功能。如果是一个带有shell命令的PHP文件,可以在容器shell上运行来获取一些机密信息,攻击者可以调用它来获取这些信息。为了避免这种情况,您可以设置一个安全策略来扫描要上传的文件并警告或拒绝该事件。例如,如果用户尝试上传包含运行 shell 命令的指令的 PHP 文件,则以下策略会检测shell_execPHP 文件中的命令。

添加用于检测恶意文件上传的传感器:

  • 传感器名称: sensor.malicious.phpfile.upload
  • 图案名称: malicious.file.shell.exec.command
  • 正则表达式模式: php.*shell_exec

C. 跨站脚本(XSS)

DVWA 应用程序具有易受攻击的 API,恶意脚本使用这些 API 将其发送到应用程序。这些脚本可以嵌入到 GET 请求的查询参数中或嵌入 POST 请求的表单数据中。以下策略检测从 GET 或 POST 请求内部发送到应用程序的脚本。

在 GET 请求中添加用于检测脚本的传感器:

  • 传感器名称: sensor.xss.get
  • 图案名称: XSS.script.in.request
  • 正则表达式模式: GET.*%3Cscript%3E.*HTTP/1

添加一个传感器来检测 POST 请求中的脚本:

  • 传感器名称: sensor.xss.post
  • 图案名称: XSS.post.request
  • 正则表达式模式: POST.\*%3Cscript%3E.\*

D. 敏感数据暴露

敏感数据,例如信用卡或社会安全号码,可以发送到应用程序。如果未加密,此类信息将受到损害。默认情况下,NeuVector 有一个 DLP 传感器sensor.creditcard,用于检测请求中的信用卡信息。您可以指定传感器来检测传输到应用程序的其他类型的敏感信息。

E. 命令注入

DVWA 应用程序公开了一个 API,您可以使用它来 ping 一个 IP 地址或 URL。可以使用 IP 地址或 URL 注入其他命令并接收结果。在这里,您设置了一个策略来检测注入的ls命令。

添加用于检测命令注入的传感器:

  • 传感器名称: sensor.command.injection
  • 图案名称: command.injection.ls.command
  • 正则表达式模式: POST.\*%3Bls.\*

F. SQL注入

NeuVector 具有内置的 SQL 注入检测功能,因此您无需在 DLP 传感器中创建模式签名。内置检测涵盖了无法通过简单的正则表达式模式检测到的不同形式的 SQL 注入。使用 DVWA 的 SQL 注入测试,攻击者可以在未经适当授权的情况下获取用户名和密码的完整列表。

**注意:**要使用 DVWA 应用程序测试 SQL 注入,您必须将 MySQL 数据库部署为单独的容器并配置 DVWA 以使用它。这是由数据库连接检测到的。

G. API服务保护

DVWA 应用程序公开了一个 API,可以访问上传的文件。用户可以尝试下载或执行该文件以获取一些重要信息。此策略检测对 API 的任何调用。

添加用于检测被禁止的 API 访问的传感器:

  • 传感器名称: sensor.forbidden.api
  • 图案名称: forbidden.uploads.folder.accessed
  • 正则表达式模式: GET.*/hackable/uploads.*HTTP

5. 将策略应用到 DVWA 应用程序

至此,您已定义了所需的 DLP 传感器。要查看它们的运行情况,您必须将这些传感器应用于 DVWA 应用程序。

一种。将 DLP 传感器添加到应用程序组

要添加传感器以监控 Web 应用程序的攻击,请从菜单中选择Policy并选择Groups

筛选 DWVA 应用程序,如以下屏幕截图所示。

突出显示 DLP 选项卡的组页面的屏幕截图

列出了您之前创建的传感器。选择所有传感器并单击应用

显示所有创建的 DLP 传感器的“选择传感器”页面的屏幕截图

湾 容器外壳访问或进程配置文件规则

转到 Process Profile Rules 选项卡,如下面的屏幕截图所示。

进程配置文件规则选项卡的屏幕截图和“sh”进程名称突出显示,操作设置为“拒绝”

最初,NeuVector 自己学习了应用程序运行所需的过程。因此,您会看到一些流程配置文件规则默认已定义,操作字段设置为Allow。您可以更改这些操作。

因此,如果用户尝试直接访问容器外壳或以某种方式获得访问权限,则进程配置文件规则会检测到它们。但是,如果您有特定要求,例如“不允许访问/bin/sh”,那么您可以使用Policy > Groups直接为组添加新规则,如屏幕截图所示。

C。更改应用程序的策略模式

此时,策略模式设置为Discover。由于现在所有策略都已设置,您可以更改策略模式并测试系统:

  • 从菜单中选择策略
  • 选择并为 DWVA 应用程序选择组,如下面的屏幕截图所示。
  • 单击切换模式并选择Monitor。监控模式为所有攻击生成警告警报,如下面的屏幕截图所示。

“成员”选项卡的屏幕截图,其中展开“切换模式”列表并突出显示“监视器”

如果您将模式更改为Protect,则会阻止任何触发安全事件的请求,并且该事件将与操作一起记录Deny

6. 触发安全事件并分析警报

一种。跨站请求伪造(CSRF)

让我们模拟一下这次攻击:

  • 在 DWVA 应用程序仪表板上,单击菜单栏上的CSRF

    CSRF 选项在菜单栏上的位置的屏幕截图

  • 输入新密码并确认后点击更改。这会向服务器发送更改密码的请求。

  • 在 NeuVector 仪表板上,选择通知并单击安全事件

您会看到以下屏幕截图中说明的违规行为:

CSRF 违规警告消息的屏幕截图

湾 恶意文件上传

创建一个包含以下内容的文件test.php

<?php echo shell_exec("ls");?>

展示更多

要模拟此攻击,请单击DWVA 应用程序仪表板菜单栏上的文件上传

单击Browse,选择test.php您之前创建的文件,然后单击Upload

在 NeuVector 仪表板上,选择通知并单击安全事件。您会看到以下屏幕截图中说明的违规行为。

恶意文件违规警告消息的屏幕截图

C. 反射式跨站脚本

DVWA 应用程序公开了一个 API,使攻击者的脚本能够在用户浏览器中运行:

http://[public-ip-of-cluster]:32425/vulnerabilities/xss_r/?name=[user entered data]

**注意:**是您之前记下的集群的公共 IP。 public-ip-of-cluster

让我们模拟一些对 DVWA 应用程序的 XSS 攻击:

  • 转到 DVWA 应用程序仪表板,然后单击菜单上的XSS(反射)
  • 你的名字是**什么?输入带有脚本标签的文本。**字段为<script>alert(xss)</script>.
  • 单击提交。您会看到一条xssJavaScript 警报消息。
  • 在 NeuVector 仪表板上,选择通知并单击安全事件

您会看到以下屏幕截图中说明的违规行为。

反映的跨站点脚本违规警报消息的屏幕截图

D. 存储跨站脚本

DVWA 应用程序在 URL 处公开一个表单:http://[public-ip-of-cluster]:32425/vulnerabilities/xss_s/

**注意:**是您之前记下的集群的公共 IP。可以在表单中嵌入 JavaScript 代码并提交。加载页面时,会为所有其他用户执行此脚本。 public-ip-of-cluster

  • 转到 DVWA 应用程序仪表板。
  • 单击菜单上的XSS(存储)
  • 名称字段中输入名称
  • 消息字段中,输入<script>alert('bad script')</script>
  • 单击签署留言簿。消息添加到页面上,脚本运行,显示bad scriptJavaScript 警报。
  • 在 NeuVector 仪表板上,选择通知并单击安全事件

您会看到以下屏幕截图中说明的违规行为。

存储的跨站点脚本违规警报消息的屏幕截图

E. 敏感数据暴露

在 DVWA 应用程序中,数据未加密。任何敏感信息,如信用卡或社会安全号码,都容易被盗。

让我们在应用程序中使用 XSS(存储)选项并在消息中嵌入信用卡号。

  • 转到 DVWA 应用程序仪表板。
  • 单击菜单上的XSS(存储)
  • 名称字段中输入名称
  • 消息字段中,输入4563876598762345
  • 单击签署留言簿
  • 在 NeuVector 仪表板上,选择通知并单击安全事件

您会看到以下屏幕截图中说明的违规行为。

信用卡违规警告消息的屏幕截图

F. 命令注入

敏感命令可以作为发送到应用程序的其他数据的一部分嵌入。让我们模拟一个命令注入攻击:

  • 转到 DVWA 应用程序仪表板。

  • 单击菜单上的命令注入

  • 输入 IP 地址字段中,输入example.com;ls

  • 单击提交

    您会看到来自应用程序的响应,其中包含应用程序目录中的文件列表:

    PING example.com (93.xxx.xxx.34): 56 data bytes
    64 bytes from 93.xxx.xxx.34: icmp_seq=0 ttl=56 time=1.456 ms
    64 bytes from 93.xxx.xxx.34: icmp_seq=1 ttl=56 time=1.312 ms
    64 bytes from 93.xxx.xxx.34: icmp_seq=2 ttl=56 time=1.273 ms
    64 bytes from 93.xxx.xxx.34: icmp_seq=3 ttl=56 time=1.340 ms
    --- example.com ping statistics ---
    4 packets transmitted, 4 packets received, 0% packet loss
    round-trip min/avg/max/stddev = 1.273/1.345/1.456/0.068 ms
    help
    index.php
    source
    

    展示更多

  • 在 NeuVector 仪表板上,选择通知并单击安全事件

    您会看到命令注入策略的违规行为。此外,您会看到在容器外壳上运行ping和命令的违规行为ls,如下面的屏幕截图所示。

    命令注入违规警告消息的屏幕截图

G. API服务保护

此功能检测应用程序上禁止的 API 的调用。让我们调用您之前上传的test.php文件。

  • 在浏览器上调用 URL: http://[public-ip-of-cluster]:32425/hackable/uploads/test.php

    **注意:**是您之前记下的集群的公共 IP。 public-ip-of-cluster

    当访问未被阻止时,您会在浏览器上看到以下响应:

    dvwa_email.png test.php
    

    展示更多

  • 在 NeuVector 仪表板上,选择通知并单击安全事件

    您会看到以下屏幕截图中说明的违规行为。

    禁止上传违规警告消息的屏幕截图

H. 容器外壳访问

当您测试命令注入以及调用文件以测试 API 服务保护攻击时,会访问容器外壳test.php。当在容器外壳上运行任何命令时,NeuVector 会触发警报,如上一个屏幕截图所示。

7.将策略模式更改为保护

现在让我们更改策略模式以拒绝访问并防止攻击。

  • 从菜单中选择策略并选择
  • 选择 DWVA 应用程序的组。
  • 单击切换模式并选择保护

现在您可以测试任何攻击。让我们通过再次调用浏览器上的 URL 来测试 API 服务保护攻击:http://[public-ip-of-cluster]:32425/hackable/uploads/test.php

**注意:**是您之前记下的集群的公共 IP。 public-ip-of-cluster

这一次,无法访问 API,您会在“安全事件”页面上看到以下警报:

禁止上传违反拒绝消息的屏幕截图

结论

在本 Code Pattern 中,您了解了如何使用 DLP 传感器在 NeuVector 中设置安全策略。传感器可能会检测各种类型的 Web 应用程序攻击,例如 CSRF、XSS、命令注入、SQL 注入、禁止的 API 访问、敏感数据暴露和容器外壳访问。安全策略对您的组织来说是保密的,并且取决于您保护的 Web 应用程序。必须与组织内的安全团队合作制定保护 Web 应用程序的详尽策略列表。当检测到漏洞时,必须增强应用程序以使其免受这些类型的攻击。

展望未来,NeuVector 计划在其控制台中创建一个单独的部分来配置 OWASP 签名和基于模式的检测。尽管底层检测引擎类似于 DLP 功能,但查找 OWASP 和其他网络攻击与检查敏感数据的有效负载之间存在差异。此外,启用此类模式的简单导入将使安全团队更容易更新和应用这些规则。

执照

此代码模式根据 Apache 许可证第 2 版获得许可。在此代码模式中调用的单独第三方代码对象由其各自的提供商根据其各自的单独许可进行许可。贡献受开发者原产地证书版本 1.1Apache 许可证版本 2 的约束。