ADC

配置和使用学习功能

学习功能是一种重复模式过滤器,用于观察受 Web App Firewall 保护的网站或应用程序上的活动,以确定哪些内容构成该网站或应用程序上的正常活动。然后,它会为每个安全检查生成最多 2,000 条建议规则或例外(放宽)的列表,其中包含对学习功能的支持。用户通常会发现,使用学习功能配置放松比手动输入必要的放松更容易。

支持学习功能的安全检查包括:

  • 开始 URL 检查
  • Cookie 一致性检查
  • 表单字段一致性检查
  • 字段格式检查
  • CSRF 表单标记检查
  • HTML SQL 注入检查
  • HTML 跨站点脚本编写检查
  • XML 拒绝服务检查
  • XML 附件检查
  • Web 服务互操作性检查

使用学习功能时,您执行两种不同类型的活动。首先,启用并配置该功能以使用它。您可以了解到受保护的 Web 应用程序的所有流量,也可以配置 IP 地址列表(称为“添加受信任的学习客户端”列表),学习功能可以从中生成建议。其次,在启用该功能并处理了受保护网站的一定数量的流量后,您可以查看建议的规则和放宽(学习的规则)列表,并用以下名称之一标记每个规则和放宽措施:

  • 编辑和部署。该规则被拉到“编辑”对话框中,以便您可以对其进行修改,然后部署修改后的表单。
  • 部署。未修改的学习规则将放在此安全检查的规则或放宽列表中。
  • 跳过。学习的规则被放置在未部署的规则或放宽列表中。跳过后学习的规则将被删除。但是,由于它们没有添加到放松中,因此它们可能会再次学习。

除了字段格式规则外,不仅在放松到位时才进行学习。跳过规则时,它们只会从学习的数据库中删除。由于没有增加放松,他们可能会再次学习。部署规则时,它们将从学习的数据库中删除,并为规则添加放宽。随着放松的增加,他们将不会再被学习。为了保护字段格式,无论放松程度如何,都会进行学习。

尽管您可以使用命令行界面进行学习功能的基本配置,但该功能主要用于通过 Web App Firewall 向导或 GUI 进行配置。使用命令行只能对学习功能进行有限的配置。

该向导将学习功能的配置与整个 Web App Firewall 的配置集成在一起,因此是在新 NetScaler 设备上或管理简单的 Web App Firewall 配置时配置此功能的最简单方法。GUI 可视化工具和手动界面都可以直接访问所有安全检查的所有学习规则,因此,当您必须查看已学习的许多安全检查规则时,通常更可取。

学习数据库的大小限制为 20 MB,在每次启用了学习的安全检查生成大约 2,000 个学习规则或放宽后才能达到该数据库。如果您不定期查看并批准或忽略学习的规则,并且达到此限制,则 NetScaler 日志中会记录一个错误,并且在您查看现有学习的规则和放宽之前,不会生成更多已学习的规则。

如果由于数据库已达到大小限制而停止学习,则可以通过查看现有的学习规则和放松或重置学习数据来重新开始学习。在学习的规则或放宽被批准或忽略后,它们将从数据库中删除。重置学习数据后,所有现有的学习数据都将从数据库中删除,并将其重置为最小大小。当数据库的大小低于 20 MB 时,学习会自动重新开始。

我们建议您在暂存环境中启用学习,而不是在生产环境中启用学习。

使用命令行界面配置学习设置

指定要配置的 Web App Firewall 配置文件,对于要包含在该配置文件中的每项安全检查,请指定最小阈值或百分比阈值。最小阈值是一个整数,表示 Web App Firewall 在学习规则或放宽之前必须处理的最小用户会话数(默认值:1)。百分比阈值是一个整数,表示 Web App Firewall 在学习规则或放宽之前必须观察特定模式(URL、Cookie、字段、附件或规则违规)的用户会话百分比(默认值:0)。使用以下命令:

  • set appfw learningsettings <profileName> [-startURLMinThreshold <positive_integer>] [-startURLPercentThreshold <positive_integer>] [-cookieConsistencyMinThreshold <positive_integer>] [-cookieConsistencyPercentThreshold <positive_integer>] [-CSRFtagMinThreshold <positive_integer>] [-CSRFtagPercentThreshold <positive_integer>] [-fieldConsistencyMinThreshold <positive_integer>] [-fieldConsistencyPercentThreshold <positive_integer>] [-crossSiteScriptingMinThreshold <positive_integer>] [-crossSiteScriptingPercentThreshold <positive_integer>] [-SQLInjectionMinThreshold <positive_integer>] [-SQLInjectionPercentThreshold <positive_integer>] [-fieldFormatMinThreshold <positive_integer>] [-fieldFormatPercentThreshold <positive_integer>] [-XMLWSIMinThreshold <positive_integer>] [-XMLWSIPercentThreshold <positive_integer>] [-XMLAttachmentMinThreshold <positive_integer>] [-XMLAttachmentPercentThreshold <positive_integer>]
  • save ns config

示例

以下示例在 HTML SQL 注入安全检查的配置文件中启用和配置学习设置。这是一种适当的初始测试平台学习配置,您可以在其中完全控制发送到 Web App Firewall 的流量。

set appfw learningsettings pr-basic -SQLInjectionMinThreshold 10
set appfw learningsettings pr-basic -SQLInjectionPercentThreshold 70
save ns config
<!--NeedCopy-->

使用命令行界面将学习设置重置为默认值

要删除指定配置文件和安全检查的学习设置的任何自定义配置,并将学习设置恢复为默认值,请在命令提示符处键入以下命令:

  • unset appfw learningsettings <profileName> [-startURLMinThreshold ] [-startURLPercentThreshold] [-cookieConsistencyMinThreshold] [-cookieConsistencyPercentThreshold] [-CSRFtagMinThreshold ] [-CSRFtagPercentThreshold ] [-fieldConsistencyMinThreshold ] [-fieldConsistencyPercentThreshold ] [-crossSiteScriptingMinThreshold ] [-crossSiteScriptingPercentThreshold ] [-SQLInjectionMinThreshold ] [-SQLInjectionPercentThreshold ] [-fieldFormatMinThreshold] [-fieldFormatPercentThreshold ] [-XMLWSIMinThreshold ] [-XMLWSIPercentThreshold ] [-XMLAttachmentMinThreshold ] [-XMLAttachmentPercentThreshold]
  • save ns config

使用命令行界面显示配置文件的学习设置

在命令提示符下,键入以下命令:

show appfw learningsettings <profileName>

使用命令行界面为配置文件显示未经审查的学习规则或放宽

在命令提示符下,键入以下命令:

show appfw learningdata <profileName> <securityCheck>

使用命令行界面从学习数据库中删除特定的未经审查的学习规则或放松

在命令提示符下,键入以下命令:

rm appfw learningdata <profileName> (-startURL <expression> | -cookieConsistency <string> | (-fieldConsistency <string> <formActionURL>) | (-crossSiteScripting <string> <formActionURL>) | (-SQLInjection <string> <formActionURL>) | (-fieldFormat <string><formActionURL>) | (-CSRFTag <expression> <CSRFFormOriginURL>) | -XMLDoSCheck <expression> | -XMLWSICheck <expression> | -XMLAttachmentCheck <expression>) [-TotalXMLRequests]

示例

以下示例删除了配置文件的所有未经审查的已学习放宽,即 HTML SQL 注入安全性检查,适用于 LastName 表单 字段。

rm appfw learningdata pr-basic -SQLInjection LastName
<!--NeedCopy-->

使用命令行界面删除所有未经审查的学习数据

在命令提示符下,键入以下命令:

reset appfw learningdata

使用命令行界面导出学习数据

在命令提示符下,键入以下命令:

export appfw learningdata <profileName> <securitycheck>[-target <string>]

示例

以下示例将配置文件和 HTML SQL 注入安全性检查的学习放宽导出为 /var/learnt_data/ 目录中的逗号分隔值 (CSV) 格式文件,该文件名位于-target 参数中指定的文件名下。

export appfw learningdata pr-basic SQLInjection -target sqli_ld
<!--NeedCopy-->

使用 GUI 配置学习功能

  1. 导航到 安全 > Web App Firewall > 配置文件
  2. 在“配置文件”窗格中,选择配置文件,然后单击“编辑”。
  3. 单击 高级设置 部分下的 学习规则
  4. 在“学习规则”部分中,选择安全检查,然后单击“设置”。
  5. 在“安全检查设置”页面中,设置以下参数:

    1. 最小数量阈值。根据您配置的安全检查的学习设置,最小数量阈值可能是指必须遵守的最小用户会话总数、必须遵守的最小请求数或必须遵守特定表单域的最小次数,在学到的放松产生之前。默认值:1

    2. 次数阈值的百分比。根据您正在配置的安全检查的学习设置,次数阈值的百分比可能是指违反安全检查的观察到的用户会话总数的百分比、请求的百分比或表单字段匹配特定字段类型的次数百分比,然后再执行学到的放松是产生的。默认值:0

  6. 单击“确定”关闭

    学习的规则部分

  7. 单击 移除所有学习的数据 可移除所有学习的数据并重置学习要素,以便它必须从头开始重新开始观测。

    注意:

    此按钮仅删除尚未审核、批准或跳过的学习建议。它不会删除已被接受和部署的学习放松。

  8. 要将学习引擎限制为来自特定 IP 集的流量,请单击 受信任的学习客户端,然后将要使用的 IP 地址添加到列表中。
    1. 要将 IP 地址或 IP 地址范围添加到“受信任的学习客户端”列表中,请单击“添加”。
    2. 在“添加受信任的学习客户端”对话框的“受信任的客户端 IP”列表框中,以 CIDR 格式键入 IP 地址或 IP 地址范围。
    3. 在“注释”文本区域中,键入描述此 IP 地址或范围的注释。
    4. 单击 创建 将新的 IP 地址或范围添加到列表中。
    5. 要修改现有 IP 地址或范围,请单击 IP 地址或范围,然后单击 打开。除名称外,出现的对话框与“添加可信学习客户端”对话框相同。
    6. 要禁用或启用 IP 地址或范围,但将其保留在列表中,请单击该 IP 地址或范围,然后根据需要单击“禁用”或“启用”。
    7. 要完全删除 IP 地址或范围,请单击 IP 地址或范围,然后单击 删除
  9. 单击 关闭 以返回到“配置 Web App Firewall 配置文件”页。
  10. 单击 Done(完成)。

使用 GUI 查看学习的规则或放松

  1. 导航到 安全 > Web App Firewall > 配置文件
  2. 在“配置文件”窗格中,选择配置文件,然后单击“编辑”。
  3. 单击 高级设置 部分下的 学习规则
  4. 在“学习规则”部分中,选择安全检查,然后单击“设置”。
  5. 要以分支树的形式分层查看学习的数据,从而使您能够选择与许多学习模式匹配的常规模式,请单击 Visualizer
  6. 如果您选择查看实际学习的模式,请执行以下步骤。
  7. 选择第一个学习的放松,然后选择如何处理它。

    1. 要修改然后接受放宽,请单击“编辑和部署”,编辑放宽正则表达式,然后单击“确定”
    2. 要在不修改的情况下接受放宽,请单击 部署
    3. 要在不进行部署的情况下将其从列表中删除,请单击“跳过”。
    4. 重复上一步以查看每一个额外的学习放松。
  8. 单击 关闭 返回到 管理学习的规则 对话框。
  9. 单击 Done(完成)。