SQL 注入检查

许多 Web 应用程序都具有使用 SQL 与关系数据库服务器通信的 Web 表单。恶意代码或黑客可以使用不安全的 Web 表单将 SQL 命令发送到 Web 服务器。Web App Firewall HTML SQL 注入检查提供了特殊防御,防止注入可能会破坏安全性的未经授权的 SQL 代码。如果 Web App Firewall 检测到用户请求中未经授权的 SQL 代码,则会转换请求、使 SQL 代码处于非活动状态或阻止请求。Web App Firewall 在三个位置检查注入 SQL 代码的请求负载:1) POST 正文、2) 标头和 3) Cookie。为了检查注入 SQL 代码的请求中的查询部分,请为特定的内容类型配置 appfw 配置文件设置 InspectQueryContentTypes。

一组默认的关键字和特殊字符提供了通常用于启动 SQL 攻击的已知关键字和特殊字符。您可以添加新模式,并且可以编辑默认集以自定义 SQL 检查检查。Web App Firewall 提供了实施 SQL 注入保护的各种操作选项。除了“阻止”、“日志”、“统计信息”和“学习”操作外,Web App Firewall 配置文件还提供了转 换 SQL 特殊字符以使攻击无害的选项。

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

您可以部署放宽以避免误报。Web App Firewall 学习引擎可以提供配置放宽规则的建议。

以下选项可用于为您的应用程序配置优化的 SQL 注入保护:

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

日志— 如果启用日志功能,则 SQL 注入校验会生成日志消息,指示它所执行的操作。如果禁用了块,则会为检测到 SQL 冲突的每个输入字段生成单独的日志消息。但是,当请求被阻止时,只会生成一条消息。同样,每个请求都会为转换操作生成一条日志消息,即使 SQL 特殊字符在多个字段中转换也是如此。您可以监视日志以确定对合法请求的响应是否被阻止。日志消息数量的大幅增加可能表明尝试发起攻击。

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

L@@earn— 如果您不确定哪些 SQL 弛豫规则可能最适合您的应用程序,则可以使用学习功能根据学习的数据生成建议。Web App Firewall 学习引擎监视流量,并根据观察到的值提供 SQL 学习建议。为了在不影响性能的情况下获得最佳优势,您可能需要在短时间内启用学习选项,以获取具有代表性的规则示例,然后部署规则并禁用学习。

转换 SQL 特殊字符— Web App Firewall 将三个字符(单直引号 (‘)、反斜杠 () 和分号 (;) 视为 SQL 安全检查处理的特殊字符。SQL 转换功能修改 HTML 请求中的 SQL 注入代码,以确保请求无害。然后将修改的 HTML 请求发送到服务器。所有默认转换规则都在 /netscaler/default_custom_settings.xml 文件中指定。

转换操作通过对请求进行以下更改来使 SQL 代码处于非活动状态:

  • 单直引 (‘) 至双直引 (“)。
  • 反斜杠 () 到双反斜杠 ()。
  • 分号 (;) 被完全删除。

这三个字符(特殊字符串)是向 SQL 服务器发出命令所必需的。除非 SQL 命令前面有一个特殊字符串,否则大多数 SQL 服务器会忽略该命令。因此,Web App Firewall 在启用转换时执行的更改阻止攻击者注入活动 SQL。进行这些更改后, 请求可以安全地转发到您受保护的网站。当受保护的网站上的 Web 表单可以合法地包含 SQL 特殊字符串,但 Web 表单不依赖于特殊字符串来正常操作时,您可以禁用阻止并启用转换,以防止阻止合法的 Web 表单数据,而不会降低 Web App Firewall 提供给受保护的网站的保护。

转换操作独立于 SQL 注入类型设置。如果启用了转换并将 SQL 注入类型指定为 SQL 关键字,则即使请求不包含任何关键字,也会转换 SQL 特殊字符。

提示

通常,您可以启用转换或阻止,但不能同时启用两者。如果启用了阻止操作,则该操作优先于转换操作。如果启用了阻止,则启用转换是冗余的。

检查 SQL 通配符-通配符可用于扩大结构化查询语言 (SQL-SELECT) 语句的选择范围。这些通配符运算符可与 LILA 和 **不 Lue 运算符结合使用,将值与相似值进行比较。*百分比 (%) 和下划线 (_) 字符经常用作通配符。百 分号类似于与 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>

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

注意

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

查包含 SQL 注入类型的请求— Web App Firewall 提供 4 个选项,用于根据应用程序的个别需求实现 SQL 注入检查所需的严格程度。根据注入类型规范检查请求,以检测 SQL 冲突行为。4 个 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 的代码 /

    • . #: Mysql 注释:这是一个以 # 字符开头并以行末尾结束的注释

  • 嵌套— 跳过嵌套 SQL 注释,这些注释通常由 Microsoft SQL Server 使用。例如;- (两个连字符), 和 /* */ (允许嵌套注释)
  • ANSI /嵌套— 跳过同时遵守 ANSI 和嵌套 SQL 注释标准的注释。仅匹配 ANSI 标准或只匹配嵌套标准的注释仍然会检查注入的 SQL。
  • 检查所有注释-检查注入 SQL 的整个请求而不跳过任何内容。此为默认设置。

提示

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

检查请求标头— 如果除了检查表单字段中的输入外,还要检查 HTML SQL 注入攻击的请求标头,请启用此选项。如果使用 GUI,则可以在 Web App Firewall 配置文件的“高级设置”->“配置文件设置”窗格中启用此参数。

注意

如果启用“检查请求标头”标志,则可能需要为 User-Agent 标头配置放宽规则。 SQL 关键字和 SQL 特殊字符分号 (; ) 的存在可能会触发误报并阻止包含此标头的请求。 警告

如果同时启用请求标头检查和转换,则标头中找到的任何 SQL 特殊字符也会被转换。接受、接受字符集、接受编码、接受语言、期望和用户代理标头通常包含分号 (;)。同时 启用请求标头检查和转换可能会导致错误。

InspectQueryContentTypes — 如果要检查特定内容类型的 SQL 注入攻击的请求查询部分,请配置此选项。如果使用 GUI,则可以在应用程序防火墙配置文件的高级设置 -> 配置文件设置窗格中配置此参数。

SQL 细粒度放宽

Web App Firewall 为您提供了一个选项,从 SQL 注入检查中免除特定表单字段、标题或 Cookie。您可以通过为 SQL 注入检查配置放宽规则来完全绕过其中一个或多个字段的检查。

Web App Firewall 允许您通过微调放宽规则来实现更严格的安全性。应用程序可能需要灵活性才能允许特定模式,但配置放宽规则以绕过安全检查可能会使应用程序容易受到攻击,因为目标字段不受任何 SQL 攻击模式的检查。SQL 细粒度放宽提供了允许特定模式并阻止其余模式的选项。例如,Web App Firewall 当前具有超过 100 个 SQL 关键字的默认集合。由于黑客可以在 SQL 注入攻击中使用这些关键字,因此 Web App Firewall 将其标记为潜在威胁。您可以放宽一个或多个被认为是安全的特定位置的关键字。其余潜在危险的 SQL 关键字仍会检查目标位置,并继续触发安全检查冲突。您现在有更严格的控制。

放宽中使用的命令具有值 类型和值表达式 的可选参数。您可以指定值表达式是正则表达式还是文字字符串。值类型可以留空,或者您可以选择 KeywordSpecialStringWildChar

警告

正则表达式非常强大。特别是如果您不完全熟悉 PCRE 格式的正则表达式,请仔细检查您编写的任何正则表达式。确保他们准确地定义了要添加为例外的 URL,而不是别的。粗心地使用通配符,尤其是点星号 (.*) 元字符/通配符组合,可能会产生您不希望的结果,例如阻止访问您不打算阻止的 Web 内容,或允许 HTML SQL 注入检查会阻止的攻击。

需要注意的事项:

  • 值表达式是一个可选参数。字段名称可能没有任何值表达式。
  • 字段名称可以绑定到多个值表达式。
  • 值表达式应分配一个值类型。SQL 值类型可以是:1) Keyword、2) SpecialString 或 3) WildChar。
  • 每个字段名称/URL 组合可以有多个放宽规则。

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

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

在命令行界面中,可以使用 设置 appfw 配置文件 命令或 添加 appfw 配置文件 命令来配置 SQL 注入保护。您可以启用阻止、学习、日志、统计操作,并指定是否要转换 SQL 注入攻击字符串中使用的特殊字符以禁用攻击。选择要在有效负载中检测的 SQL 攻击模式的类型(关键字、通配符、特殊字符串),并指示是否希望 Web App Firewall 也检查请求标头是否存在 SQL 注入冲突。使用 未设置 appfw 配置文件 命令将配置的设置恢复到默认值。以下每个命令只设置一个参数,但您可以在单个命令中包含多个参数:

  • set appfw profile“页面底部提供了参数描述。“
  • <name> -SQLInjectionAction (([block] [learn] [log] [stats]) | [none])
  • set appfw profile“页面底部提供了参数描述。“
  • <name> -SQLInjectionTransformSpecialChars (**ON** | OFF)
  • set appfw profile“页面底部提供了参数描述。“
  • <name> -**SQLInjectionCheckSQLWildChars** (**ON** |**OFF**)
  • set appfw profile“页面底部提供了参数描述。“
  • **<name> -**SQLInjectionType** ([**SQLKeyword**] | [**SQLSplChar**] | [**SQLSplCharANDKeyword**] | [**SQLSplCharORKeyword**])
  • 设置应用程序配置文件“页面底部提供了参数描述。“
  • <name> -**SQLInjectionParseComments** ([**checkall**] | [**ansi|nested**] | [**ansinested**])
  • **set appfw 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 注入检查

  1. 导航到“应用程序防火墙”>“配置文件”,突出显示目标配置文件,然后单击“编辑”。
  2. 在“高级设置”窗格中,单击“安全检查”。

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

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

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

转换 SQL 特殊字符-转换请求中的任何 SQL 特殊字符。

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

检查包含的请求-要检查的 SQL 注入类型(SQLKeyword、SQLSplChar、SQLSplCharANDKeyword 或 SQLSplCharORKeyword)。

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

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

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

  • 导航到“应用程序防火墙”>“配置 件”,突出显示目标配置文件,然后单击“编辑”。
  • 高级设置 窗格中,单击 放宽规则
  • 在“放宽规则”表中,双击 HTML SQL 注 入项,或将其选中,然后单击“编辑”。
  • HTML SQL 注入放宽规则 对话框中,执行放宽规则的 添加编辑删除用或禁用 操作。

注意

添加新规则时,除非在值类型字段中选择 KeywordSpecialStringWildChar 选项,否则不会显示值表达式字段。

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

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

使用 GUI 查看或自定义 SQL 注入模式

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

默认 SQL 模式在“应用程序防火墙”>“签名”>“默认签”中指定。如果未将任何签名对象绑定到配置文件,则配置文件将使用默认签名对象中指定的默认 SQL 模式进行 SQL 注入安全检查处理。在默认签名对象中指定的规则和模式是只读的。您无法编辑或修改它们。如果要修改或更改这些模式,请复制“默认签名”对象以创建用户定义的签名对象。在新用户定义的签名对象中对 SQL 模式进行更改,并在您的配置文件中使用此签名对象,该对象正在处理要使用这些自定义 SQL 模式的流量。

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

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

    a. 导航到“应用程序防火墙”>“签名”,选择“* 默认签名”,然后单击“编辑”。

    然后单击 管理 SQL/XSS 模式

    管理 SQL/XSS 路径 表显示了与 SQL 注入有关的以下四行:

    • 注入(不是字母,SQL)/关键字
    • Injection (not_alphanum, SQL)/ specialstring
    • 注入(不是字母,SQL)/变换规则/转换
    • 注入(不是字母,SQL)/通配符

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

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

    a.导航到“应用程序防火墙”>“签名”,突出显示目标用户定义的签名,然后单击“编辑”。单击 管理 SQL/XSS 模式 以显示 管理 SQL/XSS 路径 表。

    b. 选择目标 SQL 注入行。

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

    ii. 单击“ 除”以删除所选行。

    警告

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

将学习功能与 SQL 注入检查结合使用

启用学习操作后,Web App Firewall 学习引擎会监视流量并了解触发的冲突。您可以定期检查这些学习的规则。经过适当考虑,您可以将学习的规则部署为 SQL 注入放宽规则。

SQL 注入学习增强— Citrix ADC 软件 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 查看或使用学习的数据

  1. 导航到“应用程序防火墙”>“配置文件”,突出显示目标配置文件,然后单击“编辑”。

  2. 在“高级设置”窗格中,单击“学习规则”。您可以选择“已学习规则”表中的 HTML SQL 注 入条目,然后双击该条目以访问已学习的规则。您可以部署已学习的规则或编辑规则,然后再将其部署为放宽规则。要放弃规则,您可以选择该规则并单击 过按钮。您一次只能编辑一个规则,但可以选择要部署或跳过的多个规则。

您还可以选择通过选择“学习规则”表中的 HTML SQL 注入条目,然后单击可视化工具以获取所有学习冲突的综合视图来显示学习的放宽的摘要视图。可视化工具使得管理学到的规则变得非常简单。它在一个屏幕上提供了一个全面的数据视图,并且只需点击一下便于对一组规则采取操作。可视化工具的最大优势是它推荐正则表达式来整合多个规则。您可以根据分隔符和操作 URL 选择这些规则的子集。通过从下拉列表中选择数字,可以在可视化工具中显示 25、50 或 75 条规则。学习规则的可视化工具提供了编辑规则并将其作为放宽部署的选项。或者您可以跳过规则忽略它们。

将日志功能与 SQL 注入检查结合使用

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

使用命令行访问日志消息

切换到 shell 并尾随 /var/log/ 文件夹中的 ns.log 以访问与 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|Citrix ADC|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

阻止发布请求时 HTML SQL 注入日志消息的示例

Jun 26 21:30:34 <local0.info> 10.217.31.98 CEF:0|Citrix|Citrix ADC|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

注意

作为 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 表单编码或多部分/表单数据或文本 /x-gwt-rpc 内容类型的请求。处理 JSONXML 有效负载期间生成的日志消息不受此更改的影响。

使用 GUI 访问日志消息

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

  • 导航到“应用程序防火墙”>“配置 件”,选择目标配置文件,然后单击“安全检查”。突出显示 HTML SQL 注入 行并单击 日志 。当您直接从配置文件的 HTML SQL 注入检查访问日志时,GUI 会过滤掉日志消息,并仅显示与这些安全检查冲突有关的日志。
  • 您还可以通过导航到 Citrix ADC > 系统 > **审核 访问系统** 日志查看器。在审核消息部分中,单击 Syslog 消息 链接以显示 Syslog 查看器,该查看器显示所有日志消息,包括其他安全检查冲突日志。这对于在请求处理过程中可能触发多个安全检查冲突时进行调试非常有用。
  • 导航到 应用程序防火墙 > 策略 > 审核 。在审核消息部分中,单击 Syslog 消息 链接以显示 Syslog 查看器,该查看器显示所有日志消息,包括其他安全检查冲突日志。

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

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

单击部署 功能仅在 GUI 中可用。您可以使用 Syslog 查看器不仅查看日志,还可以根据 Web App Firewall 安全检查冲突的日志消息部署 HTML SQL 注入放宽规则。此操作的日志消息必须采用 CEF 日志格式。单击以部署功能仅适用于由阻止(或不阻止)操作生成的日志消息。不能为有关转换操作的日志消息部署放宽规则。

要从 Syslog 查看器部署放宽规则,请选择日志消息。选定行的“系统日志查看器”框的右上角将出现一个复选框。选中该复选框,然后从“操 作”列表中选择一个选项以部署放宽规则。“全部编辑和部署”、“部署”和“全部部署”均可用作“作”选项。

使用“单击以部署”选项部署的 SQL 注入规则不包括精细粒度放宽建议。

要在 GUI 中使用“单击部署”功能,请执行以下操作:

  1. 在 Syslog 查看器中,在 模块 选项中选择 应用程序防火墙
  2. 选择 APP_SQL 作为事 件类型 来筛选相应的日志消息。
  3. 选中此复选框以标识要部署的规则。
  4. 使用“ 作”下拉列表的选项部署放宽规则。
  5. 验证规则是否显示在相应的放宽规则部分。

SQL 注入冲突的统计信息

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

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

在命令提示窗口中,键入:

sh 应用程序统计数据

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

> stat appfw profile <profile name>

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

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

重要内容

请注意有关 SQL 注入检查的以下几点:

  • 内置 SQL 注入保护支持— Citrix Web App Firewall 通过监视表单参数中的 SQL 关键字和特殊字符的组合来防止 SQL 注入。所有 SQL 关键字、特殊字符、通配符和默认转换规则都在 /netscaler/default_custom_settings.xml 文件中指定。
  • 义 — 您可以更改默认关键字、特殊字符、通配符和转换规则,以根据应用程序的特定需求自定义 SQL 安全检查检查。创建默认签名对象的副本、修改现有条目或添加新条目。将此签名对象绑定到您的配置文件以利用自定义配置。
  • 混合安全模型— 签名和深度安全保护都使用绑定到配置文件的签名对象中指定的 SQL/XSS 模式。如果没有将签名对象绑定到配置文件,则使用默认签名对象中存在的 SQL/XSS 模式。
  • 转换— 请注意有关转换操作的以下内容:
    • 转换操作独立于其他 SQL 注入操作设置。如果启用了转换并且阻止、日志、统计信息和学习都被禁用,则 SQL 特殊字符将被转换。
    • 启用 SQL 转换时,在非块模式下转换 SQL 特殊字符后,将向后端服务器发送用户请求。如果启用了阻止操作,则该操作优先于转换操作。如果注入类型指定为 SQL 特殊字符并且启用了块,则尽管执行了转换操作,请求仍被阻止。
  • 细粒度放宽和学习— 微调放宽规则,从安全检查检查中放宽一部分 SQL 元素,但检测其余部分。学习引擎根据观测到的数据推荐特定的值类型和值表达式。
  • 单击以部署— 在 syslog 查看器中选择一条或多条 SQL 冲突日志消息,并将其作为放宽规则进行部署。