HTML SQL 注入检查
许多 Web 应用程序都有使用 SQL 与关系数据库服务器通信的 Web 表单。恶意代码或黑客可以使用不安全的 Web 表单向 Web 服务器发送 SQL 命令。Web App Firewall HTML SQL 注入检查可针对注入可能破坏安全性的未经授权的 SQL 代码提供特殊防御。如果 Web App Firewall 在用户请求中检测到未经授权的 SQL 代码,它会转换请求,使 SQL 代码处于非活动状态,或者阻止请求。Web App Firewall 在三个位置检查注入 SQL 代码的请求负载:1) POST 正文、2) 标头和 3) Cookie。要检查注入 SQL 代码请求中的查询部分,请为特定内容类型配置应用程序防火墙配置文件设置“InspectQueryContentTypes”。
一组默认的关键字和特殊字符提供了通常用于启动 SQL 攻击的已知关键字和特殊字符。您可以添加新模式,也可以编辑默认设置以自定义 SQL 检查检查。Web App Firewall 为实施 SQL 注入保护提供了各种操作选项。除了“阻止”、“日志”、“统计信息”和“学习”操作之外,Web App Firewall 配置文件还提供了 转换 SQL 特殊字符 以使攻击无害的选项。
除了操作之外,还可以为SQL注入处理配置几个参数。您可以检查 SQL 通配符。您可以更改 SQL 注入类型并从 4 个选项中选择一个(SQLKeyword、SQLSplChar、SQLSplCharANDKeyword、SQLSplCharORKeyword),以指示在处理负载时如何评估 SQL 关键字和 SQL 特殊字符。SQL 注释处理参数为您提供了一个选项,用于指定在 SQL 注入检测期间需要检查或免除的注释类型。
您可以部署放宽以避免误报。Web App Firewall 学习引擎可以提供配置放宽规则的建议。
以下选项可用于为应用程序配置优化的 SQL 注入保护:
块— 仅当输入与 SQL 注入类型规范匹配时才会触发块操作。例如,如果将 SQLSplCharANDKeyword 配置为 SQL 注入类型,则即使在输入中检测到 SQL 特殊字符,也不会阻止请求,如果请求不包含关键字。如果 SQL 注入类型设置为 SQLSplChar 或 SQLSplCharORKeyword,则此类请求将被阻止。
日志— 如果启用日志功能,则 SQL 注入校验会生成日志消息,指示它所执行的操作。如果禁用阻止操作,则会为检测到 SQL 冲突的每个输入字段生成单独的日志消息。 但是,当请求被阻止时,只会生成一条消息。同样,每个请求都会为转换操作生成一条日志消息,即使在多个字段中转换 SQL 特殊字符时也是如此。您可以监视日志,以确定对合法请求的响应是否被阻止。日志消息数量的大幅增加可能表明有人试图发起攻击。
统计信息-如果启用,统计信息功能将收集有关违规和日志的统计信息。统计数据计数器出现意外激增可能表明您的应用程序受到攻击。如果合法请求被阻止,您可能需要重新访问配置,看看是否需要配置新的放宽规则或修改现有规则。
学习—如果您不确定哪些 SQL 放宽规则最适合您的应用程序,则可以使用学习功能根据学习的数据生成建议。Web App Firewall 学习引擎会监视流量,并根据观察到的值提供 SQL 学习建议。为了在不影响性能的情况下获得最佳收益,您可能需要在短时间内启用 learn 选项以获取具有代表性的规则示例,然后部署规则并禁用学习。
转换 SQL 特殊字符-Web App Firewall 将三个字符(单直引号 (‘)、反斜杠 (\)
和分号 (;) 视为 SQL 安全检查处理的特殊字符。 SQL 转换功能修改 HTML 请求中的 SQL 注入代码,以确保请求无害。然后将修改过的 HTML 请求发送到服务器。所有默认转换规则都在 /netscaler/default_custom_settings.xml 文件中指定。
转换操作通过对请求进行以下更改来使 SQL 代码处于非活动状态:
- 单直引号 (‘) 到双直引号 (“)。
- 反斜杠
(\)
转双反斜杠(\)
。 - 分号 (;) 被完全删除。
这三个字符(特殊字符串)是向 SQL Server 发出命令所必需的。除非 SQL 命令前面有特殊字符串,否则大多数 SQL 服务器都会忽略该命令。因此,启用转换后 Web App Firewall 执行的更改可防止攻击者注入活动 SQL。进行这些更改后,可以安全地将请求转发到受保护的网站。如果受保护网站上的 Web 表单可以合法地包含 SQL 特殊字符串,但 Web 表单不依赖特殊字符串来正常运行,则可以禁用阻止并启用转换,以防止阻止合法的 Web 表单数据,而不会降低 Web App Firewall 提供给受保护的 Web 站点的保护。
转换操作与 SQL 注入类型 设置无关。如果启用转换并且 SQL 注入类型被指定为 SQL 关键字,则即使请求不包含任何关键字,也会转换 SQL 特殊字符。
提示
通常,您可以启用转换或阻塞,但不能同时启用两者。如果启用了阻止操作,则该操作优先于转换操作。如果启用了阻止,则启用转换是冗余的。
检查 SQL 通配符— 可以使用通配符来扩大 SQL (SQL-SELECT) 语句的选择范围。这些通配符运算符可以与 L IKE 和NOT LIK E 运算符一起使用,将值与类似值进行比较。百分比 (%) 和下划线 (_) 字符经常用作通配符。 百分号类似于 MS-DOS 中使用的星号 (*) 通配符,用于匹配字段中的零、一个或多个字符。 下划线类似于 MS-DOS 问号 (?)通配符。它匹配表达式中的单个数字或字符。
例如,您可以使用以下查询执行字符串搜索,以查找名称中包含 D 字符的所有客户。
从客户 WHERE 名称中选择*,如“%D%”:
以下示例合并运算符以查找第二位和第三位为 0 的任何薪金值。
从客户中选择* WHERE薪水比如“_ 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>
攻击中的通配符可以是 PCRE,如 [^A-F]。Web App Firewall 也支持 PCRE 通配符,但上面的文字通配符足以阻止大多数攻击。
注意:
SQL 通配符校验与 SQL 特殊字符校验不同。必须谨慎使用此选项以避免误报。
检查包含 SQL 注入类型的请求— Web App Firewall 提供了 4 个选项,可根据应用程序的具体需要为 SQL 注入检查实现所需的严格级别。将根据注入类型规范检查请求,以检测 SQL 违规。 四个 SQL 注入类型选项是:
- SQL 特殊字符和关键字-输入中必须同时存在 SQL 关键字和 SQL 特殊字符才能触发 SQL 冲突。此限制最少的设置也是默认设置。
- SQL 特殊字符-输入中必须至少存在一个特殊字符才能触发 SQL 冲突。
- SQL 关键字-输入中必须至少存在一个指定的 SQL 关键字才能触发 SQL 冲突。未经适当考虑,请勿选择此选项。为避免误报,请确保输入中不包含任何关键字。
- SQL 特殊字符或关键字-输入中必须存在关键字或特殊字符串才能触发安全检查违规。
提示:
如果将 Web App Firewall 配置为检查包含 SQL 特殊字符的输入,则 Web App Firewall 会跳过不包含任何特殊字符的 Web 表单字段。由于大多数 SQL 服务器不会处理前面没有特殊字符的 SQL 命令,因此启用此选项可以显著降低 Web App Firewall 的负载并加快处理速度,而不会使受保护的网站面临风险。
SQL 注释处理—默认情况下,Web App Firewall 会检查所有 SQL 注释中是否存在注入的 SQL 命令。但是,许多 SQL 服务器会忽略注释中的任何内容,即使前面有 SQL 特殊字符也是如此。为了加快处理速度,如果 SQL 服务器忽略了注释,则可以将 Web App Firewall 配置为在检查注入 SQL 的请求时跳过注释。SQL 注释处理选项包括:
-
ANSI—跳过 ANSI 格式的 SQL 注释,这些注释通常由基于 UNIX 的 SQL 数据库使用。例如:
-
—(两个连字符)-这是以两个连字符开头并以行尾结束的评论。
-
{} - 括号(括号附带注释。{在注释前面加上,} 跟在注释之后。大括号可以分隔单行或多行注释,但注释不能嵌套)
-
/* */ : C style comments (Does not allow nested comments). Please note /*! <comment that begin with slash followed by asterisk and exclamation mark is not a comment > */
-
MySQL 服务器支持 C 风格注释的某些变体。这些使您可以通过使用以下形式的注释来编写包含 MySQL 扩展的代码,但仍可移植:
/*! MySQL-specific code */
-
. #: Mysql 评论:这是以 # 个字符开头的评论。
-
- 嵌套— 跳过嵌套 SQL 注释,这些注释通常由 Microsoft SQL Server 使用。例如; —(两个连字符)和 /* */ (允许嵌套注释)
- ANSI /嵌套— 跳过同时遵守 ANSI 和嵌套 SQL 注释标准的注释。对于仅匹配 ANSI 标准或仅匹配嵌套标准的注释,仍会检查注入的 SQL。
- 检查所有注释-检查注入 SQL 的整个请求而不跳过任何内容。此为默认设置。
提示
通常,除非您的后端数据库在 Microsoft SQL Server 上运行,否则不得选择嵌套或 ANSI/嵌套选项。大多数其他类型的 SQL Server 软件无法识别嵌套注释。如果嵌套注释出现在定向到另一类 SQL Server 的请求中,则可能表示有人试图破坏该服务器的安全性。
检查请求标头 - 如果除了检查表单字段中的输入外,还要检查请求标头是否存在 HTML SQL 注入攻击,请启用此选项。如果使用 GUI,则可以在 Web App Firewall 配置文件的“高级设置”->“配置文件设置”窗格中启用此参数。
注意:
如果启用“检查请求标头”标志,则可能必须为 User-Agent 标头配置放宽规则。如 SQL 关键字和 SQL 特殊字符分号 (; ) 的存在可能会触发误报并阻止包含此标头的请求。 警告
如果同时启用请求标头检查和转换,则标头中找到的任何 SQL 特殊字符也将转换。接受、接受字符集、接受编码、接受语言、期望和用户代理标头通常包含分号 (;)。 同时启用请求标头检查和转换可能会导致错误。
InspectQueryContentTypes - 如果要检查请求查询部分是否存在针对特定内容类型的 SQL 注入攻击,请配置此选项。如果使用 GUI,则可以在 App Firewall 配置文件的“高级设置”->“配置文件设置”窗格中配置此参数。
SQL 细粒度放宽
Web App Firewall 为您提供了免除特定表单字段、标题或 Cookie 的选项,从 SQL 注入检查检查中免除。通过为 SQL 注入检查配置放宽规则,可以完全绕过对其中一个或多个字段的检查。
Web App Firewall 允许您通过微调放松规则来实现更严格的安全性。应用程序可能需要灵活性才能允许特定模式,但配置放宽规则以绕过安全检查可能会使应用程序容易受到攻击,因为目标字段不受任何 SQL 攻击模式的检查。SQL 细粒度放宽提供了允许特定模式并阻止其余模式的选项。例如,Web App Firewall 当前有一组默认的 SQL 关键字超过 100 个。由于黑客可以在 SQL 注入攻击中使用这些关键字,因此 Web App Firewall 将其标记为潜在威胁。您可以放松一个或多个被认为对于特定位置安全的关键字。其余潜在危险的 SQL 关键字仍会检查目标位置,并继续触发安全检查冲突。您现在有了更严格的控制。
放松中使用的命令具有值类型和值表达式的可选参数。您可以指定值表达式是正则表达式还是文字字符串。 值类型可以留空,或者您可以选择 Keyword、SpecialString 或 WildChar。
警告:
正则表达式非常强大。特别是如果您不太熟悉 PCRE 格式的正则表达式,请仔细检查您编写的任何正则表达式。确保他们准确地定义了要添加为例外的 URL,而不是别的。粗心使用通配符,尤其是点星号 (.*) 元字符或通配符组合,可能会产生您不想要的结果,例如阻止访问不打算阻止的 Web 内容或允许 HTML SQL 注入检查否则会阻止的攻击。
需要注意的事项:
- 值表达式是可选参数。字段名称可能没有任何值表达式。
- 字段名称可以绑定到多个值表达式。
- 必须为值表达式分配值类型。SQL 值类型可以是:1) 关键字、2) SpecialString 或 3) WildChar。
- 每个字段名称/URL 组合可以有多个放宽规则。
使用命令行配置 SQL 注入检查
要使用命令行配置 SQL 注入操作和其他参数,请执行以下操作:
在命令行界面中,可以使用 set appfw profile 命令或 add appfw profile 命令来配置 SQL 注入保护。您可以启用阻止、学习、记录、统计数据操作,并指定是否要转换 SQL 注入攻击字符串中使用的特殊字符以禁用攻击。选择要在有效负载中检测的 SQL 攻击模式的类型(关键字、通配符、特殊字符串),并指示是否希望 Web App Firewall 也检查请求标头是否存在 SQL 注入冲突。使用 unset appfw profile 命令将配置的设置恢复为默认值。以下每个命令只设置一个参数,但您可以在单个命令中包含多个参数:
- set application Firewall profile“页面底部提供的参数说明。”
<name> -SQLInjectionAction (([block] [learn] [log] [stats]) | [none])
- set application Firewall profile“页面底部提供的参数说明。”
<name> -SQLInjectionTransformSpecialChars (**ON** | OFF)
- set application Firewall profile“页面底部提供的参数说明。”
<name> -**SQLInjectionCheckSQLWildChars** (**ON** |**OFF**)
- set application Firewall profile“页面底部提供的参数说明。”
**<name> -**SQLInjectionType** ([**SQLKeyword**] | [**SQLSplChar**] | [**SQLSplCharANDKeyword**] | [**SQLSplCharORKeyword**])
- set application Firewall profile“页面底部提供的参数说明。”
<name> -**SQLInjectionParseComments** ([**checkall**] | [**ansi|nested**] | [**ansinested**])
- **set application Firewall profile“页面底部提供的参数说明。”
-
<name> -CheckRequestHeaders (ON | OFF)
页面底部提供的参数说明。 -
<name> - CheckRequestQueryNonHtml (ON | OFF)
页面底部提供的参数说明。
使用命令界面配置 SQL 注入放宽规则
使用 bind 或取消绑定命令添加或删除绑定,如下所示:
-
bind appfw profile <name> -SQLInjection <String> [isRegex(REGEX| NOTREGE)] <formActionURL> [-location <location>] [-valueType (Keywor|SpecialString|Wildchar) [<valueExpression>][-isValueRegex (REGEX | NOTREGEX) ]]
-
unbind appfw profile <name> -SQLInjection <String> <formActionURL> [-location <location>] [-valueTyp (Keyword|SpecialString|Wildchar) [<valueExpression>]]
注意:
通过查看包含 SQL 关键字和 SQL 特殊字符列表的视图签名对象,可以从默认签名文件内容中找到 SQL 关键字列表。
使用 GUI 配置 SQL 注入安全检查
在 GUI 中,您可以在窗格中为与应用程序关联的配置文件配置 SQL 注入安全检查。
使用 GUI 配置或修改 SQL 注入检查
- 导航到“应用程序防火墙”>“配置文件”,突出显示目标配置文件,然后单击“编辑”。
- 在“高级设置”窗格中,单击“安全检查”。
安全检查表格显示了当前为所有安全检查配置的操作设置。您有两个配置选项:
a。如果要为 HTML SQL 注入启用或禁用阻止、日志、统计信息和学习操作,则可以选中或清除表格中的复选框,单 击确定,然后单击 保存并关闭 以关闭 安全检查 窗格。
b. 如果要为此安全检查配置更多选项,请双击 HTML SQL 注入,或者选择该行并单击 操作设置,以显示以下选项:
转换 SQL 特殊字符-转换请求中的任何 SQL 特殊字符。
检查 SQL 通配符字符-将负载中的 SQL 通配符视为攻击模式。
检查请求包含 — 要检查的 SQL 注入类型(SQLKeyword、SQLSplChar、SQLSplCharANDKeyword 或 SQLSplCharORKeyword)。
SQL 注释处理-要检查的注释类型(“选中所有注释”、“ANSI”、“嵌套”或“ANSI/嵌套”)。
更改上述任何设置后,单击“确定”保存更改并返回“安全检查”表格。如果需要,您可以继续配置其他安全检查。单击“确定”保存在“安全检查”部分所做的所有更改,然后单击“保存并关闭”以关闭“安全检查”窗格。
使用 GUI 配置 SQL 注入放宽规则
- 导航到应用程序防火墙 > 配置文件,选中目标配置文件,然后单击编辑。
- 在“高级设置”窗格中,单击“放宽规则”。
- 在“放宽规则”表中,双击 HTML SQL 注入条目,或将其选中并单击“编辑”。
- 在“HTML SQL 注入放宽规则”对话框中,对放宽规则执行“添加”、“编辑”、“删除”、“启用”或“禁用”操作。
注意
添加新规则时,除非在值类型字段中选择 Keyword、SpecialString 或 WildChar 选项,否则不会显示值表达式字段。
使用可视化工具管理 SQL 注入放宽规则
对于所有放宽规则的综合视图,可以突出显示 HTML SQL 注入行,然后单击可视化工具。已部署放宽的可视化工具为您提供了 添加 新规则或 编辑 现有规则的选项。您还可以通过选择节点并单击放宽可视化工具中的相应按钮来启用或禁用一组规则。
使用 GUI 查看或自定义注入模式
您可以使用 GUI 查看或自定义注入模式。
默认 SQL 模式在默认签名文件中指定。如果没有将任何签名对象绑定到配置文件,则配置文件将使用默认签名对象中指定的默认注入模式进行命令注入安全检查处理。在默认签名对象中指定的规则和模式是只读的。您无法编辑或修改它们。如果要修改或更改这些模式,请复制默认的 sSignatures 对象以创建用户定义的签名对象。更改新用户定义的签名对象中的命令注入模式,然后在处理要使用这些自定义模式的流量的配置文件中使用此签名对象。
有关详细信息,请参阅 签名
要使用 GUI 查看默认的注入模式,请执行以下操作:
-
导航到 应用程序防火墙 > 签名,选择 * 默认签名,然后单击 编辑。
-
单击 管理 CMD/SQL/XSS 模式。“管理 SQL/跨站点脚本编写路径”表显示了与 CMD/SQL/XS 注入有关的模式:
- 选择一行并单击 管理元素 以显示 Web App Firewall 命令注入检查使用的相应注入模式(关键字、特殊字符串、转换规则或通配符)。
将学习功能与 SQL 注入检查结合使用
启用 learn 操作后,Web App Firewall 学习引擎会监视流量并了解触发的违规。您可以定期检查这些学习的规则。经过适当考虑后,您可以将学习的规则作为 SQL 注入放宽规则进行部署。
SQL 注入学习增强功能— NetScaler 软件的 11.0 版中引入了 Web App Firewall 学习增强功能。 为了部署细粒度 SQL 注入放宽,Web App Firewall 提供了细粒度 SQL 注入学习。 学习引擎针对观察到的值类型(keyword、SpecialString、Wildchar)和输入字段中观察到的相应值表达式提出建议。除了检查被阻止的请求以确定当前规则是否限制性太强且需要放宽之外,您还可以查看学习引擎生成的规则,以确定哪些值类型和值表达式触发了违规,需要在放宽规则中加以解决。
重要
Web App Firewall 的学习引擎只能区分名称的前 128 个字节。如果表单具有多个字段,名称与前 128 个字节匹配,则学习引擎可能无法区分它们。同样,部署的放宽规则可能会无意中放宽 SQL 注入检查中的所有这些字段。
注意 :要绕过 SQL 签入用户代理标头,请使用以下放宽规则:
bind appfw profile your_profile_name -SQLInjection User-Agent " .*" -location HEADER
使用命令行界面查看或使用学习的数据
在命令提示符下,键入以下命令之一:
show appfw learningdata <profilename> SQLInjection
rm appfw learningdata <profilename> -SQLInjection <string> <formActionURL> [<location>] [<valueType> <valueExpression>]
export appfw learningdata <profilename> SQLInjection
使用 GUI 查看或使用学习的数据
-
导航到“应用程序防火墙”>“配置文件”,突出显示目标配置文件,然后单击“编辑”。
-
在“高级设置”窗格中,单击“学习规则”。可以在“学习的规则”表中选择 HTML SQL 注 入条目,然后双击该条目以访问学习的规则。您可以先部署学习的规则或编辑规则,然后再将其部署为放宽规则。要放弃规则,可以选择该规则,然后单击“跳过”按钮。一次只能编辑一条规则,但可以选择要部署或跳过的多个规则。
您还可以选择通过选择“学习规则”表中的 HTML SQL 注入条目,然后单击可视化工具以获取所有学习冲突的综合视图来显示学习的放宽的摘要视图。可视化工具可以轻松管理学习的规则。它可以在一个屏幕上显示数据的全面视图,并且只需单击一下即可对一组规则执行操作。可视化工具的最大优点是它推荐正则表达式来整合多个规则。您可以根据分隔符和操作 URL 选择这些规则的子集。通过从下拉列表中选择数字,可以在可视化工具中显示 25、50 或 75 条规则。学习规则的可视化工具提供了编辑规则并将其作为放松部署的选项。或者您可以跳过规则来忽略它们。
将日志功能与 SQL 注入检查结合使用
启用日志操作后,HTML SQL 注入安全检查违规将作为 APPFW_SQL 违规记录在审核日志中。Web App Firewall 支持本机和 CEF 日志格式。您还可以将日志发送到远程 syslog 服务器。
使用命令行访问日志消息
切换到 shell 并在 /var/log/ 文件夹中尾部 ns.logs 以访问与 SQL 注入违规有关的日志消息:
> Shell
# tail -f /var/log/ns.log | grep APPFW_SQL
转换请求时 HTML SQL 注入日志消息的示例
Jun 26 21:08:41 <local0.info> 10.217.31.98 CEF:0|Citrix|NetScaler|NS11.0|APPFW|APPFW_SQL|6|src=10.217.253.62 geolocation=Unknown spt=54001 method=GET request=http://aaron.stratum8.net/FFC/login.php?login_name=%27+or&passwd=and+%3B&drinking_pref=on&text_area=select+*+from+%5C+%3B&loginButton=ClickToLogin&as_sfid=AAAAAAXjnGN5gLH-hvhTOpIySEIqES7BjFRs5Mq0fwPp-3ZHDi5yWlRWByj0cVbMyy-Ens2vaaiULKOcUri4OD4kbXWwSY5s7I3QkDsrvIgCYMC9BMvBwY2wbNcSqCwk52lfE0k%3D&as_fid=feeec8758b41740eedeeb6b35b85dfd3d5def30c msg= Special characters seen in fields cn1=74 cn2=762 cs1=pr_ffc cs2=PPE1 cs3=9ztIlf9p1H7p6Xtzn6NMygTv/QM0002 cs4=ALERT cs5=2015 act=transformed
<!--NeedCopy-->
发布请求被阻止时的 HTML SQL 注入日志消息的示例
Jun 26 21:30:34 <local0.info> 10.217.31.98 CEF:0|Citrix|NetScaler|NS11.0|APPFW|APPFW_SQL|6|src=10.217.253.62 geolocation=Unknown spt=9459 method=POST request=http://aaron.stratum8.net/FFC/login_post.php msg=SQL Keyword check failed for field text_area="(')" cn1=78 cn2=834 cs1=pr_ffc cs2=PPE1 cs3=eVJMMPtZ2XgylGrHjkx3rZLfBCI0002 cs4=ALERT cs5=2015 act=blocked
<!--NeedCopy-->
注意
作为 10.5.e 构建(增强版本)和 11.0 版本之后的流式更改的一部分,我们现在以块形式处理输入数据。RegEx 模式匹配现在限制为 4K 以进行连续字符串匹配。通过此更改,SQL 冲突日志消息可能包含与早期版本相比不同的信息。输入中的关键字和特殊字符可以用多个字节分隔。我们现在在处理数据时跟踪 SQL 关键字和特殊字符串,而不是缓冲整个输入值。除了字段名称外,日志消息现在还包含 SQL 关键字或 SQL 特殊字符,或者同时包含 SQL 关键字和 SQL 特殊字符,具体取决于配置的设置。输入的其余部分将不再包含在日志消息中,如以下示例所示:
示例:
在 10.5 中,当 Web App Firewall 检测到 SQL 冲突时,整个输入字符串可能包含在日志消息中,如下所示:
SQL Keyword check failed for field text=\"select a name from testbed1;(;)\".*<blocked>
在支持请求端串流和 11.0 开始构建的 10.5.e 的增强版本中,我们只记录日志消息中的字段名称、关键字和特殊字符(如果适用),如下所示:
SQL Keyword check failed for field **text="select(;)" <blocked>
此更改适用于包含 应用程序 /x-www-form-urlencoded、m ultipart/form-data 或 text/x-gwt-rpc 内容类型的请求。在处理 JSON 或 XML 有效负载期间生成的日志消息不受此更改的影响。
使用 GUI 访问日志消息
GUI 包含一个用于分析日志消息的有用工具(Syslog 查看器)。您可以通过多种方式访问 Syslog 查看器:
- 导航到 应用程序防火墙 > 配置文件,选择目标配置文件,然后单击 安全检查。突出显示 HTML SQL 注入行,然后单击日志。 当您直接从配置文件的 HTML SQL 注入检查访问日志时,GUI 会过滤掉日志消息并仅显示与这些安全检查冲突相关的日志。
- 您还可以通过导航到 NetScaler > 系统 >审核来访问系统日志查看器。 在“审核消息”部分,单击 Syslog 消息链接以显示 Syslog Viewer,该查看器显示所有日志消息,包括其他安全检查违规日志。这对于在请求处理过程中可能触发多个安全检查冲突时进行调试非常有用。
- 导航到 应用程序防火墙 > 策略 > 审核。在“审核消息”部分,单击 Syslog 消息链接以显示 Syslog Viewer,该查看器显示所有日志消息,包括其他安全检查违规日志。
基于 HTML 的 Syslog 查看器提供了各种筛选选项,用于仅选择您感兴趣的日志消息。 要为 HTML SQL 注入 检查选择日志消息,请通过在 模块 的下拉列表选项中选择 APPFW进行筛选。“事件类型”列表提供了一系列丰富的选项,以进一步优化您的选择。例如,如果选中 APPFW_SQL 复选框并单击 应用 按钮,则系统日志查看器中只会显示与 SQL 注入 安全检查冲突相关的日志消息。
如果将光标置于特定日志消息的行中,则日志消息下方会出现多个选项,例如“模块”、“事件类型”、“事件 ID”、“客户端 IP”等。您可以选择这些选项中的任何一个来突出显示日志消息中的相应信息。
“单击部署”功能仅在 GUI 中可用。您可以使用 Syslog Viewer 不仅查看日志,还可以根据 Web App Firewall 安全检查违规的日志消息部署 HTML SQL 注入放宽规则。对于此操作,日志消息必须采用 CEF 日志格式。“单击部署”功能仅适用于由阻止(或不阻止)操作生成的日志消息。您无法为有关转换操作的日志消息部署放宽规则。
要从 Syslog 查看器部署放宽规则,请选择日志消息。选定行的 Syslog Viewer 框的右上角出现一个复选框。选中该复选框,然后从“操作”列表中选择一个选项以部署放宽规则。“编辑和部署”、“部署”和“全部部署”作为操作 选项提供。
使用“单击以部署”选项部署的 SQL 注入规则不包括细粒度放松建议。
要在 GUI 中使用“单击以部署”功能,请执行以下操作:
- 在 Syslog 查看器的“模块”选项中,选择“应用程序防火墙”。
- 选择 APP_SQL 作为 事件类型 以筛选相应的日志消息。
- 选中该复选框以标识要部署的规则。
- 使用“操作”(A ction ) 下拉列表的选项部署放宽规则。
- 验证规则是否出现在相应的放宽规则部分中。
SQL 注入冲突的统计信息
启用 stats 操作后,当 Web App Firewall 对此安全检查采取任何操作时,SQL 注入检查的计数器将递增。这些统计数据是针对流量、冲突和日志的速率和总计数收集的。日志计数器增量的大小可能因配置的设置而异。例如,如果启用了阻止操作,则包含 3 个 SQL 注入冲突的页面的请求会将统计数据计数器递增一个,因为一旦检测到第一个冲突,该页面就会被阻止。但是,如果禁用该块,处理相同的请求会增加违规的统计信息计数器和日志三,因为每个违规都会生成单独的日志消息。
使用命令行显示 SQL 注入检查统计信息:
在命令提示符下,键入:
sh appfw stats
要显示特定配置文件的统计信息,请使用以下命令:
> stat appfw profile <profile name>
使用 GUI 显示 HTML SQL 注入统计信息
- 导航到“系统”>“安全”>“应用程序防火墙”。
- 在右窗格中,访问 统计信息 链接。
- 使用滚动条查看有关 HTML SQL 注入冲突和日志的统计信息。统计表提供实时数据,每 7 秒更新一次。
重要内容
请注意有关 SQL 注入检查的以下几点:
- 对SQL 注入保护的内置支持— NetScaler Web App Firewall 通过监视表单参数中的 SQL 关键字和特殊字符的组合来防止 SQL 注入。所有 SQL 关键字、特殊字符、通配符和默认转换规则都在 /netscaler/default_custom_settings.xml 文件中指定。
- 自定义-可以更改默认关键字、特殊字符、通配符和转换规则,以根据应用程序的特定需求自定义 SQL 安全检查检查。创建默认签名对象的副本、修改现有条目或添加新条目。将此签名对象绑定到您的配置文件以使用自定义配置。
- 混合安全模型— 签名和深度安全保护都使用绑定到配置文件的签名对象中指定的 SQL/跨站点脚本编写模式。如果没有将签名对象绑定到配置文件,则使用默认签名对象中存在的 SQL/跨站点脚本编写模式。
-
变换—请注意有关转换操作的以下事项:
- 转换操作独立于其他 SQL 注入操作设置。如果启用转换并且封锁、日志、统计信息和学习都处于禁用状态,则会转换 SQL 特殊字符。
- 启用 SQL 转换后,在非阻止模式下转换 SQL 特殊字符后,将用户请求发送到后端服务器。如果启用了阻止操作,则该操作优先于转换操作。如果注入类型被指定为 SQL 特殊字符并且块已启用,则尽管执行了转换操作,请求仍会被阻止。
- 细粒度放松和学习— 微调放宽规则,以放松安全检查检查中的一部分 SQL 元素,但检测其余部分。学习引擎根据观测到的数据推荐特定的值类型和值表达式。
- 单击以部署— 在 syslog 查看器中选择一条或多条 SQL 冲突日志消息,并将其作为放宽规则进行部署。