PoC 指南:Web 应用程序防火墙部署

概述

本概念验证 (PoC) 指南旨在帮助您快速部署 Citrix Web App Firewall (WAF),无论是独立部署还是作为现有 ADC 部署的一部分,以保护 Web 应用程序和服务。本指南涵盖了 Citrix WAF 的一些基础知识、部署最佳实践以及 WAF 项目的后续步骤。本指南不会涵盖所有可用的保护措施,也不涵盖当前可用的所有 Web 技术。

这些说明涉及克隆已由 ADC 设备代理的应用程序或服务器,允许管理员在不中断现有流量的情况下构建策略和规则。这不是为 Web 应用程序防火墙部署 PoC 的唯一方法,但它比其他方法更容易。

概念体系结构

Citrix Web Application Firewall 和应用程序架构

Web 应用程序防火墙在第 7 层(应用程序层)运行,与在第 3 层或第 4 层运行的传统网络防火墙不同。它了解 Web 和应用程序协议,如 HTTP、XML、SQL 和 HTML。

Citrix WAF 提供了积极和负面的安全模型,以实现尽可能广泛的保护。负面安全模型 使用漏洞签名来防止已知的攻击。它还允许快速初始部署,并通过导入第三方评估工具的结果为应用程序的 “虚拟修补” 提供机制。

Citrix Web Application Firewall 和应用程序架构

积极的安全模型 定义了允许的流量模式和用户行为,并阻止其他所有内容。WAF 引擎使用动态分析为可接受的行为构建规则集。

Citrix Web Application Firewall 和应用程序架构

必备条件

本指南假定已在 Citrix ADC 或独立 Citrix WAF 上配置了以下内容:

  1. 基本了解网络概念和管理 Citrix ADC
  2. ADC 设备已在网络上部署并可访问
  3. 已应用合适的许可证-无论是独立的 WAF 还是 ADC,都需要 高级 许可证
  4. 已分配 NSIP,可供管理访问
  5. 已分配 SNIP,可以与受保护的一个或多个服务进行通信
  6. 另一个 VIP 的 仅内部 IP 地址和 DNS 条目(该服务可能已经由 ADC 进行负载平衡,请确保有单独的 IP 和 DNS 可用)

    注意:

    使用不同的 DNS 名称和 URL 访问应用程序可能需要向应用程序添加配置以使其知道新名称

  7. 对您所保护的应用程序或服务的体系结构和结构的基本了解。例如,如果站点处理信用卡信息确定是否启用了信用卡保护,或者应用程序是否使用 SQL 数据库进行存储,则确定是否使用 SQLi 保护
  8. 基本了解 Web 协议和技术,例如 HTTP、HTML、正则表达式、JavaScript 等,具体取决于受保护的应用程序
  9. 对 Citrix ADC 上的第 4 层负载平衡和配置的基本了解
  10. 专用 syslog 服务器-虽然本地 syslog 可用,但建议配置专用 syslog 服务器。或者,带 Security Insight 的 Citrix ADM 提供了对 WAF 引擎和应用程序安全性的详细分析

WAF 概念验证注意事项

很可能的是,我们要保护的 Web 服务或应用程序已经由 ADC 代理进行负载平衡或其他流量管理。在 WAF PoC 部署期间,我们不希望中断现有用户的应用程序功能或可用性。为了实现这一点,重复的虚拟服务器的唯一区别在于,重复的虚拟服务器绑定了 WAF 策略。

此方法还使用户能够测试应用程序以确保其正常运行,并为可接受的流量构建 WAF 规则。

在启用 Web 应用程序防火墙之前,需要考虑调整 ADC 部署的规模,因为它会导致大量资源消耗。估计大小的最佳方法是使用 Web 服务器分析和估计请求大小、响应大小和表单数量。Citrix ADC 可用于收集基本的 Web 大小规模指标,但前提是应用程序已被代理:


show httpband -type RESPONSE
show httpband -type REQUEST
<!--NeedCopy-->

某些保护需要的资源 远远 超过其他保护措施,因此称为 高级 保护。高级保护功能会消耗更多资源,因为他们记住 Web 交易中的表单域、URL、Cookie 和其他数据。WAF 引擎验证数据是否在事务之间发生变化,以确保请求和响应不会被篡改,从而消耗更多的设备内存。如配置中所述,某些高级保护支持 无会话 检查-无会话保护需要更多的 CPU 资源而不是内存。

例如,具有 高级 策略的设备能够处理大约十分之一的流量,与仅具有 基本 保护的相同设备相同。有关每个不同设备支持的 WAF 吞吐量功能,请参阅 Citrix ADC 数据手册。

推荐的保护

这些安全检查通常可以在 WAF 配置文件中启用。大多数这些检查都 要求在启用阻止之前应用学习的规则 ;默认情况下不要启用 BLOCK ,而不首先部署学习的规则。

注意:

这份清单并非详尽无遗。某些保护与某些应用程序不兼容,有些保护不会为其他应用程序增加任何好处。

  • Cookie 一致性
    • 允许 WAF 引擎加密或代理来自应用程序的会话 cookie
    • Cookie 一致性可防止恶意行为者篡改 cookie
    • Cookie 一致性是 高级 保护

      注意:

      当用户主动使用应用程序时,请勿启用此设置,因为不允许发送任何未加密的会话 Cookie

    • Citrix Prod 文档中的更多信息
  • 缓冲区溢出
    • 防止对不安全操作系统或 Web 服务器软件的攻击,这些操作系统或 Web 服务器软件在接收到超过它能够处理的数据时可能
    • 缓冲区溢出检测到 URL、Cookie 或标题是否超过指定的最大大小
    • Citrix Prod 文档中的更多信息
  • 表单字段一致性检查
  • SQL 注入
  • 跨站脚本检查 (XSS)
  • 拒绝 URL
    • 阻止与黑客和恶意代码或脚本通常访问的 URL 的连接
    • 通过单击 编辑 然后 添加,可以在 放宽规则 > 拒绝 URL UI 中添加自定义拒绝 URL 规则
    • Citrix Prod 文档中的更多信息
  • 开始 URL(URL 关闭)
    • 防止通过书签、外部链接、跳页或手动输入 URL 直接访问网站上的随机 URL(强制浏览)
    • Start URL 是一种具有无会话支持的 高级 保护; 必须 先部署学习的规则,然后才能根据 Start URL 进行阻止
    • Citrix Prod 文档中的更多信息

初始 WAF 配置

配置 WAF 保护时有两种选择:

  • 选项 1: 使用 Web App Firewall 配置向导创建 WAF 配置文件和 WAF 策略
    • 该向导将指导您构建初始特征码集以及其他安全检查和设置,如下所示:
      • 在 Web UI 中,导航到: 安全 > Citrix Web App Firewall

      Citrix Web Application Firewall 和应用程序架构

      • 选择 WAF 配置文件的名称和配置文件类型(Web、XML 或 JSON,取决于所保护的应用程序类型)

      Citrix Web Application Firewall 和应用程序架构

      • 指定用于确定 WAF 引擎处理哪些流量的表达式

      Citrix Web Application Firewall 和应用程序架构

      • 选择对已知漏洞应用保护的签名-可以选择使用现有特征码集或创建新的特征码集。要选择应用于此保护配置文件的签名,有两个编辑器选项提供基本或高级功能。

      • 两个编辑器都有导航选项,用于选择签名,然后启用、阻止、日志或统计信息。注意多页签名,并确保所有签名都被选中。Basic 编辑器更容易入门,而高级编辑器则提供了更多功能

      注意:

      在继续下一步之前,请确保签名被标记为已启用

      Citrix Web Application Firewall 和应用程序架构

      Citrix Web Application Firewall 和应用程序架构

      • 选择适用于应用程序的深度保护。建议首先启用日志记录、统计信息和学习;最初不要启用阻止,因为许多保护需要一些学习的规则

      Citrix Web Application Firewall 和应用程序架构

      重要提示:

      如果 WAF 向导用于创建配置文件和策略,它确实会在全局范围内绑定!如果过滤表达式保留为默认值 (true),则 WAF 引擎会处理所有流量,这可能会导致应用程序行为不当。建议的操作是解除策略与 默认全局 绑定点的绑定,而是绑定到稍后创建的 LB 虚拟服务器。要从全局绑定点解除 WAF 策略的绑定,请执行以下操作:

      • 导航到 安全 > Citrix Web App Firewall > 策略 > 防火墙
      • 选择 策略管理器,然后选择 默认全局
      • 突出显示列出的 WAF 策略,然后选择 取消绑定

    Citrix Web Application Firewall 和应用程序架构

  • 选项 2: 或者,可以通过手动创建 WAF 配置文件、WAF 策略并应用特征码集,将 WAF 保护应用于应用程序或站点
    1. 为应用程序创建特征码集
      1. 导航到 安全 > Citrix Web App Firewall > 签名
      2. 突出显示 默认签名 然后按 添加 创建默认特征码集的副本
      3. 根据受保护的应用程序或站点选择适当的签名,并确保签名设置为 已启用
    2. 创建 Web App Firewall 配置文件
      1. 导航到 安全 > Citrix Web App Firewall > 配置文件
      2. 为配置文件指定一个描述性名称,然后根据要保护的应用程序类型选择 Web、XML 或 JSON
      3. 选择 “ 基本 ” 以应用基本默认设置
      4. 创建后,突出显示新的配置文件,然后按 编辑
      5. 打开 安全检查 并在所有项目上取消选择 封锁
      6. 打开 档案设置
        • 绑定签名设置中选择先前创建的特征码
        • 如果后端应用程序服务器支持 _分块请求,请_启用 以提高性能
        • 根据受保护的应用程序或网站修改任何其他设置
    3. 创建 Web App Firewall 策略
      1. 导航到 安全 > Citrix Web App Firewall > 策略 > 防火墙
      2. 添加 创建新策略
      3. 为策略指定一个描述性名称,然后选择之前创建的 WAF 配置文件
      4. 创建一个流量表达式,用于确定 WAF 引擎处理哪些流量

无论使用哪种方法,基本的 Web App Firewall 配置现在都可以绑定。最后一步是更新签名文件。

  • 导航到安全 > Citrix Web App Firewall > 签名
  • 突出显示新创建的特征码集, 然后按选择操作 > 自动更新设置
  • 启用 签名自动更新 并确保已填充更新 URL

    注意:

    签名更新要求 ADC 可以解析 DNS 名称并从 NSIP 访问公共互联网

Citrix Web Application Firewall 和应用程序架构

  • 配置自动更新后,ADC 每小时检查更新一次。签名也可以手动更新,并且在创建 WAF 配置文件和策略后需要运行一次手动更新

要验证 ADC 设备是否能够访问签名更新,请从 CLI 运行以下命令(退出到 shell):


shell
curl -I https://s3.amazonaws.com/NSAppFwSignatures/SignaturesMapping.xml
<!--NeedCopy-->

系统应该返回一个 HTTP/1.1 200 OK

Citrix Web Application Firewall 和应用程序架构

最新的签名更新文档可在 Citrix Prod Docs 上找到,也可以通过 RSS 进行更新。

默认情况下,不启用常见事件格式 (CEF) 日志记录,WAF 使用本机日志记录格式。此外,WAF Eninge 还可以包含用于请求的地理位置信息。为方便故障排除,建议导航到安全 > Citrix Web App Firewall> 更改引擎设置来启用 CEF 日志记录和地理位置。选中 CEF 日志记录地理位置日志记录的复选框。或者,可以通过 CLI 在中启用这些设置,如下所示:


set appfw settings GeoLocationLogging ON CEFLogging ON
<!--NeedCopy-->

克隆虚拟服务器配置

创建 Web App Firewall 配置文件和策略后,它需要绑定到负载平衡虚拟服务器。如果尚未在 ADC 上配置应用程序或服务,则需要从头开始进行配置。如果应用程序已配置,则需要对其进行克隆。

要快速克隆现有虚拟服务器,请执行以下操作:

  • 导航到 流量管理 > 负载平衡 > 虚拟服务器

Citrix Web Application Firewall 和应用程序架构

  • 突出显示现有虚拟服务器,然后按 添加 创建具有类似设置的新虚拟服务器
    • 为新虚拟服务器指定一个新名称和不同的 IP 地址
    • 确保端口和协议正确无误,然后按 OK
    • 绑定服务或服务组然后按 继续
    • 修改负载平衡方法、持久性以及与现有虚拟服务器匹配所需的任何其他流量设置
    • 如果此虚拟服务器是 HTTPS 虚拟服务器,请确保绑定了适当的证书并绑定了安全的密码套件

Citrix Web Application Firewall 和应用程序架构

Citrix Web Application Firewall 和应用程序架构

接下来,WAF 策略需要绑定到这个新的虚拟服务器:

  • 导航到 流量管理 > 负载平衡 > 虚拟服务器
  • 突出显示新创建的虚拟服务器并按 编辑
  • 在右侧的 “ 高级设置 ” 列中,选择 策略
  • +(加号) 图标添加策略
    • 选择具有 请求 类型的 应用程序防火墙策略
    • 默认的绑定详细信息可以单独留下

Citrix Web Application Firewall 和应用程序架构

Citrix Web Application Firewall 和应用程序架构

用户验收测试和初始疑难解

此时,用户可以开始使用新 URL 测试应用程序,访问绑定了 WAF 策略的 Web 应用程序。根据应用程序的复杂性,跨不同业务部门的多个用户需要使用该应用程序来生成可接受的流量。学习引擎使用此流量来查看应用程序的所有部分,并确保没有阻碍应用程序功能的误报块。

在初步测试期间,可能很难找到与违规请求相关的信息,但是有一些设置可以帮助解决这一点。首先是设置一个自定义的 HTML 错误对象,该对象在请求被阻止时显示诊断信息。如果未设置错误对象,用户通常会看到不提供任何信息的空白页面。

注意:

一旦 WAF 受保护的应用程序暴露给非测试受众,建议将其删除或更改。

  • HTML 错误对象 设置为显示诊断信息
    • 前往 WAF 个人资料,然后展开 个人资料设置
    • 选择 HTML 错误对象,然后单击添加按钮(或加号)以创建新对象
    • 在 “导入 HTML 错误页面” 中选择 文本
    • 为错误对象命名并粘贴以下代码:
<html>
<head>
<title>Application Firewall Block Page</title>
</head>
<body>
<h1><B>Your request has been blocked by a security policy<B><BR></H1>
<H3>Access has been blocked - if you feel this is in error, please contact the site
administrators quoting the following: </H3> <UL>
<li>NS Transaction ID: ${NS_TRANSACTION_ID}
<li>AppFW Session ID: ${NS_APPFW_SESSION_ID}
<li>Violation Category: ${NS_APPFW_VIOLATION_CATEGORY}
<li>Violation Details: ${NS_APPFW_VIOLATION_LOG} </UL>
</body>
</html>
<!--NeedCopy-->

Citrix Web Application Firewall 和应用程序架构

生成的错误页面将显示有价值的诊断信息,包括违规类别和日志详细信息。此信息允许管理员验证是否由于误报而需要放宽区块。

Citrix Web Application Firewall 和应用程序架构

重要提示:

某些 WAF 块仅阻止页面的某些元素加载,例如图像、CSS 格式、脚本或按钮\ 表单功能可能无法正常工作。尽管诊断错误页面未显示,但这些块仍被视为问题。使用 syslog 查看器(请参阅下面的示例)查找导致问题的违规签名或安全检查。

当诊断错误页面不可用时,WAF 引擎生成的 Syslog 消息 有助于了解阻塞的会话

  • 转到 “ 系统” > “审核” > “系统日志” 消息

Citrix Web Application Firewall 和应用程序架构

  • 筛选依据列 下,选择模块,然后选择 APPFW
  • 按应用

Citrix Web Application Firewall 和应用程序架构

如果存在误报块,可以立即从 Syslog 查看器中放松某些违规行为

  • 从 “系统日志消息” 视图(之前)中,找到违反规则的系统日志消息
  • 选中消息右上角的复选框
  • 选择操作菜单,然后选择部署
  • 或者,您可以在部署放宽规则之前修改它

Citrix Web Application Firewall 和应用程序架构

注意:

来自签名违规的假阳性块通常意味着 Web 应用程序不符合标准或编写不良。允许应用程序运行的直接行动是应用放宽规则,但长期目标是修复应用程序本身。对编写不良应用程序的放宽规则可能会通过允许应用程序运行而允许恶意内容流通。

通过打开所有物品的 计信息,只要违反规则或签名,设备就会收集计数器。这在最初很有用,因为它允许清除计数器以查看是否因 WAF 策略而发生了任何新的阻止请求。

在 ADC UI 的 仪表板 选项卡中,将统计视图设置为 应用程序防火墙 以查看所有关联的统计数据。统计数据也可以从此视图中清除。

Citrix Web Application Firewall 和应用程序架构

或者,可以使用以下命令从设备的 shell 命令行查看统计信息:


nsconmsg -d stats | grep appfw
<!--NeedCopy-->

请注意,Web 应用程序防火墙遵循 Web 标准,默认情况下,格式错误的请求会被阻止。要更改此行为,请执行以下操作:

  • Citrix WAF 使用严格的 HTTP 检查
  • 默认情况下无效,不符合 RFC 标准的 HTTP 请求被 阻止
    • 要修改不符合 RFC 要求的请求处理,请转到 安全 > Citrix Web App Firewall 然后 更改引擎设置
    • 请参阅下面的代码以了解 CLI 方法,以便仅为格式错误的请求设置日志记录和 stat 生成

      注意:

      此设置为全局设置。如果禁用阻止选项,WAF 引擎将绕过任何不符合 RFC 要求的应用程序防火墙处理。不建议这样做。

Citrix Web Application Firewall 和应用程序架构


set appfw settings -malformedReqAction log stats
<!--NeedCopy-->

安全检查学习

学习的数据用于为 WAF 引擎的 积极安全模型 创建规则-有关学习规则的一些快速细节:

  • 以正则表达式格式存储,可以导出为 CSV 进行分析或迁移
  • 在 HA 对设备中传播
  • 安全检查可以永久保留在学习模式下,但不是必要的
  • UAT 期间处理的流量越多,收集更多有用的数据
  • 强烈建议配置可信学习客户端,以 便了解设备何时接收来自已知和未知客户端的流量。此设置可确保恶意流量不允许进入已知的规则。

学习的引擎在 aslearn 流程和规则以 SQLite 格式存储在以下位置时运行:


/var/nslog/asl/appfwprofile.db
<!--NeedCopy-->

Citrix Web Application Firewall 和应用程序架构

学习模式可以永久启用,但学习数据库的大小限制为 20 MB。数据库达到这个大小后,学习引擎不会添加新数据。

从过程的角度来看,学习方式如下:

Citrix Web Application Firewall 和应用程序架构

每当用户使用包含已启用学习检查的绑定 WAF 策略访问新应用程序时,都会生成学习的规则。通过使用 复制虚拟服务器 方法,在用户测试受保护的应用程序时,不会阻止生产流量。此外,此时通过 WAF 引擎的所有流量都将生成学习的规则。

制定放松规则和确保应用程序按预期运行而不会出现误报块的典型流程持续发生:

Citrix Web Application Firewall 和应用程序架构

在之前未创建规则的应用程序或工作流发生更改时,必须重复此过程。

要使用 UI 查看学习的数据,请执行以下操作:

  • 导航到 安全 > Citrix Web App Firewall > 配置文件,选择应用防火墙配置文件,然后选择 编辑
  • 在右栏中,选择 学习规则
  • 每个支持学习的安全检查都会显示以下几个选项:
    • 选择 编辑 以查看和部署为特定安全检查学习的规则

Citrix Web Application Firewall 和应用程序架构

  • 一旦部署了规则,它们就会从 学习的规则 转变为 放松规则
  • 在学习的规则 UI 中,在将规则移动到放宽规则之前,可以使用 “导 出学习数据 ” 按钮将规则导出为 CSV
  • Visualizer 也是一个有价值的工具,特别是对于开始 URL 检查来显示规则和受保护应用程序的 URL 映射

Citrix Web Application Firewall 和应用程序架构

将学习的规则部署到放宽规则后,可以将安全检查设置为 “ 止”。

注意:

如果没有处理足够的流量或 WAF 引擎没有看到所有应用程序路径,则可能会出现误报块。学习的规则过程可以重复,直到应用程序按预期运行。

进口出口

Web 应用程序防火墙配置文件的整个配置可以跨多个设备进行复制。此过程将捕获所有绑定对象,例如 HTML 错误对象、XML 错误对象、WSDL\ XML 架构、签名、放宽规则等。当从测试\ 开发环境迁移到生产环境或在进行更改之前备份 WAF 配置时,这可能特别有用。

注意:

导出的配置要求两个设备在同一版本中。

要使用 GUI 导出 WAF 配置文件,请在源设备上导航到安全 > Citrix Web App Firewall > 配置文件 > 选择 WAF 配置文件,然后选择操作 > 导出导出过程可能需要一些时间才能生成导出文件。存档后, WAFProfile.tgz 文件将下载到客户端计算机。

要使用 GUI 导入 WAF 配置文件,请在目标设备上导航到 安全 > Citrix Web App Firewall > 配置文件 > 选择操作 > 导入。选择 “导入自” 文件,然后选择 “选择文件” 以查找之前下载的档案。导入过程中的任何问题都会记录到:


/var/log/ns.log
<!--NeedCopy-->

注意:

导入过程不会创建 WAF 策略或绑定。

动态分析

在版本 13.0 中,动态分析功能已添加到 WAF Engine 中,允许在配置阈值后自动将学习的数据部署到放宽规则中。系统会向管理员发送警报,允许他们在数据无效时跳过数据,否则系统会自动添加该数据。默认情况下,所有受支持的安全检查都禁用动态分析-要启用动态分析并配置设置,请执行以下操作:

  • 导航到 安全 > Citrix Web App Firewall > 配置文件,选择应用防火墙配置文件,然后选择 编辑
  • 在右栏中,选择 动态分析
    • 可以通过此 UI 启用或禁用每个安全检查
    • 还可以通过选择 “设置” 来修改此 WAF 配置文件的动态分析 设置

Citrix Web Application Firewall 和应用程序架构

Citrix Web Application Firewall 和应用程序架构

使用动态分析时,强烈建议启用 Trusted Learning Client ,以确保只有有效的应用程序流量才生成规则。这些客户端可从以下位置添加:

  • 学习的规则 UI
  • 动态分析 UI

Citrix Web Application Firewall 和应用程序架构

转向生产时的注意事项

使用 复制虚拟服务器 方法时最重要的考虑因素是,如果应用程序 URL 发生更改,任何包含 URL 的学习规则都不适用。例如,“开始 URL” 和 “CSRF 表单标记” 规则包括 URL。

迁移到生产虚拟服务器的最佳方法是关闭阻塞以进行安全检查,然后重新获取和部署包含 URL 的规则。或者,可以在修改 URL 后导出学习的规则,然后读取。如果尚未添加 可信学习客户端,启用这些客户端 也将非常重要。

最后,如果 PoC 在与生产资源不同的测试平台上运行,则必须考虑通过启用 Web 应用程序防火墙而变化的资源需求。

引用

Citrix 产品文档-Web App Firewall

Citrix 产品文档 WAF-常见问题

Citrix 应用防火墙如何修改应用程序数据流

WAF 基本保护 VS 高级保护

应用程序防火墙中的通用事件格式 (CEF) 日志记录支持

导出和导入 Web App Firewall 配置文件

PoC 指南:Web 应用程序防火墙部署