XML 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 代码,它可以阻止该请求。
NetScaler 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 个选项中选择一个(SQLKeyword、SQLSplChar、SQLSplCharANDKeyword、SQLSplCharORKeyword),以指示在处理负载时如何评估 SQL 关键字和 XML SQL 特殊字符。XML SQL 注释处理 参数为您提供了一个选项,用于指定在 XML SQL 注入检测期间需要检查或排除的注释类型。
您可以部署放宽以避免误报。Web App Firewall XML SQL 检查对传入请求的有效负载执行,即使攻击字符串分布在多行上,也会识别出来。该检查在 元素 和 属性 值中查找 SQL 注入字符串。在特定条件下,您可以应用放松措施来绕过安全检查检查。日志和统计数据可以帮助您确定所需的放松措施。
操作选项
当 XML SQL 注入检查在请求中检测到 SQL 注入攻击字符串时,将应用操作。以下操作可用于为应用程序配置优化的 XML SQL 注入保护:
阻止—如果启用阻止,则只有在输入与 XML SQL 注入类型规范相匹配时,才会触发阻塞操作。例如,如果将 SQLSplCharANDKeyword 配置为 XML SQL 注入类型,则即使在负载中检测到 SQL 特殊字符,如果请求不包含任何关键字,也不会被阻止。如果 XML SQL 注入类型设置为SQLSplChar 或 SQLSplCharORKeyword,则此类请求将被阻止。
日志—如果启用日志功能,则 XML SQL 注入检查会生成日志消息,指明其所采取的操作。如果禁用了阻止,则会为检测到 XML SQL 违规的每个位置(元素、 属性)生成单独的日志消息。但是,当请求被阻止时,只会生成一条消息。您可以监视日志,以确定对合法请求的响应是否被阻止。日志消息数量的大幅增加可能表明有人试图发起攻击。
统计信息-如果启用,统计信息功能将收集有关违规和日志的统计信息。统计数据计数器出现意外激增可能表明您的应用程序受到攻击。如果合法请求被阻止,您可能需要重新访问配置,看看是否需要配置新的放宽规则或修改现有规则。
XML SQL 参数
除了阻止、记录和统计操作外,您还可以为 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 供应商通过添加额外的运算符来扩展通配符。NetScaler 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 违规。四个 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/Nested 选项。大多数其他类型的 SQL Server 软件无法识别嵌套注释。如果嵌套注释出现在定向到另一类 SQL Server 的请求中,则可能表示有人试图破坏该服务器的安全性。
放松规则
如果您的应用程序要求您绕过 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 注入操作和其他参数,请执行以下操作:
在命令行界面中,您可以使用 set appfw profile 命令或 add appfw profile 命令来配置 XML SQL 注入保护。您可以启用阻止、记录和统计操作。选择要在有效负载中检测的 SQL 攻击模式的类型(关键字、通配符、特殊字符串)。使用 unset appfw profile 命令将配置的设置恢复为默认值。以下每个命令只设置一个参数,但您可以在单个命令中包含多个参数:
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 注入安全检查。
要配置或修改 XML SQL 注入,请使用 GUI 进行检查
- 导航到 Web App Firewall > 配置文件,突出显示目标配置文件,然后单击 编辑。
- 在“高级设置”窗格中,单击“安全检查”。
安全检查表格显示了当前为所有安全检查配置的操作设置。您有两个配置选项:
a. 如果您只想为 XML SQL 注入启用或禁用“阻止”、“日志”和“统计信息”操作,则可以选中或清除表中的复选框,单击“确定”,然后单击“保存并关闭”以关闭“安全检查”窗格。
b. 如果要为此安全性检查配置其他选项,请双击 XML SQL 注入,或者选择该行并单击“操作设置”以显示以下选项:
检查 SQL 通配符字符-将负载中的 SQL 通配符视为攻击模式。
检查请求包含 — 要检查的 SQL 注入类型(SQLKeyword、SQLSplChar、SQLSplCharANDKeyword 或 SQLSplCharORKeyword)
SQL 注释处理-要检查的注释类型(“选中所有注释”、“ANSI”、“嵌套”或“ANSI/嵌套”)。
更改上述任何设置后,单击“确定”保存更改并返回“安全检查”表格。如果需要,您可以继续配置其他安全检查。单击“确定”保存您在“安全检查”部分所做的所有更改,然后单击“保存 并 关闭”以关 闭“安全检查”窗格。
使用 GUI 配置 XML SQL 注入放松规则
- 导航到 Web App Firewall > 配置文件,突出显示目标配置文件,然后单击 编辑。
- 在 高级设置 窗格中,单击 放宽规则。
- 在“放松规则”表中,双击 XML SQL 注 入条目,或者将其选中并单击“编辑”。
- 在“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.logs,以访问与 XML 跨站脚本违规行为有关的日志消息:
> Shell
> tail -f /var/log/ns.log | grep APPFW_XML_SQL
<!--NeedCopy-->
使用 GUI 访问日志消息
GUI 包含一个用于分析日志消息的有用工具(Syslog 查看器)。您可以通过多种方式访问 Syslog 查看器:
-
导航到 Web App Firewall > 配置文件,选择目标配置文件,然后单击“安全检查”。突出显示 XML SQL 注入 行,然后单击“日志”。当您直接从配置文件的 XML SQL 注入检查中访问日志时,GUI 会过滤掉日志消息,仅显示与这些安全检查违规有关的日志。
-
**您也可以通过导航到“系统”>“审计”来访问 Syslog 查看器。在“审核消息”部分,单击 **Syslog 消息链接以显示 Syslog Viewer,其中显示所有日志消息,包括其他安全检查违规日志。这对于在请求处理过程中可能触发多个安全检查冲突时进行调试非常有用。
-
导航到 Web App Firewall > 策略 > 审计。在“审核消息”部分,单击 Syslog 消息 链接以显示 Syslog 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 注入统计信息
- 导航到“系统”>“安全”>“Web App Firewall”。
- 在右窗格中,访问 统计信息 链接。
- 使用滚动条查看有关 XML SQL 注入 违规和日志的统计信息。统计表提供实时数据,每 7 秒更新一次。