ADC

SQL 注入检查

XML SQL 注入检查可以检查用户请求是否存在可能的 XML SQL 注入攻击。如果在 XML 有效负载中找到注入的 SQL,则会阻止请求。

XML SQL 攻击可以将源代码注入 Web 应用程序,从而可以将源代码解释为有效的 SQL 查询并运行,从而使用恶意意图执行数据库操作。例如,可以启动 XML SQL 攻击以获得对数据库内容的未经授权的访问权限或操作存储的数据。XML SQL 注入攻击不仅是常见的,而且也可能是非常有害和昂贵的。

对数据库用户的权限进行分割可以在某种程度上帮助保护数据库。必须仅向所有数据库用户授予完成预期任务所需的权限,以便他们无法运行 SQL 查询来执行其他任务。例如,不得允许只读用户写入或操作数据表。Web App Firewall XML SQL 注入检查可检查所有 XML 请求,以提供特殊防御,防止注入可能破坏安全性的未授权 SQL 代码。如果 Web App Firewall 在任何用户的任何 XML 请求中检测到未经授权的 SQL 代码,它可以阻止请求。

Citrix Web App Firewall 检查 SQL 关键字和特殊字符是否存在,以识别 XML SQL 注入攻击。一组默认的关键字和特殊字符提供了通常用于启动 XML SQL 攻击的已知关键字和特殊字符。Web App Firewall 将三个字符(单直引号 (‘)、反斜杠 () 和分号 (;) 视为 SQL 安全检查处理的特殊字符。您可以添加新模式,并且可以编辑默认集以自定义 XML SQL 检查检查。

Web App Firewall 提供了实施 XML SQL 注入保护的各种操作选项。您可以 阻止 请求,在 ns. log 文件中记录 一条消息,其中包含观察到的冲突行为的详细信息,并收集 统计 信息以跟踪观察到的攻击次数。

除了操作之外,还可以为 XML SQL 注入处理配置几个参数。您可以检查 SQL 通配符。您可以更改 XML SQL 注入类型,并选择 4 个选项(SQLKeywordSQLSplCharSQLSplCharANDKeywordSQLSplCharORKeyword)中的一个,以指示如何在处理 XML 有效负载时评估 SQL 关键字和 SQL 特殊字符。XML SQL 注释处理 参数为您提供了一个选项,用于指定在 XML SQL 注入检测过程中需要检查或豁免的注释类型。

您可以部署放宽以避免误报。对传入请求的有效负载执行 Web App Firewall XML SQL 检查,攻击字符串即使它们分布在多行中也会被识别。检查在 元素属性 值中查找 SQL 注入字符串。您可以在指定条件下应用放宽来绕过安全检查检查。日志和统计信息可帮助您确定所需的放宽。

操作选项

当 XML SQL 注入检查检测到请求中的 SQL 注入攻击字符串时,将应用操作。以下操作可用于为您的应用程序配置优化的 XML SQL 注入保护:

— 如果启用块,则只有在输入与 XML SQL 注入类型规范匹配时才会触发块操作。例如,如果 SQLSplCharANDKeyword 配置为 XML SQL 注入类型,则不会阻止请求,如果请求不包含任何关键字,即使在有效负载中检测到 SQL 特殊字符。如果 XML SQL 注入类型设置为 SQLSplCharSQLSplCharORKeyword,则此类请求将被阻止。

日志— 如果启用日志功能,则 XML SQL 注入校验会生成日志消息,指示它所执行的操作。如果禁用块,则会为检测到 XML SQL 冲突的每个位置(元素属性)生成单独的日志消息。但是,当请求被阻止时,只会生成一条消息。您可以监视日志以确定对合法请求的响应是否被阻止。日志消息数量的大幅增加可能表明尝试发起攻击。

计数据— 如果启用,统计数据功能将收集有关冲突和日志的统计数据。统计数据计数器出现意外激增可能表明您的应用程序受到攻击。如果合法请求被阻止,您可能需要重新访问配置,以查看是否需要配置新的放宽规则或修改现有的放宽规则。

XML 参数

除了块、日志和统计操作之外,您还可以为 XML SQL 注入检查配置以下参数:

检查 XML SQL 通配符-通配符可用于扩大结构化查询语言 (SQL-SELECT) 语句的选择范围。这些通配符运算符可与 LIKE 和 不 NOT LIKE 运算符结合使用,将值与相似值进行比较。百分比 (%) 和下划线 (_) 字符经常用作通配符。百分号类似于与 MS-DOS 一起使用的星号 (*) 通配符,以匹配字段中的零个、一个或多个字符。下划线类似于 MS-DOS 问号 (?) 通配符。它匹配表达式中的单个数字或字符。

例如,您可以使用以下查询执行字符串搜索以查找名称包含 D 字符的所有客户。

SELECT * from customer WHERE name like "%D%"

以下示例组合运算符以查找任何具有 0 作为第二个和第三个字符的工资值。

SELECT * from customer WHERE salary like '_00%

不同的 DBMS 供应商通过添加额外的运算符来扩展通配符。Citrix Web App Firewall 可以通过注入这些通配符来防范攻击。5 个默认的通配符为百分比 (%)、下划线 (_)、脱字符 (^)、开头方括号 ([) 和右方括号 (])。此保护适用于 HTML 和 XML 配置文件。

默认通配符是在 *默认签名中指定的文字列表

-  <wildchar type=”LITERAL”>%</wildchar>
-  <wildchar type=”LITERAL”>_</wildchar>
-  <wildchar type=”LITERAL”>^</wildchar>
-  <wildchar type=”LITERAL”>[</wildchar>
-  <wildchar type=”LITERAL”>]</wildchar>
<!--NeedCopy-->

攻击中的通配符可以是 PCRE,例如 [^A-F]。Web App Firewall 也支持 PCRE 通配符,但上面的文字通配符足以阻止大多数攻击。

注意

XML SQL 通配符 校验与 XML SQL 特殊字符 校验不同。此选项必须谨慎使用,以避免误报。

查包含 SQL 注入类型的请求— Web App Firewall 提供 4 个选项,用于根据应用程序的个别需求实现 SQL 注入检查所需的严格程度。根据注入类型规范检查请求,以检测 SQL 冲突行为。4 个 SQL 注入类型选项是:

  • SQL 特殊字符和关键字— SQL 关键字和 SQL 特殊字符必须存在于检查的位置才能触发 SQL 冲突。此限制性最小的设置也是默认设置。
  • SQL 特殊字符— 处理过的有效负载字符串中必须至少有一个特殊字符才能触发 SQL 冲突。
  • SQL 关键字 — 经处理的有效负载字符串中必须至少有一个指定的 SQL 关键字才能触发 SQL 冲突。不要在没有适当考虑的情况下选择此选项。要避免误报,请确保输入中没有预期的关键字。
  • SQL 特殊字符或关键字 — 关键字或特殊字符字符串必须存在于有效负载中才能触发安全检查冲突。

提示

如果选择 SQL 特殊字符选项,Web App Firewall 会跳过不包含任何特殊字符的字符串。由于大多数 SQL 服务器不处理前面没有特殊字符的 SQL 命令,启用此选项可以显著减少 Web App Firewall 上的负载并加快处理速度,而不会使受保护的网站处于风险之中。

SQL 注释处理— 默认情况下,Web App Firewall 会分析并检查 XML 数据中的所有注释以查看注入的 SQL 命令。许多 SQL 服务器忽略注释中的任何内容,即使前面有 SQL 特殊字符也是如此。为了更快地处理,如果 XML SQL 服务器忽略注释,则可以将 Web App Firewall 配置为在检查注入 SQL 的请求时跳过注释。XML SQL 注释处理选项包括:

  • ANSI— 跳过 ANSI 格式的 SQL 注释,这些注释通常由基于 UNIX 的 SQL 数据库使用。
  • 嵌套— 跳过嵌套 SQL 注释,这些注释通常由 Microsoft SQL Server 使用。
  • ANSI /嵌套— 跳过同时遵守 ANSI 和嵌套 SQL 注释标准的注释。仅匹配 ANSI 标准或只匹配嵌套标准的注释仍然会检查注入的 SQL。
  • 检查所有注释-检查注入 SQL 的整个请求,而不跳过任何内容。此为默认设置。

提示

在大多数情况下,除非后端数据库在 Microsoft SQL Server 上运行,否则不得选择嵌套或 ANSI/嵌套选项。大多数其他类型的 SQL Server 软件无法识别嵌套注释。如果嵌套注释出现在指向另一类 SQL 服务器的请求中,则它们可能表示企图破坏该服务器上的安全性。

放宽规则

如果您的应用程序要求您绕过 XML 有效负载中的特定元素或属性的 XML SQL 注入检查,则可以配置放宽规则。XML SQL 注入检查放宽规则具有以下参数:

  • 名称: 您可以使用文字字符串或正则表达式来配置 元素属性 的名称。以下表达式免除以字符串 PurchaseOrder 开头的所有 ELEMENTS ,后面是至少两个字符且长度不超过十个字符的数字字符串:

    评论:“ 免除 XML SQL 检查采购订单元素”

    XMLSQLInjection:  "PurchaseOrder_[0-9A-Za-z]{2,10}"

    IsRegex:  REGEX          Location:  ELEMENT

    State:  ENABLED
<!--NeedCopy-->

注意: 名称区分大小写。不允许重复条目,但您可以使用名称和位置差异的大写来创建类似条目。例如,以下每个放宽规则都是唯一的:


1)      XMLSQLInjection:  XYZ    IsRegex:  NOTREGEX

        Location:  ELEMENT       State:  ENABLED

2)      XMLSQLInjection:  xyz    IsRegex:  NOTREGEX

        Location:  ELEMENT       State:  ENABLED

3)      XMLSQLInjection:  xyz    IsRegex:  NOTREGEX

        Location:  ATTRIBUTE     State:  ENABLED

4)      XMLSQLInjection:  XYZ    IsRegex:  NOTREGEX

        Location:  ATTRIBUTE     State:  ENABLED
<!--NeedCopy-->
  • 位置:您可以在 XML 有效负载中指定 XML SQL 检查异常的位置。默认情况下,选项元素处于选中状态。您可以将其更改为属性
  • 注释:这是一个可选字段。您最多可以使用 255 个字符串来描述此放宽规则的目的。

警告

正则表达式非常强大。特别是如果您不完全熟悉 PCRE 格式的正则表达式,请仔细检查您编写的任何正则表达式。确保他们准确地定义了要添加为例外的名称,而不是其他名称。粗心地使用正则表达式可能会产生您不希望的结果,例如阻止对您不打算阻止的 Web 内容的访问,或允许 XML SQL 注入检查会阻止的攻击。

使用命令行配置 XML SQL 注入检查

使用命令行配置 XML SQL 注入操作和其他参数

在命令行界面中,可以使用 设置 appfw 配置文件 命令或 添加 appfw 配置文件 命令来配置 XML SQL 注入保护。您可以启用块、日志和统计操作。选择要在有效负载中检测的 SQL 攻击模式的类型(关键字、通配符、特殊字符串)。使用 未设置 appfw 配置文件 命令将配置的设置恢复到默认值。以下每个命令只设置一个参数,但您可以在单个命令中包含多个参数:

  • set appfw profile <name> **-XMLSQLInjectionAction** (([block] [log] [stats]) | [none])
  • set appfw profile <name> -XMLSQLInjectionCheckSQLWildChars (ON |OFF)
  • set appfw profile <name> -XMLSQLInjectionType ([SQLKeyword] | [SQLSplChar] | [SQLSplCharANDKeyword] | [SQLSplCharORKeyword])
  • set appfw profile <name> -XMLSQLInjectionParseComments ([checkall] | [ansi|nested] | [ansinested])

使用命令行配置 SQL 注入放宽规则

使用绑定或取消绑定命令添加或删除放宽规则,如下所示:

-  bind appfw profile <name> -XMLSQLInjection <string> [isRegex (REGEX | NOTREGEX)] [-location ( ELEMENT | ATTRIBUTE )] –comment <string> [-state ( ENABLED | DISABLED )]
-  unbind appfw profile <name> -XMLSQLInjection <String>
<!--NeedCopy-->

例如

> bind appfw profile test_profile -XMLSQLInjection "PurchaseOrder_[0-9A-Za-z]{2,15}" -isregex REGEX -location ATTRIBUTE

> unbind appfw profile test_profile –XMLSQLInjection "PurchaseOrder_[0-9A-Za-z]{2,15}" -location ATTRIBUTE
<!--NeedCopy-->

使用 GUI 配置 XMLSQL 注入安全检查

在 GUI 中,您可以在窗格中为与应用程序关联的配置文件配置 XML SQL 注入安全检查。

使用 GUI 配置或修改 XML SQL 注入检查

  1. 导航到 Web App Firewall > 配置文件,突出显示目标配置文件,然后单击 编辑
  2. 在 “高级设置” 窗格中,单击 “ 安全检查”。

安全检查表显示当前为所有安全检查配置的操作设置。您有 2 个配置选项:

a. 如果您只想为 XML SQL 注入启用或禁用阻止、日志和统计数据操作,则可以选中或清除表中的复选框,单击确定,然后单击保存并关闭以关闭安全检查窗格。

b. 如果要为此安全检查配置其他选项,请双击 XML SQL 注入,或者选择该行并单击 操作设置,以显示以下选项:

检查 SQL 通配符— 将负载中的 SQL 通配符视为攻击模式。

检查包含的请求-要检查的 SQL 注入类型(SQL 关键字、SQLSplchar、SQLSplchor 关键字或 SQLSplchor 关键字)。

SQL 注释处理-要检查的注释类型(检查所有注释、ANSI、嵌套或 ANSI/嵌套)。

更改上述任何设置后,单 击“确定”保存更改并返回“安全检查”表。如果需要,您可以继续配置其他安全检查。单击 确定 保存您在 “安全检查” 部分中所做的所有更改,然后单击 保存关闭 以关闭安全检查窗格。

使用 GUI 配置 XML SQL 注入放宽规则

  1. 导航到 Web App Firewall > 配置文件,突出显示目标配置文件,然后单击 编辑
  2. 高级设置 窗格中,单击 放宽规则
  3. 在“放宽规则”表中,双击 XML SQL 注 入条目,或将其选中,然后单击“编辑”。
  4. 在“XML SQL 注入放宽规则”对话框中,执行放宽规则的 添加编辑删除用或禁用 操作。

使用可视化工具管理 XML SQL 注入放宽规则

对于所有放宽规则的综合视图,可以突出显示“放宽规则”表中的 XML SQL 诸如行,然后单击可视化工具。已部署放宽的可视化工具为您提供了添加新规则或编辑现有规则的选项。您还可以通过选择节点并单击放宽可视化工具中的相应按钮来启用禁用一组规则。

要使用 GUI 查看或自定义 SQL 注入模式,请执行以下操作

您可以使用 GUI 查看或自定义 SQL 模式。

默认 SQL 模式在 Web App Firewall > 签名 > ***默认签 名中指定**。如果未将任何签名对象绑定到配置文件,则配置文件将使用默认签名对象中指定的默认 SQL 模式进行 XML SQL 注入安全检查处理。默认签名对象中的规则和模式是只读的。您无法编辑或修改它们。如果要修改或更改这些模式,请通过创建默认签名对象的副本并更改 SQL 模式来创建用户定义的签名对象。在配置文件中使用用户定义的签名对象,用于处理要使用这些自定义 SQL 模式的流量。

有关详细信息,请参阅 签名

要查看默认 SQL 模式,请执行以下操作:

a. 导航到 Web App Firewall > 签名 ,选择 *默认签名,然后单击 编辑 。然后单击管理 SQL/跨站点脚本模式

“管理 SQL/ 跨站点脚本路径” 表显示了与 SQL 注入相关的以下四行:

Injection (not_alphanum, SQL)/ Keyword

Injection (not_alphanum, SQL)/ specialstring

Injection (not_alphanum, SQL)/ transformrules/transform

Injection (not_alphanum, SQL)/ wildchar
<!--NeedCopy-->

b. 选择一行并单击“管理元素”以显示 Web App Firewall SQL 注入检查使用的相应 SQL 模式(关键字、特殊字符串、转换规则或通配符)。

自定义 SQL 模式: 您可以编辑用户定义的签名对象以自定义 SQL 关键字、特殊字符串和通配符。您可以添加新条目或删除现有条目。您可以修改 SQL 特殊字符串的转换规则。

a. 导航到 Web App Firewall > 签名,突出显示目标用户定义的签名,然后单击 编辑。单击管理 SQL/跨站点脚本模式以显示管理 SQL/跨站点脚本路径表。

b. 选择目标 SQL 行。

i. 单击“管理元素”,以 添加编辑删除相应的 SQL 元素。

ii. 单击 删除 以移除选定的行。

警告

在删除或修改任何默认 SQL 元素或删除 SQL 路径以删除整个行时,必须非常小心。签名规则以及 XML SQL 注入安全检查依赖于这些元素来检测 SQL 注入攻击以保护您的应用程序。如果在编辑过程中删除了所需的模式,则自定义 SQL 模式可能会使应用程序容易受到 XML SQL 攻击。

将日志功能与 XML SQL 注入检查一起使用

启用日志操作后, XML SQL 注入 安全检查冲突将作为 APPFW_XML_SQL 冲突记录在审核日志中。Web App Firewall 支持本机和 CEF 日志格式。您也可以将日志发送到远程 syslog 服务器。

使用命令行访问日志消息

切换到 shell 并尾随 /var/log/ 文件夹中的 ns.log 以访问与 XML 跨站点脚本冲突相关的日志消息:

> Shell

> tail -f /var/log/ns.log | grep APPFW_XML_SQL
<!--NeedCopy-->

使用 GUI 访问日志消息

Citrix GUI 包括一个用于分析日志消息的有用工具(系统日志查看器)。您有多个用于访问 Syslog 查看器的选项:

  • 导航到 Web App Firewall > 配置 件,选择目标配置文件,然后单击 安全检查 。突出显示 XML SQL 注入 行并单击 日志 。当您直接从配置文件的 XML SQL 注入检查访问日志时,GUI 会过滤掉日志消息,并仅显示与这些安全检查冲突相关的日志。

  • 您还可以通过导航到“系统”>“审核”访问 Syslog 查看器。在审计消息部分,单击 Syslog 消息 链接以显示 Syslog Viewer,该查看器显示所有日志消息,包括其他安全检查违规日志。这对于在请求处理过程中可能触发多个安全检查冲突时进行调试非常有用。

  • 导航到 Web App Firewall > 策略 > 审核 。在审计消息部分,单击 Syslog 消息 链接以显示 S yslog Viewer,该查看器显示所有日志消息,包括其他安全检查违规日志。

基于 XML 的 Syslog 查看器提供了各种筛选器选项,用于仅选择您感兴趣的日志消息。要为 XML SQL 注入 检查选择日志消息,请通过在 模块 的下拉选项中选择 APPFW 进行筛选。“事件类型”列表提供了一系列丰富的选项,以进一步优化您的选择。例如,如果选中 APPFW_XML_SQL 复选框并单击 应用 按钮,则系统日志查看器中仅显示与 XML SQL 注入 安全检查冲突相关的日志消息。

如果将游标放在特定日志消息的行中,则日志消息下方会显示多个选项,如 模块事件类型事件 ID客户端 IP。您可以选择这些选项中的任何一个以突出显示日志消息中的相应信息。

XML SQL 注入冲突的统计信息

启用统计操作时,当 Web App Firewall 对此安全检查执行任何操作时, XML SQL 注入 检查的计数器会递增。这些统计数据是针对流量、冲突和日志的速率和总计数收集的。日志计数器的增量大小可能会因配置的设置而异。例如,如果启用了阻止操作,则对包含三个 XML SQL 注入 冲突的页的请求会将统计数据计数器递增一个,因为一旦检测到第一个冲突,该页面就会被阻止。但是,如果禁用了块,则处理相同的请求会将冲突的统计数据计数器和日志增加三个,因为每个冲突都会生成一个单独的日志消息。

使用命令行显示 XML SQL 注入检查统计信息

在命令提示符下,键入:

> sh appfw stats

要显示特定配置文件的统计信息,请使用以下命令:

> stat appfw profile <profile name>

使用 GUI 显示 XML SQL 注入统计信息

  1. 导航到“系统”>“安全”>“Web App Firewall”。
  2. 在右窗格中,访问 统计信息 链接。
  3. 使用滚动条查看有关 XML SQL 注入 冲突和日志的统计信息。统计表提供实时数据,每 7 秒更新一次。
SQL 注入检查